Страница 1 из 1
Ограничение количества одновременных подключений
Добавлено: Чт сен 17, 2009 7:39 am
Dozz
Система крутиться на mpd5 (PPTP) с pf в качестве фильра пакетов.
Появилась необходимость организовать ограничение количества одновременных подключений со стороны пользователей.
Пока нашел лишь такой вариант, с использованием pf:
Код: Выделить всё
pass in on $int_if proto tcp from $int_if:network to ($int_if) keep state (source-track rule, max-src-states 10)
Это правило ограничивает максимальное количество одновременно создаваемых входящих TCP-соединений на один IP адрес до 10.
Есть какие-либо варианты контролировать UDP-протокол, в котором подключений нет как таковых? Возможно, есть другие варианты выполнить задачу, с использованием возможностей mpd5?
Re: Ограничение количества одновременных подключений
Добавлено: Чт сен 17, 2009 8:02 am
savago
set optimization aggressive
Re: Ограничение количества одновременных подключений
Добавлено: Чт сен 17, 2009 8:47 am
Dozz
savago писал(а):set optimization aggressive
это и выставлено. Но оно ж таймауты в основном задает для очередей. А где лимиты править? Конкретно, как поставить ограничение в N соединений/очередей?
Re: Ограничение количества одновременных подключений
Добавлено: Чт сен 17, 2009 9:17 pm
savago
Dozz писал(а):savago писал(а):set optimization aggressive
это и выставлено. Но оно ж таймауты в основном задает для очередей. А где лимиты править? Конкретно, как поставить ограничение в N соединений/очередей?
http://openbsd.org/faq/pf/filter.html#stateopts
Stateful Tracking Options
Re: Ограничение количества одновременных подключений
Добавлено: Пт сен 18, 2009 8:15 am
Dozz
Я ж с этого и начинал свой первый пост. Но правило, которое там написано, не совсем годиться для моих задач. Дело в том, что к серверу от клиентов идут служебные пакеты на порт pptp, а данные идут в виде GRE-пакетов. Контролировать таким образом количество соединений во внешний мир не выйдет, так как все эти соединения энкапсулированы в GRE-пакеты. Если же Stateful Tracking Options опции ставить на правило, разрешающее выход в мир, то оно будет срабатывать после NAT-а, и, соответсвенно, будет ограничивать количество исходящих соединений от сервера, а не от клиентов виртуальной сети.
Короче говоря, надо заставить работать приблизительно такое правило:
Код: Выделить всё
pass out on $ext_if proto {udp,tcp} from $vpn_if:network to any keep state (source-track rule, max-src-states 10)
т.е. разрешить клиентам виртуальной VPN-сети выходить в мир через НАТ, навешенный на $ext_if, контролируя при этом количество одновременных соединений (как TCP, так и UDP).
Как это возможно сделать средствами pf, nat, mpd или abills?
Re: Ограничение количества одновременных подключений
Добавлено: Пт сен 18, 2009 12:47 pm
savago
Версий пф-а на фрее и опен бсд различна. Виж за правила на синтакса.
# Разрешить управляющее соединение
pass in on $int_if inet proto tcp from ($int_if:network) to ($int_if) port pptp keep state
# Разрешить использование трафика, инкапсулированного в GRE
pass in on $int_if inet proto gre from ($int_if:network) to ($int_if) keep state
# Разрешить трафик на туннельном интерфейсе
Наконец поставиш твои рестрикции для кол. сесий.