====== Правила iptables ====== [[https://losst.pro/prosmotr-pravil-iptables]] [[https://losst.pro/kak-udalit-pravilo-iptables]] ===== Общая информация ===== **iptables** - инструмент администрирования фильтра пакетов IPv4 и NAT. **iptables** используется для установки, настройки и просмотра таблиц правил фильтрации IP-пакетов в ядре Linux. Каждая таблица содержит несколько предопределённых цепочек и может содержать цепочки, определённые пользователем. Каждая цепочка - это список правил, которые могут воздействовать на множество пакетов. Каждое правило определяет, какие действие произвести с пакетами, на которые оно действует. Эти действия называются целью, целью может быть и переход на другую (определённую пользователем) цепочку в этой же таблице. ===== Как посмотреть правила iptables ===== Для возможности выполнения команды **iptables** необходимо, чтобы пользователю были предоставлены привилегии суперпользователя с помощью команды **//sudo//**. Существуют две версии утилиты для настройки брандмауэра Linux: **iptables** и **ip6tables**. **iptables** используется для протокола IPv4, а **ip6tables** для протокола IPv6. Для протокола IPv4: $ sudo iptables -L Для протокола IPv6: $ sudo ip6tables -L С помощью дополнительных параметров команды **//sudo iptables -L//** можно добавлять дополнительные столбцы в выводимой таблице правил **iptables**. Рассмотрим название столбцов в стандартном выводе **//sudo iptables -L//**: * **target** – выполняемое действие с пакетом при соответствии его данному правилу * **prot** – протокол передачи данных, при котором применяется данное правило * **opt** – дополнительные опции для правила * **source** – IP адрес, подсеть, домен узла источника пакета, попадающего под выполнение данного правила * **destination** – IP адрес, подсеть, домен узла назначения пакета, попадающего под выполнение данного правила Команда чтобы вывести на экран конкретную цепочку правил выглядит следующим образом: sudo iptables [-L имя цепочки] Например просмотр правил **iptables** из цепочки **OUTPUT**: $ sudo iptables -L OUTPUT Команда вывода содержимого конкретно указанной таблицы выглядит следующим образом: sudo iptables [-t имя таблицы] [-L имя цепочки] Например: $ sudo iptables -t nat -L OUTPUT Вот список всех таблиц правил **iptables**: * **filter** – таблица по умолчанию. Используется для фильтрации пакетов. Содержится в цепочках INPUT, FORWARD, OUTPUT. * **raw** – используется редко. Пакет проверяется на соответствие условиям данной таблицы до передачи системе определения состояний (conntrack), например, для того, чтобы не обрабатываться с помощью данной системы (действие NOTRACK). Система определения состояний позволяет фильтровать пакеты на уровне взаимодействия сеансов приложений. То есть фильтрует пакеты по сеансу связи – новый сеанс связи (NEW), уже установленный сеанс связи (ESTABLISHED), дополнительный сеанс связи к уже существующему (RELATED). Данная система позволяет реализовать высокоуровневый межсетевой экран, который вместо работы с пакетами работает с сеансами связи в рамках приложений. Содержится в цепочках PREROUTING и OUTPUT. * **mangle** – содержит правила модификации обрабатываемых IP-пакетов. Например, изменение полей заголовков IP-пакетов, содержащих служебную информацию. Используется редко. Содержится в цепочках PREROUTING, INPUT, FORWARD, OUTPUT. * **nat** – предназначена для подмены адреса отправителя или получателя. Данная таблица применяется только к первому пакету из потока протокола передачи данных по сети, к остальным пакетам потока пакетов выбранное действие применяется далее автоматически. Таблицу используют, например, для трансляции адресов отправителя и получателя, для маскировки адресов отправителя или получателя. Это делается в основном в двух случаях. Первый – когда необходимо организовать доступ к сети Интернет нескольким компьютерам, расположенным за данным компьютером. Второй – когда необходимо спрятать (замаскировать) в целях безопасности отправителя или получателя информации, передаваемой по сети Интернет. Содержится в цепочках PREROUTING, OUTPUT, POSTROUTING. Следующая команда позволяет нам вывести номера правил **iptables**, которые потом можно использовать для управления ими на экран: sudo iptables [-t таблица] [-L имя_цепочки] --line-numbers -n Например: $ sudo iptables -t filter -L --line-numbers -n Чтобы посмотреть таблицу правил со счетчиком переданного (полученного) количества байтов (bytes) и пакетов (pkts) используется следующая команда: sudo iptables [-t таблица] [-L имя цепочки] -n -v Например: $ sudo iptables -t filter -L -n -v ===== Как удалить правило iptables ===== Основная работа c межсетевым экраном Netfilter с помощью утилиты iptables состоит в удалении неверных или неиспользуемых правил и добавлении в цепочки новых правил. Их выполнение осуществляется последовательно. Чтобы удалить правило по номеру **iptables** будет использоваться такая команда: sudo iptables [-t таблица] -D цепочка номер_правила Например: $ sudo iptables -t filter -D INPUT 2 Данная команда удалит из таблицы filter цепочки INPUT правила с номерами 2. Нумерация правил начинается с 1. Удалить правило iptables по выполняемому над пакетами действию можно с помощью следующей команды: sudo iptables [-t таблица] -D цепочка спецификации_правила В спецификациях правила необходимо указать IP адрес отправителя или другие параметры правила, однозначно его определяющие (порт, IP адрес назначения, протокол и др.) и выполняемое действие, например, **-j ACCEPT**. Например: $ sudo iptables -t filter -D INPUT -s 192.168.3.0/24 -j ACCEPT Данная команда удалит из таблицы filter цепочки INPUT правило с заданным отправителем 192.168.3.0/24 и действием над пакетами DROP. Следует заметить, что существует возможность удалить правила текущей таблицы из всех цепочек правил с помощью опции **-F (--flush)**. По умолчанию текущей таблицей является таблица **filter**. Поэтому, чтобы удалить все правила таблицы по умолчанию надо использовать команду: $ sudo iptables -F Ещё можно указать таблицу из которой вы хотите выполнить удаление правила **iptables**: sudo iptables -t таблица -F Например: $ sudo iptables -t nat -F Данная команда удалит все правила из всех цепочек таблицы nat. Для того, чтобы удаление правил **iptables** из конкретной цепочки в заданной таблице выполняется такой командой: sudo iptables -t таблица -F цепочка_правил Например: $ sudo iptables -t nat -F PREROUTING Данная команда удалит все правила из таблицы **nat** в цепочке **PREROUTING**.