LINUX.ORG.RU

iptables и правила хорошего тона


0

0

Доброго времени суток!

Хотел посоветоваться с общественностью по хорошего тона при написание правил iptables

Правила отвечающие за фильтрацию трафика принято писать в таблице filter, в данной таблице есть цепочки отвечающие за обмен с самим хостом INPUT/OUTPUT и за пакеты проходящие через хост FORWARD

А куда писать правила которые относятся и к тем и другим пакетам?
Например я знаю, что у меня за интерфейсом eth0 сеть 192.168.10/24 и я хочу быть уверен сто на интерфейс приходят пакеты только из этой сети.
Для этого я пишу вот такое правило
iptables -A INPUT -i eth0 ! -s 192.168.10.0/24 -j DROP
iptables -A FORWARD -i eth0 ! -s 192.168.10.0/24 -j DROP

Получается, что мне придется дублировать правила.... Или может их следует отнести в другую таблицу?

И еще один вопрос, как следует/удобнее писать правила с привязкой к интерфейсам или оперируя только ip адресами?


Если Вам не нужны оттюнингованные под быстродействие правила (роутер не на высоконагруженном канале), то попробуйте shorewall: http://shorewall.net/
Он создаст необходимые цепочки и правила, при этом он позволит абстрагироваться от конкретных правил.

Если же именно тюнинг важен, то

Получается, что мне придется дублировать правила.... Или может их следует отнести в другую таблицу?


Для избежания дубляжа однотипные правила выносите в свои собственные цепочки. Потом можно будет привязать свои цепочки правил к стандартным цепочкам.

И еще один вопрос, как следует/удобнее писать правила с привязкой к интерфейсам или оперируя только ip адресами?

Сильно зависит от ситуации в которой применяется iptables. Общих рекомендаций нет.

Slavaz ★★★★★
()
Ответ на: комментарий от Slavaz

Т.е. фильтрация все так и только в filter
:)

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

dvalov
() автор топика
Ответ на: комментарий от dvalov

> есть два провайдера и балансировка нагрузки между ними

http://www.shorewall.net/MultiISP.html

и есть внутренние сервисы на которые их инета пробрасываются соединения.

http://www.shorewall.net/FAQ.htm#PortForwarding

Всё-таки попробуйте. Не пожалеете :)

Slavaz ★★★★★
()
Ответ на: комментарий от Slavaz

В догонку: шоревалл - это враппер над ip, iptables, ifconfig, route и tc
По сути. шоревалл - это набор bash-скриптов (perl-скриптов, если скачать shorewall-perl). Так что и на более-менее вменяемом маршрутизаторе (а тем более на OpenWRT) шоревалл должен заработать.

Slavaz ★★★★★
()

Как уже заметили выше, общие правила просто выносятся в отдельные цепочки.
В другую таблицу выносить очень не рекомендую. Бардак получится.

nnz ★★★★
()

Вобще для вашего случая есть rp_filter, может это и не совсем красиво, но работает.

ИМХО, без разницы где DROP'ать пакеты, всё равно, изучая iptables нужно посмотреть все таблицы. Ещё есть таблица raw. Но надо отметить, что раньше можно было делать "-j DROP" в таблице nat, а теперь разработчики iptables это запретили.

И еще один вопрос, как следует/удобнее писать правила с привязкой к интерфейсам или оперируя только ip адресами?

Этот вопрос я не понял, как нужно, так и пишите, и не забывайте создавать цепочки.

mky ★★★★★
()
Ответ на: комментарий от mky

>Вобще для вашего случая есть rp_filter, может это и не совсем красиво, но работает.

Если провайдер один — вполне красиво и правильно (имхо).

Если провайдеров >1, то в большинстве случаев rp_filter становится абсолютным злом и должен быть уничтожен. Потому что проверяет он только по таблице main и кладет прибор на policy-based routing.

nnz ★★★★
()

Цепочки можно комбинировать:

iptables -t filter -N MYCHAIN
iptables -t filter -I INPUT -j MYCHAIN
iptables -t filter -I FORWARD -j MYCHAIN
iptables -t filter  -A MYCHAIN -i eth0 -s !192.168.10.0/24 -j DROP
-- одно правило на обе цепочки INPUT и FORWARD.

PS: «-i eth0 ! -s 192.168.10.0/24» вроде как неправильно. Или «-i !eth0 -s 192.168.10.0/24», или «-i eth0 -s !192.168.10.0/24», если я правильно понял, что «192.168.10.0/24 должны быть только с eth0».

berrywizard ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.