Всем привет.
Есть связка 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
Сейчас этот сервер в работе, поэтому что-то кардинальное смогу сделать только вечером.

Заранее спасибо.

Ответить