Страница 1 из 1

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

Добавлено: 2014-10-20 15:49:16
Torvald
Товарищи, стоит задача ограничить количество нат-сессий на каждый 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/правила... но не нашёл..

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

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

Добавлено: 2014-10-29 12:02:06
skeletor
Тоже интересно. Если найдёте ответ - отпишитесь.

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

Добавлено: 2014-10-30 10:16:55
pimlab
Может я и не прав, но если поставить таг на все, что пришло с влан20 и по таг шейпить с кееп стате на внешнем интерфейсе

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

Добавлено: 2014-10-30 12:20:36
skeletor
Эм, мне кажется не выйдет: один и тот же пакет должен пройти по 2-м разным правилам и применится. Написал в рассылку pf, посмотрим.

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

Добавлено: 2014-10-30 12:53:58
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)

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

Добавлено: 2014-10-30 12:55:43
Torvald
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)
О как, и прямо в секунду когда я хотел писать ответ что с тегом у меня не заработало... сейчас буду курить что я не так писал...

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

Добавлено: 2014-10-30 13:00:44
skeletor
pf-то может проглотить, но может не заработать.

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

Добавлено: 2014-11-25 18:02:09
Torvald
Добрый день, сразу прощу прощения... некоторое время небыло возможности поиграться... и так, пока результат плачевный..

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

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)
Думаю (-ем) дальше...

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

Добавлено: 2014-11-25 18:21:17
Torvald
Может очевидный вещи, которые сразу не показались очевидными.

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 и обойти шейпинг.

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

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

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

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

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

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