Гид по технологиям

Настройка IPFW на FreeBSD 12.0

5 min read Безопасность сети Обновлено 16 Nov 2025
IPFW на FreeBSD 12.0: базовая настройка
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"

Сохраните и закройте файл.

Включение ipfw: правка /etc/rc.conf

Запустите сервис:

service ipfw start

Вы будете разорваны сессией SSH и потребуется повторный вход.

После повторного входа проверьте список правил:

ipfw list

Результат покажет набор правил, соответствующих типу “workstation” и открытым портам.

Список правил ipfw


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"

Сохраните и закройте файл.

Указание пользовательского скрипта firewall_script

Создадим файл /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

Пользовательские правила ipfw в списке


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

Просмотр логов ipfw через интерфейс ipfw0


Контрольный список перед развёртыванием

  • Сделать бэкап /etc/rc.conf и текущих ipfw настроек.
  • Подготовить плейбук или скрипт отката (удаление ipfw_script, firewall_enable=NO).
  • Открыть SSH-порт в правилах перед включением, чтобы не потерять доступ.
  • Тестировать в консоли локального доступа или через KVM перед применением на проде.

Мини‑методология безопасного развёртывания

  1. Подготовьте тестовую машину с такой же сетевой схемой.
  2. Пропишите минимальный набор правил, включая допуск SSH и локального loopback.
  3. Примените правила локально и проверьте соединение.
  4. Включите логирование и наблюдайте за попытками блокировок.
  5. Постепенно добавляйте разрешения и снижайте leniency.
  6. Документируйте каждое изменение.

Шаблон 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 доступ открытым при включении, применяйте логирование и тестируйте правила в изолированной среде. Используйте представленные шаблоны и чеклисты для ускорения внедрения.

Ссылки:

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

RDP: полный гид по настройке и безопасности
Инфраструктура

RDP: полный гид по настройке и безопасности

Android как клавиатура и трекпад для Windows
Гайды

Android как клавиатура и трекпад для Windows

Советы и приёмы для работы с PDF
Документы

Советы и приёмы для работы с PDF

Calibration в Lightroom Classic: как и когда использовать
Фото

Calibration в Lightroom Classic: как и когда использовать

Отключить Siri Suggestions на iPhone
iOS

Отключить Siri Suggestions на iPhone

Рисование таблиц в Microsoft Word — руководство
Office

Рисование таблиц в Microsoft Word — руководство