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

Вступление

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

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

  • Список правил

  • Очистить счетчики пакетов и байтов

  • Удалить правила

  • Сбросить цепочки (удалить все правила в цепочке)

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

Предпосылки

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

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

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

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

sudo iptables -S
Example: Rule Specification Listing-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
Example: TCP Chain Rule Specification Listing-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
Example: Input Chain Rule Table ListingChain 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 *: если пакет соответствует правилу, target указывает, что с ним делать. Например, пакет может быть принят, отброшен, зарегистрирован или отправлен в другую цепочку для сравнения с другими правилами

  • * prot *: протокол, такой как + tcp +, + udp +, + icmp + или + all +

  • * opt *: редко используется, этот столбец указывает параметры IP

  • * source *: исходный IP-адрес или подсеть трафика, или "+ в любом месте +"

  • * destination *: IP-адрес или подсеть трафика или «+ где-нибудь +»

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

Показать количество пакетов и общий размер

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

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

sudo iptables -L  -v
Example: Verbose ListingChain 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

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

sudo iptables -Z INPUT 1

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

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

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

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

sudo iptables -D

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

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

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

sudo iptables -L --line-numbers
[secondary_output Example Output: Rules with 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

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

Флеш Цепи

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

Промойте одну цепь

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

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

sudo iptables -F

Сбросить все цепочки

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

Related