Базовые цепочки - это набор предустановленных правил, которые есть в iptables по умолчанию.




ПОГРУЖЕНИЕ В IPTABLES – ТЕОРИЯ И НАСТРОЙКА

 

Начиная своё знакомство с iptables, следует рассказать про netfilter. Netfilter - это набор программных хуков внутри ядра Linux, которые позволяют модулям ядра регистрировать функции обратного вызова от стека сетевых протоколов.

Хук (hook) - это программный элемент, который позволяет перехватывать функции обратного вызова в чужих процессах.

Netfilter является основой для построения Firewall'а в дистрибутивах Linux, но для того, чтобы он заработал в полную силу его нужно настроить. Как раз с помощью iptables мы можем взаимодействовать с хуками Netfilter и создавать правила фильтрации, маршрутизации, изменения и транслирования пакетов. Иногда про Netfilter забывают и называют эту связку просто iptables.

ВВЕДЕНИЕ

Итак, iptables - это утилита для настройки программного Firewall'а (межсетевого экрана) linux, которая предустанавливается по умолчанию во все сборки Linux, начиная с версии 2.4. Запускается iptables из командной строки (CLI) под пользователем с правами root и настраивается там же.

Можете в этом убедиться, набрав команду iptables -V в командной строке, она покажет вам версию iptables.

Почему же iptables всем так понравился, что его стали включать во все сборки Linux? Всё дело в том, что iptables действительно очень прост в настройке. С помощью него можно решить следующие задачи:

  • Настроить stateless и statefull фильтрацию пакетов версий IPv4 и IPv6;

Stateless - это фильтрация, основанная на проверке статических параметров одного пакета, например: IP адрес источника и получателя, порт и другие не изменяющиеся параметры.

Statefull - это фильтрация, основанная на анализе потоков трафика. С помощью нее можно определить параметры целой TCP сессии или UDP потока.

  • Настраивать все виды трансляции IP адресов и портов NAT, PAT, NAPT;
  • Настроить политики QoS
  • ;
  • Производить различные манипуляции с пакетами, например - изменять поля в заголовке IP.

Прежде чем переходить к практике, давайте обратимся к теории и поймём саму логику iptables.

ЛОГИКА И ОСНОВНЫЕ ПОНЯТИЯ IPTABLES

ПРАВИЛА

Как и все файрволлы, iptables оперирует некими правилами (rules), на основании которых решается судьба пакета, который поступил на интерфейс сетевого устройства (роутера).

Ну допустим у нас есть сетевое устройство с адресом 192.168.1.1, на котором мы настроили iptables таким образом, чтобы запрещать любые ssh (порт 22) соединения на данный адрес. Если есть пакет, который идёт, например, с адреса 192.168.1.15 на адрес 192.168.1.1 и порт 22, то iptables скажет: “Э, нет, брат, тебе сюда нельзя” и выбросит пакет.

Или вообще ничего не скажет и выбросит, но об этом чуть позже:)

Каждое правило в iptables состоит из критерия, действия и счётчика

  • Критерий - это условие, под которое должны подпадать параметры пакета или текущее соединение, чтобы сработало действие. В нашем примере – этим условием является наличие пакета на входящем интерфейсе, устанавливающего соединение на порт 22
  • Действие - операция, которую нужно проделать с пакетом или соединением в случае выполнения условий критерия. В нашем случае – запретить пакет на порт 22
  • Счетчик - сущность, которая считает сколько пакетов было подвержено действию правила и на основании этого, показывает их объём в байтах.

ЦЕПОЧКИ

Набор правил формируется в цепочки (chains)

Существуют базовые и пользовательские цепочки.

Базовые цепочки - это набор предустановленных правил, которые есть в iptables по умолчанию.

Существует 5 базовых цепочек и различаются они в зависимости от того, какое назначение имеет пакет. Имена базовых цепочек записываются в верхнем регистре.

  • PREROUTING - правила в этой цепочке применяются ко всем пакетам, которые поступают на сетевой интерфейс извне;
  • INPUT - применяются к пакетам, которые предназначаются для самого хоста или для локального процесса, запущенного на данном хосте. То есть не являются транзитными;
  • FORWARD - правила, которые применяются к транзитным пакетам, проходящими через хост, не задерживаясь;
  • OUTPUT - применяются к пакетам, которые сгенерированы самим хостом;
  • POSTROUTING - применяются к пакетам, которые должны покинуть сетевой интерфейс.

В базовых цепочках обязательно устанавливается политика по умолчанию, как правило – принимать (ACCEPT) или сбрасывать (DROP) пакеты. Действует она только в цепочках INPUT, FORWARD и OUTPUT

ТАБЛИЦА

Таблицы - это набор базовых и пользовательских цепочек. В зависимости от того, в какой таблице находится цепочка правил, с пакетом или соединением производятся определённые действия

Существует 5 таблиц:

  • filter - таблица, выполняющая функции фильтрации пакетов по определённым параметрам. В большинстве случаев вы будете использовать именно её. Содержит следующие встроенные цепочки: FORWARD, INPUT, OUTPUT;
  • raw - чтобы понять предназначение этой таблицы, нужно понимать логику работы statefull firewall'а. Дело в том, что по умолчанию, iptables рассматривает каждый пакет как часть большого потока и может определить какому соединению принадлежит тот или иной пакет. С помощью raw таблицы настраиваются исключения, которые будут рассматривать пакет как отдельную, ни к чему не привязанную сущность. Содержит следующие встроенные цепочки: INPUT, OUTPUT;
  • nat - таблица, предназначенная целиком по функции трансляции сетевых адресов. Содержит следующие встроенные цепочки: PREROUTING, OUTPUT, POSTROUTING;
  • mangle - таблица, предназначенная для изменения различных заголовков пакета. Можно, например, изменить TTL, количество hop'ов и другое. Содержит следующие встроенные цепочки: PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING>;
  • security - используется для назначения пакетам или соединениям неких меток, которые в дальнейшем может интерпретировать SElinux.

Теперь мы можем представить себе логику iptables в виде следующей схемы:

ДЕЙСТВИЯ

Ну и последнее, о чем нужно рассказать, прежде чем мы с вами начнем писать правила - это target. В контексте iptables, target - это действие, которое нужно проделать с пакетом или соединением, которое совпало с критериями правила.

Итак, наиболее используемые действия:

  • ACCEPT - разрешить прохождение пакета;
  • DROP - тихо выбросить пакет, не сообщая причин;
  • QUEUE - отправляет пакет за пределы логики iptables, в стороннее приложение. Это может понадобиться, когда нужно обработать пакет в рамках другого процесса в другой программе;
  • RETURN - остановить обработку правила и вернуться на одно правило назад. Это действие подобно break'у в языке программирования.

Помимо этих четырех, есть ещё масса других действий, которые называются расширенными (extension modules):

  • REJECT - выбрасывает пакет и возвращает причину в виде ошибки, например: icmp unreachable;
  • LOG - просто делает запись в логе, если пакет соответствует критериям правила;

Есть действия, которые доступны только в определенной цепочке и таблицах, например, только в табоице nat и цепочках OUTPUT и PREROUTING доступно действие DNAT, которое используется в NAT'ировании и меняет Destination IP пакета. В той же таблице, только в цепочке POSTRUNNING доступно действие SNAT, меняющее Source IP пакета.

Отдельно остановимся на действии MASQUERADE, которое делает то же самое что SNAT, только применяется на выходном интерфейсе, когда IP адрес может меняться, например, когда назначается по DHCP.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2021-07-20 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: