Введение
Iptables — это брандмауэр, играющий основополагающую роль в обеспечении сетевой безопасности большинства систем Linux. Хотя многие руководства по iptables рассказывают о создании правил брандмауэра для защиты сервера, это руководство фокусируется на другом аспекте управления брандмауэром: составлении списка правил и их удалении.
В этом уроке мы рассмотрим, как выполнять следующие задачи iptables:
- Перечислите правила
- Очистить счетчики пакетов и байтов
- Удалить правила
- Очистка цепочки (удаление всех правил в цепочке)
- Очистить все цепочки и таблицы, удалить все цепочки и принять весь трафик
Предпосылки
В этом руководстве предполагается, что вы используете сервер Linux с установленной командой iptables и у вашего пользователя есть права sudo. Если вам нужна помощь с первоначальной настройкой, обратитесь к руководству по первоначальной настройке сервера в Ubuntu 20.04.
Правила листинга по спецификации
Давайте сначала рассмотрим, как составить список правил. Существует два способа просмотра активных правил iptables: в виде таблицы или списка спецификаций правил. Оба способа предоставляют примерно одинаковую информацию в разных форматах.
Чтобы вывести список всех активных правил iptables по спецификации, выполните команду iptables с опцией -S:
sudo iptables -SOutput
-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-persistent или iptables save, то он также будет похож на файлы конфигурации правил iptables.
Листинг конкретной сети
Если вы хотите ограничить вывод определенной цепочкой (INPUT, OUTPUT, TCP и т. д.), вы можете указать имя цепочки непосредственно после опции. -С Например, чтобы отобразить все правила в цепочке TCP, выполните следующую команду:
sudo iptables -S TCPOutput
-N TCP
-A TCP -p tcp -m tcp --dport 22 -j ACCEPTТеперь давайте рассмотрим альтернативный способ просмотра активных правил iptables — в виде таблицы правил.
Правила перечисления в таблицах
Просмотр правил iptables в табличном виде может быть полезен для сравнения различных правил. Чтобы вывести все активные правила iptables в таблице, выполните команду iptables с опцией -L:
sudo iptables -LЭто позволит создать все текущие правила, отсортированные по цепочке.
Если вы хотите ограничить вывод определенной цепочкой (INPUT, OUTPUT, TCP и т. д.), вы можете указать имя цепочки непосредственно после опции -L.
Давайте рассмотрим пример входной цепочки:
sudo iptables -L INPUTOutput
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). В следующей строке содержатся заголовки каждого столбца таблицы, а затем правила цепочки. Рассмотрим, что представляет каждый заголовок:
- Цель: если пакет соответствует правилу, цель определяет, что с ним делать. Например, пакет может быть принят, отброшен, зарегистрирован или отправлен в другую цепочку для сравнения с другими правилами.
- prot: протокол, такой как tcp, udp, icmp или все
- opt: используется редко, в этом столбце показаны параметры IP
- Источник: IP-адрес источника или подсеть трафика или любое другое место.
- назначение: IP-адрес назначения или подсеть трафика или любое другое место
В последнем столбце, который не имеет заголовка, показаны параметры правила. Это любая часть правила, не показанная в предыдущих столбцах. Это может быть что угодно: от портов источника и назначения до состояния пакетного соединения.
Отображение количества упаковок и общего размера
При выводе списка правил iptables можно отобразить количество пакетов и их общий размер в байтах, соответствующих каждому правилу. Это часто полезно, когда нужно получить общее представление о том, какие правила соответствуют тем или иным пакетам. Для этого используйте одновременно опции -L и -v.
Например, давайте еще раз посмотрим на цепочку INPUT с опцией -v:
sudo iptables -L INPUT -vOutput
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Обратите внимание, что в списке теперь есть два дополнительных столбца: пакеты и байты Это.
Теперь, когда вы знаете, как вывести список активных правил брандмауэра различными способами, давайте посмотрим, как можно сбросить счетчики пакетов и байтов.
Сбросить количество пакетов и общий размер
Если вы хотите очистить или обнулить счётчики пакетов и байтов для ваших правил, используйте опцию -Z. Они также будут сброшены при перезагрузке. Это полезно, если вы хотите проверить, получает ли ваш сервер новый трафик, соответствующий вашим текущим правилам.
Чтобы очистить счетчики всех цепочек и правил, используйте опцию -З Использовать отдельно:
sudo iptables -ZЧтобы очистить счетчики для всех правил в определенной цепочке, используйте опцию -З Используйте и укажите цепочку. Например, чтобы очистить счётчики цепочек. ВХОД Выполните эту команду:
sudo iptables -Z 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-numbersOutput
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Это добавляет номер строки к каждой строке правила, связанной с заголовком. число Это показано.
Определив, какое правило нужно удалить, запишите номер цепочки и строку правила. Затем выполните команду iptables -D, указав номер цепочки и правило.
Например, если мы хотим удалить входящее правило, которое отбрасывает недействительные пакеты, мы видим, что правило 3 находится в цепочке INPUT. Поэтому нам нужно выполнить следующую команду:
sudo iptables -D INPUT 3
Теперь, когда вы знаете, как удалять правила брандмауэра, давайте рассмотрим, как очищать цепочки правил.
Мигающие цепи
Iptables позволяет удалить все правила в цепочке или сбросить её. В этом разделе мы рассмотрим несколько способов сделать это.
Промывка цепи
Чтобы очистить определенную цепочку, что приведет к удалению всех правил в цепочке, можно использовать опцию -F или эквивалентную ей опцию -flush и имя очищаемой цепочки.
Например, чтобы удалить все правила в цепочке ВХОД, выполните эту команду:
sudo iptables -F INPUTПерепрошивка всех цепей
Чтобы очистить все цепочки, что удалит все правила брандмауэра, можно использовать опцию -F или ее эквивалент -flush:
sudo iptables -FОчистить все правила, удалить все цепочки и принять все
В этом разделе показано, как очистить все правила, таблицы и цепочки брандмауэра и разрешить весь сетевой трафик.
Сначала установите для каждой внутренней цепочки политику по умолчанию «ПРИНЯТЬ». Это необходимо для того, чтобы не допустить блокировки доступа к серверу через 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, являются временными и должны быть сохранены для сохранения после перезагрузки сервера. Подробнее об этом см. в разделе «Сохранение правил» руководства «Общие правила и команды брандмауэра».









