Ограничение NAT session во FreeBSD (PF)

Проблемы установки, настройки и работы Правильной Операционной Системы

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
Torvald
рядовой
Сообщения: 27
Зарегистрирован: 2010-12-31 2:30:53
Откуда: Днепропетровск
Контактная информация:

Ограничение NAT session во FreeBSD (PF)

Непрочитанное сообщение Torvald » 2014-10-20 15:49:16

Товарищи, стоит задача ограничить количество нат-сессий на каждый IP?

Как это осуществить?
Уже находится и действует несколько лет PF c ALTQ.
Всё натиться, шейпица, но вот встала задача, появились в сети юзеры тыкающие более 1000 соединений со своего рабочего места (чаще всего торрентом но не всегда..).
Как решить эту проблему?

Код: Выделить всё

...
nat on $wan1 proto tcp from <wan1> to any -> ($wan1)
...
queue comp1 bandwidth 40Mb priority 4
queue comp2 bandwidth 40Mb priority 4
...
pass out quick on $vlan20 from any to 10.100.7.60 queue comp1 no state
pass out quick on $vlan20 from any to 10.100.7.61 queue comp2 no state
...
pass in  quick on $vlan20 route-to ($wan1 $gw1) from <wan1> to !10.0.0.0/8 no state
...
Всё было бы просто, но всему виной "no state" в правилах!!! Как это обойти?
Ведь не выставишь же "source-track", "max number"... и т.д, а "no state" не уберёшь же...из-за шейпера.
Но ведь где-то вся эта байда храниться (session), не зря же "pfctl -ss" выдаёт :)

Может есть вариант в самом NAT'е указать на количество записей с IP/правила... но не нашёл..

Может плохо искал, ткните носом...

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
skeletor
майор
Сообщения: 2548
Зарегистрирован: 2007-11-16 18:22:04

Re: Ограничение NAT session во FreeBSD (PF)

Непрочитанное сообщение skeletor » 2014-10-29 12:02:06

Тоже интересно. Если найдёте ответ - отпишитесь.

pimlab
прапорщик
Сообщения: 484
Зарегистрирован: 2007-10-09 11:31:03

Re: Ограничение NAT session во FreeBSD (PF)

Непрочитанное сообщение pimlab » 2014-10-30 10:16:55

Может я и не прав, но если поставить таг на все, что пришло с влан20 и по таг шейпить с кееп стате на внешнем интерфейсе

Аватара пользователя
skeletor
майор
Сообщения: 2548
Зарегистрирован: 2007-11-16 18:22:04

Re: Ограничение NAT session во FreeBSD (PF)

Непрочитанное сообщение skeletor » 2014-10-30 12:20:36

Эм, мне кажется не выйдет: один и тот же пакет должен пройти по 2-м разным правилам и применится. Написал в рассылку pf, посмотрим.

pimlab
прапорщик
Сообщения: 484
Зарегистрирован: 2007-10-09 11:31:03

Re: Ограничение NAT session во FreeBSD (PF)

Непрочитанное сообщение pimlab » 2014-10-30 12:53:58

тока что попробовал пф проглотил, а вот как оно там работает

Код: Выделить всё

pass out quick on $ext_if  inet from ($ext_if) to !(self)  queue (lan_out,ack_out) tagged INET_IF  keep state (max-src-conn 50, max-src-conn-rate 100/2)

Аватара пользователя
Torvald
рядовой
Сообщения: 27
Зарегистрирован: 2010-12-31 2:30:53
Откуда: Днепропетровск
Контактная информация:

Re: Ограничение NAT session во FreeBSD (PF)

Непрочитанное сообщение Torvald » 2014-10-30 12:55:43

pimlab писал(а):тока что попробовал пф проглотил, а вот как оно там работаетКод: Выделить всёpass out quick on $ext_if  inet from ($ext_if) to !(self)  queue (lan_out,ack_out) tagged INET_IF  keep state (max-src-conn 50, max-src-conn-rate 100/2)
О как, и прямо в секунду когда я хотел писать ответ что с тегом у меня не заработало... сейчас буду курить что я не так писал...

Аватара пользователя
skeletor
майор
Сообщения: 2548
Зарегистрирован: 2007-11-16 18:22:04

Re: Ограничение NAT session во FreeBSD (PF)

Непрочитанное сообщение skeletor » 2014-10-30 13:00:44

pf-то может проглотить, но может не заработать.

Аватара пользователя
Torvald
рядовой
Сообщения: 27
Зарегистрирован: 2010-12-31 2:30:53
Откуда: Днепропетровск
Контактная информация:

Re: Ограничение NAT session во FreeBSD (PF)

Непрочитанное сообщение Torvald » 2014-11-25 18:02:09

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

Код: Выделить всё

pass in  quick on $vlan20 route-to ($wan1 $gw1) from <wan1> to !10.0.0.0/8 tag lan no state
pass in  quick on $vlan20 route-to ($wan2 $gw2) from <wan2> to !10.0.0.0/8 tag lan no state
pass in  quick on $vlan20 route-to ($wan3 $gw3) from <wan3> to !10.0.0.0/8 tag lan no state
pass in  quick on $vlan20 route-to ($wan4 $gw4) from <wan4> to !10.0.0.0/8 tag lan no state

...

pass out quick on $wan1 route-to ($wan1 $gw1) from ($wan1) to any tagged lan keep state (max-src-conn 200, max-src-conn-rate 50/1)
pass out quick on $wan2 route-to ($wan2 $gw2) from ($wan2) to any tagged lan keep state (max-src-conn 200, max-src-conn-rate 50/1)
pass out quick on $wan3 route-to ($wan3 $gw3) from ($wan3) to any tagged lan keep state (max-src-conn 200, max-src-conn-rate 50/1)
pass out quick on $wan4 route-to ($wan4 $gw4) from ($wan4) to any tagged lan keep state (max-src-conn 200, max-src-conn-rate 50/1)

pass out quick on $wan1 route-to ($wan1 $gw1) from ($wan1) to any keep state
pass out quick on $wan2 route-to ($wan2 $gw2) from ($wan2) to any keep state
pass out quick on $wan3 route-to ($wan3 $gw3) from ($wan3) to any keep state
pass out quick on $wan4 route-to ($wan4 $gw4) from ($wan4) to any keep state
, где vlan20 - клиенская сетка

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

Эксперименты продолжаю дальше...

UPD: если рассписать по каждому клиенту и привязать их к конкретным WAN каналам (что уже дибилизм., ибо усложняем перекидывание с wan1 на wan2...), то всёравно оно нихрена не даёт:

Код: Выделить всё

pass in  quick on $vlan20 route-to ($wan1 $gw1) from cl-1 to !10.0.0.0/8 tag  cl-1 no state
pass in  quick on $vlan20 route-to ($wan1 $gw1) from cl-2 to !10.0.0.0/8 tag cl-2 no state
...
pass out quick on $wan1 route-to ($wan1 $gw1) from ($wan1) to any tagged cl-1 keep state (max-src-conn 200, max-src-conn-rate 50/1)
pass out quick on $wan1 route-to ($wan1 $gw1) from ($wan1) to any tagged cl-2 keep state (max-src-conn 200, max-src-conn-rate 50/1)
Думаю (-ем) дальше...

Аватара пользователя
Torvald
рядовой
Сообщения: 27
Зарегистрирован: 2010-12-31 2:30:53
Откуда: Днепропетровск
Контактная информация:

Re: Ограничение NAT session во FreeBSD (PF)

Непрочитанное сообщение Torvald » 2014-11-25 18:21:17

Может очевидный вещи, которые сразу не показались очевидными.

PF сей листинг вобще рассматривает с точки зрения что отправитель является ($wan1),... и посему для него ограничивает в 200.
А значит ни о каком ограничении натовских сессий основаных на IP приватной сети и речи быть не может!

Код: Выделить всё

pass out quick on $wan1 route-to ($wan1 $gw1) from ($wan1) to any keep state (max-src-states 200)
pass out quick on $wan2 route-to ($wan2 $gw2) from ($wan2) to any keep state (max-src-states 200)
pass out quick on $wan3 route-to ($wan3 $gw3) from ($wan3) to any keep state (max-src-states 200)
pass out quick on $wan4 route-to ($wan4 $gw4) from ($wan4) to any keep state (max-src-states 200)
Или где-то ошибаюсь? :)

Вывод пока в том, что нужно е***ошить, как описано в самом первом посте.. именно с правилами in lan и обойти шейпинг.

pimlab
прапорщик
Сообщения: 484
Зарегистрирован: 2007-10-09 11:31:03

Re: Ограничение NAT session во FreeBSD (PF)

Непрочитанное сообщение pimlab » 2014-12-01 13:11:07

Torvald писал(а):PF сей листинг вобще рассматривает с точки зрения что отправитель является ($wan1),... и посему для него ограничивает в 200.
Я тоже к этому выводу пришел.
Может вам ipfw для этих целей заюзать,а шейпить в пф.
С ipfw уже лет 10 не заглядывал, ничего не помню :(

Аватара пользователя
Torvald
рядовой
Сообщения: 27
Зарегистрирован: 2010-12-31 2:30:53
Откуда: Днепропетровск
Контактная информация:

Re: Ограничение NAT session во FreeBSD (PF)

Непрочитанное сообщение Torvald » 2014-12-01 14:51:36

pimlab писал(а):Я тоже к этому выводу пришел.
Может вам ipfw для этих целей заюзать,а шейпить в пф.
С ipfw уже лет 10 не заглядывал, ничего не помню :(
Я уже и этот вариант рассматривал... но уж очень не хочется плодить гору фильтров.

Пока что данную проблему решил добавлением ещё одной железки (MikroTik CRS125-24G-1S-RM), в неё вынес шейпер и резалку сессий, остальное (нат, ван каналы и т.д.) осталось на Free, ибо фряха роднее как-то..

Но и тут как-бы вариант менее надёжный, железки 2 - проблем в случае чего в два раза больше :)