Введение в 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
- Системное администрирование
- Серверное администрирование
Записки 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 вернуть стандартные параметры
удалите это правило, заменив опцию -A (add) на -D (delete). все остальные опции/параметры должны быть точно такими же:
$ sudo iptables -t nat -D PREROUTING -p tcp -j REDIRECT --to-port 6000
Отслеживать
ответ дан 14 июл 2016 в 12:50
aleksandr barakin aleksandr barakin
67.9k 216 216 золотых знаков 77 77 серебряных знаков 219 219 бронзовых знаков
iptables-save > iptables.config nano iptables.config - тут исправляем то, что нужно iptables-restore iptables.config
Отслеживать
ответ дан 14 июл 2016 в 10:24
3,625 1 1 золотой знак 17 17 серебряных знаков 35 35 бронзовых знаков
перезапустить службу iptables. Если конечно не было сохранения. При перезапуске службы iptables восстанавливаются первоначальные правила
Отслеживать
ответ дан 14 июл 2016 в 10:57
1,100 9 9 серебряных знаков 16 16 бронзовых знаков
Не является ответом на вопрос. Чтобы оставить свои замечания или попросить у автора внести уточнения, оставьте комментарий к соответствующему сообщению. - Из очереди проверок
14 июл 2016 в 11:18
является. Для не понимающих расшифровал
14 июл 2016 в 11:21
Этот ответ тянет максимум на комментарий
14 июл 2016 в 11:23
это ответ. Перезапуск службы зависит от системы управления оными. А что это будет systemd, upstart или sysv уже не важно. Перезапуск и все
14 июл 2016 в 12:01
@Doofy, для частного случая — вполне себе ответ. maint, но то, что это частный случай (наличие сервиса и/или старт-стопового скрипта iptables), надо бы явно оговорить в ответе. да и что такое «сохранение» — тоже неплохо бы упомянуть явно (я подозреваю, что речь о чём-то вроде пакета iptables-persistent , который, тоже совсем не обязательно должен присутствовать, ни в системе, ни в репозитории дистрибутива).
Как сохранить правила iptables
Рабочую копию правил Netfilter хранит в пространстве ядра linux. Ядро по умолчанию разрешает все подключения, что мы видим при выполнении команды iptables с опцией -L При этом все изменения правил, сделанные нами во время работы операционной системы, автоматически обычно никуда не сохраняются при выключении компьютера. Поэтому после очередного включения вы обнаруживаете, что настроенных правил опять нет и везде установлены политики по умолчанию - ACCEPT.
Примечание: На практике это значит, что ваш компьютер по умолчанию открыт к любому доступу извне для любой машины, для этого только необходима работающая программа, которая будет отвечать по порту, к которому захочет подключиться любой удаленный компьютер. В этой статье мы рассмотрим как сохранить правила iptables.
Конечно, заново настраивать каждый раз после перезагрузки компьютера набор правил межсетевого экрана не выгодно, поэтому нам необходимы средства сохранения и восстановления параметров брандмауэра после включения нашей машины. Наиболее распространенных вариантов решения этой проблемы два:
- С помощью утилиты iptables-save и загружать их с помощью iptables-restore;
- С помощью утилиты iptables-persistent (данный вариант возможен в операционных системах Debian и Ubuntu).
Сохранить правила можно в любую доступную директорию, но лучше, конечно, использовать для этого системную директорию, например, директорию для конфигурационных файлов /etc/ или под-папку в ней, например, /etc/iptables-conf/
Как сохранить правила iptables
Для сохранения правил межсетевого экрана Netfilter в linux можно использовать пакет iptables-save. Данный пакет записывает текущую конфигурацию в файл с указанным именем. Существуют две версии данного пакета:
- iptables-save для протокола IPv4;
- ip6tables-save для протокола IPv6.
Синтаксис команд одинаковый, поэтому мы рассмотрим вариант ipv4.
iptables-save [ -m modprobe ] [ -c ] [ -t таблица ] [ -f имя файла ]
- -m modprobe: Указывает путь к программе modprobe. По умолчанию iptables-save проверяет /proc/sys/kernel/modprobe для определения пути к исполняемому файлу. modprobe - утилита управления модулями ядра. Существует несколько вариантов данной утилиты. Данный параметр можно проигнорировать;
- -c: включает в поток вывода программы все счетчики количества переданных байтов и пакетов;
- -t таблица: выводит в поток вывода только одну таблицу, которая была явно указана. При отсутствии флага выводит все таблицы настроек firewall;
- -f имя файла: Указывает имя файла записи настроек. Если файл не указан, то вывод происходит в поток вывода на экран STDOUT.
В самом простом варианте команда будет выглядеть, например, следующим образом:
sudo iptables-save -f /etc/iptables-conf/iptables_rules.ipv4
Вы можете использовать свою папку, имя файла и расширение. Возможно использование другого синтаксиса данной команды:
sudo iptables-save > /etc/iptables-conf/iptables_rules2.ipv4
В данном варианте команды iptables-save выводит оформленные правила в поток вывода на экран STDOUT, который мы перенаправляем в указанный нами файл. Предварительно необходимо создать директорию /etc/iptables-conf/:
sudo mkdir /etc/iptables-conf/
Просмотреть содержимое каталога можно с помощью команды:
ls -la /etc/iptables-conf/

Как загрузить правила iptables
Для ручного восстановления настроек можно использовать вызов утилиты iptables-restore. Она восстанавливает настройки брандмауэра Netfilter с указанного файла или из потока ввода STDIN, если файл не задан явно. Рассмотрим синтаксис iptables-restore:
iptables-restore [ -chntvV ] [ -w секунды ] [ -W миллисекунды ] [ -M modprobe ] [ -T таблица ] [ имя файла ]
- -c: восстанавливает значения всех счетчиков пакетов и байтов;
- -n: позволяет не сбрасывать содержимое правил обновляемой таблицы правил iptables. Если не указан - все текущие правила обновляемой таблицы сбрасываются. Получается, что правила из файла дописываются в конец таблиц рабочей конфигурации, если указан этот параметр;
- -t: происходит только сборка и тестирование набора правил из файла, без обновление рабочей таблицы правил iptables;
- -v: выводит дополнительную отладочную информацию в течении восстановления набора правил;
- -V: выводит номер версии программы;
- -w секунды: дождаться монопольной блокировки фильтра пакетов ядра linux xtables. Применяется, чтобы предотвратить одновременное выполнение нескольких экземпляров утилиты. Опция заставляет ждать программу в течении некоторого времени возможности монопольной блокировки xtables;
- -W миллисекунды: интервал ожидания для каждой попытки запуска пакета в монопольном режиме. Часто многие приложения системы критичны к времени запуска и выполнения, поэтому длительное ожидания для монопольной блокировки xtables часто является неприемлемым. Данный параметр в миллисекундах задает максимальное время такого ожидания. По умолчанию равно 1 секунде. Применяется только совместно с ключом -w;
- -M modprobe: Указывает путь к программе modprobe. По умолчанию iptables-restore проверяет /proc/sys/kernel/modprobe для определения пути к исполняемому файлу. modprobe - утилита управления модулями ядра. Существует несколько вариантов данной утилиты. Данный параметр можно проигнорировать;
- -T таблица: Восстанавливает только таблицу правил с указанным именем, даже если поток данных содержит другие таблицы;
- имя файла: путь до файла с восстанавливаемыми таблицами правил в файловой системе
Вот пример команды iptables-restore:
sudo iptables-restore -vV /etc/iptables-conf/iptables_rules.ipv4
Или вариант восстановления правил из файла без сброса содержимого текущих таблиц Netfilter:
sudo iptables-restore -nvV /etc/iptables-conf/iptables_rules.ipv4

Автозагрузка правил iptables
1. Загрузка правил с помощью скрипта
Сохраненные правила с помощью утилиты iptables-save можно восстанавливать с помощью скрипта, запускаемого при каждом запуске операционной системы. Для этого необходимо выполнить следующие действия:

Сохранить набор правил межсетевого экрана с помощью команды:
sudo iptables-save -f /etc/iptables-conf/iptables_rules.ipv4
Для запуска набора правил при старте операционной системы перед включением сетевого интерфейса мы создаем новый файл с помощью команды:
sudo vi /etc/network/if-pre-up.d/iptables
Заметим - в сети есть много вариантов места размещения скрипта на локальной машине, но я считаю именно размещение в папке if-pre-up.d наиболее верным, так как при этом скрипт будет выполнятся перед включением сетевого интерфейса. Добавляем в данный файл следующий скрипт:

Сохраняем файл iptables Ctrl+O. Выходим из editor Ctrl+X. Устанавливаем необходимые права для созданного файла:
sudo chmod +x /etc/network/if-pre-up.d/iptables
Перезагружаем компьютер и проверяем результат для таблицы filter с помощью команды:
sudo -t filter iptables -L
Для обеспечения безопасности необходимо, чтобы конфигурация iptables применялась до запуска сетевых интерфейсов, сетевых служб и маршрутизации. Если данные условия не будут соблюдены - появляется окно уязвимости между загрузкой операционной системы и правил защиты межсетевого экрана. Для реализации такого варианта защиты можно использовать пакет iptables-persistent.
2. Автозагрузка правил iptables-persistent
По умолчанию данный пакет не установлен в операционной системе. Данный вариант реализации автозапуска конфигурации возможен в операционных системах Debian, Ubuntu. Для установки пакета требуется выполнить команду:
sudo apt-get install iptables-persistent
Этот пакет впервые стал доступен в Debian (Squeeze) и Ubuntu (Lucid). Используемые этим пакетом правила iptables хранятся в следующих директориях:
- /etc/iptables/rules.v4 для набора правил протокола IPv4;
- /etc/iptables/rules.v6 для набора правил протокола IPv6.
Но они должны быть сохранены в понятном утилите iptables-persistent виде.



Требования к формату данных файлах не задокументированны, что создает некоторые сложности для создания этих файлов вручную. Их можно создать с помощью dpkg-reconfigure:
sudo dpkg-reconfigure iptables-persistent

Или можно использовать iptables-save и ip6tables-save:
sudo iptables-save > /etc/iptables/rules.v4
sudo ip6tables-save > /etc/iptables/rules.v6

Если мы были внимательны при установке пакета, то мы должны были заметить в Debian 10 и последних версиях Ubuntu пакет-зависимость для iptables-persistent: netfilter-persistent, устанавливаемых с нужным нам пакетом. Можно по адресу https://packages.ubuntu.com посмотреть содержимое пакета iptables-persistent, и мы заметим, что на текущий момент пакет называется iptables-persistent, а основные файлы уже относятся к пакету netfilter-persistent.
Утилита netfilter-persistent тоже позволяет управлять автозагрузкой правил. Вот её синтаксис:
sudo netfilter-persistent [ действие ]
Где [действие] может принимать следующие значения:
- start - вызывает все плагины с параметром start, для загрузки правил в netfilter;
- stop - если настроена конфигурация сброса настроек Netfilter при остановке плагина, сбрасывает все настройки firewall на значения по умолчанию. Иначе просто выдает предупреждение;
- flush - плагины вызываются с параметром flush, что приводит к сбросу правил межсетевого экрана на значения по умолчанию;
- save - вызывает плагины с параметром save, позволяя сохранить значения правил брандмауэра в файлы на диске;
- reload - не задокументированный параметр, возникали случаи когда параметр start не срабатывал, помогал вызов этого параметра для загрузки правил из файла на диске;
Значит, чтобы сохранить правила мы можем вызвать следующую команду:
sudo netfilter-persistent save
Для загрузки же сохраненных правил мы можем использовать команду:
sudo netfilter-persistent start
Замечание: После установки netfilter-persistent система при использовании iptables и формата хранения файлов, связанного с ним, начинает при работе выдавать предупреждение
# Warning: iptables-legacy tables present, use iptables-legacy to see them.
Это связано с наличием новой утилиты настройки и редактирования правил Netfilter - nftables, для миграцию на эту утилиту старых правил iptables можно использовать автоматический транслятор правил iptables-translate. Но это уже тема для отдельной статьи.

Выводы
Итак, в этой статье мы рассмотрели где хранятся правила iptables а также как сохранить правила iptables после перезагрузки, разобрались с настройкой скрипта автозагрузки и пакета iptables-persistent.