ОК, iptables мы настраивать научились, но как сделать так, чтобы наши правила автоматом применялись применялись при каждой перезагрузке сервера?
Конечно, разумной идеей будет тупо подготовить shell-скрипт, записать туда все нужные команды iptables, а потом добавить этот скрипт в автозагрузку (для Debian это к примеру каталоги в папке /etc/network, такие как if-up.d и run). Вот пример такого скрипта:
#!/bin/sh
iptables -F
iptables -X
iptables --new-chain out_apache
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m owner --uid-owner www-data -j out_apache
iptables -A out_apache -p tcp --syn -d 127.0.0.1 --dport 25 -j RETURN
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 25 -j ACCEPT
iptables -A INPUT -p tcp --dport 110 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --tcp-flags ACK ACK -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT --match state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp --sport 20 --match state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -j REJECT
iptables -A out_apache -j REJECT
Но можно поступить лучше, как советует руководство по iptables [1]:
1. Настройте iptables и проверьте его работу.
2. Сохраните текущую конфигурацию iptables в файл с помощью команды iptables-save:
iptables-save > /var/lib/iptables/rules
После этой команды создастся файл конфигурации /var/lib/iptables/rules, в который будут записаны все текущие (активные на данный момент) правила iptables. Это может быть и любой другой файл.
3. Для того, чтобы применить правила, записанные в файл, существует команда iptables-restore. Вот пример такой команды, которая применит сохраненные нами правила:
iptables-restore < /var/lib/iptables/rules
Обычно эта команда добавляется в любой скрипт автозагрузки, который запускается после инициализации сети. В системе Debian это может быть любой скрипт, помещенный в папку /etc/network/if-up.d. Вот пример такого скрипта (он выполнится автоматом после запуска сетевого интерфейса):
#!/bin/sh
/sbin/iptables-restore < /var/lib/iptables/rules
Таким образом, нужно сохранить текущую конфигурацию в файл командой iptables-save, и добавить в скрипт автозагрузки выполнение команды iptables-restore, которая загрузит этот файл.