Основы iptables на примере Debian глазами младенца

Зона определяет уровень доверия к подключению. Каждая зона уже содержит в себе определённый набор правил, в соответствии с которыми и работает подключение. Администратор имеет возможность создавать собственные зоны с нужными ему правилами фильтрации, имеет возможность модифицировать уже существующие зоны. При необходимости, изменения всегда можно откатить до состояния по умолчанию.

        Stateless  NAT        

   Когда то давно в ядре Linux был незатейливый NAT, положение соединений не отслеживалось. Устройство их отслеживания (conntrack) устроил жизнь сетевых админов куда чем лучше. Трудные протоколы больше чем с одним соединением прекратили быть неразрешимой задачей. Кроме этого,обработка пакетов стала скорее, потому что основную массу из них довольно сравнить с таблицей соединений (опция state в iptables), и уже не надо прогонять сквозь целый комплект правил.    Тем неменее временами stateless NAT — вправду одно из лучших решений. К примеру, провайдеры хостинга VPS вроде Amazon обширно используют 1:1 NAT, дабы облегчить управление сетью, — у самой виртуалки «серый» адресок, собственно что разрешает развязать наружную и внутреннюю маршрутизацию. Выслеживать направления трафика в данном случае не содержит смысла, потому что заключение для всех пакетов с одним адресом всякий раз однообразное.    В iptables это было возможно только при трансляции сетей IPv6 (NPTv6). В nftables снова появилась «тупая» (а значит, очень быстрая) трансляция адресов. Например, транслируем внешний адрес 192.0.2.1 во внутренний 10.0.0.1.  

table ip raw { chain prerouting { type filter hook prerouting priority raw; policy accept; ip daddr 192.0.2.5 ip daddr set 10.0.0.1 notrack } }

Просмотр правил IPTables и управление ими

Как уже было сказано ранее, все цепочки содержат определённые условия для пакетов. Для просмотра правил IPTables и управления ими и используется утилита IPTables. Каждое отдельное правило представляет собой строку с набором условий для пакетов, а также действия над ними, в зависимости от исхода.

Просмотр правил IPTables и управление ими

Формат команды выглядит таким образом: iptables [-t название обрабатываемой таблицы] вызываемая команда [критерии] [выполняемое действие].

Просмотр правил IPTables и управление ими

Все, что заключено в может быть опущено. Если это параметр с указанием таблицы, то будет использоваться filter. Для применения какого-то определённого имени нужно добавить ключ -t. Вызываемая команда позволяет вызвать необходимое действие, например, добавить правило IPTables или удалить его. В «критериях» указываются параметры, по которым будет происходить отбор. И в «действии» применяется действие, которое нужно выполнить, если условие соблюдено.

Просмотр правил IPTables и управление ими

Цепочка. Таблица.

Существует пять типов стандартных цепочек, встроенных в систему:

  • PREROUTING — для изначальной обработки входящих пакетов.
  • INPUT — для входящих пакетов адресованных непосредственно локальному процессу (клиенту или серверу).
  • FORWARD — для входящих пакетов перенаправленных на выход (заметьте, что перенаправляемые пакеты проходят сначала цепь PREROUTING, затем FORWARD и POSTROUTING).
  • OUTPUT — для пакетов генерируемых локальными процессами.
  • POSTROUTING — для окончательной обработки исходящих пакетов.
Читайте также:  Торговый и складской учёт

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

Цепочки организованны в таблицы:

  • raw — просматривается до передачи пакета системе определения состояний. Используется редко, например для маркировки пакетов, которые НЕ должны обрабатываться системой определения состояний. Для этого в правиле указывается действие NOTRACK. Содержит цепочки PREROUTING и OUTPUT.
  • mangle — содержит правила модификации (обычно заголовка) IP‐пакетов. Среди прочего, поддерживает действия TTL, TOS, и MARK (для изменения полей TTL и TOS, и для изменения маркеров пакета). Редко необходима и может быть опасна. Содержит все пять стандартных цепочек:
  • nat — просматривает только пакеты, создающие новое соединение (согласно системе определения состояний). Поддерживает действия DNAT, SNAT, MASQUERADE, REDIRECT. Содержит цепочки PREROUTING, OUTPUT, POSTROUTING.
  • filter — основная таблица, используется по умолчанию если название таблицы не указано. Содержит цепочки: INPUT, FORWARD, OUTPUT.
  • security — Предназначена для изменения маркировки безопасности (меток SELinux) пакетов и соединений. Данная таблица добавлена в ядро Linux в версии Ранее операции с метками безопасности выполнялись в таблице mangle, и в целях обратной совместимости все действия, разрешенные для таблицы security, можно использовать и в таблице mangle.

Цепочки с одинаковым названием но в разных таблицах — совершенно независимые объекты. Например, raw PREROUTING и mangle PREROUTING обычно содержат разный набор правил; пакеты сначала проходят через цепочку raw PREROUTING, а потом через mangle PREROUTING.

Обработка пакета

Схематично обработку пакета можно изобразить следующим образом:

PACKET IN —>—PREROUTING—[ маршрутизация ]—>—-FORWARD—->—POSTROUTING—>— PACKET OUT — mangle | — mangle — mangle — nat (dst) | — filter — nat (src) | | | | INPUT OUTPUT — mangle — mangle — filter — nat (dst) | — filter | | `—->—-[ приложение ]—->—-'

Читайте также:  Яндекс-Браузер для Windows, Android и Linux

Входящий пакет начинает обрабатываться брандмауэром с цепочки PREROUTING в таблице mangle. Затем он обрабатывается правилами цепочки PREROUTING таблицы nat. На этом этапе проверяется, не требуется ли модификация назначения пакета (DNAT). Важно сменить назначение сейчас, потому что маршрут пакета определяется сразу после того, как он покинет цепочку PREROUTING. После этого он будет отправлен на цепочку INPUT (если целью пакета является этот компьютер) или FORWARD (если его целью является другой компьютер в сети).

Если целью пакета является другой компьютер, то пакет фильтруется правилами цепочки FORWARD таблиц mangle и filter, а затем к нему применяются правила цепочки POSTROUTING. На данном этапе можно использовать SNAT/MASQUARADE (подмена источника/маскировка). После этих действий пакет (если выжил) будет отправлен в сеть

Если назначением пакета является сам компьютер с брандмауэром, то, после маршрутизации, он обрабатывается правилами цепочек INPUT таблиц mangle и filter. В случае прохождения цепочек пакет передается приложению.

  1. mangle PREROUTING
  2. nat PREROUTING
  3. mangle INPUT
  4. filter INPUT

Когда приложение, на машине с брандмауэром, отвечает на запрос или отправляет собственный пакет, то он обрабатывается цепочкой OUTPUT таблицы filter. Затем к нему применяются правила цепочки OUTPUT таблицы nat, для определения, требуется-ли использовать DNAT (модификация назначения), пакет фильтруется цепочкой OUTPUT таблицы filter и выпускается в цепочку POSTROUTING которая может использовать SNAT и QoS. В случае успешного прохождения POSTROUTING пакет выходит в сеть.

  • ??? какая правильна последовательность прохождения пакета на выходе?

— mangle OUTPUT

  1. nat OUTPUT
  2. filter OUTPUT

Немного о протоколе TCP/IP

TCP/IP является протоколом, в котором соединение устанавливается в 3 фазы. Если компьютер А пытается установить соединение с компьютером Б они обмениваются специальными TCP пакетами.

Читайте также:  iOS 8: особенности системы; установка на iPad 2

A: SYN пакет (првыед Б!) Б: ACK пакет, SYN пакет (Ога!, как оно?) A: ACK пакет (дык, ничего)

После чего соединение считается установленным (ESTABLISHED). iptables различает эти состояния как NEW и ESTABLISHED.

FIN (англ. final, бит) — флаг, будучи установлен, указывает на завершение соединения.

Механизм определения состояний

Как открыть порт и разрешить трафик

Чтобы ваша программа в Linux могла работать на определенном порту через ufw разрешаем передачу по нему данных:

Как открыть порт и разрешить трафик

ufw allow 51413ufw — добавление правила

Как открыть порт и разрешить трафик

Теперь при просмотре статуса брандмауэра отобразится созданное только что правило с указанием номера порта и разрешения (allow или deny)

ufw — проверка добавленного правила

Как открыть порт и разрешить трафик

Как вы уже догадались запрет сетевого трафика по определенному порту выполняется способом, аналогичным разрешению. А именно:

ufw deny 51413

Как открыть порт и разрешить трафик

ufw — запрет порта

Настройка netfilter с помощью iptables

Он инвертирует условие, например,iptables -A INPUT -s ! -j DROP запретит соединение всем хостам, кроме

Действия

Действия, которые будут выполняться над пакетом, подходящим под критерии условия. Для каждой таблицы есть свой набор допустимых действий. Указываются с использованием ключа -j .

Таблица Действие Описание
filter ACCEPT Разрешает пакет.
DROP Запрещает пакет.
REJECT Запрещает с отправкой сообщения источнику.
nat MASQUERADE Для исходящих пакетов заменяет IP-адрес источника на адрес интерфейса, с которого уходит пакет.
SNAT Аналогично MASQUERADE, но с указанием конкретного сетевого интерфейса, чей адрес будет использоваться для подмены.
DNAT Подмена адреса для входящих пакетов.
REDIRECT Перенаправляет запрос на другой порт той же самой системы.
mangle TOS Видоизменение поля TOS (приоритезация трафика).
DSCP Изменение DSCP (тоже приоритезация трафика).
TTL Изменение TTL (время жизни пакета).
HL Аналогично TTL, но для IPv6.
MARK Маркировка пакета. Используется для последующей фильтрации или шейпинга.
CONNMARK Маркировка соединения.
TCPMSS Изменение значения MTU.