Серверная (www.it-simple.ru)

Как отказаться от arno-iptables-firewall


iptables - это стандартный linux-файрвол. Очень мощный, способен практически на всё. В умелых руках, естественно. Очень гибкий, позволяет настраивать движения сетевых пакетов до мельчайших нюансов. Очень быстрый, потому что работает на уровне ядра.
У него есть ровно один недостаток: кажущаяся сложность для неподготовленного пользователя.

В свою очередь, arno-iptables-firewall - оболочка для настройки файрвола iptables. Очень простая оболочка. Сразу при установке начинает задавать нехитрые вопросы, типа «А какой интерфейс у вас смотрит внутрь?», «А какой интерфейс у вас смотрит наружу?», «А айпишники у вас какие?» и на основе ответов составляет правила для файрвола. Таким же заполнением анкеты достраивается и NAT (не при установке, но при реконфигурировании пакета).
Недостатки следуют из достоинства: всё, что выходит за рамки вопросов, уже не кажется таким простым.

Здесь пойдёт речь о том, как удалить «лишний» пакет arno-iptables-firewall, оставив при этом все созданные им правила и, соответственно, всю реализованную с помощью него функциональность.

0. Запускаем рутовую консоль

sudo -s

С этого момента рабочей системой считается Ubuntu.
Так как все действия надо делать от рута, вводим один раз и забываем.

1. Сохраняем текущую конфигурацию для iptables

iptables-save > /путь/к/файлу/iptables.save

iptables.save - файл, куда упадут действующие (то есть, созданные arno-iptables-firewall) правила
/путь/к/файлу/ - место, где мы будем хранить наш iptables.save. Выбирать надо аккуратно, файл должен быть доступен при загрузке и недоступен для других пользователей, кроме рута. Каталог /root/ - хороший выбор.

2. Удаляем пакет arno-iptables-firewall

aptitude purge arno-iptables-firewall

purge - удалить полностью и окончательно, вместе с конфигурационными файлами.

3. Заставляем подгружаться сохранённую ранее конфигурацию iptables при старте системы

Это можно сделать многими способами.
Один из них - прописать команду запуска в файл /etc/rc.local

cat /путь/к/файлу/iptables.save | iptables-restore
exit 0

4. Проверяем, что режим форвардинга включён

Он нужен для трансляции пакетов между сетевыми интерфейсами. В частности, для работы NAT.
В файле /etc/sysctl.conf должна присутствовать строчка:

net.ipv4.ip_forward=1

иначе режим форвардинга НЕ БУДЕТ включаться при загрузке системы.

Для того, чтобы включить его временно (например, в целях тестирования), набираем в консоли:

echo 1 > /proc/sys/net/ipv4/ip_forward

То есть, записываем единичку в файл /proc/sys/net/ipv4/ip_forward, определяющий текущие настройки форвардинга.


Установка arno-iptables-firewall - это простой способ настроить мощный файрвол, не вникая в подробности.
Избавление от arno-iptables-firewall - первый шаг на пути к освоению iptables и огромных возможностей, которые тот может предоставить.

Ниже представлен пример сгенерированного файла iptables.save из записи «Настройка шлюза для домашней локальной сети на Ubuntu Linux (http://www.it-simple.ru/?p=897)». Зная основы iptables можно примерно понять, как оно работает.

Красным подсвечены несуществующие цепочки и правила, которые работают вхолостую. Их можно смело удалить.
Синим - правила, польза от которых сомнительна.
Жирным - начала и концы описания таблиц.

# Generated by iptables-save v1.4.4 on Sat Mar 26 20:33:40 2011
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [1:62]
:OUTPUT ACCEPT [1:62]
:NAT_POSTROUTING_CHAIN - [0:0]
:NAT_PREROUTING_CHAIN - [0:0]
:POST_NAT_POSTROUTING_CHAIN - [0:0]
:POST_NAT_PREROUTING_CHAIN - [0:0]
-A PREROUTING -j NAT_PREROUTING_CHAIN
-A PREROUTING -j POST_NAT_PREROUTING_CHAIN

-A POSTROUTING -o eth0 -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
-A POSTROUTING -o ppp0 -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
-A POSTROUTING -j NAT_POSTROUTING_CHAIN
-A POSTROUTING -s 10.0.0.0/24 ! -d 10.0.0.0/24 -o eth0 -j MASQUERADE
-A POSTROUTING -s 10.0.0.0/24 ! -d 10.0.0.0/24 -o ppp0 -j MASQUERADE
-A POSTROUTING -j POST_NAT_POSTROUTING_CHAIN
COMMIT
# Completed on Sat Mar 26 20:33:40 2011
# Generated by iptables-save v1.4.4 on Sat Mar 26 20:33:40 2011
*mangle
:PREROUTING ACCEPT [24:1756]
:INPUT ACCEPT [24:1756]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [29:38287]
:POSTROUTING ACCEPT [29:38287]
-A PREROUTING -p tcp -m tcp --dport 20 -j TOS --set-tos 0x08/0x3f
-A PREROUTING -p tcp -m tcp --dport 21 -j TOS --set-tos 0x10/0x3f
-A PREROUTING -p tcp -m tcp --dport 22 -j TOS --set-tos 0x10/0x3f
-A PREROUTING -p tcp -m tcp --dport 23 -j TOS --set-tos 0x10/0x3f
-A PREROUTING -p tcp -m tcp --dport 25 -j TOS --set-tos 0x10/0x3f
-A PREROUTING -p udp -m udp --dport 53 -j TOS --set-tos 0x10/0x3f
-A PREROUTING -p tcp -m tcp --dport 67 -j TOS --set-tos 0x10/0x3f
-A PREROUTING -p tcp -m tcp --dport 80 -j TOS --set-tos 0x08/0x3f
-A PREROUTING -p tcp -m tcp --dport 110 -j TOS --set-tos 0x08/0x3f
-A PREROUTING -p tcp -m tcp --dport 113 -j TOS --set-tos 0x10/0x3f
-A PREROUTING -p tcp -m tcp --dport 123 -j TOS --set-tos 0x10/0x3f
-A PREROUTING -p tcp -m tcp --dport 143 -j TOS --set-tos 0x08/0x3f
-A PREROUTING -p tcp -m tcp --dport 443 -j TOS --set-tos 0x08/0x3f
-A PREROUTING -p tcp -m tcp --dport 993 -j TOS --set-tos 0x08/0x3f
-A PREROUTING -p tcp -m tcp --dport 995 -j TOS --set-tos 0x08/0x3f
-A PREROUTING -p tcp -m tcp --dport 1080 -j TOS --set-tos 0x10/0x3f
-A PREROUTING -p tcp -m tcp --dport 6000:6063 -j TOS --set-tos 0x08/0x3f
-A OUTPUT -o eth0 -p tcp -m tcp --dport 20 -j TOS --set-tos 0x08/0x3f
-A OUTPUT -o eth0 -p tcp -m tcp --dport 21 -j TOS --set-tos 0x10/0x3f
-A OUTPUT -o eth0 -p tcp -m tcp --dport 22 -j TOS --set-tos 0x10/0x3f
-A OUTPUT -o eth0 -p tcp -m tcp --dport 23 -j TOS --set-tos 0x10/0x3f
-A OUTPUT -o eth0 -p tcp -m tcp --dport 25 -j TOS --set-tos 0x10/0x3f
-A OUTPUT -o eth0 -p udp -m udp --dport 53 -j TOS --set-tos 0x08/0x3f
-A OUTPUT -o eth0 -p tcp -m tcp --dport 67 -j TOS --set-tos 0x10/0x3f
-A OUTPUT -o eth0 -p tcp -m tcp --dport 80 -j TOS --set-tos 0x08/0x3f
-A OUTPUT -o eth0 -p tcp -m tcp --dport 110 -j TOS --set-tos 0x08/0x3f
-A OUTPUT -o eth0 -p tcp -m tcp --dport 113 -j TOS --set-tos 0x10/0x3f
-A OUTPUT -o eth0 -p tcp -m tcp --dport 123 -j TOS --set-tos 0x10/0x3f
-A OUTPUT -o eth0 -p tcp -m tcp --dport 143 -j TOS --set-tos 0x08/0x3f
-A OUTPUT -o eth0 -p tcp -m tcp --dport 443 -j TOS --set-tos 0x08/0x3f
-A OUTPUT -o eth0 -p tcp -m tcp --dport 993 -j TOS --set-tos 0x08/0x3f
-A OUTPUT -o eth0 -p tcp -m tcp --dport 995 -j TOS --set-tos 0x08/0x3f
-A OUTPUT -o eth0 -p tcp -m tcp --dport 1080 -j TOS --set-tos 0x10/0x3f
-A OUTPUT -o eth0 -p tcp -m tcp --dport 6000:6063 -j TOS --set-tos 0x08/0x3f
-A OUTPUT -o ppp0 -p tcp -m tcp --dport 20 -j TOS --set-tos 0x08/0x3f
-A OUTPUT -o ppp0 -p tcp -m tcp --dport 21 -j TOS --set-tos 0x10/0x3f
-A OUTPUT -o ppp0 -p tcp -m tcp --dport 22 -j TOS --set-tos 0x10/0x3f
-A OUTPUT -o ppp0 -p tcp -m tcp --dport 23 -j TOS --set-tos 0x10/0x3f
-A OUTPUT -o ppp0 -p tcp -m tcp --dport 25 -j TOS --set-tos 0x10/0x3f
-A OUTPUT -o ppp0 -p udp -m udp --dport 53 -j TOS --set-tos 0x08/0x3f
-A OUTPUT -o ppp0 -p tcp -m tcp --dport 67 -j TOS --set-tos 0x10/0x3f
-A OUTPUT -o ppp0 -p tcp -m tcp --dport 80 -j TOS --set-tos 0x08/0x3f
-A OUTPUT -o ppp0 -p tcp -m tcp --dport 110 -j TOS --set-tos 0x08/0x3f
-A OUTPUT -o ppp0 -p tcp -m tcp --dport 113 -j TOS --set-tos 0x10/0x3f
-A OUTPUT -o ppp0 -p tcp -m tcp --dport 123 -j TOS --set-tos 0x10/0x3f
-A OUTPUT -o ppp0 -p tcp -m tcp --dport 143 -j TOS --set-tos 0x08/0x3f
-A OUTPUT -o ppp0 -p tcp -m tcp --dport 443 -j TOS --set-tos 0x08/0x3f
-A OUTPUT -o ppp0 -p tcp -m tcp --dport 993 -j TOS --set-tos 0x08/0x3f
-A OUTPUT -o ppp0 -p tcp -m tcp --dport 995 -j TOS --set-tos 0x08/0x3f
-A OUTPUT -o ppp0 -p tcp -m tcp --dport 1080 -j TOS --set-tos 0x10/0x3f
-A OUTPUT -o ppp0 -p tcp -m tcp --dport 6000:6063 -j TOS --set-tos 0x08/0x3f

COMMIT
# Completed on Sat Mar 26 20:33:40 2011
# Generated by iptables-save v1.4.4 on Sat Mar 26 20:33:40 2011
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
:BASE_FORWARD_CHAIN - [0:0]
:BASE_INPUT_CHAIN - [0:0]
:BASE_OUTPUT_CHAIN - [0:0]
:DMZ_FORWARD_IN_CHAIN - [0:0]
:DMZ_FORWARD_OUT_CHAIN - [0:0]
:DMZ_INET_FORWARD_CHAIN - [0:0]
:DMZ_INPUT_CHAIN - [0:0]
:DMZ_LAN_FORWARD_CHAIN - [0:0]
:DMZ_OUTPUT_CHAIN - [0:0]

:EXT_FORWARD_IN_CHAIN - [0:0]
:EXT_FORWARD_OUT_CHAIN - [0:0]
:EXT_ICMP_FLOOD_CHAIN - [0:0]
:EXT_INPUT_CHAIN - [0:0]
:EXT_OUTPUT_CHAIN - [0:0]
:FORWARD_CHAIN - [0:0]
:HOST_BLOCK_DROP - [0:0]
:HOST_BLOCK_DST - [0:0]
:HOST_BLOCK_SRC - [0:0]

:INET_DMZ_FORWARD_CHAIN - [0:0]
:INPUT_CHAIN - [0:0]
:INT_FORWARD_IN_CHAIN - [0:0]
:INT_FORWARD_OUT_CHAIN - [0:0]
:INT_INPUT_CHAIN - [0:0]
:INT_OUTPUT_CHAIN - [0:0]
:LAN_INET_FORWARD_CHAIN - [0:0]
:OUTPUT_CHAIN - [0:0]
:POST_FORWARD_CHAIN - [0:0]
:POST_INPUT_CHAIN - [0:0]
:POST_INPUT_DROP_CHAIN - [0:0]
:POST_OUTPUT_CHAIN - [0:0]
:RESERVED_NET_CHK - [0:0]
:SPOOF_CHK - [0:0]
:VALID_CHK - [0:0]
-A INPUT -j BASE_INPUT_CHAIN
-A INPUT -j INPUT_CHAIN
-A INPUT -j HOST_BLOCK_SRC
-A INPUT -j SPOOF_CHK
-A INPUT -i eth0 -j VALID_CHK
-A INPUT -i eth0 ! -p icmp -m state --state NEW -j EXT_INPUT_CHAIN
-A INPUT -i eth0 -p icmp -m state --state NEW -m limit --limit 60/sec --limit-burst 100 -j EXT_INPUT_CHAIN
-A INPUT -i eth0 -p icmp -m state --state NEW -j EXT_ICMP_FLOOD_CHAIN
-A INPUT -i ppp0 -j VALID_CHK
-A INPUT -i ppp0 ! -p icmp -m state --state NEW -j EXT_INPUT_CHAIN
-A INPUT -i ppp0 -p icmp -m state --state NEW -m limit --limit 60/sec --limit-burst 100 -j EXT_INPUT_CHAIN
-A INPUT -i ppp0 -p icmp -m state --state NEW -j EXT_ICMP_FLOOD_CHAIN
-A INPUT -i eth1 -j INT_INPUT_CHAIN
-A INPUT -j POST_INPUT_CHAIN
-A INPUT -m limit --limit 1/sec -j LOG --log-prefix "AIF:Dropped INPUT packet: " --log-level 6
-A INPUT -j DROP
-A FORWARD -j BASE_FORWARD_CHAIN
-A FORWARD -o eth0 -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
-A FORWARD -o ppp0 -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
-A FORWARD -j FORWARD_CHAIN
-A FORWARD -j HOST_BLOCK_SRC
-A FORWARD -j HOST_BLOCK_DST

-A FORWARD -i eth0 -j EXT_FORWARD_IN_CHAIN
-A FORWARD -o eth0 -j EXT_FORWARD_OUT_CHAIN
-A FORWARD -i ppp0 -j EXT_FORWARD_IN_CHAIN
-A FORWARD -o ppp0 -j EXT_FORWARD_OUT_CHAIN
-A FORWARD -i eth1 -j INT_FORWARD_IN_CHAIN
-A FORWARD -o eth1 -j INT_FORWARD_OUT_CHAIN
-A FORWARD -j SPOOF_CHK
-A FORWARD -i eth1 -o eth1 -j ACCEPT
-A FORWARD -i eth1 -o eth0 -j LAN_INET_FORWARD_CHAIN
-A FORWARD -i eth1 -o ppp0 -j LAN_INET_FORWARD_CHAIN
-A FORWARD -j POST_FORWARD_CHAIN
-A FORWARD -m limit --limit 1/min --limit-burst 3 -j LOG --log-prefix "AIF:Dropped FORWARD packet: " --log-level 6
-A FORWARD -j DROP
-A OUTPUT -j BASE_OUTPUT_CHAIN
-A OUTPUT -o eth0 -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
-A OUTPUT -o ppp0 -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
-A OUTPUT -j OUTPUT_CHAIN
-A OUTPUT -j HOST_BLOCK_DST
-A OUTPUT -f -m limit --limit 3/min -j LOG --log-prefix "AIF:Fragment packet: " --log-level 6
-A OUTPUT -f -j DROP
-A OUTPUT -o eth0 -j EXT_OUTPUT_CHAIN
-A OUTPUT -o ppp0 -j EXT_OUTPUT_CHAIN
-A OUTPUT -o eth1 -j INT_OUTPUT_CHAIN
-A OUTPUT -j POST_OUTPUT_CHAIN
-A OUTPUT -j ACCEPT
-A BASE_FORWARD_CHAIN -m state --state ESTABLISHED -j ACCEPT
-A BASE_FORWARD_CHAIN -p tcp -m state --state RELATED -m tcp --dport 1024:65535 -j ACCEPT
-A BASE_FORWARD_CHAIN -p udp -m state --state RELATED -m udp --dport 1024:65535 -j ACCEPT
-A BASE_FORWARD_CHAIN -p icmp -m state --state RELATED -j ACCEPT
-A BASE_FORWARD_CHAIN -i lo -j ACCEPT
-A BASE_INPUT_CHAIN -m state --state ESTABLISHED -j ACCEPT
-A BASE_INPUT_CHAIN -p tcp -m state --state RELATED -m tcp --dport 1024:65535 -j ACCEPT
-A BASE_INPUT_CHAIN -p udp -m state --state RELATED -m udp --dport 1024:65535 -j ACCEPT
-A BASE_INPUT_CHAIN -p icmp -m state --state RELATED -j ACCEPT
-A BASE_INPUT_CHAIN -i lo -j ACCEPT
-A BASE_OUTPUT_CHAIN -m state --state ESTABLISHED -j ACCEPT
-A BASE_OUTPUT_CHAIN -o lo -j ACCEPT
-A EXT_FORWARD_IN_CHAIN -j VALID_CHK
-A EXT_ICMP_FLOOD_CHAIN -p icmp -m icmp --icmp-type 3 -m limit --limit 12/hour --limit-burst 1 -j LOG --log-prefix "AIF:ICMP-unreachable flood: " --log-level 6
-A EXT_ICMP_FLOOD_CHAIN -p icmp -m icmp --icmp-type 3 -j POST_INPUT_DROP_CHAIN
-A EXT_ICMP_FLOOD_CHAIN -p icmp -m icmp --icmp-type 11 -m limit --limit 12/hour --limit-burst 1 -j LOG --log-prefix "AIF:ICMP-time-exceeded fld: " --log-level 6
-A EXT_ICMP_FLOOD_CHAIN -p icmp -m icmp --icmp-type 11 -j POST_INPUT_DROP_CHAIN
-A EXT_ICMP_FLOOD_CHAIN -p icmp -m icmp --icmp-type 12 -m limit --limit 12/hour --limit-burst 1 -j LOG --log-prefix "AIF:ICMP-param-problem fld: " --log-level 6
-A EXT_ICMP_FLOOD_CHAIN -p icmp -m icmp --icmp-type 12 -j POST_INPUT_DROP_CHAIN
-A EXT_ICMP_FLOOD_CHAIN -p icmp -m icmp --icmp-type 8 -m limit --limit 12/hour --limit-burst 1 -j LOG --log-prefix "AIF:ICMP-request(ping) fld: " --log-level 6
-A EXT_ICMP_FLOOD_CHAIN -p icmp -m icmp --icmp-type 8 -j POST_INPUT_DROP_CHAIN
-A EXT_ICMP_FLOOD_CHAIN -p icmp -m icmp --icmp-type 0 -m limit --limit 12/hour --limit-burst 1 -j LOG --log-prefix "AIF:ICMP-reply(pong) flood: " --log-level 6
-A EXT_ICMP_FLOOD_CHAIN -p icmp -m icmp --icmp-type 0 -j POST_INPUT_DROP_CHAIN
-A EXT_ICMP_FLOOD_CHAIN -p icmp -m icmp --icmp-type 4 -m limit --limit 12/hour --limit-burst 1 -j LOG --log-prefix "AIF:ICMP-source-quench fld: " --log-level 6
-A EXT_ICMP_FLOOD_CHAIN -p icmp -m icmp --icmp-type 4 -j POST_INPUT_DROP_CHAIN
-A EXT_ICMP_FLOOD_CHAIN -p icmp -m limit --limit 12/hour --limit-burst 1 -j LOG --log-prefix "AIF:ICMP(other) flood: " --log-level 6
-A EXT_ICMP_FLOOD_CHAIN -p icmp -j POST_INPUT_DROP_CHAIN
-A EXT_INPUT_CHAIN -p tcp -m tcp --dport 0 -m limit --limit 6/hour --limit-burst 1 -j LOG --log-prefix "AIF:Port 0 OS fingerprint: " --log-level 6
-A EXT_INPUT_CHAIN -p udp -m udp --dport 0 -m limit --limit 6/hour --limit-burst 1 -j LOG --log-prefix "AIF:Port 0 OS fingerprint: " --log-level 6
-A EXT_INPUT_CHAIN -p tcp -m tcp --dport 0 -j POST_INPUT_DROP_CHAIN
-A EXT_INPUT_CHAIN -p udp -m udp --dport 0 -j POST_INPUT_DROP_CHAIN
-A EXT_INPUT_CHAIN -p tcp -m tcp --sport 0 -m limit --limit 6/hour -j LOG --log-prefix "AIF:TCP source port 0: " --log-level 6
-A EXT_INPUT_CHAIN -p udp -m udp --sport 0 -m limit --limit 6/hour -j LOG --log-prefix "AIF:UDP source port 0: " --log-level 6
-A EXT_INPUT_CHAIN -p tcp -m tcp --sport 0 -j POST_INPUT_DROP_CHAIN
-A EXT_INPUT_CHAIN -p udp -m udp --sport 0 -j POST_INPUT_DROP_CHAIN
-A EXT_INPUT_CHAIN -p udp -m udp --sport 67 --dport 68 -j ACCEPT
-A EXT_INPUT_CHAIN -p icmp -m icmp --icmp-type 8 -m limit --limit 3/min --limit-burst 1 -j LOG --log-prefix "AIF:ICMP-request: " --log-level 6
-A EXT_INPUT_CHAIN -p icmp -m icmp --icmp-type 3 -m limit --limit 12/hour --limit-burst 1 -j LOG --log-prefix "AIF:ICMP-unreachable: " --log-level 6
-A EXT_INPUT_CHAIN -p icmp -m icmp --icmp-type 11 -m limit --limit 12/hour --limit-burst 1 -j LOG --log-prefix "AIF:ICMP-time-exceeded: " --log-level 6
-A EXT_INPUT_CHAIN -p icmp -m icmp --icmp-type 12 -m limit --limit 12/hour --limit-burst 1 -j LOG --log-prefix "AIF:ICMP-param.-problem: " --log-level 6
-A EXT_INPUT_CHAIN -p icmp -m icmp --icmp-type 3 -j POST_INPUT_DROP_CHAIN
-A EXT_INPUT_CHAIN -p icmp -m icmp --icmp-type 11 -j POST_INPUT_DROP_CHAIN
-A EXT_INPUT_CHAIN -p icmp -m icmp --icmp-type 12 -j POST_INPUT_DROP_CHAIN
-A EXT_INPUT_CHAIN -p icmp -m icmp --icmp-type 8 -j POST_INPUT_DROP_CHAIN
-A EXT_INPUT_CHAIN -p icmp -m icmp --icmp-type 0 -j POST_INPUT_DROP_CHAIN
-A EXT_INPUT_CHAIN -p tcp -m tcp --dport 1024:65535 ! --tcp-flags FIN,SYN,RST,ACK SYN -m limit --limit 3/min -j LOG --log-prefix "AIF:Stealth scan (UNPRIV)?: " --log-level 6
-A EXT_INPUT_CHAIN -p tcp -m tcp --dport 0:1023 ! --tcp-flags FIN,SYN,RST,ACK SYN -m limit --limit 3/min -j LOG --log-prefix "AIF:Stealth scan (PRIV)?: " --log-level 6
-A EXT_INPUT_CHAIN -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -j POST_INPUT_DROP_CHAIN
-A EXT_INPUT_CHAIN -p tcp -m tcp --dport 0:1023 -m limit --limit 6/min --limit-burst 2 -j LOG --log-prefix "AIF:PRIV connect attempt: " --log-level 6
-A EXT_INPUT_CHAIN -p udp -m udp --dport 0:1023 -m limit --limit 6/min --limit-burst 2 -j LOG --log-prefix "AIF:PRIV connect attempt: " --log-level 6
-A EXT_INPUT_CHAIN -p tcp -m tcp --dport 1024:65535 -m limit --limit 6/min --limit-burst 2 -j LOG --log-prefix "AIF:UNPRIV connect attempt: " --log-level 6
-A EXT_INPUT_CHAIN -p udp -m udp --dport 1024:65535 -m limit --limit 6/min --limit-burst 2 -j LOG --log-prefix "AIF:UNPRIV connect attempt: " --log-level 6
-A EXT_INPUT_CHAIN -j POST_INPUT_CHAIN
-A EXT_INPUT_CHAIN -p tcp -j POST_INPUT_DROP_CHAIN
-A EXT_INPUT_CHAIN -p udp -j POST_INPUT_DROP_CHAIN
-A EXT_INPUT_CHAIN -p icmp -j POST_INPUT_DROP_CHAIN
-A EXT_INPUT_CHAIN -m limit --limit 1/min -j LOG --log-prefix "AIF:Connect attempt: " --log-level 6
-A EXT_INPUT_CHAIN -j POST_INPUT_DROP_CHAIN
-A HOST_BLOCK_DROP -m limit --limit 1/min --limit-burst 1 -j LOG --log-prefix "AIF:Blocked host(s): " --log-level 6
-A HOST_BLOCK_DROP -j DROP
-A INT_INPUT_CHAIN -p icmp -m icmp --icmp-type 8 -m limit --limit 20/sec --limit-burst 100 -j ACCEPT
-A INT_INPUT_CHAIN -p icmp -m icmp --icmp-type 8 -m limit --limit 3/min --limit-burst 1 -j LOG --log-prefix "AIF:ICMP-request: " --log-level 6
-A INT_INPUT_CHAIN -p icmp -m icmp --icmp-type 8 -j DROP
-A INT_INPUT_CHAIN -j ACCEPT
-A LAN_INET_FORWARD_CHAIN -p icmp -m icmp --icmp-type 8 -m limit --limit 20/sec --limit-burst 100 -j ACCEPT
-A LAN_INET_FORWARD_CHAIN -p icmp -m icmp --icmp-type 8 -m limit --limit 3/min --limit-burst 1 -j LOG --log-prefix "AIF:ICMP-request: " --log-level 6
-A LAN_INET_FORWARD_CHAIN -p icmp -m icmp --icmp-type 8 -j DROP
-A LAN_INET_FORWARD_CHAIN -p tcp -j ACCEPT
-A LAN_INET_FORWARD_CHAIN -p udp -j ACCEPT
-A LAN_INET_FORWARD_CHAIN -j ACCEPT
-A POST_INPUT_DROP_CHAIN -j DROP
-A RESERVED_NET_CHK -s 10.0.0.0/8 -m limit --limit 1/min --limit-burst 1 -j LOG --log-prefix "AIF:Class A address: " --log-level 6
-A RESERVED_NET_CHK -s 172.16.0.0/12 -m limit --limit 1/min --limit-burst 1 -j LOG --log-prefix "AIF:Class B address: " --log-level 6
-A RESERVED_NET_CHK -s 192.168.0.0/16 -m limit --limit 1/min --limit-burst 1 -j LOG --log-prefix "AIF:Class C address: " --log-level 6
-A RESERVED_NET_CHK -s 169.254.0.0/16 -m limit --limit 1/min --limit-burst 1 -j LOG --log-prefix "AIF:Class M$ address: " --log-level 6
-A RESERVED_NET_CHK -s 224.0.0.0/24 -m limit --limit 1/min --limit-burst 1 -j LOG --log-prefix "AIF:Multicast address: " --log-level 6
-A RESERVED_NET_CHK -s 239.0.0.0/24 -m limit --limit 1/min --limit-burst 1 -j LOG --log-prefix "AIF:Multicast address: " --log-level 6
-A RESERVED_NET_CHK -s 10.0.0.0/8 -j POST_INPUT_DROP_CHAIN
-A RESERVED_NET_CHK -s 172.16.0.0/12 -j POST_INPUT_DROP_CHAIN
-A RESERVED_NET_CHK -s 192.168.0.0/16 -j POST_INPUT_DROP_CHAIN
-A RESERVED_NET_CHK -s 169.254.0.0/16 -j POST_INPUT_DROP_CHAIN
-A RESERVED_NET_CHK -s 224.0.0.0/24 -j POST_INPUT_DROP_CHAIN
-A RESERVED_NET_CHK -s 239.0.0.0/24 -j POST_INPUT_DROP_CHAIN
-A SPOOF_CHK -s 10.0.0.0/24 -i eth1 -j RETURN
-A SPOOF_CHK -s 10.0.0.0/24 -m limit --limit 3/min -j LOG --log-prefix "AIF:Spoofed packet: " --log-level 6
-A SPOOF_CHK -s 10.0.0.0/24 -j POST_INPUT_DROP_CHAIN
-A SPOOF_CHK -j RETURN
-A VALID_CHK -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -m limit --limit 3/min -j LOG --log-prefix "AIF:Stealth XMAS scan: " --log-level 6
-A VALID_CHK -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,ACK,URG -m limit --limit 3/min -j LOG --log-prefix "AIF:Stealth XMAS-PSH scan: " --log-level 6
-A VALID_CHK -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -m limit --limit 3/min -j LOG --log-prefix "AIF:Stealth XMAS-ALL scan: " --log-level 6
-A VALID_CHK -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN -m limit --limit 3/min -j LOG --log-prefix "AIF:Stealth FIN scan: " --log-level 6
-A VALID_CHK -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -m limit --limit 3/min -j LOG --log-prefix "AIF:Stealth SYN/RST scan: " --log-level 6
-A VALID_CHK -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -m limit --limit 3/min -j LOG --log-prefix "AIF:Stealth SYN/FIN scan?: " --log-level 6
-A VALID_CHK -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -m limit --limit 3/min -j LOG --log-prefix "AIF:Stealth Null scan: " --log-level 6
-A VALID_CHK -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j POST_INPUT_DROP_CHAIN
-A VALID_CHK -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,ACK,URG -j POST_INPUT_DROP_CHAIN
-A VALID_CHK -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j POST_INPUT_DROP_CHAIN
-A VALID_CHK -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN -j POST_INPUT_DROP_CHAIN
-A VALID_CHK -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j POST_INPUT_DROP_CHAIN
-A VALID_CHK -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j POST_INPUT_DROP_CHAIN
-A VALID_CHK -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j POST_INPUT_DROP_CHAIN
-A VALID_CHK -p tcp -m tcp --tcp-option 64 -m limit --limit 3/min --limit-burst 1 -j LOG --log-prefix "AIF:Bad TCP flag(64): " --log-level 6
-A VALID_CHK -p tcp -m tcp --tcp-option 128 -m limit --limit 3/min --limit-burst 1 -j LOG --log-prefix "AIF:Bad TCP flag(128): " --log-level 6
-A VALID_CHK -p tcp -m tcp --tcp-option 64 -j POST_INPUT_DROP_CHAIN
-A VALID_CHK -p tcp -m tcp --tcp-option 128 -j POST_INPUT_DROP_CHAIN
-A VALID_CHK -m state --state INVALID -j POST_INPUT_DROP_CHAIN
-A VALID_CHK -f -m limit --limit 3/min --limit-burst 1 -j LOG --log-prefix "AIF:Fragment packet: "
-A VALID_CHK -f -j DROP
COMMIT
# Completed on Sat Mar 26 20:33:40 2011

Остальное выделю пот0м.

Для сравнения - вот сильно упрощённый, но рабочий вариант правил:

*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A POSTROUTING -s 10.0.0.0/24 -d 192.168.0.0/16 -o eth0 -j SNAT --to-source [ip-адрес eth0]
-A POSTROUTING -s 10.0.0.0/24 -o ppp0 -j SNAT --to-source [ip-адрес ppp0]
COMMIT
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -i eth1 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
-A FORWARD -i eth1 -j ACCEPT
-A FORWARD -i lo -j ACCEPT
COMMIT
*mangle
COMMIT

Предполагается, что eth0 и ppp0 имеют статические адреса, поэтому «-j SNAT ...».
Для интерфейсов, получающих адреса по DHCP, надо заменить «-j SNAT ...» на «-j MASQUERADE»