LINUX.ORG.RU

правила ip tables


0

0

Доброго времени суток всем.
Только начал работать с iptables, была поставлена задача открыть порты
и все остальное закрыть:
TCP 8443
TCP 20 FTP
TCP 21 FTP
TCP 990 FTPS
TCP 80 HTTP
TCP 443 HTTPS
TCP 25 SMTP
TCP 465 SMTP
TCP 110 POP3
TCP 995 POP3
TCP 143 IMAP
TCP 993 IMAP
TCP 106 Mail
TCP 3306 MySQL (только для localhost)
TCP 5432 PostgreSQL (только для localhost)
TCP 22 SSH
TCP 53 DNS
UDP 53 DNS
TCP 5224
TCP 113

Были наработаны следующие правила:
SOME_IP некоторый ip адресс, для него одного должно быть доступно SSH

#!/bin/sh
/sbin/iptables -F
/sbin/iptables -X
/sbin/iptables -Z
/sbin/iptables -P INPUT DROP
/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A INPUT -p tcp ! --syn -j REJECT --reject-with tcp-reset
/sbin/iptables -A INPUT -m state --state INVALID -j DROP
/sbin/iptables -P OUTPUT DROP
/sbin/iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp ! --syn -j REJECT --reject-with tcp-reset
/sbin/iptables -A OUTPUT -m state --state INVALID -j DROP
/sbin/iptables -P FORWARD DROP
/sbin/iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A FORWARD -p tcp ! --syn -j REJECT --reject-with tcp-reset
/sbin/iptables -A FORWARD -m state --state INVALID -j DROP
/sbin/iptables -A INPUT -i lo -j ACCEPT
/sbin/iptables -A OUTPUT -o lo -j ACCEPT
/sbin/iptables -A FORWARD -i lo -o lo -j ACCEPT
/sbin/iptables -t mangle -F
/sbin/iptables -t mangle -X
/sbin/iptables -t mangle -Z
/sbin/iptables -t mangle -P PREROUTING ACCEPT
/sbin/iptables -t mangle -P OUTPUT ACCEPT
/sbin/iptables -t mangle -P INPUT ACCEPT
/sbin/iptables -t mangle -P FORWARD ACCEPT
/sbin/iptables -t mangle -P POSTROUTING ACCEPT
/sbin/iptables -t nat -F
/sbin/iptables -t nat -X
/sbin/iptables -t nat -Z
/sbin/iptables -t nat -P PREROUTING ACCEPT
/sbin/iptables -t nat -P OUTPUT ACCEPT
/sbin/iptables -t nat -P POSTROUTING ACCEPT

/sbin/iptables -A INPUT -p tcp --dport 113 -j ACCEPT

/sbin/iptables -A INPUT -p tcp --dport 5432 -s 127.0.0.1 -j ACCEPT

/sbin/iptables -A INPUT -p tcp --dport 3306 -s 127.0.0.1 -j ACCEPT

/sbin/iptables -A INPUT -p tcp --dport 106 -j ACCEPT

/sbin/iptables -A INPUT -p tcp --dport 143 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 993 -j ACCEPT

/sbin/iptables -A INPUT -p tcp --dport 110 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 995 -j ACCEPT

/sbin/iptables -A INPUT -p tcp --dport 25 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 465 -j ACCEPT

/sbin/iptables -A INPUT -p tcp --dport 22 -s SOME_IP -j ACCEPT

/sbin/iptables -A INPUT -p tcp --dport 20 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 21 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 990 -j ACCEPT

/sbin/iptables -A INPUT -p tcp --dport 80 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 443 -j ACCEPT

/sbin/iptables -A INPUT -p tcp --dport 8443 -j ACCEPT

/sbin/iptables -A INPUT -p udp --dport 53 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 53 -j ACCEPT

/sbin/iptables -A INPUT -p tcp --dport 5224 -j ACCEPT

/sbin/iptables -A INPUT -p icmp --icmp-type 8/0 -j ACCEPT



/sbin/iptables -A OUTPUT -p tcp --sport 113 -j ACCEPT

/sbin/iptables -A OUTPUT -p tcp --sport 5432 -d 127.0.0.1 -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp --sport 3306 -d 127.0.0.1 -j ACCEPT

/sbin/iptables -A OUTPUT -p tcp --sport 106 -j ACCEPT

/sbin/iptables -A OUTPUT -p tcp --sport 143 -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp --sport 993 -j ACCEPT

/sbin/iptables -A OUTPUT -p tcp --sport 110 -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp --sport 995 -j ACCEPT

/sbin/iptables -A OUTPUT -p tcp --sport 25 -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp --sport 465 -j ACCEPT

/sbin/iptables -A OUTPUT -p tcp --sport 22 -d SOME_IP -j ACCEPT

/sbin/iptables -A OUTPUT -p tcp --sport 20 -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp --sport 21 -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp --sport 990 -j ACCEPT

/sbin/iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp --sport 443 -j ACCEPT

/sbin/iptables -A OUTPUT -p tcp --sport 8443 -j ACCEPT

/sbin/iptables -A OUTPUT -p udp --sport 53 -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp --sport 53 -j ACCEPT

/sbin/iptables -A OUTPUT -p tcp --sport 5224 -j ACCEPT

/sbin/iptables -A OUTPUT -p icmp --icmp-type 8/0 -j ACCEPT
#
# End of script
#

Нужна критика, что неправильно, как сделать все по уму.
И какие моменты и детали были неправильно мной поняты из документации.
Заранее благодарен.

imho (рассматриваем картинку, где машина не выступает в качестве шлюза/роутера для большой локальной сети):
1. оставьте output в покое. всё, что вам надо - это:

-A OUTPUT -o lo -j ACCEPT 
-A OUTPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT 
-A OUTPUT -m limit --limit 3/min -j LOG --log-prefix "FireWall-OUT-ERROR " --log-tcp-options --log-ip-options

2. -A INPUT -i lo -j ACCEPT

3. не проработан FORWARD, хотя бы так (используем FORWARD и цепочку forward_ext):

-A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu 
# если есть интерфейсы, отличные от eth0 (например впн как ppp0), то продублировать линию внизу с заменой интерфейса ессно (это отправит пакеты с интерфейса в нашу цепочку)
-A FORWARD -i eth0 -j forward_ext 
-A FORWARD -m limit --limit 3/min -j LOG --log-prefix "FireWall-FWD-ILL-ROUTING " --log-tcp-options --log-ip-options 
-A FORWARD -j DROP 

-A forward_ext -p icmp -m state --state RELATED,ESTABLISHED -m icmp --icmp-type 0 -j ACCEPT 
-A forward_ext -p icmp -m state --state RELATED,ESTABLISHED -m icmp --icmp-type 3 -j ACCEPT 
-A forward_ext -p icmp -m state --state RELATED,ESTABLISHED -m icmp --icmp-type 11 -j ACCEPT 
-A forward_ext -p icmp -m state --state RELATED,ESTABLISHED -m icmp --icmp-type 12 -j ACCEPT 
-A forward_ext -p icmp -m state --state RELATED,ESTABLISHED -m icmp --icmp-type 14 -j ACCEPT 
-A forward_ext -p icmp -m state --state RELATED,ESTABLISHED -m icmp --icmp-type 18 -j ACCEPT 
-A forward_ext -p icmp -m state --state RELATED,ESTABLISHED -m icmp --icmp-type 3/2 -j ACCEPT 
-A forward_ext -p icmp -m state --state RELATED,ESTABLISHED -m icmp --icmp-type 5 -j ACCEPT 
# если есть интерфейсы, отличные от eth0 (например впн как ppp0), то продублировать 2 линии внизу с заменой интерфейса ессно
-A forward_ext -o eth0 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT 
-A forward_ext -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT 
-A forward_ext -m limit --limit 3/min -m pkttype --pkt-type multicast -j LOG --log-prefix "SFW2-FWDext-DROP-DEFLT " --log-tcp-options --log-ip-options 
-A forward_ext -p tcp -m limit --limit 3/min -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j LOG --log-prefix "FireWall-FWDext-DROP-DEFLT " --log-tcp-options --log-ip-options 
-A forward_ext -p icmp -m limit --limit 3/min -j LOG --log-prefix "FireWall-FWDext-DROP-DEFLT " --log-tcp-options --log-ip-options 
-A forward_ext -p udp -m limit --limit 3/min -j LOG --log-prefix "FireWall-FWDext-DROP-DEFLT " --log-tcp-options --log-ip-options 
-A forward_ext -m limit --limit 3/min -m state --state INVALID -j LOG --log-prefix "FireWall-FWDext-DROP-DEFLT-INV " --log-tcp-options --log-ip-options 
-A forward_ext -j DROP 

4. записи вида
/sbin/iptables -t mangle -P PREROUTING ACCEPT 
/sbin/iptables -t nat -P PREROUTING ACCEPT 
нахер не нужны, ибо по дефолту всё так и есть

5. где вы определяете переменную SOME_IP ???

6. мне честно впадлу заниматься элементарной вычиткой на INPUT - сами проверьте полученный результат...

sda00 ★★★
()

>/sbin/iptables -A INPUT -p tcp ! --syn -j REJECT --reject-with tcp-reset

Это будет режектить все TCP-пакеты кроме SYN, если я не ошибаюсь. Попробуйте добавить в это правило что-нибудь типа -m state --state NEW

bakagaijin
()
Ответ на: комментарий от bakagaijin

>>/sbin/iptables -A INPUT -p tcp ! --syn -j REJECT --reject-with tcp-reset

кстати да, уберите это правило совсем, ибо оно лишнее совершенно (и впредь постарайтесь обходиться без TCP --syn matches)...

sda00 ★★★
()
Ответ на: комментарий от sda00

Убрал OUTPUT как вы и посоветовали, т.е. оставил только следующие строки для OUTPUT:
/sbin/iptables -P OUTPUT DROP
/sbin/iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A OUTPUT -m state --state INVALID -j DROP

После этого перестала уходить почта с сервера, так же curl на любой сайт выдает cannot resolve host
Посоветуйте какие правила нужно добавить чтобы все работало?

nervouselectronic
() автор топика
Ответ на: комментарий от nervouselectronic

-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -m limit --limit 3/min -j LOG --log-prefix "FireWall-OUT-ERROR " --log-tcp-options --log-ip-options

не изобретайте велосипед... нельзя на OUTPUT ставить DROP, кто вообще подсказал эту светлую идею?

sda00 ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.