Вступление
Наличие надежного фаервола – один из важнейших аспектов защиты любой современный операционной системы. Большинство дистрибутивов Linux поставляются с несколькими различными инструментами фаервола. Данное руководство рассматривает один из наиболее популярных – iptables.
Итак, iptables – это стандартный фаервол, включенный в большинство дистрибутивов Linux по умолчанию (для его замены разрабатывается nftables). На самом деле, iptables – это пользовательская утилита для управления системой netfilter, которая, в свою очередь, управляет сетевым стеком Linux. iptables сопоставляет каждый поступающий пакет с набором установленных правил, а затем решает, что с ним делать дальше.
В данном руководстве речь пойдет о том, как работ iptables. Следующая статья демонстрирует, как создать базовый набор правил для защиты сервера Ubuntu 14.04.
Как работает iptables
Прежде чем перейти к ознакомлению с командами для управления iptables и настройке фаервола, ознакомьтесь с некоторыми необходимыми терминами.
Фаервол iptables работает путем сравнения сетевого трафика с набором правил. Правило – это свойства, которыми должен обладать пакет, чтобы получить доступ к серверу, а также действие, которое нужно выполнить над пакетами, соответствующими правилам.
Существует множество опций-действий, которые можно выполнить, если пакет соответствует определенному правилу. Можно установить тип протокола пакета, адрес и порт источника или назначения, используемый интерфейс, отношение пакета к предыдущим пакетам, и т.д.
target указывает, какое действие должно быть выполнено, если пакет соответствует правилу. Target может содержать окончательное решение относительно данного пакета (принять его или сбросить соединение), а также может передать пакет для обработки другой цепочке или же просто внести пакет в журнал.
Правила фаервола объединяются в группы, которые называются цепочками (chains). Цепочка представляет собой последовательность правил, относительно которой проверяется пакет. Если пакет совпадает с одним из правил, фаервол выполняет указанное действие; при этом пакет не проверяется остальными правилами в цепочке.
Такие цепочки создаются пользователем по мере необходимости. По умолчанию существует три цепочки:
- INPUT: обрабатывает все входящие на сервер пакеты;
- OUTPUT: содержит правила для исходящего трафика;
- FORWARD: используется для обработки предназначенного для других серверов трафика, который не был создан на данном сервере. Эта цепочка в основном необходима для маршрутизации запросов на другие серверы.
Каждая цепочка может содержать ноль или больше правил, а также имеет политику по умолчанию (policy). Политика определяет действие, которое необходимо выполнить в случае если пакет не соответствует ни одному правилу (такой пакет можно сбросить – “drop”, или принять – “accept”).
С помощью модуля, который можно загрузить через правила, Iptables может также отслеживать соединения. Это означает, что можно создать правила, определяющие, что делать с пакетом, на основе его отношения к предыдущим пакетам. Эта функция называется “отслеживанием состояния” (state tracking), “отслеживанием соединений” (connection tracking) или же “механизмом определения состояний” (state machine).
Данное руководство, в основном, рассматривает создание цепочки INPUT, поскольку она содержит набор правил, которые сбрасывают нежелательный входящий трафик.
Важные примечания
Ознакомившись с тем, как iptables управляет поступающими пакетами (передает его соответствующей цепочке, проверяет его согласно каждому правилу, и если пакет не отвечает ни одному из правил, выполняет политику по умолчанию), нужно рассмотреть некоторые “подводные камни”, которые нужно иметь ввиду при составлении правил.
Для начала нужно убедиться, что iptables уже содержит правила, которые сохраняют текущие соединения даже при выполнении политики сброса по умолчанию. Это особенно важно при подключении к серверу по SSH. При случайном внедрении правила или политики, блокирующих вас на собственном сервере, можно войти на VPS с помощью веб-консоли, которая предоставляет вспомогательный доступ.
Также необходимо помнить о том, что порядок правил в цепи имеет огромнейшее значение. Правила должны быть расположены таким образом, чтобы пакет сначала проходил через более конкретные правила, а потом – через более общие.
Другими словами, правила в начале цепочки должны быть более специфическими и подробными, чем правила в конце. Тогда пакет будет проходить сначала специфические правила, а затем – более общие, что создает расширяющийся шаблон. Если пакет не соответствует никаким правилам цепочки, то он отвечает самому общему правилу – политике по умолчанию.
Политика цепочки по умолчанию диктует типы правил, которые будут включены в саму цепочку. Цепочка с политикой DROP должна содержать правила, которые отбрасывают пакеты. Цепочка с политикой ACCEPT должна содержать исключения для пакетов, которые нужно принять.
Итоги
Ознакомившись с общей идеей работы iptables, можно переходить к настройке собственного фаервола.
Чтобы найти инструкции по настройке iptables, читайте следующие статьи: