Гид по технологиям

Полное руководство по firewalld для Linux

10 min read Безопасность Обновлено 27 Dec 2025
firewalld на Linux: установка и настройка
firewalld на Linux: установка и настройка

Быстрые ссылки

  • Почему фаервол необходим
  • Установка firewalld
  • Концепция зон
  • Добавление и удаление сервисов
  • Добавление и удаление портов и протоколов
  • Использование GUI
  • Секреты и лучшие практики

Ключевые выводы

  • Firewalld предоставляет удобный уровень абстракции над netfilter/nftables и упрощает управление правилами через зоны и именованные сервисы.
  • Режимы «временный» (Runtime) и «постоянный» (Permanent) дают безопасный способ тестирования изменений перед их записью в конфигурацию.
  • Понимание того, какая зона назначена интерфейсу, и использование минимально необходимых правил — ключевые шаги к безопасной конфигурации.

Важно: всегда тестируйте изменения в Runtime перед применением с опцией –permanent, особенно на удалённых серверах — чтобы не потерять доступ.


Введение

Если вы хотите современный, мощный и одновременно удобный в управлении фаервол для Linux — firewalld часто является лучшим выбором. Он предоставляет набор команд (firewall-cmd) и опциональный GUI (firewall-config). Под капотом работает netfilter (и нередко backend — nftables), а поверх — понятные концепции: зоны, сервисы, порты и протоколы.

Определения в одну строку:

  • netfilter — встроенный в ядро Linux фреймворк для фильтрации сети.
  • nftables — современная подсистема для реализации правил netfilter.
  • zone (зона) — набор правил и привязанных интерфейсов в firewalld.
  • service (сервис) — заранее определённый набор портов/протоколов для часто используемых служб (SSH, HTTP и т. п.).

Почему вам нужен фаервол?

Любое сетевое соединение имеет источник и назначение. Если приложение на вашей машине принимает входящее соединение — это потенциальная точка атаки. Фаервол ограничивает и контролирует такие соединения по IP, порту и протоколу. Хороший фаервол оставляет только необходимые соединения, при этом не мешая нормальной работе.

Ментальная модель: Представьте, что ваш компьютер — это здание с несколькими дверями; firewalld управляет, какие двери открыты для кого и в какие часы.

Контрпример: если вы используете только локальные брандмауэры в облаке (security groups) и полностью полагаетесь на них, это работает, но на машине всё ещё лучше иметь дополнительные ограничения; defence in depth (защита в глубину) уменьшает риск.

Установка firewalld

Firewalld состоит из двух частей: демона firewalld и опционального GUI — firewall-config. На разных дистрибутивах подходы к установке немного отличаются.

Ubuntu/Debian:

sudo apt update
sudo apt install firewalld firewall-config

Fedora:

# firewalld обычно предустановлен
sudo dnf install firewall-config

Manjaro/Arch:

sudo pacman -Sy firewalld

После установки включите и запустите службу:

sudo systemctl enable firewalld
sudo systemctl start firewalld

Проверка статуса:

sudo systemctl status firewalld

Проверка состояния демона через команду firewalld:

sudo firewall-cmd --state

Разрешённая загрузка через фаервол на Linux.

Основная концепция: зоны

Firewalld группирует правила в зоны. Каждая зона несёт набор правил и может быть связана с одним или несколькими сетевыми интерфейсами. Это позволяет быстро переключаться между наборами правил, соответствующими разным уровням доверия (дом, работа, общественная сеть и т. д.).

Предустановленные зоны (их девять):

  • drop — входящие пакеты просто отбрасываются; исходящие соединения разрешены.
  • block — входящие пакеты отклоняются, отправляется icmp-host-prohibited; исходящие разрешены.
  • trusted — все входящие соединения разрешены; использовать только в очень доверенных сетях.
  • public — для незнакомых сетей; только ограниченный набор безопасных сервисов разрешён.
  • external — для внешних сетей с NAT/маршрутизацией; фаервол действует как роутер.
  • internal — для внутренних сетей, когда система является маршрутизатором; более доверенная сеть.
  • dmz — для машин в демилитаризованной зоне с ограниченным доступом в сеть.
  • work — для рабочих машин; облегчённый уровень доверия.
  • home — для домашних машин; соседние устройства считаются более доверенными.

Примечание: home, work и internal функционально похожи, но разделение даёт гибкость для разных наборов правил.

Проверка зоны по умолчанию:

sudo firewall-cmd --get-default-zone

Просмотр настроек конкретной зоны:

sudo firewall-cmd --zone=public --list-all

Listing the details of the public zone

Если на системе несколько интерфейсов, они могут быть привязаны к разным зонам; пример вывода для ноутбука с Ethernet и Wi‑Fi покажет оба интерфейса.

Получение списка всех зон:

sudo firewall-cmd --get-zones

Показать конфигурацию всех зон (удобно просматривать через less):

sudo firewall-cmd --list-all-zones | less

The details of all zones displayed in in less

Переключение интерфейса между зонами

Чтобы временно переместить интерфейс в другую зону (только для текущего запуска):

sudo firewall-cmd --zone=home --change-interface=enp3s0

Проверка:

sudo firewall-cmd --zone=home --list-all

The home zone with a network interface added

Чтобы сделать изменение постоянным (сохранить в конфигурации):

sudo firewall-cmd --zone=home --change-interface=enp3s0 --permanent

Если вы сделали несколько временных изменений и хотите записать их в постоянную конфигурацию:

sudo firewall-cmd --runtime-to-permanent

Важно: перезагрузка или reload (/–reload/) вернут настройки к хранимым в конфигурации, если вы не записали изменения.

Сервисы: добавление и удаление

Firewalld содержит библиотеку именованных сервисов — удобная абстракция, чтобы не помнить номера портов и протоколы.

Посмотреть список известных сервисов:

sudo firewall-cmd --get-services

Пример в статье: “Our version of firewalld listed 192 services.” — такой список зависит от версии и установленных пакетов.

Добавление сервиса в зону (временное):

sudo firewall-cmd --zone=public --add-service=http

Удаление сервиса:

sudo firewall-cmd --zone=public --remove-service=http

Для постоянного применения добавьте –permanent и затем reload:

sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --reload

Проверка, какие сервисы разрешены в зоне:

sudo firewall-cmd --zone=public --list-services

Порты и протоколы: точечные правила

Иногда удобнее явно указывать порты и протоколы, особенно для нестандартных служб.

Добавление HTTPS (порт 443, TCP):

sudo firewall-cmd --zone=public --add-port=443/tcp

Можно добавить диапазон портов:

sudo firewall-cmd --zone=public --add-port=4000-4500/tcp

Удаление порта:

sudo firewall-cmd --zone=public --remove-port=443/tcp

Для постоянного сохранения используйте –permanent и затем –reload.

GUI: firewall-config

Запустите через меню приложений (нажмите клавишу Super и введите “firewall”). Иконка — кирпичная стена.

The firewall-config icon

Основные шаги в GUI:

  1. Выберите зону в списке зон.
  2. Переключите “Configuration” на “Runtime” для тестирования или на “Permanent” для редактирования постоянной конфигурации. (В приложении параметры могут быть помечены на английском или локализованы.)
  3. Добавьте сервисы через список “Services”.
  4. Добавьте порты и протоколы через вкладку “Ports”.
  5. Для интерфейсов дважды щёлкните элемент в списке “Connections” и выберите нужную зону.

Adding a port and procol pairing using the firewall-config GUI

A protocol in the public zone, in the firewall-config GUI

Moving a network interface fromone zone to another in the firewall-config GUI

Совет: если вы не уверены, оставьте изменения в Runtime и протестируйте доступность службы с удалённых узлов. После проверки примените через “Options → Runtime to Permanent”.

Backend: nftables, iptables и netfilter

Firewalld управляет правилами через backend (обычно nftables на современных дистрибутивах). Исторически использовался iptables. Firewalld абстрагирует эти детали, но полезно понимать, что он записывает правила в подсистему ядра, и прямое редактирование iptables/nftables таблиц вручную может конфликтовать с firewalld.

Правило: не смешивайте ручное управление iptables/nftables и firewalld на одном хосте без чёткой координации.

Лучшие практики и безопасность

  • Принцип минимальных привилегий: разрешайте лишь те сервисы, которые действительно нужны.
  • Используйте разные зоны для разных сетей (дом, работа, общественная Wi‑Fi).
  • Для серверов в DMZ используйте зону dmz с ограниченным доступом к внутренним ресурсам.
  • Для удалённого администрирования (SSH) ограничьте доступ по IP, если возможно, через rich rules или ipsets.
  • Держите доступ по SSH под контролем: non-standard порт снижает сканирование, но не заменяет ключи SSH и ограничение доступа.
  • Протестируйте изменения в Runtime, затем сохраните.

Крепление безопасности (hardening):

  • Отключите ненужные службы на уровне ОС.
  • Применяйте SELinux/AppArmor наряду с firewalld для защиты процессов.
  • Логи: разрешите журналирование для подозрительного трафика и интегрируйте с системами централизованного логирования.

Совместимость и миграция

Если у вас сложная существующая конфигурация iptables, план миграции включает:

  1. Экспорт текущих правил iptables.
  2. Перевод логики в зоны и сервисы firewalld (или в nftables напрямую).
  3. Тщательное тестирование в staging-среде.

Firewalld предоставляет зону rich rules и direct-интерфейс для более тонкой настройки при необходимости.

Отладка и частые ошибки

  • Проблема: после добавления правила доступ не появился. Проверьте, что интерфейс привязан к ожидаемой зоне.
  • Проблема: после перезагрузки изменения исчезли. Возможно, вы не применили –permanent или не выполнили –runtime-to-permanent.
  • Проблема: вручную изменяли iptables/nftables — изменения перезаписываются firewalld. Решение: используйте direct-правила или управляйте через firewalld.

Просмотр активных правил:

sudo firewall-cmd --list-all
sudo firewall-cmd --list-all-zones
sudo firewall-cmd --query-port=443/tcp

Просмотр журналов (systemd journal):

sudo journalctl -u firewalld -f

Методология: как безопасно изменить правила в production

Краткий SOP:

  1. Подготовка: документируйте текущее состояние (firewall-cmd –list-all-zones).
  2. Тестирование: вносите изменения в Runtime на контролируемом хосте.
  3. Проверка: тестируйте доступность всех критичных сервисов и откат при проблемах.
  4. Конвертация: если тест успешен — примените –permanent и выполните firewall-cmd –reload.
  5. Мониторинг: отслеживайте логи и поведение в течение 24–72 часов.

Критерии приёмки:

  • Доступность целевых сервисов с разрешённых адресов.
  • Блокировка недопустимого трафика (из теста).
  • Нет неожиданных ошибок в журнале firewalld.

Откат (Rollback):

  • Если изменения только Runtime — перезапуск firewalld вернёт конфигурацию к постоянной.
sudo systemctl restart firewalld
  • Если вы сохранили –permanent и нужно откатить — восстановите заранее сохранённый бэкап конфигурации (/etc/firewalld/zones/…) или используйте backup-скрипт.

Чек-листы по ролям

Администратор (напр., SRE):

  • Проверить текущие зоны и интерфейсы.
  • Запланировать окно обслуживания для изменений на продакшн-серверах.
  • Протестировать изменения в Runtime.
  • Сохранить и перезагрузить при успехе.
  • Обновить документацию и runbook.

Разработчик:

  • Убедиться, что локальный фаервол не блокирует тестовые порты.
  • Для интеграционных тестов использовать согласованные зоны или Docker-network с предсказуемыми правилами.

Пользователь (домашний):

  • Установить firewalld и проверить default-zone.
  • Разрешить только нужные сервисы (SSH, HTTP, mDNS по необходимости).
  • Использовать home zone для доверенных домашних подключений.

Шаблон — чеклист внедрения на группе машин (playbook-подход)

  1. Сбор информации: интерфейсы, текущие правила, используемые сервисы.
  2. Создание зон и правил в виде скрипта (пример ниже).
  3. Применение на одном тестовом узле и верификация.
  4. Массовое применение с конфигурационным менеджером (Ansible, Puppet).
  5. Мониторинг и аудит.

Пример скрипта (на bash) для базовой конфигурации:

#!/bin/bash
set -e
# Установить базовую политику
sudo firewall-cmd --permanent --new-zone=limited || true
sudo firewall-cmd --permanent --zone=limited --add-service=ssh
sudo firewall-cmd --permanent --zone=limited --add-service=https
sudo firewall-cmd --permanent --zone=limited --add-port=8080/tcp
sudo firewall-cmd --reload

Набор команд — cheat sheet

  • Просмотреть зону по умолчанию: sudo firewall-cmd –get-default-zone
  • Просмотреть все зоны: sudo firewall-cmd –get-zones
  • Просмотреть детали зоны: sudo firewall-cmd –zone=home –list-all
  • Добавить сервис: sudo firewall-cmd –zone=public –add-service=http
  • Удалить сервис: sudo firewall-cmd –zone=public –remove-service=http
  • Добавить порт: sudo firewall-cmd –zone=public –add-port=443/tcp
  • Сделать постоянным: добавить –permanent и затем sudo firewall-cmd –reload
  • Преобразовать runtime в permanent: sudo firewall-cmd –runtime-to-permanent
  • Проверить состояние демона: sudo firewall-cmd –state

Тест-кейсы и критерии приёмки

Тест-кейсы:

  • TC1: SSH доступ с доверенного IP — ожидается: соединение успешно.
  • TC2: SSH с недоверенного IP — ожидается: отказ, если правило ограничивает по IP.
  • TC3: HTTP (80) недоступен в public zone — ожидается: отказ.
  • TC4: HTTPS (443) доступен после добавления порта — ожидается: успешное соединение.

Критерии приёмки:

  • 100% положительных результатов для тестов доступа.
  • Нет потери доступа к критичным системам без заранее подготовленного отката.

Примеры сложных сценариев и rich rules

Rich rules дают продвинутую гибкость: ограничение по IP, протоколу, логирование и т. д.

Пример: разрешить SSH только с подсети 192.0.2.0/24 и логировать попытки:

sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="192.0.2.0/24" service name="ssh" accept'
sudo firewall-cmd --permanent --zone=public --add-rich-rule='rule family="ipv4" source address="0.0.0.0/0" service name="ssh" log prefix="SSH_DROP" level="warning" drop'
sudo firewall-cmd --reload

Замечание: rich rules записываются в XML-конфигурацию firewalld и подходят для ситуаций, где простых сервисов/портов недостаточно.

Ограничения и случаи, когда это не сработает

  • Firewalld не заменит комплексную сетевую сегментацию и политики на уровне SDN/маршрутизаторов.
  • На сильно кастомных системах с ручными iptables-правилами возможны конфликты.
  • Для высокопроизводительных сценариев (особенно с большим количеством правил) может потребоваться оптимизация backend (nftables) и тестирование производительности.

Приватность и соответствие (GDPR и др.)

Фаервол сам по себе не хранит пользовательские данные, но корректная конфигурация может помочь уменьшить вектор утечек (закрыть каналы связи, которые не нужны). Для соответствия требованиям о журналировании и аудите интегрируйте логи firewalld в вашу систему SIEM и храните их в соответствии с политиками организации.

Быстрая памятка по совместимости

  • Новые дистрибутивы: backend по умолчанию — nftables.
  • Если используете старые скрипты iptables, проверьте модуль-совместимость и не конфликтуйте с firewalld.

Факто-бокс

  • Число предустановленных зон: 9.
  • Примеры стандартных портов: SSH (22/tcp), HTTP (80/tcp), HTTPS (443/tcp), mDNS (5353/udp), DHCP (67-68/udp).
  • Разделение конфигураций: Runtime (временная) и Permanent (постоянная).

Мини-словник (1‑строчные определения)

  • netfilter — подсистема ядра для фильтрации сетевого трафика.
  • nftables — современная система правил поверх netfilter.
  • firewalld — управляющий демон и API для конфигурации правил через зоны и сервисы.
  • zone — логическая группа правил, связанная с интерфейсами.
  • rich rule — расширенное правило с гибкими условиями и действиями.

Дерево принятия решения: какую зону выбрать?

flowchart TD
  A[Начало: подключение к сети] --> B{Сеть доверенная?}
  B -- Да, домашняя сеть --> C[Использовать zone: home]
  B -- Да, рабочая сеть --> D[Использовать zone: work]
  B -- Частично доверенная, роутер между сетями --> E[Использовать zone: internal или external]
  B -- Нет, публичная Wi-Fi --> F[Использовать zone: public]
  B -- Нужна жёсткая изоляция --> G[Использовать zone: drop или block]
  C --> H[Ограничить до минимально необходимых сервисов]
  D --> H
  E --> H
  F --> H
  G --> H

Заключение

Firewalld — мощный инструмент, который упрощает управление фаерволом на Linux благодаря зональной модели и поддержке сервисной абстракции. Для безопасного внедрения используйте режим Runtime для тестирования, применяйте принцип минимальных привилегий, документируйте изменения и готовьте сценарии отката. Для сложных случаев используйте rich rules или direct-интерфейс и интегрируйте настройки с системами управления конфигурацией.

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


Если нужно, могу сгенерировать Ansible playbook для массового развёртывания политики firewalld, шаблон для бэкапов конфигураций или набор команд для ограничения SSH по IP/Time-based правилам.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Очистка истории в Microsoft Edge
Браузеры

Очистка истории в Microsoft Edge

Как сделать скриншот в играх на ПК
Gaming

Как сделать скриншот в играх на ПК

Google Assistant на Raspberry Pi — голос и GPIO
Hardware

Google Assistant на Raspberry Pi — голос и GPIO

Netflix: «Дополнительный участник» — цена и как добавить
Стриминг

Netflix: «Дополнительный участник» — цена и как добавить

Как скрывать окна автозапуска в macOS Ventura
macOS

Как скрывать окна автозапуска в macOS Ventura

Открыть Панель управления в Windows 11
Windows 11

Открыть Панель управления в Windows 11