#!/bin/sh
IPTABLES="/sbin/iptables"# Очищаем все правила в таблицах filter, nat и mangle
$IPTABLES -t filter -F
$IPTABLES -t nat -F
$IPTABLES -t mangle -F
# Удаляем все пользовательские цепочки в таблицах filter, nat и mangle
$IPTABLES -t filter -X
$IPTABLES -t nat -X
$IPTABLES -t mangle -X
# Задаем политики по умолчанию
$IPTABLES -t filter -P INPUT DROP
$IPTABLES -t filter -P FORWARD DROP
$IPTABLES -t filter -P OUTPUT DROP
# Создаем пользовательские цепочки.
$IPTABLES -N eth0-eth1
$IPTABLES -N eth1-eth0
$IPTABLES -N eth1-out
$IPTABLES -N eth0-out
$IPTABLES -N eth1-in
$IPTABLES -N eth0-in
$IPTABLES -N icmp_packets
# Направляем все входящие пакеты в соответствующие цепочки.
$IPTABLES -A INPUT -d 111.111.111.111 -j eth0-in
$IPTABLES -A INPUT -d 10.0.0.1 -j eth1-in
# Направляем все исходящие пакеты в соответствующие цепочки.
$IPTABLES -A OUTPUT -s 111.111.111.111 -j eth0-out
$IPTABLES -A OUTPUT -s 10.0.0.1 -j eth1-out
# Разрешаем весь трафик с петлевого интерфейса.
$IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A OUTPUT -o lo -j ACCEPT
# Разрешаем следующие типы icmp пакетов.
$IPTABLES -A icmp_packets -p icmp --icmp-type 0 -j ACCEPT
$IPTABLES -A icmp_packets -p icmp --icmp-type 3 -j ACCEPT
$IPTABLES -A icmp_packets -p icmp --icmp-type 8 -j ACCEPT
$IPTABLES -A icmp_packets -p icmp --icmp-type 11 -j ACCEPT
# Для удобства фильтрации, направляем все транзитные пакеты,
# в соответствующие цепочки.
# eth0-eth1 мир -> локальная сеть
# eth1-eth0 локальная сеть -> мир
$IPTABLES -A FORWARD -i eth0 -o eth1 -j eth0-eth1
$IPTABLES -A FORWARD -i eth1 -o eth0 -j eth1-eth0
# eth0-eth1. В данную цепочку попадают все транзитные пакеты,
# направленные из мира в локальную сеть.
$IPTABLES -A eth0-eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPTABLES -A eth0-eth1 -j DROP
# eth1-eth0. В данную цепочку попадают все транзитные пакеты,
# направленные из локальной сети в мир.
$IPTABLES -A eth1-eth0 -p icmp -j icmp_packets
$IPTABLES -A eth1-eth0 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
$IPTABLES -A eth1-eth0 -j DROP
# eth1-in. В данной цепочке открываем порты тех служб, которые
# должны быть доступны на сервере из локальной сети.
$IPTABLES -A eth1-in -p icmp -j icmp_packets
$IPTABLES -A eth1-in -p udp --dport 53 -j ACCEPT #DNS
$IPTABLES -A eth1-in -p tcp --dport 80 -j ACCEPT #http
$IPTABLES -A eth1-in -p tcp --dport 3128 -j ACCEPT #SQUID
$IPTABLES -A eth1-in -p tcp --dport 5060 -j ACCEPT #SIP
$IPTABLES -A eth1-in -j DROP
# eth0-in. В данной цепочке открываем порты тех служб, которые
# должны быть доступны на сервере из мира. Например www, smtp, ftp
$IPTABLES -A eth0-in -p icmp -j icmp_packets
$IPTABLES -A eth0-in -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPTABLES -A eth0-in -j DROP
# eth1-out.
$IPTABLES -A eth1-out -p icmp -j icmp_packets
$IPTABLES -A eth1-out -p udp --dport 53 -j ACCEPT
$IPTABLES -A eth1-out -p tcp -m multiport --dport 22,80,443 -j ACCEPT
$IPTABLES -A eth1-out -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPTABLES -A eth1-out -j DROP
# eth0-out.
$IPTABLES -A eth0-out -p icmp -j icmp_packets
$IPTABLES -A eth0-out -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPTABLES -A eth0-out -j DROP
# Производим сетевую трансляцию адресов (NAT)
$IPTABLES -t nat -A POSTROUTING -s 10.0.0.1/24 -o eth0 -j SNAT --to-source 111.111.111.111
# "Заварачиваем" весь http трафик на squid.
$IPTABLES -t nat -A PREROUTING -s 10.0.0.1/24 -i eth1 -p tcp -m multiport --dport 80,8080 -j REDIRECT --to-ports 3128