Поиск по сайту:

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


Введение

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

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

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

Примечание. При работе с брандмауэрами будьте осторожны, чтобы не заблокировать доступ к собственному серверу, заблокировав трафик SSH (порт :22 по умолчанию). Если вы потеряете доступ из-за настроек брандмауэра, вам может потребоваться подключиться к нему через внешнюю консоль, чтобы исправить свой доступ.

Предпосылки

В этом руководстве предполагается, что вы используете сервер Linux с установленной командой iptables и что у вашего пользователя есть привилегии sudo.

Если вам нужна помощь с этой начальной настройкой, обратитесь к нашему CentOS.

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

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

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

  1. 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, выполните следующую команду:

  1. sudo iptables -S TCP
Output
-N TCP -A TCP -p tcp -m tcp --dport 22 -j ACCEPT

Теперь давайте рассмотрим альтернативный способ просмотра активных правил iptables: в виде таблицы правил.

Список правил в виде таблиц

Список правил iptables в виде таблицы может быть полезен для сравнения различных правил друг с другом. Чтобы вывести все активные правила iptables в таблицу, запустите команду iptables с параметром -L:

  1. sudo iptables -L

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

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

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

  1. sudo iptables -L INPUT
Output
Chain INPUT (policy DROP) 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). Следующая строка состоит из заголовков каждого столбца в таблице, за которыми следуют правила цепочки. Давайте рассмотрим, что означает каждый заголовок:

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

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

Отображение количества пакетов и совокупного размера

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

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

  1. sudo iptables -L INPUT -v
Output
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 отдельно:

  1. sudo iptables -Z

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

  1. sudo iptables -Z INPUT

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

  1. sudo iptables -Z INPUT 1

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

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

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

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

  1. sudo iptables -D INPUT -m conntrack --ctstate INVALID -j DROP

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

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

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

  1. sudo iptables -L --line-numbers
Output
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. Итак, мы должны запустить эту команду:

  1. sudo iptables -D INPUT 3

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

Промывочные цепи

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

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

Промывка одной цепи

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

Например, чтобы удалить все правила в цепочке INPUT, выполните следующую команду:

  1. sudo iptables -F INPUT

Промывка всех цепей

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

  1. sudo iptables -F

Сброс всех правил, удаление всех цепочек и принятие всех

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

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

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

  1. sudo iptables -P INPUT ACCEPT
  2. sudo iptables -P FORWARD ACCEPT
  3. sudo iptables -P OUTPUT ACCEPT

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

  1. sudo iptables -t nat -F
  2. sudo iptables -t mangle -F
  3. sudo iptables -F
  4. sudo iptables -X

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

Заключение

Изучив это руководство, вы узнали, как составить список и удалить правила брандмауэра iptables.

Помните, что любые изменения iptables с помощью команды iptables являются эфемерными, и их необходимо сохранить, чтобы они сохранялись при перезагрузке сервера. Это описано в разделе «Сохранение правил» учебника «Общие правила и команды брандмауэра».