#/bin/bash# Локальный и внешний интерфейсы...export LAN_IF=br0export WAN_IF=eth0# Адреса локального и внешнего интерфейса...export LAN_IF_ADDR=xx.xx.xx.xxexport WAN_IF_ADDR=yy.yy.yy.yy# Адреса локальной и внешней подсетей...export LAN_NET_ADDR=xx.xx.xx.0/24export WAN_NET_ADDR=yy.yy.yy.0/24# Обнуление текущих правил...iptables -t filter -Fiptables -t nat -F# Установка политики по умолчанию...iptables -P INPUT DROPiptables -P FORWARD DROPiptables -P OUTPUT DROP# Входящий траффик# Блокировка широковещательных пакетовiptables -A INPUT -m addrtype --dst-type BROADCAST -j DROP# По уже установленным соединениямiptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT# FTP, HTTP, OpenVPN, SSH из всех сетейiptables -A INPUT --protocol TCP -m multiport --dports ftp,http,openvpn,ssh -j ACCEPT# Входящие DNS,NTPiptables -A INPUT --protocol UDP -m multiport --dports domain,ntp -j ACCEPT# localhost траффикiptables -A INPUT --in-interface lo -j ACCEPT# ping запросыiptables -A INPUT --protocol ICMP --icmp-type echo-request -j ACCEPT# Лог прочих запросовiptables -A INPUT -j LOG --log-prefix "iptables drop INPUT packet "# Проходящий траффик# <x> Блокировка широковещательных пакетовiptables -A FORWARD -m addrtype --dst-type BROADCAST -j DROP# <-> По уже установленным соединениямiptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT# <-> По локальным сегментам (ЛВС<->VPN)iptables -A FORWARD --source xx.xx.xx.0/16 --destination xx.xx.xx.0/16 -j ACCEPT# <-- Проходящие запросы основных интернет служб (2042-mrim, 5900-vnc)iptables -A FORWARD --in-interface $LAN_IF --protocol TCP -m multiport --dports ftp,rsync,ssh,ssh,openvpn,smtp,pop3,http,http-alt,https,aol,xmpp-client,2042,5900 -j ACCEPT# <-- На внешние серверы Камсан и Видео7iptables -A FORWARD --in-interface $LAN_IF --protocol TCP -m multiport --dports 1204,1205,20900 -j ACCEPT# --> Проходящие запросы на внутренние видеосервера GOALiptables -A FORWARD --in-interface $WAN_IF --protocol TCP -m multiport --dports 3107,3118,3133,3154 -j ACCEPT# <-- На внешние DNS и NTP сервераiptables -A FORWARD --in-interface $LAN_IF --protocol UDP -m multiport --dports domain,ntp -j ACCEPT# <-- ping запросыiptables -A FORWARD --in-interface $LAN_IF --protocol ICMP --icmp-type echo-request -j ACCEPT# Лог прочих запросовiptables -A FORWARD -j LOG --log-prefix "iptables drop FORWARD packet "# Исходящий траффик# По уже установленным соединениямiptables -A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT# localhost трафик...iptables -A OUTPUT --out-interface lo -j ACCEPT# Входящие, исходящие и проходящие ping запросы iptables -A OUTPUT --protocol ICMP --icmp-type echo-request -j ACCEPT# DHCPiptables -A OUTPUT --protocol UDP --sport 67 --dport 68 -j ACCEPT# Исходящие FTP,HTTP,RSYNC,SSHiptables -A OUTPUT --protocol TCP -m multiport --dports ftp,http,rsync,ssh -j ACCEPT# Исходящие DNS,NTP к внешним серверамiptables -A OUTPUT --protocol UDP -m multiport --dports domain,ntp -j ACCEPTiptables -A OUTPUT --protocol TCP --dport domain -j ACCEPT# WOL (Wake on LAN)iptables -A OUTPUT --protocol UDP --destination 255.255.255.255 --dport 40000 -j ACCEPT# Лог прочих запросовiptables -A OUTPUT -j LOG --log-prefix "iptables drop OUTPUT packet "# NAT для маскарадинга всех проходящих пакетов с указанием подмены адреса источника...iptables -t nat -A POSTROUTING --out-interface $WAN_IF -j SNAT --to-source $WAN_IF_ADDR# Сообщаем ядру, что ip-форвардинг разрешенecho 1 > /proc/sys/net/ipv4/ip_forwardfor f in /proc/sys/net/ipv4/conf/*/rp_filter ; do echo 1 > $f ; done# Сохраняем правила, чтобы потом не вводить все вручную заново при перезагрузке/etc/init.d/iptables save# В /etc/sysctl.conf добавить/раскомментировать следующие строки:#net.ipv4.ip_forward = 1#net.ipv4.conf.default.rp_filter = 1#Если у вас динамически назначаемый IP-адрес, возможно, вам понадобиться включить следующее:#net.ipv4.ip_dynaddr = 1