Subsections

iptables: GNU/Linux като маршрутизатор

Една от честите употреби на GNU/Linux е да замести маршрутизатор Cisco или друг специализиран хардуер с евтино старо PC от класа на 486 или (по-добре) Pentium. Това в никакъв случай не значи по-малко възможности, а напротив -- GNU/Linux като маршрутизатор е способен на почти всичко, което може да се появи в практиката.

Системата в ядрото, която се грижи за всички тези неща, се нарича Netfilter. Тя се управлява чрез командата iptables(8) от пакета iptables. Повече информация може да намерите в сайта на Netfilter.

След като конфигурирате Netfilter с нужните ви правила, остава въпросът как те да се възстановяват при рестартиране на компютъра. За целта използвайте следната команда:

# /etc/init.d/iptables save active

FIXME: Това няма да работи под Sarge. В /usr/share/doc/iptables/README.Debian.gz има повече информация.

Примерни правила за филтриране на пакети

Следните прости правила са взети от SecurityFocus. Те са само "`скелет"' с възможност да допълвате с още правила. Дадени са и две примерни правила.

INTIF=eth0                      # Вътрешна мрежа
EXTIF=eth1                      # Интернет
TCP_SERVICES="22,80"            # Разрешени услуги

# Изтриване на всички таблици
iptables -F INPUT
iptables -F FORWARD
iptables -F OUTPUT
iptables -t nat -F PREROUTING
iptables -t nat -F POSTROUTING

### Таблица INPUT ##########################################

# Подразбираща се политика.
iptables -P INPUT DROP

# Пакети от активни TCP връзки се разрешават.  Пакети-отговори също се
# разрешават, например отговор на DNS заявка (по UDP) или отговор на
# ping request (по ICMP).
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Всеки от вътрешната мрежа, както и от локалния интерфейс, може да
# започне нова връзка.
iptables -A INPUT -i $INTIF -m state --state NEW -j ACCEPT
iptables -A INPUT -i lo -m state --state NEW -j ACCEPT

# Тук е мястото за още правила.

# Пример: Разрешава нови TCP връзки от Интернет към някой от
# $TCP_SERVICES на който и да е компютър от вътрешната мрежа.
iptables -A INPUT -i $EXTIF -m state --state NEW \
        -p tcp -m multiport --dport $TCP_SERVICES -j ACCEPT

# Хроникиране на отказаните пакети.
iptables -A INPUT -j LOG --log-prefix "FW_INPUT  "

### Таблица FORWARD ########################################

# Подразбираща се политика.
iptables -P FORWARD DROP

# Пакет от вътрешната мрежа, отиващ към Интернет.
iptables -A FORWARD -i $INTIF -o $EXTIF -j ACCEPT

# За да се върне пакетът, обаче, трябва да е част от някоя активна
# TCP връзка.
iptables -A FORWARD -i $EXTIF \
        -m state --state ESTABLISHED,RELATED -j ACCEPT

# Тук е мястото за още правила.

# Хроникиране на отказаните пакети.
iptables -A FORWARD -j LOG --log-prefix "FW_FORWARD  "

### Таблица OUTPUT #########################################

# Подразбираща се политика
iptables -P OUTPUT ACCEPT

### Таблица POSTROUTING ####################################

# Пример: Маскарадинг за отиващите към Интернет пакети.
iptables -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE


Nikola Antonov 2004-10-31