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

Запустите сервис:
service ipfw startВы будете разорваны сессией SSH и потребуется повторный вход.
После повторного входа проверьте список правил:
ipfw listРезультат покажет набор правил, соответствующих типу “workstation” и открытым портам.

2. Настройка IPFW с пользовательскими правилами
В этой секции мы подключим внешний файл со скриптом правил и создадим пример ipfw.rules.
Откройте /etc/rc.conf и укажите путь к скрипту правил:
vim /etc/rc.confДобавьте или измените строки:
# включить брандмауэр
firewall_enable="YES"
# путь к скрипту с пользовательскими правилами
firewall_script="/usr/local/etc/ipfw.rules"
# логирование через интерфейс ipfw0
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
# Очистим список перед началом
ipfw -q -f flush
# Префикс команды добавления правила
cmd="ipfw -q add"
pif="vtnet0"
# Отключить ограничения на localhost
$cmd 0010 allow all from any to any via lo0
# Разрешить исходящие подключения, DHCP и ICMP 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
# Проверять состояние динамической таблицы
$cmd check-state
# Разрешить базовые сервисы 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
# Запретить всё остальное и логировать
$cmd 001000 deny log ip from any to any in via $pifСохраните и закройте файл.
Запустите сервис:
service ipfw startПосле повторного входа проверьте список правил:
ipfw list
3. Включение логирования IPFW
IPFW поддерживает обычное событие логирования и псевдо-интерфейс ipfw0. Оба варианта конфигурируются в /etc/rc.conf.
Пример для обычного event-логирования (включает запись в системные логи):
firewall_logging="YES"Пример для псевдо-интерфейса ipfw0:
firewall_logif="YES"Ограничьте объём подробных сообщений ядра через /etc/sysctl.conf:
echo "net.inet.ip.fw.verbose_limit=5" >> /etc/sysctl.confПерезагрузите систему, чтобы настройки вступили в силу:
sudo rebootЕсли включено стандартное логирование, записи появятся в /var/log/security:
tail -f /var/log/securityЕсли используется псевдо-интерфейс ipfw0, можно смотреть в tcpdump:
tcpdump -t -n -i ipfw0
Контрольный список перед развёртыванием
- Сделать бэкап /etc/rc.conf и текущих ipfw настроек.
- Подготовить плейбук или скрипт отката (удаление ipfw_script, firewall_enable=NO).
- Открыть SSH-порт в правилах перед включением, чтобы не потерять доступ.
- Тестировать в консоли локального доступа или через KVM перед применением на проде.
Мини‑методология безопасного развёртывания
- Подготовьте тестовую машину с такой же сетевой схемой.
- Пропишите минимальный набор правил, включая допуск SSH и локального loopback.
- Примените правила локально и проверьте соединение.
- Включите логирование и наблюдайте за попытками блокировок.
- Постепенно добавляйте разрешения и снижайте leniency.
- Документируйте каждое изменение.
Шаблон ipfw.rules — быстрый cheat sheet
- $cmd check-state — проверяет таблицу состояний и должен идти до deny-политики.
- keep-state — ставится для исходящих/установленных соединений.
- log — добавляет запись в журналы для правила.
- deny log ip from any to any in via $pif — «catch-all» правило для внешнего интерфейса.
Пример минимального шаблона (повтор, но для печати):
#!/bin/sh
ipfw -q -f flush
cmd="ipfw -q add"
pif="vtnet0"
$cmd 0010 allow all from any to any via lo0
$cmd 0011 allow all from any to any out keep-state
$cmd check-state
$cmd 120 allow log tcp from any to any 22 in
$cmd 150 allow tcp from any to any 80 in
$cmd 001000 deny log ip from any to any in via $pifРекомендации по безопасности и hardening
- Минимизируйте список открытых портов и применяйте принцип наименьших привилегий.
- Используйте stateful-проверки (keep-state) для контроля ответного трафика.
- Логируйте deny-правила, но контролируйте объём логов через verbose_limit.
- Разграничьте правила для внутренних и внешних интерфейсов.
- Обновляйте FreeBSD и следите за уязвимостями ipfw (CVE-оценки проверять в официальной документации).
Альтернативы и миграция
Если IPFW не подходит, можно рассмотреть:
- PF (pf) — гибкий packet filter, который часто предпочитают в OpenBSD/FreeBSD-сообществах.
- IPFILTER (ipf) — другое решение, поддерживаемое в BSD-системах.
При миграции учтите отличия синтаксиса, механизмов stateful и доступных helper’ов. Тестируйте правила по одному и используйте промежуточный период для мониторинга.
Отладка и типичные проблемы
- Проблема: потерян доступ по SSH после запуска ipfw. Решение: до включения убедитесь, что SSH порт открыт (firewall_myservices или правило 22). Подключитесь через консоль/СерверКВМ и правьте /etc/rc.conf.
- Не видны логи: проверьте firewall_logif / firewall_logging и net.inet.ip.fw.verbose_limit.
- Правила не применяются: проверьте синтаксис скрипта, права доступа и что firewall_script указывает на существующий файл.
Контрольные списки по ролям
Системный администратор:
- Создать и протестировать ipfw.rules в изолированной среде.
- Обеспечить сохранность бэкапов конфигураций.
- Настроить ротацию логов и мониторинг.
DevOps инженер:
- Автоматизировать развёртывание правил через конфигурационные менеджеры.
- Написать playbook для отката и проверки доступности сервисов.
Сетевой инженер:
- Сверить правила ipfw с топологией сети и NAT.
- Проверить соответствие с DMZ и внутренними VLAN.
Критерии приёмки
- Система загружается с включённым firewall_enable.
- SSH и необходимые сервисы доступны после включения.
- deny-правила логируются и логи поступают в /var/log/security или через ipfw0.
- Отсутствуют неожиданные блокировки легитимного трафика в рабочем окне мониторинга.
Глоссарий (1 строка)
- stateful: отслеживание состояния TCP/UDP соединений для корректного разрешения ответного трафика.
Когда IPFW не подходит
- Требуется продвинутая фильтрация на уровне приложений (WAF) — IPFW реализует сетевые правила, но не парсит HTTP/SL
- Нужна унифицированная конфигурация в смешанном окружении с преимущественно Linux-серверами — возможно удобнее использовать сетевые устройства/контроллеры или iptables/ nftables в Linux.
Итог
IPFW входит в FreeBSD и обеспечивает гибкий stateful-фильтр. Для безопасного развёртывания: всегда делайте бэкап, держите SSH доступ открытым при включении, применяйте логирование и тестируйте правила в изолированной среде. Используйте представленные шаблоны и чеклисты для ускорения внедрения.
Ссылки:
- Официальная документация FreeBSD: https://www.freebsd.org/doc/
Похожие материалы
RDP: полный гид по настройке и безопасности
Android как клавиатура и трекпад для Windows
Советы и приёмы для работы с PDF
Calibration в Lightroom Classic: как и когда использовать
Отключить Siri Suggestions на iPhone