iptables

Перечисление и удаление правил брандмауэра Iptables

//

Перечисление и удаление правил брандмауэра Iptables

Iptables — это брандмауэр, который играет важную роль в обеспечении сетевой безопасности большинства систем Linux. Хотя многие руководства по работе с Iptables научат вас создавать правила брандмауэра для обеспечения безопасности вашего сервера, в этом руководстве мы будем уделять особое внимание другому аспекту управления брандмауэром: вывод списка и удаление правил.

В этом обучающем руководстве мы расскажем, как выполнять следующие задачи при работе с Iptables:

  • Вывод списка правил
  • Очистка счетчиков пакетов и байтов
  • Удаление правил
  • Сброс цепочек (удаление всех правил в цепочке)
  • Сброс всех цепочек и таблиц, удаление всех цепочек и прием любого трафика Примечание: при работе с брандмауэрами необходимо следить за тем, чтобы не заблокировать собственный доступ к серверу, запретив подключение по SSH (по умолчанию в этих целях используется порт 22). При потере доступа из-за настроек брандмауэра вам может потребоваться подключение к серверу через внеполосную консоль для восстановления доступа.

Предварительные требования

Это учебное руководство предполагает использование сервера Linux с установленной командой iptables и наличие у пользователя привилегий sudo.

Давайте сначала рассмотрим, как просмотреть существующий список правил. Существует два различных способа просмотра действующих правил Iptables: в форме таблицы или списка спецификаций правил. Оба метода предоставляют приблизительно одну и ту же информацию в разных форматах.

Перечисление правил по спецификации

Чтобы перечислить все действующие правила Iptables, запустите команду iptables с опцией -S:

sudo iptables -S

Output
-P INPUT DROP
-P FORWARD DROP
-P OUTPUT ACCEPT
-N ICMP
-N TCP
-N UDP
-A INPUT -m conntrack –ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack –ctstate INVALID -j DROP
-A INPUT -p udp -m conntrack –ctstate NEW -j UDP
-A INPUT -p tcp -m tcp –tcp-flags FIN,SYN,RST,ACK SYN -m conntrack –ctstate NEW -j TCP
-A INPUT -p icmp -m conntrack –ctstate NEW -j ICMP
-A INPUT -p udp -j REJECT –reject-with icmp-port-unreachable
-A INPUT -p tcp -j REJECT –reject-with tcp-reset
-A INPUT -j REJECT –reject-with icmp-proto-unreachable
-A TCP -p tcp -m tcp –dport 22 -j ACCEPT

Как вы видите, вывод выглядит примерно так, как и команды, которые использовались для их создания, но не имеют команды iptables в начале. Также вывод будет напоминать файлы конфигурации правил Iptables, если вы когда-либо использовали iptables-persistent или iptables save.

Перечисление списка правил конкретной цепочки

Если вы хотите ограничить вывод конкретной цепочкой (INPUT, OUTPUT, TCP и т. д.), вы можете указать название цепочки сразу после опции -S. Например, для отображения всех спецификаций правил в цепочке TCP необходимо запустить следующую команду:

sudo iptables -S TCP

Output
-N TCP
-A TCP -p tcp -m tcp –dport 22 -j ACCEPT

Теперь давайте рассмотрим альтернативный способ просмотра действующих правил Iptables в форме таблицы правил.

Перечисление правил в виде таблицы

Перечисление правил Iptables в виде таблицы может быть полезным при сопоставлении разных правил друг с другом.

Чтобы вывести все действующие правила Iptables в виде таблицы, запустите команду iptables с опцией -L:

sudo iptables -L

Эта команда будет выводить все действующие правила, отсортированные по цепочкам.

Если вы хотите ограничить вывод конкретной цепочкой (INPUT, OUTPUT, TCP и т. д.), вы можете указать название цепочки сразу после опции -L.

Давайте рассмотрим пример цепочки INPUT:

sudo iptables -L INPUT

Output
Chain INPUT (policy DROP)

target ACCEPT ACCEPT DROP UDP TCP NEW ICMP REJECT REJECT REJECT

prot opt source all — anywhere all — anywhere

all — anywhere udp — anywhere

tcp — anywhere

icmp — anywhere udp — anywhere tcp — anywhere all — anywhere

destination anywhere anywhere

anywhere anywhere

anywhere

anywhere anywhere

anywhere anywhere

ctstate RELATED,ESTABLISHED

ctstate INVALID ctstate NEW

tcp flags:FIN,SYN,RST,ACK/SYN ctstate

ctstate NEW
reject-with icmp-port-unreachable

reject-with tcp-reset
reject-with icmp-proto-unreachable

Первая строка вывода указывает имя цепочки (в данном случае INPUT), за которым следует используемая по умолчанию политика (DROP). Следующая строка состоит из заголовков каждого столбца таблицы, после чего идут правила цепочки. Давайте посмотрим, что означает каждый заголовок:

  • target: если пакет отвечает правилу, заголовок target указывает, что с ним нужно сделать. Например, пакет можно принять, отклонить, записать или отправить другой цепочке для сопоставления с другими правилами.
  • prot: протокол, например tcp, udp, icmp или all
  • opt: данный параметр используется редко и отображает опции IP
  • source: исходный IP-адрес или подсеть трафика, либо anywhere (отовсюду)
  • destination: IP-адрес назначения или подсеть трафика, либо anywhere (везде) Последняя колонка, которая не имеет заголовка, указывает опции правила. Другими словами, это может быть любая часть правила, которая не указана предыдущими столбцами. Это может быть любая информация, начиная с портов назначения и исходных портов и заканчивая состоянием подключения пакета. Отображение счетчиков пакетов и общего размера При выводе списка правил Iptables также можно отобразить количество пакетов и общий размер пакетов (в байтах), которые отвечают каждому конкретному правилу. Это часто может быть полезно, когда вы пытаетесь

получить приблизительное представление о том, какие правила используются для различных пакетов. Чтобы сделать это, воспользуйтесь опциями -L и -v в одной команде.

Например, давайте снова рассмотрим цепочку INPUT с опцией -v: sudo iptables -L INPUT -v

Output
Chain INPUT (policy DROP 0 packets, 0 bytes)

pkts bytes target prot opt in out source

284K 42M ACCEPT all — any any anywhere RELATED,ESTABLISHED

destination anywhere

anywhere anywhere

anywhere anywhere

anywhere anywhere

anywhere anywhere

0 0 ACCEPT

0 0 DROP 396 63275 UDP

17067 1005K TCP tcp — any any flags:FIN,SYN,RST,ACK/SYN ctstate NEW

2410 154K ICMP icmp — any any 396 63275 REJECT udp — any any

icmp-port-unreachable
2916 179K REJECT all — any any

ctstate

ctstate INVALID ctstate NEW

tcp

ctstate NEW reject-with

reject-with tcp dpt:ssh

all — lo any all — any any

anywhere

anywhere
udp — any any anywhere

icmp-proto-unreachable
0 0 ACCEPT tcp — any any anywhere

ctstate NEW,ESTABLISHED

anywhere

anywhere anywhere

anywhere

Обратите внимание, что список сейчас содержит два дополнительных столбца, pkts и bytes.

Теперь, когда вы знаете, как выводить список действующих правил брандмауэра различными способами, давайте рассмотрим возможность сброса счетчиков пакетов и байтов.

Сброс счетчиков пакетов и общего размера

Если вы хотите очистить или обнулить счетчики пакетов и байтов для ваших правил, воспользуйтесь опцией -Z. Счетчики также сбрасываются при перезагрузке. Это полезно, если вы хотите узнать, принимает ли ваш сервер новый трафик, отвечающий существующим правилам.

Чтобы очистить счетчики для всех цепочек и правил, используйте опцию -Z отдельно:

sudo iptables -Z

Чтобы очистить счетчики для всех правил конкретной цепочки, используйте опцию -Z и укажите название цепочки. Например, для очистки счетчиков цепочки INPUT воспользуйтесь следующей командой:

sudo iptables -Z INPUT

Если вы хотите очистить счетчики для конкретного правила, укажите имя цепочки и номер правила. Например, для обнуления счетчиков первого правила в цепочке INPUT запустите следующую команду:

sudo iptables -Z INPUT 1

Теперь, когда вы знаете, как сбросить счетчики пакетов и байтов Iptables, давайте рассмотрим два метода, которые можно использовать для удаления правил.

Удаление правил по спецификации

Одним из способов удаления правил Iptables является удаление правила по спецификации. Для этого вам нужно запустить команду iptables с опцией -D, указав далее спецификацию правила. Если вы хотите удалить правила с помощью этого метода, вы можете использовать команду для вывода списка правил iptables -S в качестве источника полезной информации.

Например, если вы хотите удалить правило, которое отклоняет недействительные входящие пакеты (-A INPUT -m conntrack –ctstate INVALID -j DROP), запустите следующую команду:

sudo iptables -D INPUT -m conntrack –ctstate INVALID -j DROP

Обратите внимание, что опция -A, используемая для обозначения положения правила в момент его создания, здесь не применяется.

Удаление правил по цепочке и номеру

Другой способ удаления правил Iptables состоит в использовании цепочки и номера строки. Чтобы определить номер строки правила, выведите список правил в формате таблицы и добавьте опцию –line-numbers:

sudo iptables -L –line-numbers

[secondary_output Output] Chain INPUT (policy DROP) num target prot opt source

  1. 1  ACCEPT all — anywhere
  2. 2  ACCEPT all — anywhere

destination anywhere anywhere

anywhere anywhere

anywhere

anywhere anywhere

anywhere anywhere

anywhere

ctstate RELATED,ESTABLISHED

ctstate INVALID ctstate NEW

tcp flags:FIN,SYN,RST,ACK/SYN

ctstate NEW reject-with icmp-port-

reject-with tcp-reset reject-with icmp-proto-

tcp dpt:ssh ctstate

  1. 3  DROP
  2. 4  UDP
  3. 5  TCP

ctstate NEW
6 ICMP icmp — anywhere

7 REJECT unreachable

  1. 8  REJECT
  2. 9  REJECT

unreachable
10 ACCEPT NEW,ESTABLISHED …

all — anywhere udp — anywhere

tcp — anywhere

udp — anywhere

tcp — anywhere all — anywhere

tcp — anywhere

Эта команда добавляет номер строки для каждой строки таблицы правил в столбце с заголовком num.

Когда вы знаете, какое правило нужно удалить, запомните цепочку и номер строки правила. Затем запустите команду iptables -D, указав далее цепочку и номер правила.

Например, если мы хотим удалить правило для входящего трафика, которое отклоняет недействительные пакеты, мы видим, что это правило с номером 3 в цепочке INPUT. Поэтому нам нужно запустить следующую команду:

sudo iptables -D INPUT 3

Теперь, когда вы знаете, как удалить отдельные правила брандмауэра, давайте рассмотрим возможность сброса цепочек правил.

Сброс цепочек

Iptables предлагает возможность удаления всех правил в цепочке или сброса цепочки. В данном разделе мы опишем разнообразные способы выполнения этой задачи.

Примечание: будьте осторожны, чтобы не заблокировать собственный доступ к серверу через SSH в результате сброса цепочки с используемой по умолчанию политикой drop или deny. В этом случае вам может потребоваться подключение через консоль для восстановления доступа.

Сброс отдельной цепочки

Чтобы сбросить конкретную цепочку с последующим удалением всех правил в данной цепи, вы можете использовать опцию -F или ее эквивалент –flush, добавив в команду имя цепочки, которую вы хотите сбросить.

Например, для удаления всех правил в цепочке INPUT запустите следующую команду:

sudo iptables -F INPUT

Сброс всех цепочек

Чтобы сбросить все цепочки с последующим удалением всех правил брандмауэра, вы можете использовать опцию -F или ее эквивалент –flush без указания конкретной цепочки:

sudo iptables -F

Сброс всех правил, удаление всех цепочек и разрешение любого трафика

Из этого раздела вы узнаете, как выполнить сброс всех правил брандмауэра, таблиц и цепочек, чтобы разрешить прием любого сетевого трафика.

Примечание: результатом этих действий станет полное отключение вашего брандмауэра. Вам следует выполнять описанные в данном разделе действия только в том случае, если вы хотите начать настройку вашего брандмауэра с нуля.

Сначала задайте ACCEPT в качестве используемой по умолчанию политики для каждой встроенной цепочки. Главная причина этого шага состоит в том, чтобы гарантировать, что вы не заблокируете собственный доступ к вашему серверу через SSH:

sudo iptables -P INPUT ACCEPT sudo iptables -P FORWARD ACCEPT sudo iptables -P OUTPUT ACCEPT

Затем выполните сброс таблиц nat и mangle, сбросьте все цепочки (-F) и удалите все цепочки, не используемые по умолчанию (-X):

sudo iptables -t nat -F sudo iptables -t mangle -F sudo iptables -F
sudo iptables -X

Теперь ваш брандмауэр будет принимать любой сетевой трафик. Если вы сейчас попробуете вывести список ваших правил, то увидите, что он пуст, и остались только три используемые по умолчанию цепочки (INPUT, FORWARD и OUTPUT).

Заключение

После изучения данного руководства вы должны получить представление о том, как вывести список ваших правил брандмауэра iptables и удалить определенные правила.

Не забывайте, что любые изменения, вносимые с помощью команды iptables, если их не сохранить, исчезнут после перезагрузки сервера.

Previous Story

Динамическая маршрутизация на базе протокола OSPF

Next Story

Рекомендации по повышению защищенности ИТ-инфраструктуры

Latest from Blog

Zabbix – Docker – Raspberry Pi

Для начала установим Portainer – веб-интерфейс для управления docker-контейнерами. Бесплатно, удобно, подойдет новичкам в docker. Установка

Сетевая папка/диск в Linux

x.x.x.x адрес шары /mnt/shara точка монтирования user пользователь с доступом к шаре 1234 пароль пользователя Для

Памятка SSH

В статье описаны продвинутые функций OpenSSH, которые позволяют сильно упростить жизнь системным администраторам и программистам, которые

0 £0.00