Jump to content

Recommended Posts

Posted

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

Т.е. если 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

 

Posted (edited)

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

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

Edited by photon
Posted

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

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

 

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

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

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

"Локалку" не нужно шейпить и ненужно генерить 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, а отсеявшийся нелокальный трафик обрабатывать в родительской цепочке.

 

Posted (edited)

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

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

Edited by photon
Posted (edited)
Насколько я помню, 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
Posted

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

Posted

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

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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...
На сайте используются файлы cookie и сервисы аналитики для корректной работы форума и улучшения качества обслуживания. Продолжая использовать сайт, вы соглашаетесь с использованием файлов cookie и с Политикой конфиденциальности.