Поскольку основная часть системы IPFW находится в ядре, необходимо пересобрать ядро. Для того, чтобы пересобрать ярдо системы необходимо из портов установить исходники ядра. Для этого следующая команда под правами суперпользователя:
# sysinstall
Configure -> Distributions -> src -> sys
Отметить пакет "sys" и установить его.
После установки зайти в каталог /usr/src/sys/i386/conf/
# cd /usr/src/sys/i386/conf/
В конец файла GENERIC добавляем следующие строки:
options IPFIREWALL # собственно файрволл
options IPFIREWALL_VERBOSE # логгинг пакетов, если в правиле написано `log`
options IPFIREWALL_VERBOSE_LIMIT=5 # ограничение логов (повторяющихся) - на случай атак типа флудинга(я, правда, 100 ставлю)
options IPFIREWALL_FORWARD # перенаправление (форвардинг) пакетов например, для прозрачного прокси
options IPDIVERT # если нужен NAT (трансляция адресов)
options DUMMYNET # если понадобится ограничивать скорость инета пользователям
options IPFIREWALL_DEFAULT_TO_ACCEPT # дефолтовое правило (последнее) будет разрешающим (во всех других) случаях - запрещающее
Сохранить изменения.
Далее пересборка ядра, для этого:
# config GENERIC
# cd /usr/src/sys/i386/compile/GENERIC/
# make depend
# make
# make install
Если все команды выполнились без ошибок, то перезагружаем компьютер и получаем новое ядро с поддержкой файрвола и механизма IPDivert ("заворачивание" пакетов на дополнительную обработку)
# shutdown -r now
Настройка демона natd и файрвола ipfw. Тип файервола открытый.
Добавляем в файл /etc/rc.conf следующие строки:
ifconfig_le0 = "inet IP интерфеса смотрящего наружу netmask маска"
ifconfig_le1 = "inet IP интерфеса смотрящего внутрь netmask маска"
default_gateway = "IP шлюза (тот что смотрит в инет)"
firewall_enable="YES"
gateway_enable=YES"
natd_enable="YES"
firewall_type = "open" - открытый файервол
router_enable = "YES"
router = "/sbin/routed"
default_router = "IP шлюза (тот что смотрит в инет)"
natd_interface = "le0"
natd_flags = " " (тут именно пробел, без пробела не работает(()
Запуск и перезапуск файервола осуществляется скриптом /etc/rc.d/ipfw