Пока читаю тему, задам несколько вопросов. Можно не отвечать полностью, а лишь направить в нужное русло.
Документация по IPTABLES и картинка с хождением пакетов под рукой

Есть 2 интерфейса:
eth0 - интернет
eth1 - локалка
1. Одно правила в IPTABLES для организации NAT в локалку достаточно? (В Керио на каждом правиле (если вы их делали для разных портов и тдотдельно) необходимо было включать НАТ). Речь о iptables -t nat -A POSTROUTING -o eth0 -s 192.168.1.0/24 -j MASQUERADE
2. Во многих фаерволах принцип работы идет сверху вниз, если вы прописали вверху - Заблокировать все, правила ниже работать не будут. Здесь же часто вижу, что пишут -P INPUT DROP, -P OUTPUT DROP, -P FORWARD DROP, а ниже уже идут другие правила этих же цепочек, и они работают. Непонятен немного принцип.
3. Маскарадинг и проброс HTTP-трафика на порт 3128 Сквида по шаблону сделал, HTTP страницы открываются,сейчас хочу разрешить пользователям локалки POP/SMTP трафик и HTTPS.
iptables
#!/bin/sh
#Включаем форвардинг пакетов
echo 1 > /proc/sys/net/ipv4/ip_forward
#Удалить все существующие правила
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
iptables -t nat -X
iptables -t mangle -X
#Политика по умолчанию
#iptables -P INPUT DROP
#iptables -P OUTPUT DROP
#iptables -P FORWARD DROP
#Установление соединения
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
#iptables -t nat -A PREROUTING -m conntrack --ctstate NEW,RELATED,ESTABLISHED -j ACCEPT
#Разрешаем локальные соединения
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
#Разрешаем ICMP трафик
iptables -A FORWARD -i eth1 -o eth0 -p icmp -j ACCEPT
#Разрешаем доступ из внутренней сети наружу
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
#Разрешаем почту
iptables -A FORWARD -s 192.168.1.0/24 -p tcp -m multiport --dport 25,110 -j ACCEPT
#Запрещаем доступ снаружи во внутреннюю сеть
iptables -A FORWARD -i eth0 -o eth1 -j REJECT
#Включаем NAT
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.1.0/24 -j MASQUERADE
#Заворачивем порты на прокси
iptables -t nat -A PREROUTING -i eth1 ! -d 192.168.1.0/24 -p tcp -m multiport --dport 80,8080 -j REDIRECT --to-port 3128
iptables-save
root@proxy:~# iptables-save
# Generated by iptables-save v1.4.12 on Sat Jul 13 12:37:41 2013
*mangle
:PREROUTING ACCEPT [2443:655484]
:INPUT ACCEPT [2207:643960]
:FORWARD ACCEPT [228:11108]
:OUTPUT ACCEPT [2410:702154]
:POSTROUTING ACCEPT [2496:706670]
COMMIT
# Completed on Sat Jul 13 12:37:41 2013
# Generated by iptables-save v1.4.12 on Sat Jul 13 12:37:41 2013
*nat
:PREROUTING ACCEPT [66:3799]
:INPUT ACCEPT [153:8315]
:OUTPUT ACCEPT [202:12099]
:POSTROUTING ACCEPT [202:12099]
-A PREROUTING ! -d 192.168.1.0/24 -i eth1 -p tcp -m multiport --dports 80,8080 -j REDIRECT --to-ports 3128
-A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
COMMIT
# Completed on Sat Jul 13 12:37:41 2013
# Generated by iptables-save v1.4.12 on Sat Jul 13 12:37:41 2013
*filter
:INPUT ACCEPT [200:10613]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [2296:693686]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A FORWARD -i eth1 -o eth0 -p icmp -j ACCEPT
-A FORWARD -i eth1 -o eth0 -j ACCEPT
-A FORWARD -s 192.168.1.0/24 -p tcp -m multiport --dports 25,110 -j ACCEPT
-A FORWARD -i eth0 -o eth1 -j REJECT --reject-with icmp-port-unreachable
-A OUTPUT -o lo -j ACCEPT
COMMIT
# Completed on Sat Jul 13 12:37:41 2013
root@proxy:~#
Пользователь решил продолжить мысль 13 Июля 2013, 18:38:24:
бррр, чего-то не пойму
В
Prerouting в таблице Mangle я заворачиваю трафик идущий через порт 80,8080 на порт Squid 3128
В
Input фильтрую входящие пакеты (они попадают в таблицу filter), определяю состояния пакетов, и если есть пакеты с состоянием Related (уже установленное соединение) или Established (новое соединение, связанное с уже установленным), то такие соединения разрешаются. Дальше разрешаю пакеты (из тех пакетов, что пустило предыдущее правило) идущие на 443,25,110 порты, то есть открываю эти порты на шлюзе.
В
Forward фильтрую проходящие пакеты на другие хосты(они попадают в таблицу filter), определяю состояния пакетов, и если есть пакеты с состоянием Related (уже установленное соединение) или Established (новое соединение, связанное с уже установленным), то такие соединения разрешаются. Дальше разрешаю пакеты (из тех пакетов, что пустило предыдущее правило) идущие на или с 443,25,110 портов других указанных хостов.
Но когда я делаю правило с определением состояния пакетов в цепочке Forward, у меня идет трафик с клиентских машин по всем по любым портам, даже если я закомментирую правила на 443,25,110 порт этой цепочки, почта и HTTPS страницы открываются.Читаю мануал и пытаюсь понять - почему?
Еще непонятно, если Input и Forward в таблице трассировке не пересекаются (идут по сути разными путями) и уходят в разные стороны после Prerouting, то как они взаимосвязаны? т.е. зачем я должен открывать порты в цепочке Input?
iptables-saveroot@proxy:~# iptables-save
# Generated by iptables-save v1.4.12 on Sat Jul 13 18:33:25 2013
*mangle
:PREROUTING ACCEPT [79:7072]
:INPUT ACCEPT [76:6679]
:FORWARD ACCEPT [3:393]
:OUTPUT ACCEPT [52:5950]
:POSTROUTING ACCEPT [55:6343]
COMMIT
# Completed on Sat Jul 13 18:33:25 2013
# Generated by iptables-save v1.4.12 on Sat Jul 13 18:33:25 2013
*nat
:PREROUTING ACCEPT [1:52]
:INPUT ACCEPT [1:52]
:OUTPUT ACCEPT [1:60]
:POSTROUTING ACCEPT [1:60]
-A PREROUTING ! -d 192.168.1.0/24 -i eth1 -p tcp -m multiport --dports 80,8080 -j REDIRECT --to-ports 3128
-A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
COMMIT
# Completed on Sat Jul 13 18:33:25 2013
# Generated by iptables-save v1.4.12 on Sat Jul 13 18:33:25 2013
*filter
:INPUT ACCEPT [1:52]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [63:7574]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 110 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A FORWARD -i eth1 -o eth0 -p icmp -j ACCEPT
-A FORWARD -i eth1 -o eth0 -j ACCEPT
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -p tcp -m tcp --dport 25 -j ACCEPT
-A FORWARD -p tcp -m tcp --dport 110 -j ACCEPT
-A FORWARD -p tcp -m tcp --dport 443 -j ACCEPT
-A FORWARD -p tcp -m tcp --dport 22 -j ACCEPT
-A FORWARD -i eth0 -o eth1 -j REJECT --reject-with icmp-port-unreachable
-A OUTPUT -o lo -j ACCEPT
COMMIT
# Completed on Sat Jul 13 18:33:25 2013
root@proxy:~#
iptables -t filter -LChain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
ACCEPT tcp -- anywhere anywhere tcp dpt:https
ACCEPT tcp -- anywhere anywhere tcp dpt:smtp
ACCEPT tcp -- anywhere anywhere tcp dpt:pop3
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh
ACCEPT all -- anywhere anywhere
Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT icmp -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
ACCEPT tcp -- anywhere anywhere tcp dpt:smtp
ACCEPT tcp -- anywhere anywhere tcp dpt:pop3
ACCEPT tcp -- anywhere anywhere tcp dpt:https
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh
REJECT all -- anywhere anywhere reject-with icmp-port-unreachable
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere
root@proxy:~#
В голове сумбур, отдохнет пожалуй мозг, пока может кто чего разъяснит.