Една от честите употреби на 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