#!/bin/bash # определяем интерфейсы # внутренний интерфейс INTIF=eth0 # внешний интерфейс EXTIF=eth1 # канал в инет PPPIF=ppp0 # внутренний адрес понятие более менее статическое INTIP=192.168.1.1 INTNET=192.168.1.0/24 # внешний адрес скорее всего выдаётся динамически EXTIP=ifconfig $EXTIF | awk "/inet addr/{print \$2}" | tr -d "inet addr:" PPPIP=ifconfig $PPPIF | awk "/inet addr/{print \$2}" | tr -d "inet addr:" # чистим правила /sbin/iptables -F INPUT /sbin/iptables -F OUTPUT /sbin/iptables -F FORWARD # закрываем движение трафика на время установки правил /sbin/iptables -P INPUT DROP /sbin/iptables -P OUTPUT DROP /sbin/iptables -P FORWARD DROP /sbin/iptables -t nat -F # разрешаем доступ снаружи на нужные порты (какие надо) /sbin/iptables -A INPUT -d $EXTIP -p tcp --destination-ports 22,80 -j ACCEPT /sbin/iptables -A INPUT -d $PPPIP -p tcp --destination-ports 22,80 -j ACCEPT # запрещаем доступ снаружи на именованные порты /sbin/iptables -A INPUT -d $EXTIP -p tcp --destination-port 1:1023 -j REJECT # эти порты относятся к X11 и я не уверен, что оно поднято на роутере /sbin/iptables -A INPUT -d $EXTIP -p tcp --destination-port 6000:6007 -j REJECT /sbin/iptables -A INPUT -d $EXTIP -p udp --destination-port 1:1023 -j REJECT /sbin/iptables -A INPUT -d $EXTIP -p udp --destination-port 6000:6007 -j REJECT /sbin/iptables -A INPUT -d $PPPIP -p tcp --destination-port 1:1023 -j REJECT /sbin/iptables -A INPUT -d $PPPIP -p tcp --destination-port 6000:6007 -j REJECT /sbin/iptables -A INPUT -d $PPPIP -p udp --destination-port 1:1023 -j REJECT /sbin/iptables -A INPUT -d $PPPIP -p udp --destination-port 6000:6007 -j REJECT # если нет почтового сервера, то закроем отправку писем во внешний мир от греха подальше /sbin/iptables -A OUTPUT -s $EXTIP -p tcp --destination-port 25 -j REJECT /sbin/iptables -A OUTPUT -s $PPPIP -p tcp --destination-port 25 -j REJECT # немного простенькой защиты echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts # Sync-flood protection /sbin/iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT # Hidden port scanning protection /sbin/iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT # Ping of death protection /sbin/iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT # antispuffing... for f in /proc/sys/net/ipv4/conf/*/rp_filter; do echo -n " $f " echo " " echo 1 > $f done # разрешаем forward /sbin/iptables -A FORWARD -s $INTNET -j ACCEPT # разрешаем маскарадинг /sbin/iptables -t nat -A POSTROUTING -s $INTNET -o $EXTIF -j MASQUERADE /sbin/iptables -t nat -A POSTROUTING -s $INTNET -o $PPPIF -j MASQUERADE echo "1" > /proc/sys/net/ipv4/ip_forward # прокидываем удалённый доступ к рабочему столу любимого виндового компа /sbin/iptables -t nat -A PREROUTING -d $PPPIP -p tcp -m tcp --dport 3389 -j DNAT --to-destination 192.168.1.2 # прокидываем удалённый доступ к рабочему столу ещё одного виндового компа, но с другого порта /sbin/iptables -t nat -A PREROUTING -d $PPPIP -p tcp -m tcp --dport 4389 -j DNAT --to-destination 192.168.1.3:3389 # можно сделать доступ и из провайдеровской локалки /sbin/iptables -t nat -A PREROUTING -d $EXTIP -p tcp -m tcp --dport 3389 -j DNAT --to-destination 192.168.1.2 # загибаем web-трафик на squid /sbin/iptables -t nat -A PREROUTING -d ! $INTIP -i $INTIF -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128 # снимаем запреты по умолчанию # почему? параноя у нас пока на низком уровне. /sbin/iptables -P INPUT ACCEPT /sbin/iptables -P OUTPUT ACCEPT # а в FORWARD всё что надо уже разрешили
ещё надо пропустить через NAT доступ к FTP
а это у меня уже описано