Введение в 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 и дала вам основу для дальнейшего изучения этого мощного инструмента.
Как удалить правило iptables и все правила
Удалить правило iptables можно по его номеру или ориентируясь на содержание сохранив предварительно список правил в файл и загрузив обратно данные из файла после редактирования.
Цепочки iptables, просмотр правил
iptables представляет собой системный сетевой фильтр состоящий из нескольких цепочек, правил и политики фильтрации. Схематично структура выглядит так:

Чтобы просмотреть список используемых системой правил нужно выполнить команду iptables-save. Она сохраняет все изменения в файл если вывод перенаправить, по умолчанию выводит правила в терминал.
Как удалить одно правило iptables по номеру строки
Можно удалить одно правило — например, по номеру строки
Так выводится пронумерованный список правил:
Удалим одно из них с указанием таблицы, и цепочки (iptables -t TABLE -D INPUT номер_строки)
Возьмем девятое правило из списка:
Также можно удалять правила применяя ключ -D без номера, приводя полное правило:
Команда приведенная ниже разрешит обращения по перечисленным портам
iptables -A INPUT -p tcp -m conntrack —ctstate NEW -m multiport —dports 20:22,25,80,443 -j ACCEPT
С ключом -D правило будет удалено
iptables -D INPUT -p tcp -m conntrack —ctstate NEW -m multiport —dports 20:22,25,80,443 -j ACCEPT
Каждый раз необходимо выполнять iptables-save чтобы проверить результат.
Если нужно отредактировать несколько правил или много правил, то проще сначала сохранить все правила в файл. Отредактировать его, затем загрузить их вновь.
Как сбросить все правила iptables
В iptables удалить все правила можно удалить выполнив в консоли команду iptables с флагом -F (flush)
Перед выполнением команды обязательно нужно выполнить iptables-save и убедиться в том, что политика для входящих пакетов на INPUT установлена в ACCEPT, в противном случае можно потерять доступ к серверу.
Перед очисткой правил всегда нужно их просмотреть и сохранить в файл.
Все правила и политики можно вывести такой командой
В примере выше политики для INPUT, FORWARD и OUTPUT установлены в состояние ACCEPT. Значит после сброса правил iptables -F доступ к серверу извне потерян не будет.
С INPUT DENY было бы иначе. При такой конфигурации политикой запрещается доступ, за счет правил разрешается, при сбросе правил остается только запрет.
Если нам интересны правила для определенной цепочки нужно использовать ключ -L и название цепочки. Их можно сохранить отдельно
Перечисление и удаление правил брандмауэра Iptables

Iptables — это брандмауэр, который играет важную роль в обеспечении сетевой безопасности большинства систем Linux. Хотя многие руководства по работе с Iptables научат вас создавать правила брандмауэра для обеспечения безопасности вашего сервера, в этом руководстве мы будем уделять особое внимание другому аспекту управления брандмауэром: вывод списка и удаление правил.
В этом обучающем руководстве мы расскажем, как выполнять следующие задачи при работе с Iptables:
- Вывод списка правил
- Очистка счетчиков пакетов и байтов
- Удаление правил
- Сброс цепочек (удаление всех правил в цепочке)
- Сброс всех цепочек и таблиц, удаление всех цепочек и прием любого трафика
Примечание: при работе с брандмауэрами необходимо следить за тем, чтобы не заблокировать собственный доступ к серверу, запретив подключение по SSH (по умолчанию в этих целях используется порт 22). При потере доступа из-за настроек брандмауэра вам может потребоваться подключение к серверу через внеполосную консоль для восстановления доступа.
Предварительные требования
Это учебное руководство предполагает использование сервера Linux с установленной командой iptables и наличие у пользователя привилегий sudo .
Если вам нужна помощь с данной начальной настройкой, воспользуйтесь нашим руководством по начальной настройке сервера Ubuntu 20.04. Вы также можете воспользоваться руководствами для Debian и CentOS
Давайте сначала рассмотрим, как просмотреть существующий список правил. Существует два различных способа просмотра действующих правил Iptables: в форме таблицы или списка спецификаций правил. Оба метода предоставляют приблизительно одну и ту же информацию в разных форматах.
Перечисление правил по спецификации
Чтобы перечислить все действующие правила Iptables, запустите команду iptables с опцией -S :
Как вы видите, вывод выглядит примерно так, как и команды, которые использовались для их создания, но не имеют команды iptables в начале. Также вывод будет напоминать файлы конфигурации правил Iptables, если вы когда-либо использовали iptables-persistent или iptables save .
Перечисление списка правил конкретной цепочки
Если вы хотите ограничить вывод конкретной цепочкой ( INPUT , OUTPUT , TCP и т. д.), вы можете указать название цепочки сразу после опции -S . Например, для отображения всех спецификаций правил в цепочке TCP необходимо запустить следующую команду:
Теперь давайте рассмотрим альтернативный способ просмотра действующих правил Iptables в форме таблицы правил.
Перечисление правил в виде таблицы
Перечисление правил Iptables в виде таблицы может быть полезным при сопоставлении разных правил друг с другом.
Чтобы вывести все действующие правила Iptables в виде таблицы, запустите команду iptables с опцией -L :
Эта команда будет выводить все действующие правила, отсортированные по цепочкам.
Если вы хотите ограничить вывод конкретной цепочкой ( INPUT , OUTPUT , TCP и т. д.), вы можете указать название цепочки сразу после опции -L .
Давайте рассмотрим пример цепочки INPUT:
Первая строка вывода указывает имя цепочки (в данном случае INPUT ), за которым следует используемая по умолчанию политика ( DROP ). Следующая строка состоит из заголовков каждого столбца таблицы, после чего идут правила цепочки. Давайте посмотрим, что означает каждый заголовок:
- target : если пакет отвечает правилу, заголовок target указывает, что с ним нужно сделать. Например, пакет можно принять, отклонить, записать или отправить другой цепочке для сопоставления с другими правилами.
- prot : протокол, например tcp , udp , icmp или all
- opt : данный параметр используется редко и отображает опции IP
- source : исходный IP-адрес или подсеть трафика, либо anywhere (отовсюду)
- destination : IP-адрес назначения или подсеть трафика, либо anywhere (везде)
Последняя колонка, которая не имеет заголовка, указывает опции правила. Другими словами, это может быть любая часть правила, которая не указана предыдущими столбцами. Это может быть любая информация, начиная с портов назначения и исходных портов и заканчивая состоянием подключения пакета.
Отображение счетчиков пакетов и общего размера
При выводе списка правил Iptables также можно отобразить количество пакетов и общий размер пакетов (в байтах), которые отвечают каждому конкретному правилу. Это часто может быть полезно, когда вы пытаетесь получить приблизительное представление о том, какие правила используются для различных пакетов. Чтобы сделать это, воспользуйтесь опциями -L и -v в одной команде.
Например, давайте снова рассмотрим цепочку INPUT с опцией -v :
Обратите внимание, что список сейчас содержит два дополнительных столбца, pkts и bytes .
Теперь, когда вы знаете, как выводить список действующих правил брандмауэра различными способами, давайте рассмотрим возможность сброса счетчиков пакетов и байтов.
Сброс счетчиков пакетов и общего размера
Если вы хотите очистить или обнулить счетчики пакетов и байтов для ваших правил, воспользуйтесь опцией -Z . Счетчики также сбрасываются при перезагрузке. Это полезно, если вы хотите узнать, принимает ли ваш сервер новый трафик, отвечающий существующим правилам.
Чтобы очистить счетчики для всех цепочек и правил, используйте опцию -Z отдельно:
Чтобы очистить счетчики для всех правил конкретной цепочки, используйте опцию -Z и укажите название цепочки. Например, для очистки счетчиков цепочки INPUT воспользуйтесь следующей командой:
Если вы хотите очистить счетчики для конкретного правила, укажите имя цепочки и номер правила. Например, для обнуления счетчиков первого правила в цепочке INPUT запустите следующую команду:
Теперь, когда вы знаете, как сбросить счетчики пакетов и байтов Iptables, давайте рассмотрим два метода, которые можно использовать для удаления правил.
Удаление правил по спецификации
Одним из способов удаления правил Iptables является удаление правила по спецификации. Для этого вам нужно запустить команду iptables с опцией -D , указав далее спецификацию правила. Если вы хотите удалить правила с помощью этого метода, вы можете использовать команду для вывода списка правил iptables -S в качестве источника полезной информации.
Например, если вы хотите удалить правило, которое отклоняет недействительные входящие пакеты ( -A INPUT -m conntrack —ctstate INVALID -j DROP ), запустите следующую команду:
Обратите внимание, что опция -A , используемая для обозначения положения правила в момент его создания, здесь не применяется.
Удаление правил по цепочке и номеру
Другой способ удаления правил Iptables состоит в использовании цепочки и номера строки. Чтобы определить номер строки правила, выведите список правил в формате таблицы и добавьте опцию —line-numbers :
Эта команда добавляет номер строки для каждой строки таблицы правил в столбце с заголовком num .
Когда вы знаете, какое правило нужно удалить, запомните цепочку и номер строки правила. Затем запустите команду iptables -D , указав далее цепочку и номер правила.
Например, если мы хотим удалить правило для входящего трафика, которое отклоняет недействительные пакеты, мы видим, что это правило с номером 3 в цепочке INPUT . Поэтому нам нужно запустить следующую команду:
Теперь, когда вы знаете, как удалить отдельные правила брандмауэра, давайте рассмотрим возможность сброса цепочек правил.
Сброс цепочек
Iptables предлагает возможность удаления всех правил в цепочке или сброса цепочки. В данном разделе мы опишем разнообразные способы выполнения этой задачи.
Примечание: будьте осторожны, чтобы не заблокировать собственный доступ к серверу через SSH в результате сброса цепочки с используемой по умолчанию политикой drop или deny . В этом случае вам может потребоваться подключение через консоль для восстановления доступа.
Сброс отдельной цепочки
Чтобы сбросить конкретную цепочку с последующим удалением всех правил в данной цепи, вы можете использовать опцию -F или ее эквивалент —flush , добавив в команду имя цепочки, которую вы хотите сбросить.
Например, для удаления всех правил в цепочке INPUT запустите следующую команду:
Сброс всех цепочек
Чтобы сбросить все цепочки с последующим удалением всех правил брандмауэра, вы можете использовать опцию -F или ее эквивалент —flush без указания конкретной цепочки:
Сброс всех правил, удаление всех цепочек и разрешение любого трафика
Из этого раздела вы узнаете, как выполнить сброс всех правил брандмауэра, таблиц и цепочек, чтобы разрешить прием любого сетевого трафика.
Примечание: результатом этих действий станет полное отключение вашего брандмауэра. Вам следует выполнять описанные в данном разделе действия только в том случае, если вы хотите начать настройку вашего брандмауэра с нуля.
Сначала задайте ACCEPT в качестве используемой по умолчанию политики для каждой встроенной цепочки. Главная причина этого шага состоит в том, чтобы гарантировать, что вы не заблокируете собственный доступ к вашему серверу через SSH:
Затем выполните сброс таблиц nat и mangle , сбросьте все цепочки ( -F ) и удалите все цепочки, не используемые по умолчанию ( -X ):
Теперь ваш брандмауэр будет принимать любой сетевой трафик. Если вы сейчас попробуете вывести список ваших правил, то увидите, что он пуст, и остались только три используемые по умолчанию цепочки ( INPUT , FORWARD и OUTPUT ).
Заключение
После изучения данного руководства вы должны получить представление о том, как вывести список ваших правил брандмауэра iptables и удалить определенные правила.
Не забывайте, что любые изменения, вносимые с помощью команды iptables , если их не сохранить, исчезнут после перезагрузки сервера. Данная информация описана в разделе «Сохранение правил» руководства «Распространенные правила и команды брандмауэра».
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
Как удалить правила iptables
Мануал
Цель этого руководства – показать, как удалить правила iptables в системе Linux.
Можно удалять правила iptables по одному или очистить все правила в любой цепочке iptables за один раз.
Вскоре вы увидите, как это сделать.
Брандмауэр iptables в системах Linux – это очень полезная функция, которая позволяет системным администраторам контролировать с высокой точностью, какой сетевой трафик разрешен или запрещен в системе.
В конце концов, приходит время удалить правила, которые больше не соответствуют желаемой конфигурации.
В этом руководстве вы увидите несколько различных методов командной строки для удаления правил iptables в Linux.
Как удалить правила iptables в системах Linux – примеры команд
Некоторые приложения iptables, такие как firewalld для систем на базе Red Hat и ufw для систем на базе Ubuntu, имеют свои собственные команды, используемые для удаления правил брандмауэра. При использовании внешнего интерфейса iptables убедитесь, что удаление и настройка правил производится через это приложение, а не напрямую через iptables.
Прежде чем приступить к работе, убедитесь, что в вашей системе уже настроены некоторые правила.
В частности, в этом руководстве предполагается, что вы настроили правила с помощью iptables, а не с помощью внешнего приложения брандмауэра, такого как firewalld или ufw.
Чтобы увидеть правила в вашей системе, вы можете использовать следующую команду iptables.
Чтобы легче удалить конкретное правило, рекомендуется также использовать опцию –line-numbers .

Пример вывода настроенных нами правил iptables (обратите внимание на номер строки в начале каждого правила):
Прежде чем приступить к выполнению приведенных ниже команд, настоятельно рекомендуется создать резервную копию настроенных правил iptables.
Вы можете узнать, как это сделать, следуя нашему другому руководству о том, как сделать правила iptables постоянными после перезагрузки.
Способ 1
Теперь, когда у нас есть все номера строк, мы можем удалить любое из перечисленных в iptables правил.
В качестве примера мы удалим правило DROP all — anywhere 10.0.0.0/8 из цепочки FORWARD, которое под номером 1.
Для удаления этого правила мы вводим следующую команду iptables с опцией -D (delete):
Невозможно удалить несколько отдельных правил одновременно, если только вы не настроите для этого скрипт Bash. Однако номера правил будут меняться каждый раз, когда вы удаляете правило, и настроить скрипт для учета постоянно меняющихся номеров правил будет непросто. Несмотря на неудобство, рекомендуется просто потратить время на удаление каждого нежелательного правила по отдельности.
Способ 2
Способ 3
Использование опции -F, без указания конкретной цепочки, очистит правила для всех цепочек iptables.
Будьте осторожны при выполнении этой команды, так как потенциально вы можете удалить тонну правил.
Способ 4
Вы также можете удалить саму цепочку с помощью опции -X.
Однако это сработает только в том случае, если вы предварительно очистили все ссылающиеся правила командой iptables -F [chain].
Например, для удаления цепочки DOCKER и всех ссылающихся на нее правил в нашей системе:
Чтобы очистить все пустые цепочки, вы можете использовать опцию -X без дополнительных аргументов.
Способ 5
Чтобы удалить все настроенные правила в таблицах nat или mangle, необходимо указать эти таблицы отдельно с помощью опции -t (tables).
Способ 6
Чтобы сбросить всю конфигурацию iptables к значениям по умолчанию, вы можете использовать все следующие команды вместе.
Это сбросит ваши политики цепочек по умолчанию, очистит все правила из каждой таблицы, а затем удалит все пустые цепочки из каждой таблицы.
Способ 7
Последний способ – вручную отредактировать файл iptables-save, который находится в /etc/iptables/rules.v4 на системах DEB и /etc/sysconfig/iptables на системах на базе RPM.
После редактирования файлов, вы можете использовать команду iptables-restore для применения новых правил, которые вы настроили в выходных файлах.
Обратите внимание, что этот метод будет работать, только если у вас есть доступ к команде iptables-save в вашей системе.
Заключение
В этом уроке мы рассмотрели, как удалять правила iptables в командной строке Linux.
iptables – это сложный, но мощный брандмауэр, встроенный в ядро Linux, и он имеет большую кривую обучения, даже когда речь идет о самых простых задачах, таких как удаление правила.
Как показано здесь, есть несколько вариантов, которые мы можем использовать – нам нужно очистить все правила для определенной таблицы, цепочки или просто удалить правило по отдельности.