Конечно я несупер спец, но сделал бы так:
1. Настроить прозрачный прокси, если не знаешь как, читай форум.
1. Создал файл с ip адресами, тем кому можно на NAT(white_list);
2. Создал файл с ip адресами, тем кому только через squid(black_list);
3. В файле конфигурации firewall использовал table:
Код: Выделить всё
#!/bin/sh
ipfw -f flush
ipfw table all flush
iip="192.168.1.1"
oip="xxx.xxx.xxx.xxx"
oif="xl0"
iif="em0"
cat /etc/black_list | while read cLine1; do
ipfw table 1 add $cLine1
done
cat /etc/white_list | while read cLine2; do
ipfw table 2 add $cLine2
done
ipfw add 10 check-state
ipfw add 20 allow all from any to any via lo0
ipfw nat 1 config if ${oif} deny_in same_ports unreg_only
ipfw add 40 nat 1 tcp from "table(2)" to any 80 out via ${oif}
ipfw add 50 nat 1 tcp from any 80 to ${oip} in via ${oif}
ipfw add 60 fwd ${iip},8080 tcp from "table(1)" to any 80 recv ${iif}
ipfw add 70 allow ip from any to any via ${iif}
ipfw add 80 deny all from any to any
4. Перезапустил файрвол.
Вышеуказанные настройки указаны для FreeBSD 7.2(ipfw+kernel NAT+SQUID)