Вопрос или проблема
В моем терминале я пишу:
sudo nft add table inet f2b-table
systemctl reload nftables.service
затем:
sudo nft list ruleset
результат в терминале (ок):
table inet f2b-table { }
Но когда я открываю nftables.conf, почему таблица inet f2b не отображается
почему она отображается в терминале, а не в nftables.conf (это два разных файла?)
Что нужно сделать, чтобы обновить nftables.conf?
Вы обновили таблицы в ядре (не в файле).
Если вы обновите файл, то он будет в файле.
Если затем вы скажете nft перечитать файл, то он будет скопирован в ядро.
Все конфигурационные файлы Unix — это просто файлы. В какой-то момент они читаются и загружаются в ядро или программу, которую они настраивают. nftables.conf
будет загружен при запуске системы, и, скорее всего, когда вы перезапустите nft
или сообщите ему перезагрузить конфигурацию.
Вероятно, есть способ заставить ядро выгрузить данные, которые можно было бы скопировать в файл. Однако это также включит данные, которые уже присутствовали до изменения.
Когда я посмотрел на вики nftables, я нашел только эту страницу, которая касается загрузки таблиц из файла: https://wiki.nftables.org/wiki-nftables/index.php/Scripting
Страница описывает, как команда nft -f filename
загрузит конфигурацию таблицы из файла, но нет соответствующей команды для сохранения конфигурации в файл.
Есть краткое упоминание, что вывод команд “nft list” является одним из допустимых синтаксисов для файла. Это подразумевает, что nft list ruleset > filename
создаст файл, который может быть прочитан “nft -f”
Почему команда systemctl reload nftables.service
этого не сделала? Очевидно, конфигурация systemctl, созданная сопровождающим пакета, не выполняет действие сохранения в файл. Возможно, она выполняет только действие чтения из файла. У меня нет более подробной информации, так как у меня нет компьютера с фильтрацией пакетов NFT, и вы не упомянули, с какой версией Linux/Unix вы работаете.
Ответ или решение
Добавление правил в nftables.conf
может быть непонятным и вызывать вопросы, особенно если вы только начинаете работать с файловым конфигурированием в Unix-системах. Ваша ситуация отлично иллюстрирует разницу между временными изменениями конфигурации в ядре и постоянными изменениями в конфигурационных файлах. Давайте углубимся в детали, которые помогут вам понять, как работает система и как можно внести изменения так, чтобы они сохранились.
Теоретическая часть
nftables
— это фреймворк для фильтрации пакетов в Linux, пришедший на замену iptables
. Одной из ключевых его особенностей является то, что изменения в правилах фильтрации обычно вносятся в реальном времени напрямую в ядро, а не в конфигурационные файлы. Это позволяет мгновенно применять изменения, но при перезагрузке системы все непостоянные изменения будут потеряны, если они не сохранены в файл.
Когда вы вводите команду sudo nft add table inet f2b-table
, вы создаете новую таблицу в динамической конфигурации ядра, но не в конфигурационном файле /etc/nftables.conf
. Команда systemctl reload nftables.service
обычно используется для перезагрузки службы и применения конфигурации из файла, а не для записи текущей конфигурации ядра в файл.
Пример
Вы наблюдали, что команда sudo nft list ruleset
показывает таблицу inet f2b-table
, что означает успешное добавление таблицы в ядро. Однако, открывая nftables.conf
, вы не находите этой таблицы, так как файл не обновлен автоматически.
Пример из реальной работы будет следующим: Создайте правило в ядре командой sudo nft add table inet my-table
и убедитесь в его наличии, используя sudo nft list ruleset
. Однако, после перезагрузки системы или службы, если правило не было добавлено в конфигурационный файл, оно исчезнет.
Применение
Чтобы сохранить изменения в nftables.conf
, следуйте следующим шагам:
-
Вывод текущего состояния правил в файл:
Используйте команду:
sudo nft list ruleset > /etc/nftables.conf
Это создаст снимок текущей конфигурации правил, включающий все временные изменения, в файл.
-
Редактирование конфигурационного файла вручную:
Откройте
/etc/nftables.conf
в текстовом редакторе, таком какnano
илиvim
, и внесите необходимые правки. Например, добавление специфических правил фильтрации или изменения структуры. -
Перезагрузка конфигурации:
Примените изменения, используя команду:
sudo nft -f /etc/nftables.conf
Или перезагрузите службу:
sudo systemctl restart nftables.service
-
Учтите конфигурацию системы:
Убедитесь, что ваш дистрибутив Linux правильно настроен. Некоторые дистрибутивы могут иметь различные конфигурационные файлы или способы инициализации, поэтому документация вашего дистрибутива может предложить дополнительную информацию о том, как лучше интегрировать изменения.
Подводя итог, работа с nftables
требует понимания, что изменения в ядре временные и для их постоянного сохранения необходимо редактировать конфигурационные файлы. Это позволяет управлять сложной системой фильтрации пакетов, делая ее мощным инструментом в руках опытного администратора. Правильная интеграция и сохранение правил в конфигурационных файлах обеспечат непрерывность и стабильность ваших изменений при перезагрузке системы или служебных процессов.