Окей, приступим потихоньку.
Для начала, надо сделать скелет правил. БЕЗ временных/изменяющихся условий, но С УЧЁТОМ их появления. Скелет - это те правила, которые загружаются ВСЕГДА при поднятии интерфейсов.
#! /sbin/iptables-save
*mangle
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A OUTPUT -o ppp0 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1000:65495 -j TCPMSS --clamp-mss-to-pmtu
-A FORWARD -o ppp0 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1000:65495 -j TCPMSS --clamp-mss-to-pmtu
COMMIT
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
:NO_WAY - [0:0]
:acl_allowed - [0:0]
:acl_restricted - [0:0]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
# предполагается, что eth0 - локальная сеть
# Если локальной сети нет, а есть только сеть провайдера, ЭТО ПРАВИЛО УБРАТЬ!
-A INPUT -i eth0 -j ACCEPT
-A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -j acl_allowed
-A OUTPUT -j acl_restricted
-A NO_WAY -p tcp -j REJECT --reject-with tcp-reset
-A NO_WAY -j REJECT --reject-with icmp-port-unreachable
COMMIT
Эти правила уже должны работать, но, как нетрудно догадаться, они ничего не запрещают.
Если разрешающие правила на указанные сети должны действовать постоянно, их можно добавить в скелет.
Если нет - сохраните их отдельным скриптом и подгружайте по необходимости.
#! /sbin/iptables-save
*filter
:acl_allowed - [0:0]
-A acl_allowed -d 192.168.0.0/24 -j ACCEPT
-A acl_allowed -m iprange --dst-range 8.23.224.110-8.23.224.110 -j ACCEPT
-A acl_allowed -m iprange --dst-range 8.23.224.120-8.23.224.120 -j ACCEPT
-A acl_allowed -m iprange --dst-range 10.0.0.0-10.0.255.255 -j ACCEPT
-A acl_allowed -m iprange --dst-range 31.135.208.0-31.135.215.255 -j ACCEPT
-A acl_allowed -m iprange --dst-range 37.110.208.0-37.110.215.255 -j ACCEPT
-A acl_allowed -m iprange --dst-range 46.227.120.0-46.227.127.255 -j ACCEPT
-A acl_allowed -m iprange --dst-range 46.255.64.0-46.255.67.255 -j ACCEPT
-A acl_allowed -m iprange --dst-range 69.72.255.20-69.72.255.20 -j ACCEPT
-A acl_allowed -m iprange --dst-range 77.220.192.0-77.220.223.255 -j ACCEPT
-A acl_allowed -m iprange --dst-range 81.95.224.0-81.95.239.255 -j ACCEPT
-A acl_allowed -m iprange --dst-range 82.215.65.0-82.215.91.255 -j ACCEPT
-A acl_allowed -m iprange --dst-range 83.69.128.0-83.69.159.255 -j ACCEPT
-A acl_allowed -m iprange --dst-range 83.221.160.0-83.221.163.255 -j ACCEPT
-A acl_allowed -m iprange --dst-range 83.221.168.0-83.221.191.255 -j ACCEPT
-A acl_allowed -m iprange --dst-range 84.54.64.0-84.54.112.255 -j ACCEPT
-A acl_allowed -m iprange --dst-range 84.54.120.0-84.54.123.255 -j ACCEPT
-A acl_allowed -m iprange --dst-range 85.117.224.0-85.117.226.255 -j ACCEPT
-A acl_allowed -m iprange --dst-range 87.237.232.0-87.237.239.255 -j ACCEPT
-A acl_allowed -m iprange --dst-range 89.146.64.0-89.146.127.255 -j ACCEPT
-A acl_allowed -m iprange --dst-range 89.236.192.0-89.236.255.255 -j ACCEPT
-A acl_allowed -m iprange --dst-range 91.188.128.0-91.188.159.255 -j ACCEPT
-A acl_allowed -m iprange --dst-range 91.196.76.0-91.196.79.255 -j ACCEPT
-A acl_allowed -m iprange --dst-range 91.203.172.0-91.203.175.255 -j ACCEPT
-A acl_allowed -m iprange --dst-range 91.204.236.0-91.204.239.255 -j ACCEPT
-A acl_allowed -m iprange --dst-range 91.211.4.0-91.211.7.255 -j ACCEPT
-A acl_allowed -m iprange --dst-range 91.212.89.0-91.212.89.255 -j ACCEPT
-A acl_allowed -m iprange --dst-range 91.212.180.0-91.212.180.255 -j ACCEPT
-A acl_allowed -m iprange --dst-range 91.213.31.0-91.213.31.255 -j ACCEPT
-A acl_allowed -m iprange --dst-range 91.213.248.0-91.213.248.255 -j ACCEPT
-A acl_allowed -m iprange --dst-range 91.229.160.0-91.229.165.255 -j ACCEPT
-A acl_allowed -m iprange --dst-range 91.231.56.0-91.231.59.255 -j ACCEPT
-A acl_allowed -m iprange --dst-range 94.141.64.0-94.141.95.255 -j ACCEPT
-A acl_allowed -m iprange --dst-range 94.158.48.0-94.158.63.255 -j ACCEPT
-A acl_allowed -m iprange --dst-range 94.230.224.0-94.230.239.255 -j ACCEPT
-A acl_allowed -m iprange --dst-range 109.207.240.0-109.207.255.255 -j ACCEPT
-A acl_allowed -m iprange --dst-range 178.216.128.0-178.216.135.255 -j ACCEPT
-A acl_allowed -m iprange --dst-range 188.113.192.0-188.113.227.255 -j ACCEPT
-A acl_allowed -m iprange --dst-range 193.27.206.0-193.27.207.255 -j ACCEPT
-A acl_allowed -m iprange --dst-range 195.88.214.0-195.88.215.255 -j ACCEPT
-A acl_allowed -m iprange --dst-range 195.158.0.0-195.158.31.255 -j ACCEPT
-A acl_allowed -m iprange --dst-range 195.211.180.0-195.211.183.255 -j ACCEPT
-A acl_allowed -m iprange --dst-range 195.238.104.0-195.238.107.255 -j ACCEPT
-A acl_allowed -m iprange --dst-range 213.206.32.0-213.206.63.255 -j ACCEPT
-A acl_allowed -m iprange --dst-range 213.230.64.0-213.230.127.255 -j ACCEPT
-A acl_allowed -m iprange --dst-range 217.12.80.0-217.12.86.255 -j ACCEPT
-A acl_allowed -m iprange --dst-range 89.236.192.0-89.236.255.255 -j ACCEPT
-A acl_allowed -m iprange --dst-range 217.29.112.0-217.29.127.255 -j ACCEPT
-A acl_allowed -m iprange --dst-range 217.30.160.0-217.30.175.255 -j ACCEPT
-A acl_allowed -m iprange --dst-range 62.209.152.0-62.209.159.255 -j ACCEPT
-A acl_allowed -m iprange --dst-range 195.158.18.216-195.158.18.223 -j ACCEPT
-A acl_allowed -m iprange --dst-range 91.212.89.0-91.212.89.255 -j ACCEPT
-A acl_allowed -m iprange --dst-range 217.30.160.0-217.30.175.255 -j ACCEPT
-A acl_allowed -m iprange --dst-range 87.237.232.0-87.237.239.255 -j ACCEPT
-A acl_allowed -d 94.158.48.3/32 -j ACCEPT
-A acl_allowed -d 91.188.128.18/32 -j ACCEPT
COMMIT
А теперь самое интересное. Чтобы перекрыть доступ ко всему хорошему, что не разрешено раньше, делаем рас:
iptables -A acl_restricted -j NO_WAY
А чтобы вернуть всё вз... эээ.. обратно, делаем двас:
iptables -F acl_restricted
В результате у нас и все правила целы, и доступ управляется.
Домашнее задание - разобраться, почему так происходит.