Больше не нужно искать работу мечты — присоединяйтесь к команде Клауда

Вывод и удаление правил брандмауэра Iptables: инструкция

Никита Кулижников
Никита Кулижников
Технический писатель
27 мая 2022 г.
2174
12 минут чтения
Средний рейтинг статьи: 5

Приложение IPTables – брандмауэр, необходимый для безопасной работы с сетевыми ресурсами на платформе Linux. Настройке продукта уделено много материалов, здесь же мы рассмотрим узкую задачу: как просматривать списки правил, удалять ненужные, сбрасывать цепочки, очищать счетчик количества пакетов и их объема. Не рекомендуем трогать коннект по SSH, использующий порт 22, если вы не уверены на 100% в своих действиях, чтобы случайно не заблокировать удаленный доступ к тестовому хосту.

Инструкция По Настройке Iptables

Кстати, в официальном канале Timeweb Cloud собрали комьюнити из специалистов, которые говорят про IT-тренды, делятся полезными инструкциями и даже приглашают к себе работать.

Платформа

Разбираться в настройках брандмауэра лучше на удаленной машине, например, арендованной у провайдера Timeweb Cloud. В Timeweb Cloud вы можете выбрать один из готовых образов Linux-дистрибутивов, в которые уже предустановлено основное ПО. Поэтому дополнительно не понадобится устанавливать Linux и iptables, однако будет нужно создать пользователя с привилегиями sudo или изменить права имеющегося. Желательно работать с актуальной версией операционной системы, в этом материале будем использовать Ubuntu. Схема настройки на CentOS и Debian будет аналогичной.

Просмотрим правила

В iptables доступен просмотр правил, установленных по умолчанию или предыдущим администратором. Выполним команду:

sudo iptables –S

Результат будет отображен примерно так:

-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

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

Функцию применяют, когда хотят убрать из вывода определенную цепочку – INPUT, OUTPUT, TCP и пр. Их указывают следом за опцией -S. Пример:

sudo iptables -S TCP

Результат применения команды система выведет на экран:

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

Есть похожий вариант индикации текущих правил.

Выведем перечень в виде таблицы

Такой способ удобен, если необходимо сопоставить разные правила. Построение таблицы заложено в утилиту, функция будет активирована при помощи опции -L. Введем команду iptables:

sudo iptables –L

В таком случае также есть возможность ограничить вывод указанной цепочкой:

sudo iptables -L INPUT

Вывод на экран примерно такой:

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 – отражает используемый тип протокола (UDP, TCP или ALL).
  • opt – показывает опции IP-адреса, если они применяются при передаче данных.
  • source – позволяет посмотреть IP или подсеть источника трафика (anywhere означает, что система принимает данные отовсюду).
  • destination – подсеть или IP хоста, которому предназначен трафик (или, как и в предыдущем пункте, указано anywhere).

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

Выведем счетчик пакетов и их общего размера

Пользователю доступен вывод перечня пакетов и их общего объема в байтах, соответствующего указанному правилу. Такая информация нужна, если требуется анализ приблизительного трафика по каждому из разрешенных правил. Функция доступна с момента установки iptables благодаря опциям -L и -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. Теперь перейдем к другим функциям, доступным для iptables в Ubuntu.

Сбросим счетчик пакетов и их объема

Очистка (обнуление) счетчика пакетов и объема предусмотрена опцией -Z. Она применяется при перезагрузке сервера автоматически. Но иногда пользователю нужно выяснить, поступает ли новый трафик. Пример команды:

sudo iptables –Z

По умолчанию очистка проводится по всем видам цепочек. Если нужно провести операцию лишь с одной, ее указывают явно:

sudo iptables -Z OUTPUT

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

sudo iptables -Z OUTPUT 2

Следующим шагом расскажем о двух вариантах удаления правил с помощью iptables.

Применим для удаления спецификацию

Первый, который применим на практике, это удаление по спецификации. Понадобится стартовать iptables с опцией –D, и после нее указать нужные данные. Перед ее применением желательно просмотреть действующие правила (рассматривали выше). Например, если захотели убрать задачу отклонения недействительного исходящего трафика, команда будет выглядеть так:

sudo iptables -D OUTPUT -m conntrack --ctstate INVALID -j DROP

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

Применим для удаления номер

Второй вариант чуть сложнее, т.к. требует сначала выяснить номер строки, соответствующей тому правилу, которое планируется удалить. Применим опцию --line-number, она выводит список с цифровыми значениями для всех строк:

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. Теперь мы можем выяснить точное значение для удаляемого правила. И ввести команду -D с указанием нужного номера. Например, требуется удалить задачу, указанную в строке 3, отклоняющую любые недействительные пакеты:

sudo iptables -D INPUT 3

Помимо удаления, утилита поддерживает сброс цепочек правил.

Сбросим одну и несколько цепочек правил

Приложение позволяет сбрасывать действующие правила несколькими способами. При проверке этой функции важно случайно не заблокировать удаленный доступ к серверу с IPTables, который организован по протоколу SSH. Такое может произойти, если ввести команду с политикой «по умолчанию» drop или deny. Если использовать облачные сервисы от Timeweb, то при закрытии доступа будет возможно восстановить его через веб-консоль, но лучше сразу привыкать правильно работать с утилитой.

Сбросим одиночную цепочку

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

sudo iptables -F INPUT

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

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

sudo iptables –F

Итогом ввода этой команды будет разрешение любого трафика независимо от ранее установленных ограничений (входящего, исходящего, проходящего). Фактически это равнозначно отключению брандмауэра на сервере. Если такую команду ввести на рабочей машине, его придется настраивать с нуля, чтобы ограничить доступ посторонних, в том числе злоумышленников. Поэтому перед ее выполнением рекомендуется создать бэкап текущих настроек в файл с помощью iptables-save:

iptables-save > iptables_backup.txt

После настройки будет можно восстановить из файла с помощью iptables-restore:

iptables-restore < iptables_backup.txt

Вернем прежние настройки: сначала зададим 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 и сбрасывать, удалять их, производить те же операции с указанными цепочками. При тестировании функций важно учитывать, что любые изменения исчезнут при перезапуске сервера. 

Хотите внести свой вклад?
Участвуйте в нашей контент-программе за
вознаграждение или запросите нужную вам инструкцию
img-server
27 мая 2022 г.
2174
12 минут чтения
Средний рейтинг статьи: 5
Пока нет комментариев