Следующая версия
|
Предыдущая версия
|
for_students:os:iptables [2022/02/10 15:25] ejlka создано |
for_students:os:iptables [2022/02/15 15:14] (текущий) ejlka |
==== Iptables ==== | ==== Iptables ==== |
| |
| iptables - утилита, которая управляет встроенным в ядро брандмауэром netfilter. Состоит из цепочек правил, которые применяются последовательно. Для понимания работы iptables необходимо разобраться с тем, как может вести себя сетевой пакет. В зависимости от таблицы маршрутизации пакет может: |
| - может быть отброшен, если вообще нам не предназначен; |
| - может пройти транзитом, например, если наш компьютер является маршрутизатором; |
| - может предназначаться приложению, находящемуся на компьютере; |
| - может отправляться от приложения, находящемуся на компьютере. |
| Соответственно, в iptables для этого есть 3 различные цепочки правил (вариант с отброшенным пакетом рассматривать не будем): |
| - forward |
| - input |
| - output |
| В общем виде, пути сетевого пакета можно увидеть на этой картинке |
| [{{:for_students:os:119.jpg?}}] |
| Рассмотрим путь пакета более подробно. |
| === Prerouting === |
| В эту цепочку пакет попадает перед iptables, до того момента, когда будет известно что делать с пакетом и куда он направляется. Первая таблица, с которой встретится пакет - raw. |
| <WRAP center round info 60%> |
| RAW - таблица для работы с сырыми пакетами, до того, как они прошли обработку |
| </WRAP> |
| Следующим идет conntrack (connection tracking), который позволяет отследить соединения, то есть определить какому соединению/сеансу принадлежит пакет. Состояние пакета может быть новое (NEW), уже установленное (ESTABLISHED), дополнение к уже существующему (RELATED) и другие. Conntrack нужен для того, чтобы не проверять пакеты дважды (на входе и на выходе). \\ |
| Далее переходим к таблице Mangle, с помощью которой можно модифицировать заголовки пакета. Например, с помощью такой модификации можно изменить поля TTL и TOS. \\ |
| NAT - network address translation. Механизм, предназначенный для подмены ip адресов получателя и/или отправителя. Так как на этом этапе мы не знаем кому предназначен пакет, то логично сразу изменить адрес получателя - сделать dNAT (destination NAT). \\ |
| После prerouting, исходя из таблицы маршрутизации нашего устройства, определяем нам ли предназначен пакет. |
| === Forwarding === |
| Если пакет нам не предназначен, то применяется цепочка Forward. В этой цепочке 2 таблицы - mangle и filter. Таблица Mangle по-прежнему позволяет модифицировать заголовки пакета. А вот таблица Filter наконец-то будет применять какие-либо правила к пакетам. |
| <WRAP center round important 60%> |
| Таблица Filter в цепочке Forward будет применять правила исключительно к тем пакетам, которые будут проходить транзитом! |
| </WRAP> |
| В этой таблице можно фильтровать пакеты - разрешать доступ по определенному порту, запрещать соединения с каких-либо адресов и т.д. \\ |
| После этого переходим к цепочке postrouting. |
| === Input === |
| В этой цепочке участвуют пакеты, которые были предназначены именно нашему устройству. Правила из цепочки forward здесь не работают. В этой цепочке также есть таблицы Mangle, Filter и conntrack с аналогичным функционалом. После прохождения этой цепочки пакеты наконец-то попадают в пункт назначения - приложение. |
| === Output === |
| Из приложения пакеты также будут вылетать. Цепочка output самая большая, в ней есть raw, conntrack, mangle, nat, filter. Обратите внимание на таблицу filter, в ней можно запретить пакетам вылетать из приложения к конечному пользователю. |
| === Postrouting === |
| И после транзита, и после выхода из сервера, пакеты попадают в цепочку postrouting. В этой цепочке также есть mange, sNAT (sourse NAT), conntrack. |
| |
| |
| |
| |