В Debian нет четкой политики в отношении iptables; на что, куда и как класть — решает сам пользователь дистрибутива. Все что мне удалось найти из «официального» — небольшое HOWTO по iptables в Debian Wiki и несколько секций, посвященных файерволу в Securing Debian Manual. Там вы можете прочитать о возможных сценариях настройки.
Скрипт со «сводом правил» для iptables
Здесь все зависит от ваших задач. У каждого он будет свой. Приведу, в качестве примера, скрипт со своей офисной машины.
#!/bin/sh # /etc/init.d/iptables IPTABLES=/sbin/iptables case "$1" in start) echo "Starting iptables" # Обнуляем правила $IPTABLES -F $IPTABLES -X $IPTABLES -F -t nat $IPTABLES -X -t nat # Политика по умолчанию # Все запрещено $IPTABLES -P INPUT DROP $IPTABLES -P OUTPUT DROP $IPTABLES -P FORWARD DROP # Loopback $IPTABLES -A INPUT -i lo -j ACCEPT $IPTABLES -A OUTPUT -o lo -j ACCEPT $IPTABLES -A INPUT -i ! lo -d 127.0.0.0/8 -j REJECT # GRE $IPTABLES -A INPUT -p gre -j ACCEPT $IPTABLES -A OUTPUT -p gre -j ACCEPT $IPTABLES -A INPUT -p tcp --sport 1723 -s x.x.x.x -j ACCEPT $IPTABLES -A OUTPUT -p tcp --dport 1723 -d x.x.x.x -j ACCEPT # Разрешаем SSH $IPTABLES -A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT # Логгируем $IPTABLES -A INPUT -p tcp -m state --state NEW -j LOG --log-level debug --log-prefix 'iptables new: ' $IPTABLES -A INPUT -p udp -m state --state NEW -m multiport --dport ! '67,137,138,1947,17500' -j LOG --log-level debug --log-prefix 'iptables new: ' # Разрешаем весь исходящий трафик $IPTABLES -A OUTPUT -p all -j ACCEPT # Разрешаем установленные соединения $IPTABLES -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT # Запрещаем forwarding sysctl net.ipv4.ip_forward=0 # Нужные модули modprobe nf_conntrack_ftp modprobe nf_conntrack_pptp modprobe nf_conntrack_proto_gre ;; stop) echo "Stopping iptables" # Обнуляем правила $IPTABLES -F $IPTABLES -X $IPTABLES -F -t nat $IPTABLES -X -t nat # Политика по умолчанию # Все разрешено $IPTABLES -P INPUT ACCEPT $IPTABLES -P OUTPUT ACCEPT $IPTABLES -P FORWARD ACCEPT ;; *) echo "Usage: /etc/init.d/iptables {start|stop}" exit 1 ;; esac exit 0
Способ запуска
Либо вместе с init.d-скриптами, либо с помощью ifup-ifdown. У меня первый вариант. Создаем
/etc/init.d/iptables
, пастим туда скрипт.# chmod 755 /etc/init.d/iptables # update-rc.d iptables defaults ...
Запускаем.
# /etc/init.d/iptables start Starting iptables net.ipv4.ip_forward = 0
Смотрим, что получалось.
# iptables -L -vn Chain INPUT (policy DROP 222 packets, 22858 bytes) pkts bytes target prot opt in out source destination 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 0 0 REJECT all -- !lo * 0.0.0.0/0 127.0.0.0/8 reject-with icmp-port-unreachable 437 55407 ACCEPT 47 -- * * 0.0.0.0/0 0.0.0.0/0 0 0 ACCEPT tcp -- * * x.x.x.x 0.0.0.0/0 tcp spt:1723 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 0 0 LOG tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW LOG flags 0 level 7 prefix `iptables new: ' 2 646 LOG udp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW multiport dports ! 67,137,138,1947,17500 LOG flags 0 level 7 prefix `iptables new: ' 233 40563 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED Chain FORWARD (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 ACCEPT all -- * lo 0.0.0.0/0 0.0.0.0/0 408 281K ACCEPT 47 -- * * 0.0.0.0/0 0.0.0.0/0 0 0 ACCEPT tcp -- * * 0.0.0.0/0 x.x.x.x tcp dpt:1723 403 267K ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0
Останавливаем.
# /etc/init.d/iptables stop Stopping iptables
Смотрим, что получалось.
# iptables -L -vn Chain INPUT (policy ACCEPT 55 packets, 12884 bytes) pkts bytes target prot opt in out source destination Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 49 packets, 33348 bytes) pkts bytes target prot opt in out source destination
Все нормально. Теперь iptables запускается при старте системы.
iptables, Debian и OpenVZ (Virtuozzo)
Здесь у меня возникли проблемы с расширениями iptables. В контейнерах OpenVZ какое-то особенное ядро, и функциональность, которая есть в модулях не доступна (по крайней мере недоступна из коробки). Я не стал тратить время на поиск решения, а просто отказался от этого функционала :) Т. е. от
-m state
и -m multiport
из примера. Желающим докопаться до истины — добро пожаловать в OpenVZ Wiki. Кстати, как оно в Virtuozzo я не знаю, но предполагаю, что аналогично.
Комментариев нет:
Отправить комментарий