SystemdDoctor

Брандмауэр не загрузился при старте: ошибка в наборе правил

Отказ загрузки правил опаснее отказа любой другой службы: машина остаётся доступной без фильтрации, и заметить это можно только проверкой. Служба при этом честно сообщает об ошибке в журнал — вопрос лишь в том, читает ли его кто-нибудь.

Вероятные причины

По порядку: сверху то, что встречается чаще.

  1. Ошибка в наборе правил

    Набор применяется целиком. Ошибка в одной строке означает, что не применится ничего.

  2. Правило ссылается на интерфейс или объект, которого нет

    Правило с именем несуществующего интерфейса отвергается при загрузке. При загрузке системы интерфейс может ещё не появиться.

  3. Правила загружаются раньше другой службы, которая их перезаписывает

    Средства контейнеров и балансировки создают свои цепочки. Порядок загрузки определяет итоговый набор.

Диагностика

Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.

Проверка набора правил без применения.

sudo nft -c -f /etc/nftables.conf

Что загружено прямо сейчас.

sudo nft list ruleset | head -30

Состояние службы загрузки правил.

systemctl status nftables --no-pager | head -8

Решение

Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.

1. Ошибка в наборе правил
Почему происходит
Набор применяется целиком. Ошибка в одной строке означает, что не применится ничего.
Как проверить
Проверьте набор без применения и посмотрите сообщение.
sudo nft -c -f /etc/nftables.conf 2>&1 | head
journalctl -u nftables -n 20 --no-pager
Как исправить
Исправьте ошибку по сообщению и проверяйте набор до применения. Проверка без применения — обязательный шаг при правке правил на удалённой машине.
2. Правило ссылается на интерфейс или объект, которого нет
Почему происходит
Правило с именем несуществующего интерфейса отвергается при загрузке. При загрузке системы интерфейс может ещё не появиться.
Как проверить
Посмотрите правила с именами интерфейсов и фактические имена.
grep -nE "iif|oif" /etc/nftables.conf 2>/dev/null | head
ip -brief link
Как исправить
Используйте группы интерфейсов вместо жёстких имён или добавьте зависимость от готовности сети. Имена интерфейсов меняются при замене оборудования.
3. Правила загружаются раньше другой службы, которая их перезаписывает
Почему происходит
Средства контейнеров и балансировки создают свои цепочки. Порядок загрузки определяет итоговый набор.
Как проверить
Посмотрите итоговый набор и порядок запуска.
sudo nft list ruleset 2>/dev/null | head -20
systemctl show nftables -p After -p Before
Как исправить
Разведите наборы по отдельным таблицам и задайте порядок загрузки. Один общий набор, который переписывают несколько служб, всегда приводит к неожиданностям.

Пример вывода

Правило ссылается на интерфейс, которого нет. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.

nft[630]: /etc/nftables.conf:14:18-24: Error: Interface does not exist
nft[630]: 		iifname "eth1" accept
nft[630]: 		          ^^^^^^
systemd[1]: nftables.service: Main process exited, code=exited, status=1/FAILURE
systemd[1]: Failed to start nftables.service - nftables.

Связанные ошибки

Где встречается чаще всего

Источники

  • nft(8)
    Проверка и загрузка наборов правил.
    официальная документация, systemd 255
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
    Воспроизведено правилом с именем несуществующего интерфейса.
    собственная проверка, systemd 255
    сверено 15 сентября 2026