Настройка IPFW (IPFireWall) на FreeBSD 12.0
Краткий обзор IPFW
IPFW (IPFireWall) — это stateful-файрвол, поддерживаемый FreeBSD. Он умеет работать с IPv4 и IPv6 и включён в базовую установку FreeBSD. Для активации обычно достаточно добавить параметры в файл конфигурации запуска /etc/rc.conf.
Определения терминов:
- Stateful: отслеживает состояние соединений и позволяет разрешать ответы на исходящие запросы.
- Псевдоинтерфейс ipfw0: интерфейс, через который можно получать лог-пакеты из ядра.
Важно: если вы работаете на удалённом сервере, большинство действий по перезапуску firewall приведут к разрыву текущих SSH-подключений — подготовьтесь заранее.
Что мы сделаем
- Базовая настройка IPFW
- Настройка IPFW с пользовательскими правилами
- Включение логирования
1. Базовая настройка IPFW
Ниже переведены и объяснены стандартные типы firewall, поставляемые с FreeBSD:
- open: пропускает весь трафик.
- client: защищает только локальную машину.
- simple: защищает всю сеть.
- closed: блокирует весь IP-трафик, кроме loopback.
- workstation: защищает только локальную машину, использует stateful-правила.
- UNKNOWN: не загружает правила файрвола.
- filename: полный путь к файлу с набором правил.
В примере мы используем тип “workstation” и затем указываем порты сервисов, которые должны быть открыты.
Откройте /etc/rc.conf в редакторе (пример с vim):
vim /etc/rc.confВключите IPFW, добавив или изменив строку:
# enable firewall
firewall_enable="YES"Задайте тип файрвола по умолчанию:
# set the default rule and services
firewall_type="workstation"Определите порты сервисов, которые хотите открыть (пример):
# services port
firewall_myservices="22 80 443 67 10000"
firewall_allowservices="any"
firewall_logdeny="YES"Включение логирования (вариант с псевдоинтерфейсом):
# enable logging
#firewall_logging="YES"
firewall_logif="YES"Сохраните файл и закройте редактор.

Далее запустите сервис ipfw:
service ipfw startПосле запуска вас может разъединить — потребуется повторный вход по SSH.
Проверьте активные правила:
ipfw list
В результате вы получите активный IPFW с типом “workstation” и перечисленными сервисными портами.
2. Настройка IPFW с пользовательскими правилами
Для более гибкой конфигурации используйте свой скрипт правил, например /usr/local/etc/ipfw.rules.
Откройте /etc/rc.conf и укажите путь к скрипту правил:
vim /etc/rc.confДобавьте или измените строки:
# enable firewall
firewall_enable="YES"
# custom rule script
firewall_script="/usr/local/etc/ipfw.rules"
# enable logging
firewall_logif="YES"Сохраните и закройте файл.

Создайте файл /usr/local/etc/ipfw.rules. Это shell-скрипт, который вызывает команду ipfw и добавляет правила.
Пример базового синтаксиса правила ipfw (упрощённо):
CMD RULE_NUMBER set SET_NUMBER ACTION log LOG_AMOUNT PROTO from SRC SRC_PORT to DST DST_PORT OPTIONSПример создания файла и содержимого:
cd /usr/local/etc/
vim ipfw.rulesПример содержимого ipfw.rules:
#!/bin/sh
# Flush out the list before we begin.
ipfw -q -f flush
# Set rules command prefix
cmd="ipfw -q add"
pif="vtnet0"
# Disable Restriction on localhost
$cmd 0010 allow all from any to any via lo0
# Allow Outgoing, DHCP, Ping
$cmd 0011 allow all from any to any out keep-state
$cmd 0012 allow log udp from any to any 67 out via $pif keep-state
$cmd 0013 allow log icmp from any to me icmptype 0,8 in via $pif keep-state
# Allows the packet through if it matches an existing entry
$cmd check-state
# Allow Services FTP, SSH, MAIL, DNS, HTTP, HTTPS
$cmd 110 allow tcp from any to any 21 in
$cmd 120 allow log tcp from any to any 22 in
$cmd 130 allow tcp from any to any 25 in
$cmd 140 allow udp from any to any 53 in
$cmd 150 allow tcp from any to any 80 in
$cmd 160 allow tcp from any to any 443 in
# deny everything else and log it
$cmd 001000 deny log ip from any to any in via $pifПояснения к ключевым строкам:
- ipfw -q -f flush: очищает текущие правила перед применением новых.
- cmd=”ipfw -q add”: упрощает добавление правил через переменную.
- pif=”vtnet0”: указывает внешний интерфейс; замените на ваш (например, em0, re0, enp0s3).
- check-state: проверяет динамическую таблицу состояний, чтобы разрешить возвратный трафик.
- deny log ip from any to any in via $pif: конечная строка для блокировки и логирования всего остального.
Сделайте скрипт исполняемым, затем запустите сервис:
chmod +x /usr/local/etc/ipfw.rules
service ipfw startПосле чего будет разрыв соединения (если вы работали удалённо) и потребуется повторный вход. Проверьте правила снова:
ipfw list
В результате IPFW запущен с правилами из /usr/local/etc/ipfw.rules.
3. Включение логирования IPFW
IPFW поддерживает два типа логирования:
- Событийное логирование через системный лог (firewall_logging=”YES”).
- Псевдо-логирование через интерфейс ipfw0 (firewall_logif=”YES”).
Примеры конфигурации в /etc/rc.conf:
# Включить события ядра в лог
firewall_logging="YES"
# Включить псевдоинтерфейс для логов
firewall_logif="YES"Ограничение объёма логов в ядре задаётся через sysctl. Добавьте или измените параметр:
echo "net.inet.ip.fw.verbose_limit=5" >> /etc/sysctl.confПосле изменения рекомендуется перезагрузить систему для полной инициализации настроек сетевого слоя:
sudo rebootПроверка логов:
- Если включено event-логирование (firewall_logging=”YES”), события пишутся в /var/log/security:
tail -f /var/log/security
- Если используется псевдоинтерфейс ipfw0, можно смотреть пакеты через tcpdump:
tcpdump -t -n -i ipfw0
Рекомендации по безопасности и эксплуатационные советы
- Всегда сохраняйте удалённую сессию и тестовый доступ (например, консоль облака) перед перезапуском firewall.
- Указывайте конкретные внешние интерфейсы в скрипте (pif) — не используйте универсальные шаблоны без понимания топологии.
- Ограничивайте список открытых портов принципом наименьших привилегий: открывайте только то, что действительно нужно.
- Логируйте только критичные события и используйте rate-limit/фильтрацию логов, чтобы не заполнять диск.
Important: перед разворачиванием в проде протестируйте правила в тестовой среде и создайте план отката.
Отладка и устранение неполадок
Частые симптомы и подходы:
- После старта firewall нет сетевого доступа: подключитесь к консоли провайдера/облачной панели и проверьте, не блокируется ли SSH-порт. Если да — загрузите систему в single-user или временно удалите строки firewall_enable/ firewall_script в /etc/rc.conf.
- Правила не применяются: убедитесь, что ipfw загружен (kldstat / kldload при необходимости) и что файл скрипта исполняемый.
- Логов нет: проверьте firewall_logging и firewall_logif в /etc/rc.conf, а также net.inet.ip.fw.verbose_limit в /etc/sysctl.conf.
Короткая команда для быстрой диагностики состояния ipfw:
service ipfw onestatus || ipfw list || dmesg | grep ipfwШаблоны и чек-листы
Чек-лист администратора (перед применением правил на проде):
- Сохранён доступ на консоль/панель управления.
- Резервная копия /etc/rc.conf и /usr/local/etc/ipfw.rules.
- Тестовый план с выполнимыми шагами отката.
- Логирование и мониторинг настроены.
Чек-лист для инженера безопасности:
- Минимизировать открытые порты.
- Включить логирование с ротацией логов.
- Проверить правила на наличие широких allow from any.
- Документировать причину каждого правила.
Мини-методология внедрения (пошагово)
- Подготовка: сохраните конфигурации и обеспечьте консольный доступ.
- Разработка: сформируйте локальный ipfw.rules и протестируйте на тестовом хосте.
- Развертывание: примените скрипт и аккуратно запустите сервис.
- Валидация: проверьте ipfw list, доступы сервисов и логи.
- Мониторинг и итерации: корректируйте правила по мере появления телеметрии.
Критерии приёмки
- IPFW запускается без ошибок и показывает применённые правила (ipfw list).
- Разрешён доступ к необходимым сервисам (SSH, HTTP и т. д.) и блокируется ненужный трафик.
- Логирование работает и записи появляются в /var/log/security или на интерфейсе ipfw0.
Короткий глоссарий (1 строка)
- IPFW: штатный файрвол FreeBSD; stateful фильтр пакетов.
- ipfw0: псевдоинтерфейс ядра для вывода логов IPFW.
Короткое резюме
IPFW на FreeBSD — надёжный и гибкий stateful-файрвол. Для базовой работы достаточно задать firewall_enable и firewall_type в /etc/rc.conf, для гибкой конфигурации используйте собственный скрипт правил и включите логирование через firewall_logif или firewall_logging. Всегда тестируйте правила и держите план отката.
Источники
- Официальная документация FreeBSD: https://www.freebsd.org/doc/
Похожие материалы
Троян Herodotus: как он действует и как защититься
Включить новое меню «Пуск» в Windows 11
Панель полей PivotTable в Excel — руководство
Включить новый Пуск в Windows 11 — инструкция
Дубликаты Диспетчера задач в Windows 11 — как исправить