написал iptables скрипт для 3х ай пи (планируется для 60-70)... в цепочке FORWARD :
1. может вместо -i надо -s ??
3. вообще правильно я сделал?
Я так думаю, что надо и то и другое. Потому как нет гарантий, что на внешнем интерфейсе не окажутся входящие пакеты с внутренними адресами и наоборот. Эти возможности надо рассмотреть. Другое дело, что эти проверки можно растащить по разным цепям. Об этом ниже.
По части производительности.
Иногда бывает, что адресов гораздо больше чем нужных им портов. Я бы сделал как в
http://www.opennet.ru/docs/RUS/iptables/index.htmlСначала выборка по протоколу (tcp, udp, ICMP), потом по номеру порта, потом уже по адресу клиента. Тогда получается, что правила меньше нагружают комп. И вместо Вашего "данный адрес может ходить через конкретный набор портов", получится "через данный порт и протокол может ходить кокретный набор адресов". Или другими словами, при этом получится для каждого протокола отдельная таблица (список) разрешённых портов (для ICMP нет понятия порт), а затем для каждого номера порта отдельная таблица допущенных адресов. Когда адресов много, то это ускоряет обработку.
Политика по умолчанию, настроена на DROP, т.е. она сбросит всё, что не было разрешено. Поэтому конкретно такие штуки как
$IPTABLES -A FORWARD -i $LAN_IFACE -j DROP
лишние.
Но такие блокировки могут быть полезны, если через интернет организован VPN канал, содержимое которого нельзя выпускать в интернет. Если канал "упадёт" и его виртуальный адаптер станет несуществующим, то при определённой конфигурации трафик для VPN канала может пойти напрямую в инет. Из этого и тогда, при таких сервисах напрямую надо резать, только резать надо не в этой цепи, а в POSTROUTING, в табличке nat, непосредственно перед действием SNAT или перед маскарадингом. И при этом учитывать IP адреса или их диапазон в сочетании с исходящим адаптером, равным инет адаптеру. В POSTROUTING уже последняя точка, там оказываются пакеты уже обработанные согласно маршрутов, поэтому именно такое надёжнее резать там. Надёжнее - на случай своих логических ошибок.
Я бы подумал над журналированием разрешённого трафика тоже. В случае споров это позволяет самому быть уверенным в том, что какой-либо факт был или не был.
Иногда из цепочки INPUT можно выкинуть всю локалку, но оставив только избранное. Тогда, кстати, может пригодиться предложенный выше подход. Для Forward уже есть цепочки-таблички "допушенных" адресов. А из цепи Input, точно также как и из Forward, можно передавать "ход" в теже самые цепочки-таблички "допушенных" адресов, что используются для Forward (одна цепочка-табличка может быть использована несколькими другими). Если это согласуется с задуманным. Задумать-то можно поразному...