Есть связка 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
Так же смотрю сессии NAT через ipnat -l и тоже их количество превышает 20 для данного ИПа. Делаю заключение, что ограничение может и работает, но неправильно, так как у юзера более 1000 подключений.
Поскольку фактически у меня 2 файервола (ipfw и ipfilter), то нужно смотреть ещё и порядок прохождения пакета через файерволы. Нашёл статью http://www.opennet.ru/tips/info/1431.shtml , если верить которой
То есть иными словами подключения юзера 10.10.10.15 в инет НАТятся раньше, чем они доходят до правилана вход: ipfilter, pf, ipfw
на выход: ipfw, pf, ipfilter
Код: Выделить всё
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
Сейчас этот сервер в работе, поэтому что-то кардинальное смогу сделать только вечером.
Заранее спасибо.