ipfw+ipnat+limit dst-addr

Настройка сетевых служб, маршрутизации, фаерволлов. Проблемы с сетевым оборудованием.
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
skeletor
майор
Сообщения: 2507
Зарегистрирован: 2007-11-16 18:22:04
Откуда: Kiev
Контактная информация:

ipfw+ipnat+limit dst-addr

Непрочитанное сообщение skeletor » 2012-05-17 14:32:09

Всем привет.
Есть связка ipfw+ipnat (используется только для NAT). Захотелось ввести ограничения на количество исходящих\входящих подключений в интернет. Собираю такую конструкцию:

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

ipfw add check state
ipfw add allow all from 10.10.10.15 to any limit dst-addr 20
ipfw add deny all from 10.10.10.15 to any
По счётчикам ipfw show вижу, что правило срабатывает. Так же смотрю ipfw -d show и считаю, сколько динамических правил создалось для 10.10.10.15 и вижу, что их количество превышает 20.
Так же смотрю сессии NAT через ipnat -l и тоже их количество превышает 20 для данного ИПа. Делаю заключение, что ограничение может и работает, но неправильно, так как у юзера более 1000 подключений.
Поскольку фактически у меня 2 файервола (ipfw и ipfilter), то нужно смотреть ещё и порядок прохождения пакета через файерволы. Нашёл статью http://www.opennet.ru/tips/info/1431.shtml , если верить которой
на вход: ipfilter, pf, ipfw
на выход: ipfw, pf, ipfilter
То есть иными словами подключения юзера 10.10.10.15 в инет НАТятся раньше, чем они доходят до правила

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

ipfw add allow all from 10.10.10.15 to any limit dst-addr 20
?

Попробовал по другому (пробовал с in/out и без них):

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

ipfw add check state
ipfw add allow all from 10.10.10.15 to any via $int_if limit dst-addr 20
ipfw add deny all from 10.10.10.15 to any

но ограничения так и не срабатывают.
То есть по идее они хоть как должны сначала пройти через это правило, так как оно написано для внутреннего интерфейса, а потом уже будут НАТится на внешнем.

Ещё как вариант - это писать ограничения непосредственно в ipfilter (не тестировал)

Подскажите, где я ошибся и как всё-таки заставить работать ограничения?

ПС. FreeBSD Release 8.1 amd64
Сейчас этот сервер в работе, поэтому что-то кардинальное смогу сделать только вечером.

Заранее спасибо.
"Винда съела дрова и резет здесь не фурычит."
"Все говорят, что у меня /dev/hands криво и я всё делаю через /dev/ass. А у меня этих фалов вообще нет!"

Хостинговая компания 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/

ChihPih
ст. прапорщик
Сообщения: 568
Зарегистрирован: 2009-09-04 12:23:30
Откуда: Где-то в России...
Контактная информация:

Re: ipfw+ipnat+limit dst-addr

Непрочитанное сообщение ChihPih » 2012-05-20 9:44:56

То есть иными словами подключения юзера 10.10.10.15 в инет НАТятся раньше, чем они доходят до правила
Так ничего не сделать. Надо до ната ))
Может проще один фаер использовать?
www.info-x.org - информационный ресурс о ОС FreeBSD.

Аватара пользователя
skeletor
майор
Сообщения: 2507
Зарегистрирован: 2007-11-16 18:22:04
Откуда: Kiev
Контактная информация:

Re: ipfw+ipnat+limit dst-addr

Непрочитанное сообщение skeletor » 2012-05-21 13:34:06

Может, но выбрал эту связку из-за того, что можно смотреть текущие сессии и потом их считать.
"Винда съела дрова и резет здесь не фурычит."
"Все говорят, что у меня /dev/hands криво и я всё делаю через /dev/ass. А у меня этих фалов вообще нет!"