Настройка файрвола Linux: iptables, nftables, firewalld от экспертов

Открытые наружу сервисы и разрозненные правила фильтрации трафика — типовая причина отказов в рабочем контуре. Мы настраиваем защиту узлов и периметра под ключ: инвентаризируем доступы, сводим правила в единый управляемый свод, документируем порядок отката. После внедрения правка политик занимает минуты вместо часов.
Часто задаваемые вопросы

Почему настройка файрвола Linux даёт сбои на проде

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

Отсюда два постоянных следствия. На периметре остаются открытые порты «на всякий случай» — под отладку, старый стенд, интеграцию, которая давно не нужна; каждый такой порт переживает смену команды и выпадает из обзора. И тут же обратная беда: блокировка легитимного трафика после правки одного правила — закрываешь доступ для одной подсети, а вместе с ним отваливается мониторинг, выгрузка логов или резервное копирование, ходившие по тому же диапазону.

Корень — правила без владельца. У записи нет привязки к сервису, комментария и даты ревизии, поэтому её боятся трогать и оставляют как есть. Хаос в правилах фильтрации растёт не из-за неаккуратности инженеров, а из-за того, что изменение не проверяется на тестовом контуре и не откатывается за минуту, когда что-то пошло не так.

Даже переход на декларативное описание в nftables сам по себе задачу не решает: если правила не связаны с реальным трафиком, сервисами и владельцами, порядок останется прежним. Разбираем, как это закрывается — от инвентаризации портов до изменений, которые проверяются до прода.

Что даёт единый свод правил фильтрации трафика

Правила фильтрации, разбросанные по узлам и правленые вручную через консоль, живут до первой аварии: никто не помнит, зачем открыт порт и кто его закроет. Единый свод — это одно описание политики, которое применяется на всех серверах одинаково и хранится рядом с конфигурацией остальных сервисов. Управляемая фильтрация трафика превращает сетевые доступы в версионируемый набор: изменения проходят проверку, а не вносятся «на живую» на боевом узле.

Ключевой эффект — сокращение окна простоя при изменениях. Набор правил собирается целиком и применяется одной транзакцией: nftables подменяет таблицу атомарно, поэтому соединения не рвутся на середине правки, а неудачный вариант откатывается по таймеру, если сервис не подтвердил доступность. Окно уходит с минут ручной работы до секунд, а часть изменений проходит вовсе без разрыва уже установленных соединений.

Из списка инцидентов уходит целый класс отказов: правила, забытые после снятия сервиса с узла; дубли и пересечения, где последнее совпадение перекрывает нужное; порты, открытые «на время отладки» и оставшиеся навсегда. Прозрачность сетевых доступов достигается тем, что карта «кто к кому и на каком порту» собирается из самих правил и журналов, а не восстанавливается по памяти в момент аварии.

Время восстановления сервиса перестаёт зависеть от того, кто из инженеров на смене: состояние фильтрации воспроизводится на новом узле из того же свода за минуты, а возврат к предыдущей ревизии — это откат набора, а не поиск ошибки в длинном списке строк. Политика запрета по умолчанию при этом гарантирует, что забытое правило закрывает доступ, а не открывает его.

Пакетный, зонный и облачный режимы фильтрации

Выбор инструмента фильтрации определяет, где живут правила, кто их меняет и переживут ли они обновление системы. При настройке файрвола Linux обычно выбирают между четырьмя режимами — от ручных цепочек до внешних групп безопасности.

Вариант Когда подходит Ограничения
iptables Готовые скрипты, точечные правила на одном хосте Таблицы читаются линейно: с ростом числа правил растёт задержка, синтаксис не развивается
nftables Сложные наборы правил, нужны множества адресов и общая логика для IPv4 и IPv6 Старые конфигурации приходится переписывать, часть панелей управления с ним ещё не работает
firewalld и зонная модель фильтрации Хосты с меняющимся профилем: офис, VPN, публичный интерфейс — переключение без пересбора цепочек Абстракция зон скрывает низкоуровневые возможности, правила-исключения сложнее отлаживать
Группы безопасности облака Машины в облаке, где фильтрация задаётся на уровне сети Не закрывают трафик внутри хоста и между контейнерами, зависят от площадки — локальный файрвол всё равно нужен

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

Порядок внедрения: от инвентаризации до регламента

Правила не пишутся «на глаз»: сначала нужно понять, что реально ходит по сети, иначе закрытый порт — это либо дыра, либо упавший сервис. Работу ведём от инвентаризации к регламенту, чтобы после передачи изменения вносили ваши инженеры без нашего участия.

  1. Аудит сетевых правил — снимаем текущие цепочки iptables, nftables и зоны firewalld, сверяем с фактически работающими сервисами. Находим дубли и разрешения «any-any», оставшиеся от удалённых сервисов.
  2. Схема сетевых потоков — фиксируем, кто с кем общается: источник, назначение, порт, протокол, смысл потока. Схему согласуем с владельцами сервисов, а не только с администраторами.
  3. Настройка правил — запрет по умолчанию плюс явные разрешения, сгруппированные по назначению, с комментарием к каждому правилу.
  4. Проверка на тестовом контуре — копия топологии, реальный трафик и негативные сценарии: что именно отвалится, если закрыть лишнее.
  5. Контролируемый перенос правил — применяем поэтапно, со скриптом отката и окном, когда возврат занимает минуты, а не часы.
  6. Регламент изменений — порядок согласования правки, фиксация в системе контроля версий, периодический пересмотр устаревших разрешений.

После передачи остаётся не набор команд, а воспроизводимый процесс: правка проходит проверку на контуре и не превращается в сюрприз в три часа ночи. Регламент описывает, кто и как вносит изменения, — это снимает зависимость от конкретного человека.

Что передаём на руки: схемы, политики, регламенты

Сдаём не работающий файрвол, а набор артефактов, по которому ваша команда сможет менять конфигурацию без нас. Всё, что уходит в боевую среду, сначала фиксируется в репозитории и описании — иначе следующая правка превращается в археологию по истории команд на сервере.

  • Конфигурации набора правил — в репозитории, а не только на хосте: версионируются как код, с пометкой, какой снимок применён сейчас и чем он отличается от предыдущего.
  • Матрица сетевых доступов: источник, назначение, порт, протокол, кто инициирует соединение и зачем — по каждой разрешающей строке; запреты по умолчанию описаны отдельным блоком.
  • Политики ограничения трафика: лимиты скорости и числа одновременных соединений по сервисам, отдельные условия для служебных подсетей и админского доступа, поведение при всплесках.
  • Порядок отката изменений: как вернуть предыдущий набор, за какое время и что проверить после возврата, включая сценарий потери доступа к серверу.
  • Документация по инфраструктуре: схема прохождения трафика, зоны и цепочки, места стыковки с балансировщиком и обратным прокси.
  • Регламент внесения изменений: кто согласует новое правило, где оно проверяется до боевой среды и как фиксируется в журнале изменений.
  • Журналирование и приёмка: какие события пишутся и куда, плюс чек-лист проверок, который ваша команда прогоняет сама и подтверждает воспроизводимость конфигурации.

Так конфигурация перестаёт зависеть от одного инженера: её можно прочитать, проверить и изменить по документу, а не по памяти.

Кейс: как закрыли периметр и убрали класс отказов

До: правила без владельца

Периметр рос стихийно: около четырёхсот правил, накопленных разными командами, треть из них — без владельца. Никто не мог объяснить, зачем открыт порт и что сломается при его закрытии, поэтому «на всякий случай» оставляли как есть. Порядок обработки не соблюдался: разрешающие правила стояли выше запрещающих, и часть трафика блокировалась не там, где ожидали. Аудит доступа растягивался на дни, а восстановление после сбоя шло руками по памяти.

Что изменили

Мы свели правила в единый реестр, сопоставили каждое с сервисом и ответственным, а логику перенесли в декларативные наборы nftables — конфигурация стала одинаковой на всех средах и версионируемой. Всё, что не подтверждено владельцем, закрыли по умолчанию, доступ выдаём по шаблону под конкретный сервис, а не правкой вручную.

Метрики до и после

  • Сервисов, доступных снаружи: 46 → 11, вчетверо меньше точек входа
  • Правил с подтверждённым владельцем: 31% → 100%
  • Взаимные блокировки: 9 случаев за квартал → 0
  • Восстановление конфигурации после сбоя: ~45 минут руками → 6 минут развёртыванием из реестра
  • Проверка доступа перед релизом: 2 дня → 20 минут

Главный результат не в числе закрытых портов, а в предсказуемости: каждое правило имеет обоснование, изменение откатывается одной операцией, а новый сервис получает доступ по шаблону. Именно это убрало класс отказов, связанных с взаимными блокировками.

Чем отличается настройка фильтрации узла и периметра сети?

Фильтрация на узле отвечает на вопрос «кто может обратиться к этому сервису». Правила в nftables, iptables или firewalld описывают, какие порты слушают наружу, какие адреса допущены к управляющим интерфейсам, как обрабатываются установленные соединения. Это последний рубеж: если входной контур пропустил лишнее, отказ принимает уже сам сервер.

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

Сегментация внутренних сервисов добавляет третий уровень: база данных, очередь и внутренний API живут в разных сегментах, а доступ между ними открывается точечно, по связке «источник — назначение — порт». Тогда компромисс одного узла не отдаёт под удар остальные, и граница распространения атаки известна заранее.

Конфликт уровней фильтрации возникает не в самих правилах, а в их рассогласованности. Узел с политикой «запрещать всё, кроме явно разрешённого» перестаёт принимать трафик при смене периметра, а сегмент, открытый «на время отладки», остаётся открытым навсегда. Поэтому политику мы описываем сверху вниз — от периметра к узлу — и проверяем, что каждый уровень запрещает по умолчанию, а разрешения совпадают с реальным трафиком, а не с исходными предположениями.

Вопросы по совместимости и откату правил

Ядро Linux допускает сосуществование разных инструментов фильтрации: пока один набор правил работает, второй собирается и проверяется параллельно. Поэтому переход между iptables, nftables и firewalld не требует окна простоя — открытые соединения и маршруты не рвутся.

Любую правку ведём по одной схеме: правило проверяется на копии конфигурации, применяется в работающем наборе, а предыдущее состояние сохраняется отдельным снимком. Ниже — типовые сомнения, которые возникают перед такой правкой.

Можно ли держать iptables и nftables на одном узле?

Да. Инструменты работают с разными наборами внутри ядра и не мешают друг другу, пока одно соединение не описано дважды. Старый набор остаётся активным, пока новый не проверен, — только потом снимаем дубли.

Что будет, если новое правило отрежет доступ к серверу?

Снимок текущего набора сохраняется до применения, а правка вносится из отдельной сессии. Откат возвращает предыдущее состояние за секунды и не требует перезагрузки узла.

Нужно ли останавливать сервис на время правок?

Нет. Правила добавляются и снимаются в работающем наборе, установленные соединения продолжают жить. Остановка нужна только при смене самого механизма фильтрации — и то после проверки нового набора.

Как убедиться в безопасности правила до применения?

Прогоняем конфигурацию в тестовом режиме: смотрим, какие пакеты она пропускает и блокирует, сверяем с матрицей доступов. Лишние блокировки убираем до того, как правило попадёт на рабочий узел.

Обсудим задачу: разберём схему и вернёмся с планом

Чтобы оценка объёма работ опиралась на факты, а не на догадки, нам полезно увидеть вашу текущую картину: действующие наборы правил, схему зон и интерфейсов, список сервисов с входящим трафиком и то, что уже мешает работе — блокировки легитимных соединений или открытые порты, о которых никто не помнит.

В ответ возвращаем не «разберёмся на месте», а конкретный набор:

  • разбор текущих цепочек и таблиц: что фактически пропускается, что блокируется и где правила дублируют друг друга;
  • карта сервисов, портов и источников трафика — с пометкой, какие из них подтверждены владельцами систем;
  • оценка объёма работ: сколько правил переписываем, что переносим без изменений, где нужны новые зоны;
  • план внедрения с порядком перевода правил — от периферийных узлов к критичным, чтобы не терять доступ к серверу;
  • схема фиксации и отката: наборы правил сохраняются до изменений, возврат к прежнему состоянию занимает минуты;
  • порядок проверок после перевода: какие соединения подтверждаем вручную, какие пути держим под наблюдением;
  • ответственный инженер на связи и точка, куда стекаются журналы сработавших правил.

Предлагаем обсудить задачу фильтрации предметно — по вашей схеме, а не по шаблону. Инженерная команда на связи: разберём спорные участки, покажем, как те же задачи закрывались на похожих контурах, и вернёмся с оценкой объёма работ и планом внедрения.

Наши компетенции:

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1542
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1394
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1369
  • Разработка логотипа компании B2B Advance
    Разработка логотипа компании B2B Advance
    816
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1141