LINUX.ORG.RU
ФорумAdmin

Оптимизация IPTables


0

0

Как известно, при проверке пакета по правилам цепочки iptables пакет проверяется на соответствие всем правилам и проходит по последнему совпадению (по крайней мере в таблице mangle).
Это очень не оптимально, так как тут я лишаюсь возможности оптимизировать правила, расположив те, по которым идет больше всего пакетов, в начале цепочки.

Каким образом можно тут провести оптимизацию?
Можно ли както заставить iptables срабатывать по первому совпадению и дальше не обрабатывать пакет ?


а разве не наоборот? всегда думал, что правила проверяются до первого совпадения.

dreamer ★★★★★
()

офтопик, но все же
таких проблем нет на Open и FreeBSD при использовании pf, так как существует quick

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

FreeBSD меня разочаровала своей тормознутойстью как в работе с файрволлом (ipfw правда.. для 1500 правил пришлось 20 проверок и скипов делать, чтобы хоть как-то оптимизировать файрволл) так и работой с файловой системой.

А если по теме:
проверял так:
-A -d 0.0.0.0 -j MARK --set-mark 1
-A -d 1.2.3.0/24 -j MARK --set-mark 2

в данном случает пакет в сеть 1.2.3.0 метится маркой 2, хотя по первому совпадению он должен пометиться как 1.
Т.е., метится по последнему совпадению, что мега-неоптимильно ...

mevg
() автор топика

есть такая фигня, поэтому иди и смотри в pom соответствующие модули (например goto)

Z0termaNN
()

В SELinux етой проблемы вродебы нету, покрайней мере у меня когдато в Gentoo даже какаято дока была с какимто патчем, так что приятно порытся :)

anonymous
()
Ответ на: комментарий от mevg

pf и FreeBSD

так используй pf - я же про него говорю в релизах до 5.3 в портах, после в base

x97Rang ★★★
()

к тому же pf может работать со списками и таблицами - то есть грубо говоря с группами ip адресов и сетей, и для них писать правила, nat привязыывается сразу к сетевухе - без неообходимости указания ip, в общем я достаточно долго работал с iptables как для маршрутизации, так и для фильтрации, но pf мне понравилось более простой логикой.

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

Делай вот так:

-A -d 0.0.0.0 -j MARK --set-mark 1 -A -m mark --mark 1 -j ACCEPT -A -d 1.2.3.0/24 -j MARK --set-mark 2

тогда все оки будет

eightn
()
Ответ на: комментарий от x97Rang

> к тому же pf может работать со списками и таблицами - то есть грубо говоря с группами ip адресов

-m recent ?

>nat привязыывается сразу к сетевухе

-o $if -j MASQUERADE ?

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

Делай вот так:

-A -d 0.0.0.0 -j MARK --set-mark 1
-A -m mark --mark 1 -j ACCEPT
-A -d 1.2.3.0/24 -j MARK --set-mark 2

тогда все оки будет

...долбанное форматирование :(

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

Мне кажется, лучше наплодить дополнительных цепочек в которых метить и акцептить, а в основной цепочке проверять только на соответствие критерию и делать переход в дополнительную. А еще можно это всё замутить в виде двоичного дерева :) для большей оптимизации.

infinite
()
Ответ на: комментарий от eightn

В такой схеме:

-A -d 0.0.0.0 -j MARK --set-mark 1
-A -m mark --mark 1 -j ACCEPT
-A -d 1.2.3.0/24 -j MARK --set-mark 2

Безусловно, есть часть плюса. Но есть и часть минуса
Ведь тем пакетам, которые будут проходить только по последнему правилу придется провериться в 2 раза больше раз...

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

Вариант в цепочками мне понравился - я подумал, что кода -j MY_CHAIN, то проходит по первому совпадению.
Оказалось, нет :(
Создал две цепочки
iptables -t mangle -N RUSSIA
iptables -t mangle -N WORLD
iptables -t mangle -A RUSSIA -j MARK --set-mark 2
iptables -t mangle -A WORLD -j MARK --set-mark 1

Сделал такие правила:

Chain OUTPUT (policy ACCEPT 80M packets, 110G bytes)
pkts bytes target prot opt in out source destination
178K 100M WORLD tcp -- * * 0.0.0.0/0 0.0.0.0/0
139K 125M RUSSIA all -- * * 0.0.0.0/0 195.209.0.0/16
0 0 RUSSIA all -- * * 0.0.0.0/0 147.45.0.0/16

Как видно, все по идее должно идти в цепочку WORLD.
Ан нет! :(
Туда идет только то, что не попало в другие ...

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

Как пакеты метятся видно, а вот как в конце цепочки обрубается дальнейшая обработка нет, добавь:

iptables -t mangle -A RUSSIA -j ACCEPT iptables -t mangle -A WORLD -j ACCEPT

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

Да, потом добавил :)
А еще глюк был в том, что я только TCP-пакеты в WORLD отправлял :)
Все работает, спасибо! :)

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