Почему правила iptables сбрасываются после перезагрузки сервера? Потому что iptables хранит правила только в оперативной памяти и не записывает их автоматически в конфигурационные файлы. После перезагрузки ядро поднимает пустые цепочки, и всё, что вы добавляли командами вручную, исчезает.
Решение известно и отработано: правила нужно сохранить в файл и настроить их автоматическую загрузку при старте системы. На Debian и Ubuntu это делается через пакет iptables-persistent — команда netfilter-persistent save создаёт файл /etc/iptables/rules.v4, а netfilter-persistent reload применяет его; на RHEL, CentOS и AlmaLinux используется service iptables save с записью в /etc/sysconfig/iptables и включённый юнит iptables. Универсальный вариант, работающий на любом дистрибутиве, — свой systemd-юнит, который вызывает iptables-restore с заранее подготовленным дампом, снятым через iptables-save. Практический чек-лист внедрения выглядит так: снять текущий набор правил в файл, проверить его синтаксис командой iptables-restore –test, настроить автозагрузку через штатный пакет или собственный юнит, перезагрузить сервер и убедиться, что цепочки INPUT, FORWARD и OUTPUT восстановились полностью. Отдельный нюанс — docker и подобные сервисы вставляют свои цепочки при запуске, поэтому порядок применения правил и их совместимость с контейнерным трафиком нужно проверять отдельно, иначе рабочие правила могут перекрыть доступ к приложениям. Если нужно быстро и без риска потерять удалённый доступ к серверу, эту работу вместе с настройкой базовой защиты, ограничением портов и проверкой после перезагрузки можно заказать — специалист подготовит конфигурацию, протестирует её на стенде и передаст вам готовые файлы и инструкцию по восстановлению.
