Обсуждение статьи тематического каталога: Скрипт для включения NAT в Gentoo Linux (gentoo linux script nat msquerade)Ссылка на текст статьи: http://www.opennet.me/base/net/gentoo_masquerade.txt.html
ИМХО, iptables интересней инициализировать из единого скрипта, в котором все (а не только NAT-related) modprobe´ы нужных модулей и правила
МММ, лучше все ж делать чуть-чуть не так :)))~ # cat /etc/init.d/firewall
#!/sbin/runscript
opts="depend start stop status restart reload force-reload test"PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
COMMON=/usr/local/lib/firewall/firewall-common-rules
MAC=/usr/local/lib/firewall/MAC-allowedNAME=firewall
DESC="firewall setup"
TESTDELAY=10depend () {
use logger
}start () {
echo "Starting $DESC"
echo
$COMMON
$MAC
}stop () {
echo "Cleaning $DESC"iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPTfor t in filter nat mangle; do
iptables -t $t -F
iptables -t $t -X
iptables -t $t -Z
done
}status () {
for t in filter nat mangle; do
echo "============================================================= $t ======"
iptables -t $t -L -n
done
}restart () {
echo "Restarting $DESC"
svc_stop
sleep 1
svc_start
}reload () {
restart
}force-reload () {
restart
}test () {
echo "Testing $DESC"
start
sleep $TESTDELAY
stop
}Тот что /usr/local/lib/firewall/firewall-common-rules содержит примерно такое (показываю только куски, что бы была понятна идея :))) ):
NET_L=172.16.0.0/16
NET_R=1.1.1.0/25
NET_Rold=2.2.2.0/24black_file="/usr/local/lib/firewall/black-list"
white_file="/usr/local/lib/firewall/white-list"#INPUT
#Список хостов с которых допустим ssh (только своя сетка)
accept_ssh="$NET_L $NET_R $NET_Rold"
#Список служб к которым открыт доступ всем (публичные)
accept_from_all_tcp="53 80 443 17000"
accept_from_all_udp="53 "#Список служб к которым открыт доступ только из локальной сети (публичные)
accept_from_local_tcp="3128 137 138 139 445"
accept_from_local_udp="67 68 137 138 139 445"# Разрешено из локальной сети
for a in $accept_from_local_tcp; do
iptables -A tcp_packets -p TCP -s $NET_R --dport $a -j allowed_tcp
iptables -A tcp_packets -p TCP -s $NET_L --dport $a -j allowed_tcp
iptables -A tcp_packets -p TCP -s $NET_Rold --dport $a -j allowed_tcp
done# Разрешено всем
for a in $accept_from_all_tcp; do
iptables -A tcp_packets -p TCP -s 0/0 --dport $a -j allowed_tcp
doneiptables -A INPUT -p TCP -j bad_tcp_packets
iptables -A INPUT -p ALL -j mac_allowedfor a in $white_list; do
iptables -A INPUT -p ALL -s $a -j ACCEPT
donefor a in $black_list; do
iptables -A INPUT -p ALL -s $a -j DROP
doneiptables -A INPUT -p TCP -j tcp_packets
iptables -A INPUT -p UDP -j udp_packets
iptables -A INPUT -p ICMP -j icmp_packets#Убиваем все входящие пакеты, дошедшие до этого места
iptables -A INPUT -p ALL -j LOG --log-prefix "INPUT died: "
iptables -A INPUT -p ALL -j DROP
iptables -t nat -A PREROUTING -p tcp -s 172.16.0.0/16 --dport 80 -j REDIRECT --to-ports 3128
iptables -t nat -A PREROUTING -p tcp -s 172.16.0.0/16 --dport 8080 -j REDIRECT --to-ports 3128
iptables -t nat -A PREROUTING -p tcp -s 172.16.0.0/16 --dport 9080 -j REDIRECT --to-ports 3128iptables -A POSTROUTING -t nat -s 172.16.0.0/16 -o $INET_IF -j SNAT --to-source $IP
/usr/local/lib/firewall/MAC-allowed заполняет цепочку такими правилами (создаютя автоматом):
iptables -A mac_allowed -s 172.16.2.72 -m mac --mac-source 08:00:09:ed:8b:80 -j RETURN
iptables -A mac_allowed -s 172.16.2.73 -m mac --mac-source 00:10:83:2e:c6:40 -j RETURN
iptables -A mac_allowed -s 172.16.2.74 -m mac --mac-source 00:30:c1:55:af:ec -j RETURN
iptables -A mac_allowed -j LOG --log-prefix "MAC Dropped: "
iptables -A mac_allowed -j DROP
какие-то вы извращенцы. Нафиг вообще пихать правила iptables в загрузочный скрипт? /var/lib/rules.save и /etc/init.d/iptables для чего?
* /var/lip/iptables/rulez.save