Всем привет!
Есть Интернет-шлюз - NAT, Squid, iptables, pptp-server.
В организации несколько подсетей.
Попросли сделать так:
чтобы какие-то ip-адреса не ходили в Интернет,
чтобы какие-то подсети не ходили в Интернет,
но чтобы из этих подсетей какие-то ip-адреса все же могли ходить в Интернет.
Чтобы было удобнее решил использовать ipset, создал три списка:
allow_address - для ip-адресов из заблокированных подсетей которым можно в Инет,
block_networks - для заблокированных подсетей,
и block_address - для заблокированных ip-адресов.
Цепочка FORWARD выглядит так:
-A FORWARD -p icmp -j ACCEPT
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i ppp+ -o eth0 -j ACCEPT
-A FORWARD -i eth0 -o ppp+ -j ACCEPT
-A FORWARD -i ppp+ -o eth1 -j ACCEPT
-A FORWARD -i eth1 -o ppp+ -j ACCEPT
-A FORWARD -m set --match-set allow_address src -j ACCEPT
-A FORWARD -m set --match-set block_networks src -j DROP
-A FORWARD -m set --match-set block_address src -j DROP
-A FORWARD -i eth0 -o eth1 -j ACCEPT
-A FORWARD -s 192.168.0.0/16 -i eth0 -j ACCEPT
-A FORWARD -m conntrack --ctstate INVALID -j DROP