1. Создаем файл /etc/rc.firewall (имя для примера, описываю как сделано у меня), в который помещаем скрипт инициализации iptables. Делаем его исполняемым.
2. Создаем файл /etc/init.d/iptables (пример ниже), также делаем исполняемым.
3. Создаем симлинки:
sudo ln -s /etc/init.d/iptables /etc/rc0.d/K20iptables # завершение скрипта при выключении
sudo ln -s /etc/init.d/iptables /etc/rc1.d/S20iptables # запуск при single user mode
sudo ln -s /etc/init.d/iptables /etc/rc2.d/S20iptables # запуск при multi user mode
sudo ln -s /etc/init.d/iptables /etc/rc6.d/K20iptables # завершения скрипта при перезагрузки
Мой пример:
#!/bin/sh
IPT="/sbin/iptables"
#
# Interfaces
#
LO="lo"
INET="eth0"
LAN="eth1"
#
# IP Settings
#
INET_IP="90.155.x.x"
LAN_IP="10.0.0.1"
LAN_IP_RANGE="10.0.0.0/255.255.255.0"
#
# Clear all
#
$IPT -F
$IPT -X
$IPT -t nat -F
$IPT -t nat -X
$IPT -t mangle -F
$IPT -t mangle -X
#
# Set policy default
#
$IPT -P INPUT DROP
$IPT -P FORWARD DROP
$IPT -P OUTPUT DROP
$IPT -t nat -P PREROUTING ACCEPT
$IPT -t nat -P POSTROUTING ACCEPT
$IPT -t nat -P OUTPUT ACCEPT
$IPT -t mangle -P PREROUTING ACCEPT
$IPT -t mangle -P OUTPUT ACCEPT
#
# Enable IP-forward
#
echo "1" > /proc/sys/net/ipv4/ip_forward
#
# Misc
#
echo "1" > /proc/sys/net/ipv4/tcp_syncookies
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
#
# Enable lo
#
$IPT -A INPUT -i $LO -j ACCEPT
$IPT -A OUTPUT -o $LO -j ACCEPT
#
# NAT
#
$IPT -t nat -A POSTROUTING --source $LAN_IP_RANGE -j SNAT --to $INET_IP
#
# Accept connections from LAN and to LAN
#
$IPT -A INPUT -i $LAN --source $LAN_IP_RANGE --match state --state NEW,ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -o $LAN --destination $LAN_IP_RANGE --match state --state NEW,ESTABLISHED -j ACCEPT
#
# Enable IP-forward for LAN
#
$IPT -A FORWARD -i $LAN --source $LAN_IP_RANGE --destination 0.0.0.0/0 --match state --state NEW,ESTABLISHED -j ACCEPT
$IPT -A FORWARD -i $INET --destination $LAN_IP_RANGE --match state --state ESTABLISHED -j ACCEPT
#
# Enable SSH-Server (443 port)
#
$IPT -A INPUT -i $INET -p TCP -m state --state NEW,ESTABLISHED --dport 443 -j ACCEPT
$IPT -A OUTPUT -o $INET -p TCP -m state --state NEW,ESTABLISHED --sport 443 -j ACCEPT
#
# Enable HTTP-Client and HTTP-Server
#
$IPT -A INPUT -i $INET -p TCP -m state --state NEW,ESTABLISHED --dport 80 -j ACCEPT
$IPT -A INPUT -i $INET -p TCP -m state --state NEW,ESTABLISHED --sport 80 -j ACCEPT
$IPT -A OUTPUT -o $INET -p TCP -m state --state NEW,ESTABLISHED --dport 80 -j ACCEPT
$IPT -A OUTPUT -o $INET -p TCP -m state --state NEW,ESTABLISHED --sport 80 -j ACCEPT
#
# Enable FTP-Client and FTP-Server
#
#$IPT -A INPUT -i $INET -p TCP -m state --state NEW,ESTABLISHED --dport 21 -j ACCEPT
$IPT -A INPUT -i $INET -p TCP -m state --state ESTABLISHED --sport 21 -j ACCEPT
$IPT -A OUTPUT -o $INET -p TCP -m state --state NEW,ESTABLISHED --dport 21 -j ACCEPT
#$IPT -A OUTPUT -o $INET -p TCP -m state --state NEW,ESTABLISHED --sport 21 -j ACCEPT
#
# Enable rtorrent
#
$IPT -A OUTPUT -o $INET -p TCP -m state --state NEW,ESTABLISHED --dport 1024:65535 -j ACCEPT
$IPT -A INPUT -i $INET -p TCP -m state --state NEW,ESTABLISHED --sport 1024:65535 --dport 50897 -j ACCEPT
$IPT -A INPUT -i $INET -p UDP -m state --state NEW,ESTABLISHED --sport 1024:65535 --dport 50897 -j ACCEPT
#
# Enable ICMP
#
$IPT -A INPUT -p ICMP -j ACCEPT
$IPT -A OUTPUT -p ICMP -j ACCEPT
#
# Enable DNS
#
$IPT -A OUTPUT -p UDP --dport 53 --sport 1024:65535 -j ACCEPT
$IPT -A INPUT -p UDP --dport 1024:65535 --sport 53 -j ACCEPT
$IPT -A INPUT -p TCP --dport 1024:65353 --sport 53 -j ACCEPT
#
# End of file
#
#!/bin/sh
IPT="/sbin/iptables"
START="/bin/sh"
NAME="$0"
if [ ! -f /etc/rc.firewall ]; then
echo "/etc/rc.firewall does not exist"
exit 0
fi
case "$1" in
start|restart)
echo -n "Starting up iptables firewall.. "
$START /etc/rc.firewall
echo "done."
;;
stop)
echo -n "Stopping down iptables firewall.. "
$IPT -F
$IPT -X
$IPT -t nat -F
$IPT -t nat -X
$IPT -t mangle -F
$IPT -t mangle -X
echo "done."
exit 0
;;
*)
echo "Usage: $NAME {start|restart|stop}" >&2
exit 1
;;
esac
exit 0