Полное руководство по 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-configFedora:
# firewalld обычно предустановлен
sudo dnf install firewall-configManjaro/Arch:
sudo pacman -Sy firewalldПосле установки включите и запустите службу:
sudo systemctl enable firewalld
sudo systemctl start firewalldПроверка статуса:
sudo systemctl status firewalldПроверка состояния демона через команду firewalld:
sudo firewall-cmd --state
Основная концепция: зоны
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
Если на системе несколько интерфейсов, они могут быть привязаны к разным зонам; пример вывода для ноутбука с Ethernet и Wi‑Fi покажет оба интерфейса.
Получение списка всех зон:
sudo firewall-cmd --get-zonesПоказать конфигурацию всех зон (удобно просматривать через less):
sudo firewall-cmd --list-all-zones | less
Переключение интерфейса между зонами
Чтобы временно переместить интерфейс в другую зону (только для текущего запуска):
sudo firewall-cmd --zone=home --change-interface=enp3s0Проверка:
sudo firewall-cmd --zone=home --list-all
Чтобы сделать изменение постоянным (сохранить в конфигурации):
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”). Иконка — кирпичная стена.

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



Совет: если вы не уверены, оставьте изменения в 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, план миграции включает:
- Экспорт текущих правил iptables.
- Перевод логики в зоны и сервисы firewalld (или в nftables напрямую).
- Тщательное тестирование в 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:
- Подготовка: документируйте текущее состояние (firewall-cmd –list-all-zones).
- Тестирование: вносите изменения в Runtime на контролируемом хосте.
- Проверка: тестируйте доступность всех критичных сервисов и откат при проблемах.
- Конвертация: если тест успешен — примените –permanent и выполните firewall-cmd –reload.
- Мониторинг: отслеживайте логи и поведение в течение 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-подход)
- Сбор информации: интерфейсы, текущие правила, используемые сервисы.
- Создание зон и правил в виде скрипта (пример ниже).
- Применение на одном тестовом узле и верификация.
- Массовое применение с конфигурационным менеджером (Ansible, Puppet).
- Мониторинг и аудит.
Пример скрипта (на 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 правилам.
Похожие материалы
Очистка истории в Microsoft Edge
Как сделать скриншот в играх на ПК
Google Assistant на Raspberry Pi — голос и GPIO
Netflix: «Дополнительный участник» — цена и как добавить
Как скрывать окна автозапуска в macOS Ventura