Jump to content
Калькуляторы

Нужен совет про ipset linux

Есть необходимость "матчить" пакеты на принадлежность к локальной сети.

Т.е. если srcip и dstip принадлежат к списку локальных подсетей - то пакет локальный.

Список локальных подсетей - набор типа nethash

ipset -N LOCALS nethash --hashsize 1024 --probes 4 --resize 50
Содержит обычно ~300 элементов

Вопрос:

Можно ли проверить принадлежность пакета к локалке одной строкой iptables ?

Т.е. что бы за 1 правило iptables проверить и srcip и dstip.

ведь такое правило:

iptables -t mangle -A FORWARD -m set --set LOCALS src -j MATCH
проверяет только srcip

 

Share this post


Link to post
Share on other sites

Предполагаю, что iptables -t mangle -A FORWARD -m set --set LOCALS src,dst -j MATCH

Если не сработает, то нужно в два правила. Ну будут у вас правила масштабироваться как O(2), а не O(1). Все равно время поиска в хэше без коллизий -- это константа, так что разница будет незаметна.

Edited by photon

Share this post


Link to post
Share on other sites

Насколько я помню, src,dst - это src && dst, а не src || dst.

ТС, а зачем Вам это нужно?

Share this post


Link to post
Share on other sites

Насколько я понимаю в случае и nethash вообще нет смысла использовать 2 аргумента --set.

Ведь 2 и более используются если есть binding.

 

>а зачем Вам это нужно?

"Локалку" не нужно шейпить и ненужно генерить netflow.

Share this post


Link to post
Share on other sites
>а зачем Вам это нужно?

"Локалку" не нужно шейпить и ненужно генерить netflow.

Нет, зачем в одну строку? Проще ведь два правила, одно для src, другое для dst. Что-то типа

-N locals

-A locals -m set ! --set LOCALS src -j RETURN

-A locals -m set ! --set LOCALS dst -j RETURN

-A locals do_something_here

Т.о. на втором шаге отсеется тот трафик, у которого нелокальный источник, на третьем - нелокальный получатель. Останется только локальный. На четвёртом шаге ему можно сделать ACCEPT, а отсеявшийся нелокальный трафик обрабатывать в родительской цепочке.

 

Share this post


Link to post
Share on other sites

Насколько я помню, src,dst - это src && dst, а не src || dst.

Кстати говоря, сделать настраиваемым && и || -- это неплохая идея для патча к ipset.

Edited by photon

Share this post


Link to post
Share on other sites
Насколько я помню, src,dst - это src && dst, а не src || dst.

ТС, а зачем Вам это нужно?

Вы ошибаетесь. src,dst - это относится к связкам между ip и портом. Запись означает делать выборку по src ip и dst port

 

Кстати чтобы сравнивать на принадлежность локалки или нет, удобнее просто для инета использовать отдельный сетевой интерфейс и тогда выходят всего 2 правила. Пакеты будут инетными если:

iptables -A FORWARD -i inetEth -j ACCEPT 
iptables -A FORWARD -o inetEth -j ACCEPT

Вроде видел подобные правила и для alias на интерфейсах

Edited by 6PATyCb

Share this post


Link to post
Share on other sites

Я не ошибаюсь. Обратите внимание, в каком контексте это было сказано. Речь шла о том, что такая запись означает конъюнкцию атрибутов, а вовсе не о том, что это означает проверку IP и IP.

Share this post


Link to post
Share on other sites

Я не ошибаюсь. Обратите внимание, в каком контексте это было сказано. Речь шла о том, что такая запись означает конъюнкцию атрибутов, а вовсе не о том, что это означает проверку IP и IP.

В контексте ответа на предыдущий пост. Там как раз именно об этом и говорилось - чтобы сравнивать ip сетей.

Share this post


Link to post
Share on other sites

Ну да, Вам, конечно, виднее, что я хотел сказать :)

Share this post


Link to post
Share on other sites

Ну да, Вам, конечно, виднее, что я хотел сказать :)

Не буду оффтоп раздувать. Будем считать что мне неправильно показалось.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this