1 Запуск

Для запуска добавить в /etc/rc.conf
firewall_enable="YES"
firewall_type="open" # разрешаем весь трафик
firewall_logging="YES" # включаем логирование

Для логирования добавить в /etc/sysctl.conf
net.inet.ip.fw.verbose=1
net.inet.ip.fw.verbose_limit=5


RE: для запуска ipfw не обязательно перекомпиллировать ядро до тех пор пока не потребуется поддержка NAT

2 Ядро

options IPFIREWALL # включает фаерволл как часть ядра
options IPFIRWALL_VERBOSE # включает логирование
options IPFIREWALL_VERBOSE_LIMIT=5 # предельное число логируемых пакетов в единицу времени. Спасает от некоторых типов атак.
options IPFIREWALL_DEFAULT_TO_ACCEPT #разрешает прохождение всего трафика через фаерволл
options IPDIVERT #необходимо для поддержки NAT

3 Команды управления

ipfw list # список всех правил
ipfw -t list # вывод списка правил с временной меткой показывающей последнее срабатывание правила
ipfw -a list # показывает подробную информацию по списку правил
ipfw -d list # показывай динамические правила в дополнение к статическим
ipfw -d -e list # также показывай "просроченные"??? динамические правила
ipfw zero # сброс счётчиков
ipfw zero NUM # сброс счётчика за номером NUM

4 Синтаксис

CMD RULE_NUMBER ACTION LOGGING SELECTION STATEFUL

CMD - add

RULE_NUMBER - 1..65535

ACTION
- allow | accept | pass | permit # любое из этих слов разрешает прохождение пакетов

check-state # проверять пакет сначала динамическими правилами.

deny | drop # отбрасывать пакеты совпадающие с этим правилом

LOGGING
- log or logamount # когда log сообщение будет записано через syslog с меткой SECURITY. logamount указывает предельное количество записей которое не должно превышаться. Если logamount не указан предел будет взять из параметра net.inet.ip.fw.verbose_limit указываемый через переменную sysctl.

Если лимит превышен, то журнал может быть перезапущен командой ipfw reset log

SELECTION - udp | tcp | icmp или любой другой протокол из файла /etc/protocols

from src to dst # диапазон ip адресов источника пакетов и приёмника

port number # номер порта на который принимать пакет

in | out # обозначает пакеты на вход или пакеты на выход

via IF # пакеты проходят через указанный интерфейс

keep-state # открывает постоянный канал между источником и получателем

limit {src-addr | src-port | dst-addr | dst-port} # фаервол разрешит прохождение только N числу пакетов. Эта опция несовместима с keep-state