====== Правила 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**.