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