nftables: базовый набор правил
Все команды проверены на Debian/Ubuntu с пакетом nftables и на RHEL/CentOS 8+. На старых системах может потребоваться apt install nftables или yum install nftables.
nftables пришёл на смену iptables, но документация по базовому набору правил часто разрознена. Вот конспект, который использую сам, когда поднимаю файрволл на новой машине.
Создание таблицы inet filter
Таблица семейства inet объединяет IPv4 и IPv6 в одном пространстве имён. Это предпочтительный подход, если на хосте оба стека активны.
Если таблица уже существует, команда вернёт ошибку. Чтобы избежать дублирования при повторном запуске скрипта:
Для полного сброса текущего набора правил перед загрузкой своего набора:
flush ruleset удаляет все правила мгновенно. На продакшен-машине выполняйте это только из консоли, не через удалённый сессию без fallback.
Цепочки input и forward
Цепочки привязываются к таблице и определяют точку входа трафика. Для базового файрволла нужны input (трафик к самому хосту) и forward (проходящий через хост).
Ключевые части в фигурных скобках:
| Компонент | Значение |
|---|---|
type filter | Тип цепочки, стандартный для фильтрации |
hook input / hook forward | Точка перехвата в сетевом стеке |
priority 0 | Приоритет обработки |
policy drop | Политика по умолчанию — отбрасывать |
Синтаксис требует экранирования точек с запятой внутри строки или использования одинарных кавычек, как показано выше.
Если нужно разрешить установленные соединения, добавьте цепочку output с политикой accept или используйте коннект-трекинг в правилах input.
Базовые правила для input
После создания цепочки с политикой drop нужно явно разрешить необходимый трафик. Типичный минимум:
Каждое правило добавляется в конец цепочки. Порядок важен: accept для loopback и established-трафика должен стоять раньше правил с более узкими критериями.
Для логирования отброшенных пакетов перед политикой drop (опционально, но полезно для диагностики):
Логирование добавляет накладные расходы. На высоконагруженных интерфейсах используйте лимиты: limit rate 10/second.
Базовые правила для forward
Цепочка forward нужна, если хост работает как маршрутизатор или NAT-шлюз. Минимальный набор:
Если хост не выполняет маршрутизацию, цепочку forward можно оставить с политикой drop без дополнительных правил.
Для включения IP-forwarding на уровне ядра (если ещё не сделано):
Просмотр и управление правилами
После настройки проверяем текущий набор:
list ruleset выводит полный конфиг, который можно сохранить и использовать как скрипт загрузки.
Удаление конкретного правила по номеру в цепочке:
Номер handle виден в выводе nft list ruleset -a.
Для удаления всей цепочки:
Цепочку можно удалить только если она пуста. Для полного удаления таблицы сначала удалите все цепочки внутри неё.
Сохранение правил в файл для загрузки при перезагрузке:
На системах с systemd включите автозагрузку:
Если /etc/nftables.conf не существует или пуст, сервис не загрузит правила. Создайте файл вручную перед включением сервиса.