Ответ
Чтобы правила iptables сохранялись после перезагрузки, я использую один из следующих подходов, в зависимости от дистрибутива и предпочтений.
1. Использование пакета iptables-persistent (Debian/Ubuntu)
Это самый простой способ. Пакет автоматически загружает сохранённые правила при старте системы.
sudo apt-get install iptables-persistent
# Во время установки вам предложат сохранить текущие правила IPv4 и IPv6.
# Для ручного сохранения после внесения изменений:
sudo netfilter-persistent save
2. Ручное сохранение и восстановление правил (Универсальный метод) Я сохраняю текущие правила в файл и настраиваю их загрузку при загрузке системы.
# Сохраняем текущие правила в файл
sudo iptables-save > /etc/iptables/rules.v4
sudo ip6tables-save > /etc/iptables/rules.v6
Затем нужно обеспечить загрузку этих правил. В системах с systemd я создаю и включаю простой сервис:
# /etc/systemd/system/iptables-restore.service
[Unit]
Description=Restore iptables rules
After=network.target
[Service]
Type=oneshot
ExecStart=/sbin/iptables-restore /etc/iptables/rules.v4
ExecStart=/sbin/ip6tables-restore /etc/iptables/rules.v6
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
# Включаем сервис
sudo systemctl enable iptables-restore.service
3. Использование встроенных средств дистрибутива
В некоторых дистрибутивах (например, CentOS/RHEL) можно использовать службу iptables:
# Сохраняем правила в конфигурационный файл службы
sudo service iptables save
# Правила сохранятся в /etc/sysconfig/iptables
Ключевой момент: Всегда проверяю, что правила корректно применяются после перезагрузки, выполняя sudo iptables -L -n.