*mangle
-A PREROUTING -i eth0 -m set --match-set rfc1918 src -j MARK --set-mark 1
*filter
-A INPUT -m mark --mark 1 -j DROP
create rfc1918 hash:net family inet hashsize 1024 maxelem 65536
add rfc1918 10.0.0.0/8
add rfc1918 172.16.0.0/12
add rfc1918 192.168.0.0/16
хочу попробовать закрыть все публичные порты и открывать их для каждого пользователя индивидуально.Это называется доступом по белому списку. Ниже пример, как можно это сделать. Только у меня это не в формате исполняемого шелл-скрипта, а в формате конфига, загружаемого командой iptables-restore.
# example
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
# WhiteList (разрешенные внешние клиенты)
-N Wht
-A Wht -s 1.2.3.4 -j RETURN
-A Wht -s 2.3.4.5 -j RETURN
# разрешенная подсеть
-A Wht -s 3.4.5.0/24 -j RETURN
# ...
# go to hell
-A Wht -j DNAT --to-destination 192.168.99.99
-A PREROUTING ! -s 192.168.0.0/16 -p tcp --dport 22 -j Wht
-A PREROUTING ! -s 192.168.0.0/16 -p tcp --dport 22 -j ACCEPT
-A PREROUTING ! -s 192.168.0.0/16 -p tcp --dport 80 -j Wht
-A PREROUTING ! -s 192.168.0.0/16 -p tcp --dport 80 -j DNAT --to-destination 192.168.42.18:80
-A PREROUTING ! -s 192.168.0.0/16 -p tcp --dport 8080 -j Wht
-A PREROUTING ! -s 192.168.0.0/16 -p tcp --dport 8080 -j DNAT --to-destination 192.168.42.19:80
-A PREROUTING -s 192.168.0.0/16 -j ACCEPT
COMMIT
ip route add blackhole 192.168.99.99