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