Ivan Rostovikov Posted April 17, 2010 Posted April 17, 2010 Есть необходимость "матчить" пакеты на принадлежность к локальной сети. Т.е. если 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 Вставить ник Quote
photon Posted April 17, 2010 Posted April 17, 2010 (edited) Предполагаю, что iptables -t mangle -A FORWARD -m set --set LOCALS src,dst -j MATCH Если не сработает, то нужно в два правила. Ну будут у вас правила масштабироваться как O(2), а не O(1). Все равно время поиска в хэше без коллизий -- это константа, так что разница будет незаметна. Edited April 17, 2010 by photon Вставить ник Quote
EvilShadow Posted April 17, 2010 Posted April 17, 2010 Насколько я помню, src,dst - это src && dst, а не src || dst. ТС, а зачем Вам это нужно? Вставить ник Quote
Ivan Rostovikov Posted April 17, 2010 Author Posted April 17, 2010 Насколько я понимаю в случае и nethash вообще нет смысла использовать 2 аргумента --set. Ведь 2 и более используются если есть binding. >а зачем Вам это нужно? "Локалку" не нужно шейпить и ненужно генерить netflow. Вставить ник Quote
EvilShadow Posted April 17, 2010 Posted April 17, 2010 >а зачем Вам это нужно?"Локалку" не нужно шейпить и ненужно генерить 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, а отсеявшийся нелокальный трафик обрабатывать в родительской цепочке. Вставить ник Quote
photon Posted April 17, 2010 Posted April 17, 2010 (edited) Насколько я помню, src,dst - это src && dst, а не src || dst. Кстати говоря, сделать настраиваемым && и || -- это неплохая идея для патча к ipset. Edited April 17, 2010 by photon Вставить ник Quote
6PATyCb Posted April 21, 2010 Posted April 21, 2010 (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 April 21, 2010 by 6PATyCb Вставить ник Quote
EvilShadow Posted April 21, 2010 Posted April 21, 2010 Я не ошибаюсь. Обратите внимание, в каком контексте это было сказано. Речь шла о том, что такая запись означает конъюнкцию атрибутов, а вовсе не о том, что это означает проверку IP и IP. Вставить ник Quote
6PATyCb Posted April 21, 2010 Posted April 21, 2010 Я не ошибаюсь. Обратите внимание, в каком контексте это было сказано. Речь шла о том, что такая запись означает конъюнкцию атрибутов, а вовсе не о том, что это означает проверку IP и IP. В контексте ответа на предыдущий пост. Там как раз именно об этом и говорилось - чтобы сравнивать ip сетей. Вставить ник Quote
EvilShadow Posted April 21, 2010 Posted April 21, 2010 Ну да, Вам, конечно, виднее, что я хотел сказать :) Вставить ник Quote
6PATyCb Posted April 21, 2010 Posted April 21, 2010 Ну да, Вам, конечно, виднее, что я хотел сказать :) Не буду оффтоп раздувать. Будем считать что мне неправильно показалось. Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.