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

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

5 min read Сеть Обновлено 09 Nov 2025
IPFW на FreeBSD 12.0 — настройка и логирование
IPFW на 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"

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

Скриншот редактирования /etc/rc.conf

Далее запустите сервис ipfw:

service ipfw start

После запуска вас может разъединить — потребуется повторный вход по SSH.

Проверьте активные правила:

ipfw list

Вывод 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"

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

Указание пути к скрипту правил в /etc/rc.conf

Создайте файл /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 list с пользовательскими правилами

В результате IPFW запущен с правилами из /usr/local/etc/ipfw.rules.

3. Включение логирования IPFW

IPFW поддерживает два типа логирования:

  1. Событийное логирование через системный лог (firewall_logging=”YES”).
  2. Псевдо-логирование через интерфейс 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

Пример event-логов IPFW в /var/log/security

  • Если используется псевдоинтерфейс ipfw0, можно смотреть пакеты через tcpdump:
tcpdump -t -n -i ipfw0

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

Рекомендации по безопасности и эксплуатационные советы

  • Всегда сохраняйте удалённую сессию и тестовый доступ (например, консоль облака) перед перезапуском 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.
  • Документировать причину каждого правила.

Мини-методология внедрения (пошагово)

  1. Подготовка: сохраните конфигурации и обеспечьте консольный доступ.
  2. Разработка: сформируйте локальный ipfw.rules и протестируйте на тестовом хосте.
  3. Развертывание: примените скрипт и аккуратно запустите сервис.
  4. Валидация: проверьте ipfw list, доступы сервисов и логи.
  5. Мониторинг и итерации: корректируйте правила по мере появления телеметрии.

Критерии приёмки

  • 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. Всегда тестируйте правила и держите план отката.

Источники

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

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

Троян Herodotus: как он действует и как защититься
Кибербезопасность

Троян Herodotus: как он действует и как защититься

Включить новое меню «Пуск» в Windows 11
Windows 11

Включить новое меню «Пуск» в Windows 11

Панель полей PivotTable в Excel — руководство
Excel

Панель полей PivotTable в Excel — руководство

Включить новый Пуск в Windows 11 — инструкция
Windows

Включить новый Пуск в Windows 11 — инструкция

Дубликаты Диспетчера задач в Windows 11 — как исправить
Windows

Дубликаты Диспетчера задач в Windows 11 — как исправить

Как посмотреть историю просмотров Reels в Instagram
Социальные сети

Как посмотреть историю просмотров Reels в Instagram