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


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

* INPUT
* OUTPUT
* FORWARD

Есть еще цепочки <tt>PREROUTING</tt> и <tt>POSTROUTING</tt>, но без их 
использования в простых случаях можно обойтись.

Самая простая конфигурация файервола (всё открыто во все стороны) выглядит так (Gentoo):

#!/bin/bash

#
# flush all tables
#
iptables -F

#
# erase all chains
#
iptables -X

#
# set defaults
#
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

#
# save
#
/etc/init.d/iptables save

Все это, очевидно, кладётся в bash-файлик, к примеру: /root/iptables-conf1.sh и 
запускается при старте системы автоматически или своим же самописным "стартером".

В натурально боевых случаях логика строится от обратного: сначала запрещаем всё, 
что можем запретить, а затем уже разрешаем по чуть-чуть:

#!/bin/bash

WAN="eth1"
WAN_IP="111.11.111.11"

LAN="eth0"
LAN_IP="192.168.1.2"

LO="lo"
LO_IP="127.0.0.1"

# flush
iptables -F

# defaults
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

iptables -A INPUT -p ALL -i $LAN -j ACCEPT
iptables -A INPUT -p ALL -i $LO -j ACCEPT

iptables -A INPUT -p TCP --dport 25 -i $LAN -j REJECT

iptables -A OUTPUT -p ALL -s $LO_IP -j ACCEPT
iptables -A OUTPUT -p ALL -s $LAN_IP -j ACCEPT

# iptables-save
/etc/init.d/iptables save

В этом случае разрешаем все кроме порта N25 на внутреннем интерфейсе, но запрещаем 
на внешнем. Пока обходимся без цепочек.

Далее можно конечно разобрать более сложные случаи с цепочками, но как показывает 
опыт - лучше и полезнее сначала разобраться в пакетах: arno-iptables и pyroman

Оба этих пакета представляют очень хорошие и проверенные временем наборы 
конфигурационных скриптов для iptables. А это сильно экономит время и позволяет не 
изобретать велосипед.