#Что означает ошибка
Правила nftables сбрасываются после запуска firewalld
В Rocky Linux firewalld управляет правилами nftables сам, поэтому ручные правила nft или файл /etc/sysconfig/nftables.conf перезаписываются при запуске firewalld. Две системы управления брандмауэром одновременно создают путаницу: правила то пропадают, то дублируются.
Нужно выбрать одну схему и придерживаться её.
Для большинства серверов проще оставить firewalld.
Firewalld сам управляет nftables и заменяет ручные правила. Используйте либо firewalld, либо nftables — не смешивайте.
#Причины и решения
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Два менеджера | Конфликт. | Выберите один. |
| Автозапуск | Обе службы. | Отключите одну. |
| Ручные правила | Сбрасываются. | Перенесите в firewalld. |
| Зоны | Неверные. | Проверьте. |
#Пошаговое решение
- Проверьте, какой сервис активенНа сервере Rocky Linux с консольным доступом выполните
systemctl is-active firewalldиsystemctl is-active nftables, а затемsudo nft list ruleset. Если обе службы активны, запишите, какие правила и цепочки присутствуют, и выясните, кто ими управляет. Само наличие правил nftables при включённом firewalld нормально: firewalld часто использует nftables как внутренний механизм. Конфликт возникает при независимом управлении одними и теми же цепочками; не останавливайте firewalld, пока не проверили доступ по SSH. - Выберите одну схемуСначала проверьте, какие службы управления правилами установлены:
systemctl status firewalld nftables --no-pagerиsudo nft list ruleset. На рабочем сервере не останавливайте действующий межсетевой экран по SSH без консоли провайдера и сохранённых правил. Выберите один способ управления правилами для постоянной конфигурации, перенесите необходимые разрешения и только затем отключайте дублирующую службу. - Отключите второй сервисНа сервере не выполняйте
systemctl disable --nowбез точного имени службы: это немедленно остановит выбранный брандмауэр и может оборвать SSH. Сначала через консоль провайдера проверьтеsystemctl is-active firewalld nftablesиsudo nft list ruleset, сохраните действующие правила и убедитесь, что нужный SSH-порт разрешён в выбранной системе. После переноса правил и подготовки отката администратор может отключить только реально лишнюю службу, а затем проверить доступ с нового SSH-сеанса. Если консоль недоступна, отложите смену схемы управления. - Задайте правила в выбранной системеВыберите один способ управления правилами, согласованный с администратором сервера. Если используется firewalld, проверяйте активные зоны
sudo firewall-cmd --get-active-zonesи добавляйте разрешения черезfirewall-cmd, сохраняя доступ к SSH. Если применяется самостоятельная конфигурация nftables, храните её в системе управления конфигурацией и проверяйте перед загрузкой командойsudo nft -c -f /etc/sysconfig/nftables.confтолько если именно этот файл используется вашим сервисом. Не применяйтеflush rulesetчерез SSH. - Проверьте итоговые правилаПосле изменений проверьте правила
sudo nft list ruleset, затем активную конфигурацию firewalldsudo firewall-cmd --list-all(если служба используется) и доступ к нужному порту с другого доверенного устройства. Оставьте текущий SSH-сеанс открытым, пока не проверите новый. Если доступ пропал, восстановите правило через консоль провайдера или заранее подготовленный откат; не отключайте межсетевой экран целиком в качестве проверки. - После изменения правил проверьте удалённый доступЕсли сервер доступен только через SSH, заранее откройте отдельную проверочную сессию и обеспечьте доступ к консоли. После точечной корректировки firewalld/nftables проверьте подключение SSH и нужных служб, затем сохраните правила в поддерживаемом формате. Если связь пропала, используйте консоль для возврата исходной конфигурации, а не автоматический сброс всех правил.
- Состояние обеих службLinux · Терминал (Bash)КомандаНужен sudoСостояние обеих служб.
sudo systemctl status firewalld nftables
#Диагностика
Проверьте, что запущено: systemctl is-active firewalld nftables. Текущие правила: sudo nft list ruleset и sudo firewall-cmd --list-all. Если активны оба сервиса, отключите один. Правила firewalld видны в таблицах inet firewalld; свои таблицы nft от пользователя firewalld не трогает, если они в других таблицах, но пересечения по хукам влияют на порядок.
#Вариант 1: firewalld
Отключите nftables: sudo systemctl disable --now nftables. Открывайте порты через firewalld: sudo firewall-cmd --permanent --add-port=8080/tcp, службы: --add-service=http, затем sudo firewall-cmd --reload. Для особых случаев используйте rich rules или direct-правила: firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 0 -s 203.0.113.5 -j DROP. Проверка: sudo firewall-cmd --list-all.
#Вариант 2: чистый nftables
Отключите firewalld: sudo systemctl disable --now firewalld и (по желанию) sudo systemctl mask firewalld. Включите nftables: sudo systemctl enable --now nftables. Правила храните в /etc/sysconfig/nftables.conf или /etc/nftables/*.nft; применяйте sudo nft -f /etc/sysconfig/nftables.conf. Проверьте синтаксис: sudo nft -c -f файл. Не забудьте разрешить SSH до включения политики drop, иначе потеряете доступ.
systemctl is-active firewalld nftablessudo firewall-cmd --list-allsudo nft list ruleset | head -50