iptables -A INPUT -m state --state ESTABLIISHED,RELATED
это правило логичнее поставить в самом начале цепочки INPUT:
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
затем...
Разрешаем loopback:
iptables -A INPUT -s 127.0.0.0/8 -d 127.0.0.0/8 -j ACCEPT
loopback разрешают так:
iptables -A INPUT -i lo -j ACCEPT
И последним правилом будем сбрасывать все пакеты, которые не попали под верхние правила:
iptables -A INPUT -j DROP
Правильно будет установить правила по умолчанию:
iptables -P OUTPUT ACCEPT
iptables -P INPUT DROPiptables -P FORWARD DROP
Цепочка WORKTCP:
Откроем порты для входящих соединений:
iptables -A WORKTCP -p tcp --dport 80 -j ACCEPT
iptables -A WORKTCP -p tcp --dport 443 -j ACCEPT
У Вас не соединения открываются, а ЛЮБОЙ tcp трафик на эти порты. Правильно так:
iptables -A WORKTCP -p tcp --dport 80 --syn -m conntrack --ctstate NEW -j ACCEPT
а "остальной" трафик по этому порту "подхватит", написанное мной, первое правило
После этого, проверяем состояние пакета, который попал сюда из INPUT. Если пакет имеет стаус NEW, то есть такой пакет открывает соединение (читай "К нам ломятся"), то мы его просто отфутболиваем и говорим отправителю, что не можем его принять и обрываем соединение:
iptables -A WORKTCP -p tcp -m state --state NEW #FIXED
iptables -A WORKTCP -p tcp ! --syn -m state --state NEW -j REJECT --reject-with tcp-rst
Я понял о чем Вы говорите. Это делается так:
iptables -A INPUT -p tcp ! --syn -m conntrack --ctstate NEW,INVALID -j DROP
Второе, что сделаем - определим состояние пакета, который не попал под первое правило. Если соединение установлено, то разрешим его, поскольку наш хост его инициировал и это пришел ответ.
iptables -A WORKTCP -m state --state ESTABLISHED -j ACCEPT
Это правило мы уже поместили в самое начало, тут оно не логично
Цепь WORKUDP:
Копируем правила из WORKTCP, но с учетом протокола:
iptables -A WORKUDP -m state --state NEW -j REJECT
iptables -A WORKUDP -m state --state ESTABLISHED -j ACCEPT
Ошибка. Весь UDP трафик будет "резаться" первым правилом. Вот пример для DHCP
iptables -A WORKUDP -p udp --sport 68 --dport 67 -m conntrack --ctstate NEW -j ACCEPT
Цепь SERVICE:
В этой цепочке мы разрешаем пинги, понги и прочую служебную чешую:
iptables -A SERVICE -p icmp --icmp-type 0 -j ACCEPT
iptables -A SERVICE -p icmp --icmp-type 3 -j ACCEPT
iptables -A SERVICE -p icmp --icmp-type 8 -j ACCEPT
И добавляем сброс нежелательных icmp хапросов:
iptables -A SERVICE -p icmp -j DROP
Оставьте пока только:
iptables -A SERVICE -p icmp --icmp-type 8 -j ACCEPT
iptables -A SERVICE -p icmp --icmp-type 11 -j ACCEPT
ИТОГО: Доделанный Ваш пример (Я бы еще чуть-чуть по другому сделал)
iptables -F
iptables -X
iptables -N SERVICE
iptables -N WORKTCP
iptables -N WORKUDP
iptables -P OUTPUT ACCEPT
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -f -j DROP
iptables -A INPUT -p tcp ! --syn -m conntrack --ctstate NEW,INVALID -j DROP
iptables -A INPUT -p tcp --tcp-flags SYN,ACK SYN,ACK -m conntrack --ctstate NEW,INVALID -j REJECT --reject-with tcp-reset
iptables -A INPUT -p tcp -j WORKTCP
iptables -A INPUT -p udp -j WORKUDP
iptables -A INPUT -p icmp -j SERVICE
iptables -A WORKTCP -p tcp --dport 80 --syn -m conntrack --ctstate NEW -j ACCEPT
iptables -A WORKTCP -p tcp --dport 443 --syn -m conntrack --ctstate NEW -j ACCEPT
# Пример INPUT UDP трафика
iptables -A WORKUDP -p udp --sport 68 --dport 67 -m conntrack --ctstate NEW -j ACCEPT
iptables -A SERVICE -p icmp --icmp-type 8 -j ACCEPT
iptables -A SERVICE -p icmp --icmp-type 11 -j ACCEPT
Пока вроде все... Писал по памяти, может где-то и ошибся. Спрашивайте...