После перехода системы настройки сетевых интерфейсов с ifupdown на netplan, перестали работать старые способы загрузки правил iptables. Перестали выполняться скрипты в /etc/network/if-pre-up.d/, как и в других if-up.d, if-down.d директориях. Актуально для Ubuntu Server 20 или Ubuntu Server 22.
Настраиваем автозагрузку правил iptables с помощью netfilter-persistent.
netfilter-persistent — это базовый пакет, обеспечивающий загрузку конфигураций для netfilter с использованием plugin-ориентированной архитектуры.
Это скрипт который вызывается через сервис systemd и запускает другие пользовательские скрипты, которые называются плагинами.
Для работы с iptables существуют плагины, для netfilter-persistent, которые собраны в отдельный пакет iptables-persistent:
/usr/share/netfilter-persistent/plugins.d/15-ip4tables /usr/share/netfilter-persistent/plugins.d/25-ip6tables
Установка iptables-persistent:
apt-get install iptables-persistent
Сохранить текущие правила для IPv4? Yes.
Сохранить текущие правила для IPv6? No.
Проверим что сохранилось:
cat /etc/iptables/rules.v4
Добавим что-нибудь:
iptables -A INPUT -p tcp -m tcp --dport 53 -j ACCEPT
Сохраним текущие правила:
netfilter-persistent save
Проверим что сохранилось:
cat /etc/iptables/rules.v4
Перезагружаемся и проверяем.
По умолчанию перед загрузкой существующие правила iptables очищаются. Изменить это поведение и другие параметры можно в настройках:
/etc/default/netfilter-persistent
iptables -L
Всё работает.