Translate

Настройка iptables в Debian

В 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 я не знаю, но предполагаю, что аналогично.

Комментариев нет:

Отправить комментарий

Постоянные читатели