Как раз и навсегда сохранить настройки iptables?
Centos 7
Перепробовал разные способы которые предлагают в интернете, однако после перезапуска системы, настройки iptables сбрасываются.
Какой способ используете вы? Centos свежая.
- Вопрос задан более трёх лет назад
- 17093 просмотра
6 комментариев
Оценить 6 комментариев
в centos 7 firewallcmd вроде используется вместо iptables. В centos 6: /etc/init.d/iptables save
Еще можно напрямую записать в /etc/sysconfig/iptables

Александр Карпов @Inkognitoss Автор вопроса
Роман Соколов: ну вот я записал напрямую, рестартанул сервак и не работает. точно правила должны подсасываться из /etc/sysconfig/iptables??
Александр Карпов: смотрите iptables -S Возможно правила неправильно прописаны, поэтому не срабатывают.

Александр Карпов @Inkognitoss Автор вопроса
мне кажется, что люди чего-то недопонимают, когда говорят, что можно через /etc/sysconfig/iptables сохранить настройки при перезапуске. В итоге я использовал firewallcmd чтобы победить проблему. Жаль только потраченное время на нерабочие советы. Спасибо тебе!

Руслан Федосеев @martin74ua
ну так если вы используете firewall — то им и сохраняйте. Лично я его сношу и использую обычный iptables-service
Александр Карпов: Хорошо, пожалуйста.
Решения вопроса 2
lucky_devil @lucky_devil
В CentOS есть сервис /etc/systemd/system/iptables.service в котором написано следующее:
[Service] Type=oneshot ExecStart=/sbin/iptables-restore /etc/iptables/iptables.rules ExecReload=/sbin/iptables-restore /etc/iptables/iptables.rules ExecStop=/etc/iptables/flush-iptables.sh
Поэтому, при перезапуске ваши правила iptables восстанавливаются из /etc/iptables/iptables.rules , а не из /etc/sysconfig/iptables
Вам нужно скопировать содержимое файла /etc/sysconfig/iptables в /etc/iptables/iptables.rules , тогда при перезапуске ничего слетать не будет.
Записки IT специалиста
Основы iptables для начинающих. Как сохранить правила и восстановить их при загрузке
- Автор: Уваров А.С.
- 05.12.2021
Для тех, кто только начинает изучать iptables неприятной неожиданностью оказывается тот факт, что правила брандмауэра не сохраняются и не восстанавливаются при перезагрузке системы. Фактически это означает полностью открытый брандмауэр и такое положение дел нас, естественно, не устраивает. К счастью, в Linux существует несколько способов сохранения единожды введенных правил iptables, поэтому следует изучить их и выбрать наиболее подходящий для вашей конфигурации. А о всех плюсах и минусах мы расскажем в данной статье.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.
В свое время один из основателей UNIХ Деннис Ритчи сказал: «UNIX прост. Но надо быть гением, чтобы понять его простоту.» Все это в полной мере можно применить и к преемнику UNIX-систем — Linux и иногда эта простота ставит в тупик. Хорошим примером здесь является iptables — простой и мощный брандмауэр, уже не первый год, стоящий на страже сетевых рубежей системы. И когда выясняется, что он не умеет сохранять и восстанавливать правила, то многие испытывают весьма противоречивые ощущения.
Вопреки распространенному заблуждению iptables не является брандмауэром, а предоставляет удобный интерфейс к netfilter, который является настоящим брандмауэром Linux-систем, его задача — интерпретировать команды пользователя на более низкие уровни и вывести информацию оттуда в удобном для восприятия варианте. Единственный способ взаимодействия с iptables — это интерфейс командной строки — CLI. Мы можем создавать, изменять, удалять правила, а также получать информацию о состоянии брандмауэра, но в любом случае все взаимодействие строится по форме запрос — ответ. Реальную работу выполняет спрятанный далеко внутри системы netfilter, а iptables только лишь позволяет удобно общаться с ним.
Понимание этого во многом проливает свет на сложившуюся ситуацию, iptables — всего лишь интерфейс и своих настроек у него быть не может, но именно он позволяет передать правила сетевого взаимодействия в netfilter и получать от него удобочитаемые ответы и именно этим его свойством мы и воспользуемся.
Существует несколько способов сохранить введенные нами в iptables правила, а затем и восстановить их при загрузке системы. Разберем их подробнее.
Скрипты
Самый старый, но не потерявший эффективности способ. Если единственная возможность взаимодействия с iptables — это интерфейс командной строки, то скрипт — самый первый способ автоматизации, если мы не хотим постоянно повторять одни и те же действия вручную.
Скрипт для настройки iptables мы можем расположить где угодно, но лучше следовать стандартным расположениям Linux и разместить его в /etc. Создадим для этого отдельную директорию iptables, создадим в ней файл скрипта и сделаем его исполняемым:
mkdir /etc/iptables
touch /etc/iptables/iptables.rules
chmod +x /etc/iptables/iptables.rules
Теперь можем открыть его любым доступным редактором и внести минимальную конфигурацию брандмауэра, разрешающую только подключения по SSH:
#!/bin/sh
# Сбрасываем настройки брандмауэра
iptables -F
iptables -X# Разрешаем установленные и связанные соединения
iptables -A INPUT -i ens33 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT# Запрещаем не принадлежащие ни одному соединению пакеты
iptables -A INPUT -i ens33 -m conntrack --ctstate INVALID -j DROP# Разрешаем подключения по SSH
iptables -A INPUT -i ens33 -p tcp --dport 22 -j ACCEPT#Запрещаем входящие извне
iptables -A INPUT -i ens33 -j DROP
Здесь следует обратить ваше внимание на самую первую секцию — сброс настроек, в приведенном примере сброшены будут только настройки таблицы filter и если вы используете другие таблицы, то их также нужно будет сбросить, так для nat добавьте:
iptables -t nat -F
iptables -t nat -X
А для mangle:
iptables -t mangle -F
iptables -t mangle -X
Для чего это делается? Смысл в том, что данный скрипт может быть запущен как вручную, так и при перезапуске сетевых служб, а команда iptables -A просто добавляет правило в конец указанной цепочки и если не выполнять предварительной очистки, то итоговые правила могут стать бесконечно далеки от того, что задумал администратор.
Хорошо, но как теперь запускать данный скрипт? Для систем использующих ifupdown перейдем в /etc/network/interfaces и добавим в конце секции с нужным сетевым адаптером или вообще в самом конце файла:
pre-up /etc/iptables/iptables.rules
Данное правило выполнит указанный нами скрипт перед инициализацией сетевого интерфейса.
Все изменения в конфигурацию брандмауэра следует вносить в указанный скрипт, а для их применения достаточно выполнить:
/etc/iptables/iptables.rules
или перезагрузить систему.
Просмотреть текущее состояние брандмауэра можно командой:
iptables -L -vn
Ключ -v выводит дополнительную информацию и счетчики, а -n отвечает за вывод IP-адресов и портов в виде чисел, а не DNS-адресов и имен служб.
![]()
Внимательный читатель заметит, что вывод команды показывает нам только таблицу filter и это действительно так. Как мы помним, filter — таблица по умолчанию и используется если мы явно не задали таблицу, чтобы просмотреть, скажем, таблицу nat, выполните:
iptables -t nat -L -vn
Где ключ -t позволяет указать интересующую таблицу.
iptables-save / iptables-restore
Это штатная утилита, выполняющая ту же самую задачу: сохранить правила iptables в файл и потом загрузить их оттуда. Использование предельно простое, чтобы сохранить правила используйте:
iptables-save > /etc/iptables/rules.v4
Результатом выполнения данной команды будет текстовый файл с набором всех используемых правил.
![]()
Сначала идет имя таблицы, в нашем случае правила заданы только для filter, затем политики по умолчанию для цепочек (везде ACCEPT), за которыми следуют сами правила. Обратите внимание, что синтаксис записей несколько другой, если в скрипте мы писали:
iptables -A INPUT -i ens33 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
то в файле просто:
-A INPUT -i ens33 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
Потому что скрипт сначала вызывал iptables, а потом уже передавал ему команду, в нашем же случае вызывать iptables нет необходимости.
Впоследствии данный файл можно редактировать, добавляя в него дополнительные правила, также можно делать это интерактивно, через командный CLI-интерфейс. С этим будет связан один тонкий момент, и мы вернемся к нему позже.
Для восстановления следует использовать:
iptables-restore < /etc/iptables/rules.v4
Куда прописать эту команду? Можно точно также в /etc/network/interfaces, в конце файла добавляем:
pre-up iptables-restore < /etc/iptables/rules.v4
А теперь зададимся вопросом: чтобы сохранить правила iptables их нужно предварительно ввести. Да, это можно сделать либо вручную, выполнив указанные в скрипте команды, либо выполнив сам скрипт, второе удобнее, особенно если у вас сложная конфигурация брандмауэра. Этот же способ позволяет просто и удобно перейти от скриптов к iptables-restore: загружаем систему, сохраняем правила через iptables-save и заменяем вызов скрипта на iptables-restore.
В некоторых материалах в сети также рекомендуют добавить в /etc/network/interfaces
post-down iptables-save > /etc/iptables/rules.v4
На первый взгляд - вполне грамотное решение, но не рекомендуем этого делать не подумав. Почему? Редко кто управляет брандмауэром интерактивно: добавляя, удаляя или изменяя записи через командную строку, потому что более удобно и наглядно это можно сделать, внося изменения непосредственно в файл. Однако если вы после этого выключите или перезагрузите систему, то все ваши изменения будут перезаписаны текущим состоянием брандмауэра и будут потеряны.
Поэтому лучше ограничиться только iptables-restore, а если вы все-таки внесли изменения интерактивно, то можно сразу после этого вручную выполнить iptables-save.
iptables-persistent
Время не стоит на месте, все течет, все меняется. На смену старому доброму ifupdown приходят новые системы: NetworkManager, netplan, systemd-networkd и прописывать вызов скриптов или iptables-restore в их конфигурацию становится проблематичным занятием, если вообще возможным. Но и разработчики тоже держат руку на пульсе, в Debian и Ubuntu появился новый пакет - iptables-persistent, который позволяет сохранять и автоматически загружать правила брандмауэра, не оглядываясь на используемую систему инициализации сети.
Установить его очень просто:
apt install iptables-persistent
В процессе установки будет предложено сохранить текущие правила iptables, поэтому очень желательно, чтобы они к этому времени существовали. Внести их можно как интерактивно, так и с помощью скрипта.
![]()
Одновременно с этим будут сохранены правила для IPv6 и в итоге в директории /etc/iptables у вас будет два набора правил для четвертой и шестой версии протоколов. Синтаксис файла ничем не отличается от того, что создает iptables-save и точно также его можно редактировать, внося новые правила.
Также в системе появляется новая служба - netfilter-persistent, которая позволяет удобно управлять брандмауэром, так если вы внесли изменения в файл с правилами и хотите их применить, то выполните:
netfilter-persistent reload
Для сохранения текущей конфигурации отдайте команду:
netfilter-persistent save
А если вам надо полностью очистить конфигурацию брандмауэра, то наберите:
netfilter-persistent flush
Это удобно если вам нужно проверить, не является ли брандмауэр причиной каких-либо проблем, быстро сбрасываем конфигурацию, проверяем и загружаем ее заново.
Заключение
Какой из трех предложенных вариантов является наиболее предпочтительным? Если мы говорим о современных системах, то это iptables-persistent, который позволяет полностью автоматизировать процесс и вообще более не беспокоиться о правилах брандмауэра. Но это решение доступно только пользователям Debian или Ubuntu.
Также не стоит списывать со счетов скрипты или iptables-save / iptables-restore, эти методы продолжают работать и делают это просто и надежно. В любом случае помните, что Linux предоставляет множество путей решений одной и той же задачи и выбирайте решение исходя из собственной ситуации, требований и имеющихся знаний, и опыта.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.
Дополнительные материалы:
- Основы iptables для начинающих. Часть 1. Общие вопросы
- Основы iptables для начинающих. Часть 2. Таблица filter
- Основы iptables для начинающих. Часть 3. Таблица nat
- Основы iptables для начинающих. Часть 4. Таблица nat - типовые сценарии использования
- Основы iptables для начинающих. Как сохранить правила и восстановить их при загрузке
Помогла статья? Поддержи автора и новые статьи будут выходить чаще:
![]()
![]()
Или подпишись на наш Телеграм-канал:
Где сохраняются правила iptables и как их сохранить?
В каждом дистрибутиве Linux путь к сохраненным правилам может отличаться. И бывает так, что мы не знаем куда же сохранить правила, чтобы после перезагрузки сервера они тоже загрузились. Самый быстрый способ найти файл сохраненных правил - воспользоваться systemctl.
Выполняем:
# systemctl status iptables ● iptables.service - IPv4 firewall with iptables Loaded: loaded (/usr/lib/systemd/system/iptables.service; enabled; vendor preset: disabled) Active: active (exited) since Thu 2020-10-15 13:47:02 MSK; 1 weeks 0 days ago Main PID: 897 (code=exited, status=0/SUCCESS) Tasks: 0 Memory: 0B CGroup: /system.slice/iptables.service
Сервис iptables находится в /usr/lib/systemd/system/iptables.service.
Открываем iptables.service:
# cat /usr/lib/systemd/system/iptables.service [Unit] Description=IPv4 firewall with iptables Before=network-pre.target Wants=network-pre.target Before=ip6tables.service After=syslog.target AssertPathExists=/etc/sysconfig/iptables [Service] Type=oneshot RemainAfterExit=yes ExecStart=/usr/libexec/iptables/iptables.init start ExecReload=/usr/libexec/iptables/iptables.init reload ExecStop=/usr/libexec/iptables/iptables.init stop Environment=BOOTUP=serial Environment=CONSOLETYPE=serial StandardOutput=syslog StandardError=syslog [Install] WantedBy=basic.target
В содержимом нам нужна строка AssertPathExists, в которой и указан путь к файлу, в который IPTABLES сохраняет правила. В моём случае путь до файла /etc/sysconfig/iptables.
После внесения изменений в правила iptables, сохраняем правила в этот файл:
iptables-save > /etc/sysconfig/iptables
Введение в Iptables

Iptables - это мощный инструмент управления сетью в Linux, который позволяет администраторам управлять входящими и исходящими пакетами данных. Это основной инструмент для настройки межсетевых экранов в системах Linux.
Введение в Iptables
Iptables работает путем проверки пакетов данных на соответствие определенным критериям и выполнения заданных действий, если пакеты соответствуют этим критериям. Эти критерии и действия определяются в таблицах, которые состоят из набора правил.
В Iptables есть четыре основные таблицы:
- Filter - это основная таблица, используемая для фильтрации пакетов.
- NAT - эта таблица используется для настройки NAT (Network Address Translation).
- Mangle - эта таблица используется для специальной обработки пакетов.
- Raw - эта таблица используется для обхода системы отслеживания состояний.
Каждая таблица состоит из набора цепочек. Цепочки - это последовательности правил, которые применяются к пакетам. В Iptables есть три встроенные цепочки:
- INPUT - эта цепочка применяется к пакетам, которые предназначены для самой системы.
- FORWARD - эта цепочка применяется к пакетам, которые проходят через систему.
- OUTPUT - эта цепочка применяется к пакетам, которые исходят из системы.
Базовые команды Iptables
Просмотр текущих правил
Чтобы просмотреть текущие правила, используйте команду iptables -L . Это покажет все правила в таблице filter. Чтобы просмотреть правила в другой таблице, используйте флаг -t , например, iptables -t nat -L .
Добавление новых правил
Чтобы добавить новое правило, используйте команду iptables -A . Например, чтобы заблокировать весь входящий трафик от IP-адреса 192.168.0.100, вы можете использовать следующую команду:
iptables -A INPUT -s 192.168.0.100 -j DROP
В этой команде -A INPUT добавляет новое правило в цепочку INPUT, -s 192.168.0.100 определяет исходный IP-адрес, а -j DROP указывает, что все пакеты, соответствующие этому правилу, должны быть отброшены.
Удаление правил
Чтобы удалить правило, вам нужно знать его номер в цепочке. Вы можете узнать номера правил, используя команду iptables -L --line-numbers . Затем вы можете удалить правило, используя команду iptables -D и номер правила. Например, чтобы удалить первое правило в цепочке INPUT, вы можете использовать следующую команду:
iptables -D INPUT 1
Изменение дефолтного политики
Вы можете изменить дефолтную политику для цепочки, используя команду iptables -P . Например, чтобы отклонить все входящие пакеты по умолчанию, вы можете использовать следующую команду:
iptables -P INPUT DROP
Сохранение и восстановление правил
По умолчанию, правила iptables не сохраняются после перезагрузки системы. Чтобы сохранить текущие правила, вы можете использовать команду iptables-save . Это выведет текущие правила в формате, который можно использовать для восстановления с помощью команды iptables-restore .
Затем, чтобы восстановить правила, вы можете использовать следующую команду:
Примеры использования Iptables
Блокировка IP-адреса
Чтобы заблокировать весь трафик от определенного IP-адреса, вы можете использовать следующую команду:
iptables -A INPUT -s 192.168.0.100 -j DROP
Открытие порта для входящего трафика
Чтобы открыть порт для входящего трафика, вы можете использовать следующую команду:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
В этой команде -p tcp указывает на протокол (в данном случае TCP), --dport 80 указывает на порт (в данном случае 80), а -j ACCEPT указывает, что все пакеты, соответствующие этому правилу, должны быть приняты.
Настройка простого межсетевого экрана
Вы можете использовать iptables для настройки простого межсетевого экрана. Например, вы можете разрешить весь исходящий трафик, разрешить входящий трафик только на определенные порты и отклонить все остальные входящие пакеты.
iptables -A OUTPUT -j ACCEPT iptables -A INPUT -p tcp --dport 22 -j ACCEPT iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 443 -j ACCEPT iptables -P INPUT DROP
В этом примере разрешен весь исходящий трафик, а входящий трафик разрешен только на порты 22 (SSH), 80 (HTTP) и 443 (HTTPS). Все остальные входящие пакеты отклоняются.
Расширенное использование Iptables
Логирование
Iptables предоставляет возможность логирования пакетов, что может быть полезно для отладки и мониторинга. Для включения логирования используйте цель LOG . Например, чтобы залогировать все отброшенные пакеты, можно использовать следующую команду:
iptables -A INPUT -j LOG --log-prefix "Dropped Packet: " iptables -A INPUT -j DROP
Здесь --log-prefix "Dropped Packet: " добавляет указанный префикс к каждому лог-сообщению, что упрощает фильтрацию и анализ логов.
Создание пользовательских цепочек
Iptables позволяет создавать пользовательские цепочки для более гибкого управления правилами. Например, вы можете создать цепочку для обработки всего трафика от определенного IP-адреса:
iptables -N MY_CHAIN iptables -A MY_CHAIN -s 192.168.0.100 -j DROP iptables -A INPUT -j MY_CHAIN
В этом примере команда -N MY_CHAIN создает новую цепочку с именем MY_CHAIN. Затем добавляется правило, которое отбрасывает все пакеты от 192.168.0.100. Наконец, цепочка MY_CHAIN добавляется в цепочку INPUT, что означает, что все входящие пакеты будут также проходить через цепочку MY_CHAIN.
Использование состояний пакетов
Iptables может отслеживать состояние пакетов, что позволяет создавать более сложные правила. Например, вы можете разрешить только входящие пакеты, которые являются частью уже установленного соединения:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
В этом примере -m state указывает на использование модуля состояний, а --state ESTABLISHED,RELATED указывает, что правило применяется только к пакетам, которые являются частью уже установленного или связанного соединения.
Использование Iptables для создания VPN
Iptables также может быть использован для создания VPN (Virtual Private Network). Это может быть полезно для создания безопасного соединения между удаленными системами. Например, вы можете использовать iptables для настройки IPsec VPN, используя модуль "policy" для определения правил обработки трафика.
iptables -A INPUT -m policy --dir in --pol ipsec -j ACCEPT iptables -A OUTPUT -m policy --dir out --pol ipsec -j ACCEPT
В этом примере -m policy указывает на использование модуля "policy", --dir in и --dir out указывают на направление трафика, а --pol ipsec указывает на использование IPsec политики.
Использование Iptables для ограничения скорости
Iptables также может быть использован для ограничения скорости сетевого трафика, что может быть полезно для управления пропускной способностью. Для этого можно использовать модуль "limit". Например, вы можете ограничить количество новых SSH-соединений до 3 в минуту следующим образом:
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m limit --limit 3/min -j ACCEPT
В этом примере -m limit --limit 3/min указывает на ограничение скорости, а остальная часть команды определяет, что она применяется к новым SSH-соединениям.
Использование Iptables для редиректа трафика
Iptables может быть использован для редиректа трафика, что может быть полезно для перенаправления трафика на другой порт или сервер. Например, вы можете перенаправить весь входящий трафик на порт 80 на порт 8080 следующим образом:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
В этом примере -t nat указывает на использование таблицы NAT, -A PREROUTING добавляет правило в цепочку PREROUTING, --dport 80 указывает на исходный порт, а --to-port 8080 указывает на порт назначения.
Iptables - это мощный и гибкий инструмент, который может быть использован для решения множества задач управления сетью. Однако, как и любой мощный инструмент, он требует тщательного понимания и практики для эффективного использования.
Заключение
Iptables является мощным и гибким инструментом для управления сетью в Linux. Он предлагает широкий спектр функций, включая фильтрацию пакетов, NAT, логирование и многое другое. Однако, несмотря на его мощь, iptables может быть сложным для новичков. Надеюсь, эта статья помогла вам разобраться в основах работы с iptables и дала вам основу для дальнейшего изучения этого мощного инструмента.
- Настройка Linux
- Системное администрирование
- Серверное администрирование