Введение
Настройка брандмауэра является важным шагом для обеспечения безопасности любой современной операционной системы. Большинство дистрибутивов Linux поставляются с несколькими различными инструментами брандмауэра, которые можно использовать для настройки брандмауэра. В этом руководстве мы рассмотрим брандмауэр iptables
.
Iptables – это стандартный брандмауэр, по умолчанию включенный в большинство дистрибутивов Linux. Это интерфейс командной строки для хуков уровня ядра netfilter, которые могут управлять сетевым стеком Linux. Он работает путем сопоставления каждого пакета, пересекающего сетевой интерфейс, с набором правил для принятия решения о дальнейших действиях.
В этом руководстве вы изучите, как работает Iptables. Для более подробного изучения вы можете прочитать Глубокий анализ архитектуры Iptables и Netfilter.
Как работает Iptables
Во-первых, давайте рассмотрим некоторые термины и обсудим, как работает iptables.
Брандмауэр iptables работает путем сравнения сетевого трафика с набором правил. Правила определяют характеристики, которыми должен обладать сетевой пакет для сопоставления, и действие, которое должно быть предпринято для сопоставленных пакетов.
Существует много вариантов определения, какие пакеты соответствуют определенному правилу. Вы можете сопоставить тип протокола пакета, адрес или порт источника или назначения, интерфейс, который используется, его отношение к предыдущим пакетам и так далее.
Когда определенный шаблон совпадает, действие, которое происходит, называется целью. Целью может быть окончательное решение политики для пакета, такое как ACCEPT
или DROP
. Он также может переместить пакет в другую цепь для обработки или зарегистрировать встречу. Существует много вариантов.
Эти правила организованы в группы, называемые цепями. Цепь – это набор правил, которые проверяются последовательно. Когда пакет соответствует одному из правил, он выполняет связанное действие и пропускает оставшиеся правила в цепи.
A user can create chains as needed. There are three chains defined by default. They are:
- INPUT: Эта цепь обрабатывает все пакеты, адресованные вашему серверу.
- OUTPUT: Эта цепь содержит правила для трафика, созданного вашим сервером.
- FORWARD: Эта цепь используется для обработки трафика, предназначенного для других серверов, которые не созданы на вашем сервере. Эта цепь – способ настройки вашего сервера для маршрутизации запросов к другим машинам.
Каждая цепь может содержать ноль или более правил и имеет политику по умолчанию. Политика определяет, что происходит, когда пакет проходит через все правила в цепи и не соответствует ни одному правилу. Вы можете либо отбросить пакет, либо принять его, если ни одно правило не соответствует.
Iptables также может отслеживать соединения. Это означает, что вы можете создавать правила, которые определяют, что происходит с пакетом на основе его отношения к предыдущим пакетам. Возможность называется “отслеживание состояния”, “отслеживание соединений” или настройка “машины состояний”.
IPv4 против IPv6
Брандмауэр netfilter, включенный в ядро Linux, полностью отделяет трафик IPv4 и IPv6. Инструменты Iptables, используемые для манипулирования таблицами, содержащими наборы правил брандмауэра, также отличаются. Если у вас включен IPv6 на вашем сервере, вам придется настроить обе таблицы для обработки трафика на вашем сервере.
Примечание: Nftables, преемник Iptables, более тесно интегрирует обработку IPv4 и IPv6. Команду iptables-translate можно использовать для миграции правил Iptables в Nftables.
Регулярная команда iptables
используется для управления таблицей, содержащей правила, регулирующие трафик IPv4. Для трафика IPv6 используется сопутствующая команда ip6tables
. Любые правила, установленные с помощью iptables
, будут влиять только на пакеты с использованием адресации IPv4, но синтаксис между этими командами одинаков. Команда iptables
создаст правила, применяемые к трафику IPv4, а команда ip6tables
создаст правила, применяемые к трафику IPv6. Не забывайте использовать IPv6-адреса вашего сервера для формирования правил ip6tables
.
Важные моменты
Теперь, когда вы знаете, как iptables направляет пакеты, проходящие через его интерфейс – направляет пакет в соответствующую цепочку, проверяет его по каждому правилу до нахождения соответствия, применяет политику по умолчанию цепочки, если совпадений нет – вы можете начать создавать правила.
В первую очередь убедитесь, что у вас есть правила для поддержания активности текущих соединений, если вы используете политику отбрасывания по умолчанию. Это особенно важно, если вы подключены к серверу через SSH. Если вы случайно введете правило или политику, которая разорвёт ваше текущее соединение, вам может потребоваться войти в свой сервер, используя консоль восстановления через веб-браузер.
Еще одна важная деталь – порядок правил в каждой цепочке имеет значение. Пакет не должен сталкиваться с более общим правилом, если ему предназначено соответствовать более конкретному правилу.
Из-за этого правила в верхней части цепочки должны иметь более высокий уровень конкретности, чем правила внизу. Сначала следует сопоставлять конкретные случаи, а затем предоставлять более общие правила для сопоставления более широких шаблонов. Если пакет проходит через всю цепочку (если не соответствует никаким правилам), он будет следовать самому общему правилу, т.е. политике по умолчанию.
По этой причине политика по умолчанию цепочки сильно определяет типы правил, которые будут включены в цепочку. Цепочка с политикой по умолчанию ACCEPT
будет содержать правила, явно отбрасывающие пакеты. Цепочка, у которой по умолчанию DROP
, будет содержать исключения для пакетов, которые должны быть явно приняты.
Вывод
На этом этапе вы готовы к внедрению своего собственного брандмауэра. Для этого вы должны прочитать Как настроить брандмауэр с использованием Nftables на Ubuntu 22.04. Или, для более общего подхода, Как настроить брандмауэр с использованием UFW на Ubuntu 22.04. Если вы предпочитаете запускать брандмауэр как управляемый сервис, вы также можете попробовать Cloud Firewalls от DigitalOcean.
Source:
https://www.digitalocean.com/community/tutorials/how-the-iptables-firewall-works