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