>Доброго дня,Уважаемые!тема не впервой поднята многими людьми-нужно чтобы оценили правила для выявления каких-либо ошибок.Сложно :) это, правила какие-то писать.
> # Создаем пользовательские цепочки. Как строить firewall каждый решает сам.
А мне генератор правил навится: я не пишу на низкоуровневом iptables. Хотя, местами, читаю. ;)
http://www.opennet.dev/openforum/vsluhforumID10/3764.html#2
> # Но лично мне удобно настраивать фаервол, когда все разбито по цепочкам
> # и как бы разложено по своим полочкам. Тогда я точно знаю, что и где надо
> # искать или исправлять. Думаю, названия цепочек говорят сами за себя.
> # Разрешаем следующие типы icmp пакетов.
> $IPTABLES -A icmp_packets -p icmp --icmp-type 0 -j ACCEPT
> $IPTABLES -A icmp_packets -p icmp --icmp-type 3 -j ACCEPT
> $IPTABLES -A icmp_packets -p icmp --icmp-type 8 -j ACCEPT
> $IPTABLES -A icmp_packets -p icmp --icmp-type 11 -j ACCEPT
0 и 8 - запрос-ответ.
А вот 3 и 11 чего-то я на вскидку не вспомню... эээ[1], destination-unreachable и time-exceeded. А они в RELATED не должны бы попадать?..
> # Для удобства фильтрации, направляем все транзитные пакеты,
> # в соответствующие цепочки.
[...8<...]
> # web-сервер
> $IPTABLES -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.3:80
> $IPTABLES -t nat -A POSTROUTING -p tcp -d eth2 --dport 80 -j SNAT --to-source eth1
> $IPTABLES -t nat -A OUTPUT -d eth0 -p tcp --dport 80 -j DNAT --to-destination eth2
Вот эти два правила мой iptables "не прочитал": наверное, eth{0,1,2} не воспринимает в качестве ip адреса. Да и от меня общая мысль этих преобразований ускользнула.
> # проброс порта RDP для виндовых серваков
> $IPTABLES -t nat -A PREROUTING ?I eth0 -p tcp --dport 3389 -j DNAT --to-destination 192.168.0.1:3389
s/\?I eth0/-i eth0/, видимо.
Кстати, port-forward надо ещё и в -t filter -A FORWARD пропускать. Оно ж там не сразу RELATED,ESTABLISHED "рождается".
Да, кстати! Бесплатные образцы. :-) Твой конфиг, переписанный по диагонали, на firehol. Сравни _сложность_ (и качество?) своего скрипта и "скрипта" для firehol.
---8<--- firehol.conf.example
version 5
DMZWEB=192.168.1.3
MYEXT=212.12.99.99
WINRDP=192.168.0.1
dnat to $DMZWEB proto tcp inface eth0 dst $MYEXT dport 80
dnat to $WINRDP proto tcp inface eth0 dst $MYEXT dport 3389
#transparent_proxy "80 8080" 3128 squid inface eth1
interface eth0 world dst $MYEXT
server ping accept
client all accept
interface eth1 lan dst 192.168.0.99
server "ping ftp ssh smtp dns http pop3" accept
client all accept
interface eth2 dmz dst 192.168.1.2
server "ping dns http" accept
client all accept
router dmz2o inface eth2 outface eth0
server "ping https" accept
client http accept
router lan2o inface eth1 outface eth0
server ping accept
# server "http webcache" accept
client rdp accept dst $WINRDP
router lan2dmz inface eth1 outface eth2
server ping accept
client ping accept
--->8---
Правила из-под FireHOL с этим конфигом выглядят примерно (-i lo, -o lo, установку ip_forward, загрузку модулей ядра -- не видно, но они есть; артефакты в районе ".firehol-tmp"...) вот так:
===8<=== # filrehol ./filrehol.conf.example debug | ./explain-filter
-N out_lan2dmz_ping_c2
-A out_lan2dmz_ping_c2 -p icmp -m state --state NEW\,ESTABLISHED --icmp-type echo-request -j ACCEPT
-N in_lan2dmz_ping_c2
-A in_lan2dmz_ping_c2 -p icmp -m state --state ESTABLISHED --icmp-type echo-reply -j ACCEPT
-N out_lan2dmz_ping_s1
-A out_lan2dmz_ping_s1 -p icmp -m state --state ESTABLISHED --icmp-type echo-reply -j ACCEPT
-N in_lan2dmz_ping_s1
-A in_lan2dmz_ping_s1 -p icmp -m state --state NEW\,ESTABLISHED --icmp-type echo-request -j ACCEPT
-N out_lan2dmz
-A out_lan2dmz -j out_lan2dmz_ping_s1
-A out_lan2dmz -j out_lan2dmz_ping_c2
-A out_lan2dmz -m state --state RELATED -j ACCEPT
-N in_lan2dmz
-A in_lan2dmz -j in_lan2dmz_ping_s1
-A in_lan2dmz -j in_lan2dmz_ping_c2
-A in_lan2dmz -m state --state RELATED -j ACCEPT
-N out_lan2o_rdp_c2
-A out_lan2o_rdp_c2 -p tcp --sport 1024:65535 -d 192.168.0.1 --dport 3389 -m state --state NEW\,ESTABLISHED -j ACCEPT
-N in_lan2o_rdp_c2
-A in_lan2o_rdp_c2 -p tcp -s 192.168.0.1 --sport 3389 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT
-N out_lan2o_ping_s1
-A out_lan2o_ping_s1 -p icmp -m state --state ESTABLISHED --icmp-type echo-reply -j ACCEPT
-N in_lan2o_ping_s1
-A in_lan2o_ping_s1 -p icmp -m state --state NEW\,ESTABLISHED --icmp-type echo-request -j ACCEPT
-N out_lan2o
-A out_lan2o -j out_lan2o_ping_s1
-A out_lan2o -j out_lan2o_rdp_c2
-A out_lan2o -m state --state RELATED -j ACCEPT
-N in_lan2o
-A in_lan2o -j in_lan2o_ping_s1
-A in_lan2o -j in_lan2o_rdp_c2
-A in_lan2o -m state --state RELATED -j ACCEPT
-N out_dmz2o_http_c3
-A out_dmz2o_http_c3 -p tcp --sport 1024:65535 --dport 80 -m state --state NEW\,ESTABLISHED -j ACCEPT
-N in_dmz2o_http_c3
-A in_dmz2o_http_c3 -p tcp --sport 80 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT
-N out_dmz2o_https_s2
-A out_dmz2o_https_s2 -p tcp --sport 443 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT
-N in_dmz2o_https_s2
-A in_dmz2o_https_s2 -p tcp --sport 1024:65535 --dport 443 -m state --state NEW\,ESTABLISHED -j ACCEPT
-N out_dmz2o_ping_s1
-A out_dmz2o_ping_s1 -p icmp -m state --state ESTABLISHED --icmp-type echo-reply -j ACCEPT
-N in_dmz2o_ping_s1
-A in_dmz2o_ping_s1 -p icmp -m state --state NEW\,ESTABLISHED --icmp-type echo-request -j ACCEPT
-N out_dmz2o
-A out_dmz2o -j out_dmz2o_ping_s1
-A out_dmz2o -j out_dmz2o_https_s2
-A out_dmz2o -j out_dmz2o_http_c3
-A out_dmz2o -m state --state RELATED -j ACCEPT
-N in_dmz2o
-A in_dmz2o -j in_dmz2o_ping_s1
-A in_dmz2o -j in_dmz2o_https_s2
-A in_dmz2o -j in_dmz2o_http_c3
-A in_dmz2o -m state --state RELATED -j ACCEPT
-N out_dmz_ftp_c6
-A out_dmz_ftp_c6 -p tcp --sport 32768:61000 --dport ftp -m state --state NEW\,ESTABLISHED -j ACCEPT
-A out_dmz_ftp_c6 -p tcp --sport 32768:61000 --dport ftp-data -m state --state ESTABLISHED -j ACCEPT
-A out_dmz_ftp_c6 -p tcp --sport 32768:61000 --dport 1024:65535 -m state --state ESTABLISHED\,RELATED -j ACCEPT
-N in_dmz_ftp_c6
-A in_dmz_ftp_c6 -p tcp --sport ftp --dport 32768:61000 -m state --state ESTABLISHED -j ACCEPT
-A in_dmz_ftp_c6 -p tcp --sport ftp-data --dport 32768:61000 -m state --state ESTABLISHED\,RELATED -j ACCEPT
-A in_dmz_ftp_c6 -p tcp --sport 1024:65535 --dport 32768:61000 -m state --state ESTABLISHED -j ACCEPT
-N out_dmz_irc_c5
-A out_dmz_irc_c5 -p tcp --sport 32768:61000 --dport 6667 -m state --state NEW\,ESTABLISHED -j ACCEPT
-N in_dmz_irc_c5
-A in_dmz_irc_c5 -p tcp --sport 6667 --dport 32768:61000 -m state --state ESTABLISHED -j ACCEPT
-N out_dmz_all_c4
-A out_dmz_all_c4 -m state --state NEW\,ESTABLISHED -j ACCEPT
-N in_dmz_all_c4
-A in_dmz_all_c4 -m state --state ESTABLISHED -j ACCEPT
-N out_dmz_http_s3
-A out_dmz_http_s3 -p tcp --sport 80 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT
-N in_dmz_http_s3
-A in_dmz_http_s3 -p tcp --sport 1024:65535 --dport 80 -m state --state NEW\,ESTABLISHED -j ACCEPT
-N out_dmz_dns_s2
-A out_dmz_dns_s2 -p udp --sport 53 -m state --state ESTABLISHED -j ACCEPT
-A out_dmz_dns_s2 -p tcp --sport 53 -m state --state ESTABLISHED -j ACCEPT
-N in_dmz_dns_s2
-A in_dmz_dns_s2 -p udp --dport 53 -m state --state NEW\,ESTABLISHED -j ACCEPT
-A in_dmz_dns_s2 -p tcp --dport 53 -m state --state NEW\,ESTABLISHED -j ACCEPT
-N out_dmz_ping_s1
-A out_dmz_ping_s1 -p icmp -m state --state ESTABLISHED --icmp-type echo-reply -j ACCEPT
-N in_dmz_ping_s1
-A in_dmz_ping_s1 -p icmp -m state --state NEW\,ESTABLISHED --icmp-type echo-request -j ACCEPT
-N out_dmz
-A out_dmz -j out_dmz_ping_s1
-A out_dmz -j out_dmz_dns_s2
-A out_dmz -j out_dmz_http_s3
-A out_dmz -j out_dmz_all_c4
-A out_dmz -j out_dmz_irc_c5
-A out_dmz -j out_dmz_ftp_c6
-A out_dmz -m state --state RELATED -j ACCEPT
-A out_dmz -m limit --limit 1/second --limit-burst 5 -j LOG --log-level warning --log-prefix=\'\'OUT-dmz\':\'
-A out_dmz -j DROP
-N in_dmz
-A in_dmz -j in_dmz_ping_s1
-A in_dmz -j in_dmz_dns_s2
-A in_dmz -j in_dmz_http_s3
-A in_dmz -j in_dmz_all_c4
-A in_dmz -j in_dmz_irc_c5
-A in_dmz -j in_dmz_ftp_c6
-A in_dmz -m state --state RELATED -j ACCEPT
-A in_dmz -m limit --limit 1/second --limit-burst 5 -j LOG --log-level warning --log-prefix=\'\'IN-dmz\':\'
-A in_dmz -j DROP
-N out_lan_ftp_c10
-A out_lan_ftp_c10 -p tcp --sport 32768:61000 --dport ftp -m state --state NEW\,ESTABLISHED -j ACCEPT
-A out_lan_ftp_c10 -p tcp --sport 32768:61000 --dport ftp-data -m state --state ESTABLISHED -j ACCEPT
-A out_lan_ftp_c10 -p tcp --sport 32768:61000 --dport 1024:65535 -m state --state ESTABLISHED\,RELATED -j ACCEPT
-N in_lan_ftp_c10
-A in_lan_ftp_c10 -p tcp --sport ftp --dport 32768:61000 -m state --state ESTABLISHED -j ACCEPT
-A in_lan_ftp_c10 -p tcp --sport ftp-data --dport 32768:61000 -m state --state ESTABLISHED\,RELATED -j ACCEPT
-A in_lan_ftp_c10 -p tcp --sport 1024:65535 --dport 32768:61000 -m state --state ESTABLISHED -j ACCEPT
-N out_lan_irc_c9
-A out_lan_irc_c9 -p tcp --sport 32768:61000 --dport 6667 -m state --state NEW\,ESTABLISHED -j ACCEPT
-N in_lan_irc_c9
-A in_lan_irc_c9 -p tcp --sport 6667 --dport 32768:61000 -m state --state ESTABLISHED -j ACCEPT
-N out_lan_all_c8
-A out_lan_all_c8 -m state --state NEW\,ESTABLISHED -j ACCEPT
-N in_lan_all_c8
-A in_lan_all_c8 -m state --state ESTABLISHED -j ACCEPT
-N out_lan_pop3_s7
-A out_lan_pop3_s7 -p tcp --sport 110 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT
-N in_lan_pop3_s7
-A in_lan_pop3_s7 -p tcp --sport 1024:65535 --dport 110 -m state --state NEW\,ESTABLISHED -j ACCEPT
-N out_lan_http_s6
-A out_lan_http_s6 -p tcp --sport 80 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT
-N in_lan_http_s6
-A in_lan_http_s6 -p tcp --sport 1024:65535 --dport 80 -m state --state NEW\,ESTABLISHED -j ACCEPT
-N out_lan_dns_s5
-A out_lan_dns_s5 -p udp --sport 53 -m state --state ESTABLISHED -j ACCEPT
-A out_lan_dns_s5 -p tcp --sport 53 -m state --state ESTABLISHED -j ACCEPT
-N in_lan_dns_s5
-A in_lan_dns_s5 -p udp --dport 53 -m state --state NEW\,ESTABLISHED -j ACCEPT
-A in_lan_dns_s5 -p tcp --dport 53 -m state --state NEW\,ESTABLISHED -j ACCEPT
-N out_lan_smtp_s4
-A out_lan_smtp_s4 -p tcp --sport 25 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT
-N in_lan_smtp_s4
-A in_lan_smtp_s4 -p tcp --sport 1024:65535 --dport 25 -m state --state NEW\,ESTABLISHED -j ACCEPT
-N out_lan_ssh_s3
-A out_lan_ssh_s3 -p tcp --sport 22 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT
-N in_lan_ssh_s3
-A in_lan_ssh_s3 -p tcp --sport 1024:65535 --dport 22 -m state --state NEW\,ESTABLISHED -j ACCEPT
-N out_lan_ftp_s2
-A out_lan_ftp_s2 -p tcp --sport ftp --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT
-A out_lan_ftp_s2 -p tcp --sport ftp-data --dport 1024:65535 -m state --state ESTABLISHED\,RELATED -j ACCEPT
-A out_lan_ftp_s2 -p tcp --sport 32768:61000 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT
-N in_lan_ftp_s2
-A in_lan_ftp_s2 -p tcp --sport 1024:65535 --dport ftp -m state --state NEW\,ESTABLISHED -j ACCEPT
-A in_lan_ftp_s2 -p tcp --sport 1024:65535 --dport ftp-data -m state --state ESTABLISHED -j ACCEPT
-A in_lan_ftp_s2 -p tcp --sport 1024:65535 --dport 32768:61000 -m state --state ESTABLISHED\,RELATED -j ACCEPT
-N out_lan_ping_s1
-A out_lan_ping_s1 -p icmp -m state --state ESTABLISHED --icmp-type echo-reply -j ACCEPT
-N in_lan_ping_s1
-A in_lan_ping_s1 -p icmp -m state --state NEW\,ESTABLISHED --icmp-type echo-request -j ACCEPT
-N out_lan
-A out_lan -j out_lan_ping_s1
-A out_lan -j out_lan_ftp_s2
-A out_lan -j out_lan_ssh_s3
-A out_lan -j out_lan_smtp_s4
-A out_lan -j out_lan_dns_s5
-A out_lan -j out_lan_http_s6
-A out_lan -j out_lan_pop3_s7
-A out_lan -j out_lan_all_c8
-A out_lan -j out_lan_irc_c9
-A out_lan -j out_lan_ftp_c10
-A out_lan -m state --state RELATED -j ACCEPT
-A out_lan -m limit --limit 1/second --limit-burst 5 -j LOG --log-level warning --log-prefix=\'\'OUT-lan\':\'
-A out_lan -j DROP
-N in_lan
-A in_lan -j in_lan_ping_s1
-A in_lan -j in_lan_ftp_s2
-A in_lan -j in_lan_ssh_s3
-A in_lan -j in_lan_smtp_s4
-A in_lan -j in_lan_dns_s5
-A in_lan -j in_lan_http_s6
-A in_lan -j in_lan_pop3_s7
-A in_lan -j in_lan_all_c8
-A in_lan -j in_lan_irc_c9
-A in_lan -j in_lan_ftp_c10
-A in_lan -m state --state RELATED -j ACCEPT
-A in_lan -m limit --limit 1/second --limit-burst 5 -j LOG --log-level warning --log-prefix=\'\'IN-lan\':\'
-A in_lan -j DROP
-N out_world_ftp_c4
-A out_world_ftp_c4 -p tcp --sport 32768:61000 --dport ftp -m state --state NEW\,ESTABLISHED -j ACCEPT
-A out_world_ftp_c4 -p tcp --sport 32768:61000 --dport ftp-data -m state --state ESTABLISHED -j ACCEPT
-A out_world_ftp_c4 -p tcp --sport 32768:61000 --dport 1024:65535 -m state --state ESTABLISHED\,RELATED -j ACCEPT
-N in_world_ftp_c4
-A in_world_ftp_c4 -p tcp --sport ftp --dport 32768:61000 -m state --state ESTABLISHED -j ACCEPT
-A in_world_ftp_c4 -p tcp --sport ftp-data --dport 32768:61000 -m state --state ESTABLISHED\,RELATED -j ACCEPT
-A in_world_ftp_c4 -p tcp --sport 1024:65535 --dport 32768:61000 -m state --state ESTABLISHED -j ACCEPT
-N out_world_irc_c3
-A out_world_irc_c3 -p tcp --sport 32768:61000 --dport 6667 -m state --state NEW\,ESTABLISHED -j ACCEPT
-N in_world_irc_c3
-A in_world_irc_c3 -p tcp --sport 6667 --dport 32768:61000 -m state --state ESTABLISHED -j ACCEPT
-N out_world_all_c2
-A out_world_all_c2 -m state --state NEW\,ESTABLISHED -j ACCEPT
-N in_world_all_c2
-A in_world_all_c2 -m state --state ESTABLISHED -j ACCEPT
-N out_world_ping_s1
-A out_world_ping_s1 -p icmp -m state --state ESTABLISHED --icmp-type echo-reply -j ACCEPT
-N in_world_ping_s1
-A in_world_ping_s1 -p icmp -m state --state NEW\,ESTABLISHED --icmp-type echo-request -j ACCEPT
-N out_world
-A out_world -j out_world_ping_s1
-A out_world -j out_world_all_c2
-A out_world -j out_world_irc_c3
-A out_world -j out_world_ftp_c4
-A out_world -m state --state RELATED -j ACCEPT
-A out_world -m limit --limit 1/second --limit-burst 5 -j LOG --log-level warning --log-prefix=\'\'OUT-world\':\'
-A out_world -j DROP
-N in_world
-A in_world -j in_world_ping_s1
-A in_world -j in_world_all_c2
-A in_world -j in_world_irc_c3
-A in_world -j in_world_ftp_c4
-A in_world -m state --state RELATED -j ACCEPT
-A in_world -m limit --limit 1/second --limit-burst 5 -j LOG --log-level warning --log-prefix=\'\'IN-world\':\'
-A in_world -j DROP
-A FORWARD -i eth2 -o eth0 -j in_dmz2o
-A FORWARD -i eth0 -o eth2 -j out_dmz2o
-A FORWARD -i eth1 -o eth0 -j in_lan2o
-A FORWARD -i eth0 -o eth1 -j out_lan2o
-A FORWARD -i eth1 -o eth2 -j in_lan2dmz
-A FORWARD -i eth2 -o eth1 -j out_lan2dmz
-A FORWARD -m state --state RELATED -j ACCEPT
-A FORWARD -m limit --limit 1/second --limit-burst 5 -j LOG --log-level warning --log-prefix=\'PASS-unknown:\'
-A FORWARD -j DROP
-A OUTPUT -o eth0 -s 212.12.99.99 -j out_world
-A OUTPUT -o eth1 -s 192.168.0.99 -j out_lan
-A OUTPUT -o eth2 -s 192.168.1.2 -j out_dmz
-A OUTPUT -m state --state RELATED -j ACCEPT
-A OUTPUT -m limit --limit 1/second --limit-burst 5 -j LOG --log-level warning --log-prefix=\'OUT-unknown:\'
-A OUTPUT -j DROP
-A INPUT -i eth0 -d 212.12.99.99 -j in_world
-A INPUT -i eth1 -d 192.168.0.99 -j in_lan
-A INPUT -i eth2 -d 192.168.1.2 -j in_dmz
-A INPUT -m state --state RELATED -j ACCEPT
-A INPUT -m limit --limit 1/second --limit-burst 5 -j LOG --log-level warning --log-prefix=\'IN-unknown:\'
-A INPUT -j DROP
-P INPUT "${FIREHOL_INPUT_ACTIVATION_POLICY}" >/tmp/.firehol-tmp-4033-5887-18831/firehol-out.sh.log 2>&1
-P OUTPUT "${FIREHOL_OUTPUT_ACTIVATION_POLICY}" >/tmp/.firehol-tmp-4033-5887-18831/firehol-out.sh.log 2>&1
-P FORWARD "${FIREHOL_FORWARD_ACTIVATION_POLICY}" >/tmp/.firehol-tmp-4033-5887-18831/firehol-out.sh.log 2>&1
-t nat -N nat.1
-t nat -A PREROUTING -i eth0 -p tcp -d 212.12.99.99 --dport 80 -j nat.1
-t nat -A nat.1 -p tcp -j DNAT --to-destination 192.168.1.3
-t nat -N nat.2
-t nat -A PREROUTING -i eth0 -p tcp -d 212.12.99.99 --dport 3389 -j nat.2
-t nat -A nat.2 -p tcp -j DNAT --to-destination 192.168.0.1
===>8===
Сравниваем: ~90 строк у тебя, ~26 у меня в firehol - читать-писать проще (да - после освоения соотв.языка). По числу правил соотношение ~90 против ~250: принимаю за косвенный показатель %) качества набора правил.
----
[1] %-)
# iptables -p icmp -h |awk '/^any/,/AAAA/{print $1}'|while read tp; do iptables -A tst -p icmp -m icmp --icmp-type $tp -j ACCEPT; echo "### $tp"; iptables-save |grep "\-A tst"; iptables -D tst -p icmp -m icmp --icmp-type $tp -j ACCEPT; done