Как отображать и удалять правила брандмауэра Iptables

12 set 2022 6 min di lettura
Как отображать и удалять правила брандмауэра Iptables
Indice dei contenuti

Введение

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

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

  • Список правил
  • Очистить счетчики пакетов и байтов
  • Удалить правила
  • Очистить цепочки (удалить все правила в цепочке)
  • Очистить все цепочки и таблицы, удалить все цепочки и принять весь трафик
Примечание.

Предпосылки

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

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

Список правил по спецификации

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

sudo iptables -S
-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-persistent или iptables save.

Перечислите конкретную цепочку

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

sudo iptables -S 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
Chain INPUT (policy ACCEPT)
 target prot opt source destination
 ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
 ACCEPT all -- anywhere anywhere
 DROP all -- anywhere anywhere ctstate INVALID
 UDP udp -- anywhere anywhere ctstate NEW
 TCP tcp -- anywhere anywhere tcp flags:FIN,SYN,RST,ACK/SYN ctstate NEW
 ICMP icmp -- anywhere anywhere ctstate NEW
 REJECT udp -- anywhere anywhere reject-with icmp-port-unreachable
 REJECT tcp -- anywhere anywhere reject-with tcp-reset
 REJECT all -- anywhere anywhere reject-with icmp-proto-unreachable

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

  • цель: если пакет соответствует правилу, цель указывает, что с ним делать. Например, пакет может быть принят, удален, зарегистрирован или отправлен в другую цепочку для сравнения с несколькими правилами.
  • prot: протокол, такой как tcp, udp, icmp или all
  • opt: используется редко, в этом столбце указаны параметры IP.
  • source: IP-адрес источника или подсети трафика или anywhere
  • назначение: IP-адрес или подсеть целевого трафика или anywhere место.

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

Показать количество пакетов и совокупный размер

При перечислении правил iptables также можно показать количество пакетов и совокупный размер пакета в байтах, соответствующий каждому конкретному правилу. Это часто бывает полезно при попытке получить приблизительное представление о том, какие правила соответствуют пакетам. Для этого просто используйте вместе опции -L и -v.

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

sudo iptables -L INPUT -v
Chain INPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target prot opt in out source destination
 284K 42M ACCEPT all -- any any anywhere anywhere ctstate RELATED,ESTABLISHED
 0 0 ACCEPT all -- lo any anywhere anywhere
 0 0 DROP all -- any any anywhere anywhere ctstate INVALID
 396 63275 UDP udp -- any any anywhere anywhere ctstate NEW
 17067 1005K TCP tcp -- any any anywhere anywhere tcp flags:FIN,SYN,RST,ACK/SYN ctstate NEW
 2410 154K ICMP icmp -- any any anywhere anywhere ctstate NEW
 396 63275 REJECT udp -- any any anywhere anywhere reject-with icmp-port-unreachable
 2916 179K REJECT all -- any any anywhere anywhere reject-with icmp-proto-unreachable
 0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:ssh ctstate NEW,ESTABLISHED

Обратите внимание, что список теперь имеет два дополнительных столбца 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
Chain INPUT (policy DROP)
 num target prot opt source destination
 1 ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
 2 ACCEPT all -- anywhere anywhere
 3 DROP all -- anywhere anywhere ctstate INVALID
 4 UDP udp -- anywhere anywhere ctstate NEW
 5 TCP tcp -- anywhere anywhere tcp flags:FIN,SYN,RST,ACK/SYN ctstate NEW
 6 ICMP icmp -- anywhere anywhere ctstate NEW
 7 REJECT udp -- anywhere anywhere reject-with icmp-port-unreachable
 8 REJECT tcp -- anywhere anywhere reject-with tcp-reset
 9 REJECT all -- anywhere anywhere reject-with icmp-proto-unreachable
 10 ACCEPT tcp -- anywhere anywhere tcp dpt:ssh ctstate NEW,ESTABLISHED...

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

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

Например, если мы хотим удалить входное правило, которое отбрасывает недопустимые пакеты, мы видим, что это правило 3 цепочки INPUT. Итак, мы должны запустить эту команду:

sudo iptables -D INPUT 3

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

Промывочные цепи (пустые)

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

Примечание.dropdeny

Очистить одну цепочку

Чтобы сбросить определенную цепочку, которая удалит все правила в цепочке, вы можете использовать параметр -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 с помощью команды iptables являются временными и должны быть сохранены, чтобы они сохранялись при перезагрузке сервера.

Buy me a coffeeBuy me a coffee

Supportaci se ti piacciono i nostri contenuti. Grazie.

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.