Вы здесь

IPTABLES - составление правил [SOLVED]

Добрый день!
Прошу помочь форумчан с настройкой фаервола. После прочтения http://www.frozentux.net/documents/iptables-tutorial/ и всего что есть на ru.gentoo-wiki.com в голове полная каша.
Постановка задачи:
Есть роутер на Gentoo
в нем 3 сетевухи:
WAN: eth0 192.168.5.210
LAN3: eth1 192.168.3.254
LAN2: eth2 192.168.2.254
Задачи
есть прокси сервер 192.168.5.1:3128
можно ли для LAN2 192.168.2.0/24 перенаправлять все запросы по HTTP (порты 80, 8080, 3128) на проксик 192.168.5.1:3128
все остальные порты NAT'ить
далее в LAN3 есть несколько локальных серверов 192.168.3.252, *.251,*.253 - хочется что бы пользователи LAN2 ходили на них без проблем
Все компьютеры LAN2 не должны быть видны из WAN и LAN3(кроме 192.168.3.251)
для LAN3
Есть свой прокси крутится на 192.168.3.254, там же крутится DHCP+DDNS, Samba+OpenLDAP, NTP - нужно по максимуму защитить роутер от пользователей сети LAN3 без потери вышеперечисленного функционала

И еще я так и не понял какие политики ставить по умолчанию для INPUT, OUTPUT и FORWARD?

В мануале по IPTABLES так же сделаны дополнительные проверки через цепочку bad_tcp_packets и тд - я так понимаю мне тоже необходимо их ввести?
В общем кое что вроде понимаю но если кто в состоянии помочь и объяснить буду очень благодарен...

РЕШЕНО

Постановка задачи:
Есть роутер на Gentoo
в нем 3 сетевухи:
WAN: eth0 192.168.5.210
LAN3: eth1 192.168.3.254
LAN2: eth2 192.168.2.254
2 подсети LAN3 192.168.3.0/24 и LAN2 192.168.2.0/24
Задачи
Пускать всех из LAN2 в Интернет - NAT'ом через WAN
Пускать некоторые хосты из LAN3 в Интернет - NAT'ом через WAN
Пускать из LAN2 на некоторые серваки в LAN3
Не пускать никого из LAN3 в LAN2
Не пускать никого ниоткуда на роутер кроме разрешенных портов.
Проверять валидность пакетов если что не так не обрабатывать.

Решение скрипт firewall.sh:
-------------------------
#!/bin/bash

IPT='/sbin/iptables'
LAN2=eth2
LAN2_IP=192.168.2.254
LAN2_NET=192.168.2.0/24
LAN3=eth1
LAN3_IP=192.168.3.254
LAN3_NET=192.168.3.0/24
WAN=eth0
WAN_IP=192.168.5.210
WAN_NET=192.168.5.0/24
ALLOWED23_SERVERS='192.168.3.250 192.168.3.251 192.168.3.252 192.168.3.254'
ALLOWED_LAN3_HOSTS='192.168.3.250 192.168.3.251 192.168.3.202 192.168.3.241'
$IPT -F
$IPT -t nat -F
$IPT -t mangle -F
$IPT -X
$IPT -t nat -X
$IPT -t mangle -X
$IPT -F FORWARD

echo 1 > /proc/sys/net/ipv4/ip_forward
for f in /proc/sys/net/ipv4/conf/*/rp_filter ; do echo 1 > $f ; done

# Создаем цепочку проверки правильности пакетов
$IPT -N bad_tcp_packets
$IPT -A bad_tcp_packets -p tcp --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j REJECT --reject-with tcp-reset
$IPT -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "New not syn:"
$IPT -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j DROP

# Для работы внутренних приложений разрешаем все пакеты на локальной петле
$IPT -A INPUT -p tcp -j bad_tcp_packets # Проверить плохие пакеты
$IPT -A INPUT -i lo -s 127.0.0.1 -j ACCEPT
$IPT -A INPUT -i lo -s ${LAN2_NET} -j ACCEPT
$IPT -A INPUT -i lo -s ${LAN3_NET} -j ACCEPT
$IPT -A INPUT -i lo -s ${WAN_NET} -j ACCEPT

# Входящие соединения к роутеру

#$IPT -A INPUT -i $WAN -d 224.0.0.0/8 -j DROP # блокируем широковещательные запросы с по SMB WAN

$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Разрешить уже установленные соединения

$IPT -A INPUT -p tcp --dport http -i ${LAN3} -j ACCEPT # Разрешить ходить на http из LAN3
$IPT -A INPUT -p tcp --dport ssh -i ${LAN3} -j ACCEPT # Разрешить ходить на ssh из LAN3
$IPT -A INPUT -p tcp --dport rsync -i ${LAN3} -j ACCEPT # Разрешить rsync из LAN3

$IPT -A INPUT -p tcp --dport domain -i ${LAN3} -j ACCEPT # Разрешить DNS Lookup для LAN3
$IPT -A INPUT -p udp --dport domain -i ${LAN3} -j ACCEPT
$IPT -A INPUT -p udp --dport bootps:bootpc -i ${LAN2} -j ACCEPT # Разрешить DHCP для LAN2
$IPT -A INPUT -p udp --dport bootps:bootpc -i ${LAN3} -j ACCEPT # Разрешить DHCP для LAN3

$IPT -A INPUT -p udp --dport ntp -i ${LAN2} -j ACCEPT # Разрешить NTP для LAN2
$IPT -A INPUT -p udp --dport ntp -i ${LAN3} -j ACCEPT # Разрешить NTP для LAN3

$IPT -A INPUT -p icmp --icmp-type 8 -j ACCEPT # Разрешить пинговать роутер
$IPT -A INPUT -p icmp --icmp-type 11 -j ACCEPT # Разрешить трасить роутер
$IPT -P INPUT DROP # все остальные в сад!

# Форвард соединения
$IPT -A FORWARD -p tcp -j bad_tcp_packets # Проверить плохие пакеты
$IPT -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT # Разрешить уже установленные соединения
for i in ${ALLOWED23_SERVERS}; do
$IPT -A FORWARD -m conntrack --ctstate NEW -i ${LAN2} -s ${LAN2_NET} -o ${LAN3} -d $i -j ACCEPT
done
$IPT -A FORWARD -i ${LAN2} -o ${LAN3} -j DROP # запрещаем-с 2 -> 3, кроме исключений выше
$IPT -A FORWARD -m conntrack --ctstate NEW -i ${LAN2} -s 192.168.2.0/24 -j ACCEPT # Форвардить новые соединения приходящие с интерфейса LAN2 с адресами 192.168.2.0/24
for i in ${ALLOWED_LAN3_HOSTS}; do
$IPT -A FORWARD -m conntrack --ctstate NEW -i ${LAN3} -s $i -j ACCEPT
done

$IPT -P FORWARD DROP # все остальные в сад!

$IPT -t nat -F POSTROUTING # очистим POSTROUTING
$IPT -t nat -A POSTROUTING -o ${WAN} -j SNAT --to-source ${WAN_IP} # все что идет на eth0 подменять на 192.168.5.210
$IPT -t nat -A POSTROUTING -d 192.168.3.252 -o ${LAN3} -j SNAT --to-source ${LAN3_IP} # ходить с LAN2 на 192.168.3.252

$IPT -A OUTPUT -p tcp -j bad_tcp_packets # Проверить плохие пакеты
$IPT -P OUTPUT ACCEPT

Варианта вижу два:

1. Самому досконально разобраться, постепенно идя от решения простых задач к более сложным.

2. Поставить shorewall, решить задачу с помощью не очень сложных конфигов, и используя полученные правила в iptables, не спеша заниматься пунктом 1

Сейчас Вы выбрали вариант -- настройте мне бесплатно фаервол :)

Для прокси-сервера: Если он не работает в режиме "прозрачности", то простой порт-форвардинг портов назначения клиентов сети2 не прокатит. Им нужно будет явно в настройках броузеров указывать прокси, а на роутере обеспечить маршрутизацию.
Правила для ната очень простые. По одному на сеть, если не заморачиваться.
Масса примеров в инете и документации.
Политики по умолчанию. Решает каждый сам. Политика пропускать пакеты уменьшает число правил за счет меньшей безопасности, политика по умолчанию не пропускать пакеты требует прописывания правил на каждый требуемый протокол в явном виде на всех цепочках, что по умолчанию закрыты.

На мой взгляд, ключ к понимаю работы таблиц -- каким образом через неё проходят пакеты. С этим нужно разобраться в первую очередь.

Добавлено.
WAN: eth0 192.168.5.210 -- это не WAN и натить туда бесполезно, если только у Вас 5 подсеть не имеет прозрачного выхода в инет.

(Sir) * Windows looks like an open door, but no way to go *

Солидарен со всем, кроме одного:

Цитата:
WAN: eth0 192.168.5.210 — это не WAN и натить туда бесполезно, если только у Вас 5 подсеть не имеет прозрачного выхода в инет.

Это утверждение поспешно, ибо есть провайдеры, которые раздают по одному ip клиентам из внутренних адресов. То есть, полезно или бесполезно натить сразу сказать нельзя — неизвестна топология сети в сторону .5. Но обратить внимание на Ваше мнение топикстартеру обязательно стоит.

emacs — отличная операционка которой не хватает только хорошего текстового редактора.

Ну так строчка после "если" (if) разве не описывает всё множество подобных случаев? ))) Из приведённого описания это не ясно, а наличие в пятой сети прокси с адресом этой же сети, позволят с долей вероятности считать, что это не сесть провайдера.
В общем, если из 5 подсети любой хост без извращений имеет инет, то можно натить.

(Sir) * Windows looks like an open door, but no way to go *

в пятой сети все клиенты в инет ходят через прокси без авторизации - все остальные порты оттуда натятся наружу для клиентов той же 5й сети

Тогда можно в цепочке nat POSTROUTING указать по правилу для 2 и 3 сети
И если http будет работать, можно специально на проксю людей не затаскивать -- это уже сделано в пятой сети. Если будут работать другие сервисы, кроме http, тогда портфорвардинг 80 на 3182 решит эту проблему.

(Sir) * Windows looks like an open door, but no way to go *

Задача размыта, давай начнем с её конкретизаии. Верна ли такая постановка?
дано роутер в нем 3 сетевухи:
WAN: eth0 192.168.5.210 == сеть 5
LAN3: eth1 192.168.3.254 == сеть 3
LAN2: eth2 192.168.2.254 == сеть 2

Задачи

непосредственное обращение к роутеру блокируется.

.2 <=> .5
2:web перенаправляется на 5.1:proxy
остальные соединения 2->5 натятся

2 <=> 3
2 имеют доступ к серверам 3 и только
3.251 имеет доступ к 2
остальной обмен 2 <=> 3 блокируется

3 <=> 5
блокируется

3.254 настраивается отдельно, ибо он в третьей сети

emacs — отличная операционка которой не хватает только хорошего текстового редактора.

все верно

Дефолт правил - DROP
Таблица COMMON используется для общих проверок в ней - отброс пакетов, которые нельзя идентифицировать, отброс явной ерунды и разрешение уже установленных соединений.

Разрешение работы с серверами

Перенаправление на прокси и нат.

/sbin/iptables -F
/sbin/iptables -X
/sbin/iptables -P INPUT DROP
/sbin/iptables -P OUTPUT DROP
/sbin/iptables -P FORWARD DROP
/sbin/iptables -N COMMON_TABLE
/sbin/iptables -F COMMON_TABLE
/sbin/iptables -A INPUT -j COMMON_TABLE
/sbin/iptables -A OUTPUT -j COMMON_TABLE
/sbin/iptables -A FORWARD -j COMMON_TABLE
/sbin/iptables -A COMMON_TABLE -m state --state INVALID -j DROP
/sbin/iptables -A COMMON_TABLE -s 127.0.0.1/255.0.0.0 ! -i lo -j DROP
/sbin/iptables -A COMMON_TABLE -m state --state ESTABLISHED,RELATED -j ACCEPT

/sbin/iptables -A FORWARD -i eth2 -o eth1 -d 192.168.3.252 192.168.3.251 192.168.3.253 -j ACCEPT
/sbin/iptables -A FORWARD -o eth2 -i eth1 -s 192.168.3.251 -j ACCEPT

/sbin/iptables -t nat -A PREROUTING -i eth2 -o eth0 -s 192.168.2.0/24 --m multiport -dports 80,443 -j TRPROXY --on-port 3128 -on-ip 192.168.5.1
/sbin/iptables -t nat -A POSTROUTING -i eth2 -o eth0 -s 192.168.2.0/24 -j MASQUERADE

Рекомендую для составления правил писать скрипты. Можешь ознакомиться с вариантом для этой задачки. Хоть это и простой набросок, но, думаю, идея ясна.

emacs — отличная операционка которой не хватает только хорошего текстового редактора.

Эти правила уже не работают: цепока FORWARD имеет политику DROP, а раз все сливается в цепочку COMMON_TABLE то не вижу правил для пакетов пакетов --state NEW для случая -i eth2 -o eth0. Вообщем закваска не рабочая. Через FORWARD транзитный трафик не пройдет в WAN. Не забудте так же про файл /etc/sysctl.conf ... ну или sysctl -w net.ipv4.ip_forward=1 пропишите в скрипте

Цитата:
цепока FORWARD имеет политику DROP, а раз все сливается в цепочку COMMON_TABLE то не вижу правил для пакетов пакетов --state NEW для случая -i eth2 -o eth0. Вообщем закваска не рабочая.

Да надо же?
А чем отличается --jump от --goto? может посмотрим-с? ) И пройдемся-таки по мануалам.

Если правило внутри COMMON_TABLE не обработано, то управление возвращается назад.

emacs — отличная операционка которой не хватает только хорошего текстового редактора.

Ну давай пройдемся, только без грубости, я всего лишь хочу помочь:
1. Как я понял пытаемся входящий пакет из eth2 -> eth0 (dport 80,443) переправить на прокси.
Итак пакет попадает из eth2 в таблицу mangle цепочки PREROUTING но там нет никаких правил она уйдет в таблицу nat. Там встретит правило:
-A PREROUTING -i eth2 -o eth0 -s 192.168.2.0/24 --m multiport -dports 80,443 -j TRPROXY --on-port 3128 -on-ip 192.168.5.1
Мало того что по мануалу сказано:
TPROXY
This target is only valid in the mangle table, in the PREROUTING chain and user-defined chains which are only called from this chain.
то есть твое правило дб определено в таблице мангл а не нат, цепоки PREROUTING. Так у тебя еще куча ошибок - дб так:
-A PREROUTING -i eth2 -o eth0 -s 192.168.2.0/24 -p tcp -m multiport --dports 80,443 -j TRPROXY --on-port 3128 --on-ip 192.168.5.1
2. Там же сказано (мануале), что:
It redirects the packet to a local socket without changing the packet header in any way.
--on-port port
This specifies a destination port to use. It is a required option, 0 means the new destination port is the same as the original. This is only valid if the rule also specifies -p tcp or -p udp.
--on-ip address
This specifies a destination address to use. By default the address is the IP address of the incoming interface. This is only valid if the rule also specifies -p tcp or -p udp.

Конклужн: По сути это действо работает как если бы мы перенесли прокси с одного порта на другой и изменением интерфейса - НО в пределах машины: что бы оно работало нужно явно указать протокол, этого требует как --on-port так и -m multiport --dports, так и указать на каком интерфейсе биндится локальный прокси. На 192.168.1.5 не прокатит по этому правилу отправлять пакеты. Для этого есть DNAT.

А по поводу твоего замечания "Если правило внутри COMMON_TABLE не обработано, то управление возвращается назад" - с тобой полностью согласен с одним но по мануалам если кончились правила то сработает политика по умолчанию - DROP.

Допустим мы и это побороли - но та же самая фигня остается с OUTPUT - исходящий локальный трафик от шлюза заблокирован с самым первым пакетом SYN.

Начнем с конца

Цитата:
А по поводу твоего замечания "Если правило внутри COMMON_TABLE не обработано, то управление возвращается назад" - с тобой полностью согласен с одним но по мануалам если кончились правила то сработает политика по умолчанию - DROP

забей и пропингуй. http://dpaste.com/153478/
Удивишься, но получится. И политика DROP в случае с роутингом топикстартера выбрана не напрасно. Нельзя всё, кроме того, что можно. И это я уточнял выше - "всё ли правильно?" Топикстартер сказал - да. И в этом есть здравая мысль. Сам шлюз никуда не суётся. Ибо не фиг. Когда топикстартер определится что именно может шлюз, тогда и добавит правила сам.

С протоколом абсолютно согласен. Я и не претендую на готовое решение. Если уж ты собрался придираться, то что ж твой глаз великого гуру не заметил самой явной ошибочки?
/sbin/iptables -A FORWARD -i eth2 -o eth1 -d 192.168.3.252 192.168.3.251 192.168.3.253 -j ACCEPT . Это ж заготовка на три правила, а не одно, и так она работать не будет.

Или всё то же использование -o в PREROUTING

решение -то под носом:
/sbin/iptables -A FORWARD -i eth2 -o eth1 -d 192.168.3.253 -j ACCEPT
/sbin/iptables -A FORWARD -i eth2 -o eth1 -d 192.168.3.251 -j ACCEPT
/sbin/iptables -A FORWARD -i eth2 -o eth1 -d 192.168.3.252 -j ACCEPT
/sbin/iptables -t nat -A PREROUTING -i eth2 -s 192.168.2.0/24 -p tcp -m multiport --dport 80,... -j DNAT --to-destination 192.168.1.5:3128

А в общем -

Цитата:
Ну давай пройдемся, только без грубости, я всего лишь хочу помочь:

Давай-ка без грубости.

С форвардингом на прокси, да не не то. В остальном — верно.
Критикуешь - предлагай.

emacs — отличная операционка которой не хватает только хорошего текстового редактора.

Цитата:
забей и пропингуй. http://dpaste.com/153478/
Удивишься, но получится. И политика DROP в случае с роутингом топикстартера выбрана не напрасно.

В скрипте у тебя -P FORWARD DROP, а в ссылке -P FORWARD ACCEPT
По поводу "Критикуешь - предлагай" +1. В итоге вместе с тобою мы более-менее предложили афтару что-то рабочее ...

Всем спасибо буду смотреть - если что отпишусь.
Вопрос сразу же - прокси обязательно должен прозрачным?

Я могу ошибаться, но это не критерий. То есть допустимо и так, и так. Но в случае "непрозрачного" прокси для внешнего мира все запросы будут идти от имени одного клиента - роутера, в то же время "прозрачный" ленится о себе сообщать вообще.

emacs — отличная операционка которой не хватает только хорошего текстового редактора.

Разобратся самому получилось самым толковым советом хотя мож где то и накосячил
Собственно почитав все все еще раз - сел за написание с 0
вот что вышло
Единственное изменение начальных условий - прокси 192.168.5.1 непрозрачный потому пока клиенты прописывают его ручками у себя в браузере
Ну и своя прокси пока не накручена.
Скрипт:

#!/bin/bash
IPT='/sbin/iptables'
LAN2=eth2
LAN2_IP=192.168.2.254
LAN2_NET=192.168.2.0/24
LAN3=eth1
LAN3_IP=192.168.3.254
LAN3_NET=192.168.3.0/24
WAN=eth0
WAN_IP=192.168.5.210
WAN_NET=192.168.5.0/24
$IPT -F
$IPT -t nat -F
$IPT -t mangle -F
$IPT -X
$IPT -t nat -X
$IPT -t mangle -X
$IPT -F FORWARD

echo 1 > /proc/sys/net/ipv4/ip_forward
for f in /proc/sys/net/ipv4/conf/*/rp_filter ; do echo 1 > $f ; done

# Создаем цепочку проверки правильности пакетов
$IPT -N bad_tcp_packets
$IPT -A bad_tcp_packets -p tcp --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j REJECT --reject-with tcp-reset
$IPT -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "New not syn:"
$IPT -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j DROP

# Для работы внутренних приложений разрешаем все пакеты на локальной петле
$IPT -A INPUT -p tcp -j bad_tcp_packets # Проверить плохие пакеты
$IPT -A INPUT -i lo -s 127.0.0.1 -j ACCEPT
$IPT -A INPUT -i lo -s ${LAN2_NET} -j ACCEPT
$IPT -A INPUT -i lo -s ${LAN3_NET} -j ACCEPT
$IPT -A INPUT -i lo -s ${WAN_NET} -j ACCEPT

# Входящие соединения к роутеру

$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Разрешить уже установленные соединения

$IPT -A INPUT -p tcp --dport http -i ${LAN3} -j ACCEPT # Разрешить ходить на http из LAN3
$IPT -A INPUT -p tcp --dport ssh -i ${LAN3} -j ACCEPT # Разрешить ходить на ssh из LAN3
$IPT -A INPUT -p tcp --dport rsync -i ${LAN3} -j ACCEPT # Разрешить rsync из LAN3

$IPT -A INPUT -p tcp --dport domain -i ${LAN3} -j ACCEPT # Разрешить DNS Lookup для LAN3
$IPT -A INPUT -p udp --dport domain -i ${LAN3} -j ACCEPT

$IPT -A INPUT -p tcp --dport domain -i ${LAN2} -j ACCEPT # Разрешить DNS Lookup для LAN2
$IPT -A INPUT -p udp --dport domain -i ${LAN2} -j ACCEPT

$IPT -A INPUT -p udp --dport bootps:bootpc -i ${LAN2} -j ACCEPT # Разрешить DHCP для LAN2
$IPT -A INPUT -p udp --dport bootps:bootpc -i ${LAN3} -j ACCEPT # Разрешить DHCP для LAN3

$IPT -A INPUT -p udp --dport ntp -i ${LAN2} -j ACCEPT # Разрешить NTP для LAN2
$IPT -A INPUT -p udp --dport ntp -i ${LAN3} -j ACCEPT # Разрешить NTP для LAN3

$IPT -A INPUT -p icmp --icmp-type 8 -j ACCEPT # Разрешить пинговать роутер
$IPT -A INPUT -p icmp --icmp-type 11 -j ACCEPT # Разрешить трасить роутер
$IPT -P INPUT DROP # все остальные в сад!

# Форвард соединения
$IPT -A FORWARD -p tcp -j bad_tcp_packets # Проверить плохие пакеты
$IPT -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT # Разрешить уже установленные соединения
$IPT -A FORWARD -m conntrack --ctstate NEW -i ${LAN2} -s 192.168.2.0/24 -j ACCEPT # Форвардить новые соединения приходящие с интерфейса LAN2 с адресами 192.168.2.0/24
$IPT -A FORWARD -m conntrack --ctstate NEW -i ${LAN3} -s 192.168.3.250 -j ACCEPT # Форвардить новые соединения приходящие с интерфейса LAN3 с адресами 192.168.3.250
$IPT -A FORWARD -m conntrack --ctstate NEW -i ${LAN3} -s 192.168.3.251 -j ACCEPT # и 192.168.3.251
$IPT -A FORWARD -m conntrack --ctstate NEW -i ${LAN3} -s 192.168.3.202 -j ACCEPT # и 192.168.3.202

$IPT -A FORWARD -m conntrack --ctstate NEW -i ${LAN3} -s 192.168.3.241 -j ACCEPT #
IPT -P FORWARD DROP # все остальные в сад!

$IPT -t nat -F POSTROUTING # очистим POSTROUTING
$IPT -t nat -A POSTROUTING -o ${WAN} -j SNAT --to-source ${WAN_IP} # все что идет на eth0 подменять на 192.168.5.210
$IPT -t nat -A POSTROUTING -d 192.168.3.252 -o ${LAN3} -j SNAT --to-source ${LAN3_IP} # ходить с LAN2 на 192.168.3.252

$IPT -A OUTPUT -p tcp -j bad_tcp_packets # Проверить плохие пакеты
$IPT -P OUTPUT ACCEPT
Смущает пока ток последнее правило ната - как сделать так что бы те кто ломится на из LAN2 в LAN3 могли попадать ток на 192.168.3.252 251 и 250 ?
в текущем состоянии ходить можно из 2ой сети куда хошь

Кажется, что-то забыли, очепяточка ;)

Цитата:
$IPT -P FORWARD DROP # все остальные в сад!

Смущаться не стоит ) ты просто забыл добавить два типа правил для потока NET2 -> NET3:
1. Разрешить конкретной подсети стучать к конкретному серверу другой подсети.
2. Запретить подсети клиентов стучать в подсеть сервера кроме исключений выше.
Это можно сделать примерно так:

# список разрешенных серверов 2 -> 3
ALLOWED23_SERVERS="192.168.3.250 192.168.3.251 192.168.1.252" # по маске было бы проще, но здесь - увы.
...
>>>$IPT -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT # Разрешить уже установленные соединения
for i in ALLOWED23_SERVERS ; do
   $IPT -A FORWARD -m conntrack --ctstate NEW -i ${LAN2} -s ${LAN2_NET} -o ${LAN3} -d $i -j ACCEPT
; done

$IPT -A FORWARD -i ${LAN2} -o ${LAN3} -j DROP # запрещаем-с 2 -> 3, кроме исключений выше
>>>$IPT -A FORWARD -m conntrack --ctstate NEW -i ${LAN2} -s 192.168.2.0/24 -j ACCEPT # Форвардить новые соединения

emacs — отличная операционка которой не хватает только хорошего текстового редактора.

Та то следствия копирования - в оригинале все стоит, попробую как до работы доберусь.
Вопрос а не должно ли
$IPT -A FORWARD -i ${LAN2} -o ${LAN3} -j DROP # запрещаем-с 2 -> 3, кроме исключений выше
работать само по себе по причине политики DROP для FORWARD цепочки?

конечно нет, ибо ниже строка
$IPT -A FORWARD -m conntrack --ctstate NEW -i ${LAN2} -s 192.168.2.0/24 -j ACCEPT # Форвардить новые соединения

emacs — отличная операционка которой не хватает только хорошего текстового редактора.

Сработало спасибо только
ALLOWED23_SERVERS='192.168.3.250 192.168.3.251 192.168.3.252 192.168.3.254'

for i in ${ALLOWED23_SERVERS}; do
$IPT -A FORWARD -m conntrack --ctstate NEW -i ${LAN2} -s ${LAN2_NET} -o ${LAN3} -d $i -j ACCEPT
done
$IPT -A FORWARD -i ${LAN2} -o ${LAN3} -j DROP # запрещаем-с 2 -> 3, кроме исключений выше

Нормальненько. Но с ссылкой я имел ввиду цепку OUTPUT
Это я к тому, что DROP в политике не така уж и дурная штука, а имхо, нужная.

emacs — отличная операционка которой не хватает только хорошего текстового редактора.

kstati написал:
непосредственное обращение к роутеру блокируется.

А ssh-лить роутером как? ) И еще, возможно, будут исключения.

(Sir) * Windows looks like an open door, but no way to go *

emacs — отличная операционка которой не хватает только хорошего текстового редактора.