Сэкономьте 15% на всех хостинговых услугах

Проверьте свои навыки и получите скидку на любой тарифный план

Используйте код: Skills Начать
Рубрики
Linux Безопасность

Как настроить брандмауэр с помощью Firewalld на Linux (Полное руководство)

Защита вашего Linux сервера от несанкционированного доступа и вредоносного трафика — это не опция, а фундаментальная ответственность любого системного администратора. Независимо от того, запускаете ли вы личный проект, бизнес-приложение или production веб-сервер, правильно настроенный firewall является вашей первой и наиболее критической линией защиты. Firewalld — это один из самых мощных и гибких инструментов управления firewall, доступных в Linux, предлагающий динамическое управление правилами, контроль трафика на основе зон и богатую поддержку правил — все это без необходимости полной перезагрузки сервиса при применении изменений.

Это подробное руководство проведет вас через все, что вам нужно знать: установка Firewalld, понимание зон, управление сервисами и портами, написание rich rules и мониторинг вашего firewall в реальном времени. Если вы размещаете свой проект на VPS или Dedicated Server от AlexHost, это руководство поможет вам защитить вашу среду и поддерживать сильную, адаптивную позицию безопасности.

Что такое Firewalld и почему его следует использовать?

Firewalld — это демон динамического управления брандмауэром, доступный в большинстве основных дистрибутивов Linux, включая CentOS, RHEL, Fedora, Rocky Linux, AlmaLinux, а также все чаще в Debian и Ubuntu. В отличие от старого подхода iptables — где каждое изменение правила требовало очистки и перезагрузки всего набора правил — Firewalld применяет изменения динамически во время выполнения без прерывания активных соединений.

Ключевые преимущества Firewalld

  • Архитектура на основе зон — назначайте разные уровни доверия различным сетевым интерфейсам или диапазонам IP
  • Динамическое обновление правил — применяйте изменения без перезагрузки брандмауэра или разрыва существующих соединений
  • Абстракция сервисов — управляйте трафиком по имени сервиса (например, http, ssh) вместо номеров портов
  • Расширенные правила — создавайте сложные условные правила, нацеленные на конкретные IP-адреса, протоколы и действия
  • Интеграция D-Bus — позволяет другим приложениям и сервисам взаимодействовать с брандмауэром программно
  • Поддержка IPv4 и IPv6 — управляйте обоими семействами протоколов из одного интерфейса

Предварительные требования

Перед началом убедитесь, что у вас есть:

  • Linux сервер с CentOS 7/8/9, RHEL, Fedora, Rocky Linux, AlmaLinux, Debian или Ubuntu
  • Root или sudo доступ к серверу
  • Базовое понимание команд Linux терминала
  • Активная SSH сессия (держите её открытой на протяжении всего процесса — вы будете изменять правила брандмауэра)

> Критическое предупреждение: Всегда убедитесь, что SSH (порт 22 по умолчанию) явно разрешён в правилах брандмауэра перед включением Firewalld. Заблокировать себя на удалённом сервере — это распространённая и предотвратимая ошибка.

Шаг 1: Установка Firewalld

Firewalld включен в репозитории по умолчанию большинства основных дистрибутивов Linux. Используйте соответствующий менеджер пакетов для вашей системы.

На CentOS / RHEL / Rocky Linux / AlmaLinux

sudo yum install firewalld -y

Или на более новых версиях с использованием DNF:

sudo dnf install firewalld -y

На Fedora

sudo dnf install firewalld -y

На Debian / Ubuntu

Хотя Firewalld чаще всего ассоциируется с системами на основе RHEL, он полностью поддерживается в дистрибутивах на основе Debian:

sudo apt update
sudo apt install firewalld -y

> Примечание для пользователей Ubuntu/Debian: Если ufw в настоящее время активен в вашей системе, отключите его перед включением Firewalld, чтобы избежать конфликтов:

> “`bash

> sudo ufw disable

> “`

Шаг 2: Запуск и включение Firewalld

После установки запустите сервис Firewalld и настройте его на автоматический запуск при загрузке системы:

sudo systemctl start firewalld
sudo systemctl enable firewalld

Проверьте, что сервис работает правильно:

sudo systemctl status firewalld

Вы должны увидеть вывод, похожий на:

● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled)
   Active: active (running) since ...

Если статус показывает active (running), Firewalld работает и готов к настройке.

Шаг 3: Понимание зон Firewalld

Модель на основе зон является основой архитектуры Firewalld. Зона определяет уровень доверия для сетевого подключения или интерфейса. Каждая зона содержит свой набор правил, которые определяют, какой трафик разрешен или запрещен.

Встроенные зоны Firewalld

ЗонаУровень доверияТипичный случай использования
dropСамый низкийВсе входящие соединения отбрасываются без ответа
block

Очень низкийВходящие соединения отклоняются с сообщением ICMP
publicНизкийЗона по умолчанию для ненадежных публичных сетей
externalНизкийДля внешних интерфейсов с маскировкой NAT
dmzСреднийСерверы, доступные извне, но изолированные внутри
workСредне-высокийРабочие сети с умеренным уровнем доверия
homeВысокийДомашние сети, где другие хосты являются надежными
internalВысокийВнутренние сети, аналогично домашним
trustedСамый высокийВсе соединения принимаются

Проверить текущую зону по умолчанию

sudo firewall-cmd --get-default-zone

Список всех доступных зон

sudo firewall-cmd --get-zones

Просмотр активных зон и их интерфейсов

sudo firewall-cmd --get-active-zones

Пример вывода:

public
  interfaces: eth0

Шаг 4: Изменение зоны по умолчанию

Пример 1 — Установка зоны по умолчанию на public (Рекомендуется для VPS/Dedicated Servers)

Для большинства серверов, доступных в интернете, public является подходящей зоной по умолчанию. Она применяет консервативный уровень доверия и разрешает только явно разрешенный трафик:

sudo firewall-cmd --set-default-zone=public

Проверьте изменение:

sudo firewall-cmd --get-default-zone

Ожидаемый результат:

public

Пример 2 — Установка зоны по умолчанию на home

Если ваш сервер работает в доверенной частной сети (например, домашняя лаборатория или внутренняя среда разработки), зона home позволяет более свободное взаимодействие между доверенными хостами:

sudo firewall-cmd --set-default-zone=home

Проверьте:

sudo firewall-cmd --get-default-zone

Ожидаемый результат:

home

Пример 3 — Установка зоны по умолчанию на work

Для серверов в корпоративной или рабочей сети, где уместна средняя степень доверия:

sudo firewall-cmd --set-default-zone=work

Проверьте:

sudo firewall-cmd --get-default-zone

Ожидаемый результат:

work

Шаг 5: Управление сервисами с помощью Firewalld

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

Список всех предопределенных сервисов

sudo firewall-cmd --get-services

Разрешить сервис в зоне

Чтобы разрешить HTTP-трафик (порт 80/TCP) в зоне public постоянно:

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

Чтобы разрешить HTTPS-трафик (порт 443/TCP):

sudo firewall-cmd --zone=public --add-service=https --permanent

Чтобы разрешить SSH (порт 22/TCP) — всегда убедитесь, что это разрешено перед внесением других изменений:

sudo firewall-cmd --zone=public --add-service=ssh --permanent

Применить изменения путем перезагрузки Firewalld

Флаг --permanent записывает правило в постоянную конфигурацию, но не применяет его немедленно к работающему брандмауэру. Всегда перезагружайте после внесения постоянных изменений:

sudo firewall-cmd --reload

Проверить сервисы в зоне

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

Пример вывода:

dhcpv6-client http https ssh

Удалить сервис из зоны

Чтобы удалить HTTPS из зоны public:

sudo firewall-cmd --zone=public --remove-service=https --permanent
sudo firewall-cmd --reload

Шаг 6: Прямое управление портами

В случаях, когда служба не имеет предопределённого определения Firewalld, вы можете открывать или закрывать определённые порты напрямую.

Открыть определённый порт

Чтобы открыть порт 8080 через TCP в зоне public:

sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
sudo firewall-cmd --reload

Чтобы открыть UDP порт (например, порт 53 для DNS):

sudo firewall-cmd --zone=public --add-port=53/udp --permanent
sudo firewall-cmd --reload

Чтобы открыть диапазон портов (например, 6000–6100 TCP):

sudo firewall-cmd --zone=public --add-port=6000-6100/tcp --permanent
sudo firewall-cmd --reload

Закрыть определённый порт

Чтобы закрыть порт 8080:

sudo firewall-cmd --zone=public --remove-port=8080/tcp --permanent
sudo firewall-cmd --reload

Список всех открытых портов в зоне

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

Step 7: Advanced Configuration with Rich Rules

Rich rules предоставляют вам детальное условное управление трафиком — намного больше, чем позволяют простые правила сервиса или порта. Они поддерживают фильтрацию по исходному IP, целевому IP, протоколу, порту и действию (accept, reject, drop, log).

Синтаксис Rich Rule

rule [family="<ipv4|ipv6>"]
     [source address="<IP/CIDR>"]
     [destination address="<IP/CIDR>"]
     [service name="<service>"] | [port port="<port>" protocol="<tcp|udp>"]
     [log [prefix="<prefix>"] [level="<level>"] [limit value="<rate>"]]
     [accept|reject|drop]

Пример 1 — Разрешить SSH только с определённого IP-адреса

Это одна из наиболее важных конфигураций безопасности для любого удалённого сервера. Если вы управляете сервером с фиксированного IP-адреса, ограничьте доступ SSH исключительно этим IP:

sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="203.0.113.50" service name="ssh" accept' --permanent
sudo firewall-cmd --reload

Пример 2 — Заблокировать весь трафик с определённого IP-адреса

Чтобы полностью заблокировать IP-адрес, генерирующий вредоносный трафик:

sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="198.51.100.25" drop' --permanent
sudo firewall-cmd --reload

Пример 3 — Разрешить HTTP с определённой подсети

Чтобы разрешить трафик HTTP только с доверенной внутренней подсети (например, 192.168.1.0/24):

sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="http" accept' --permanent
sudo firewall-cmd --reload

Пример 4 — Ограничить скорость SSH-соединений для предотвращения brute force

Логируйте и ограничивайте попытки подключения SSH, чтобы снизить уязвимость к атакам перебора:

sudo firewall-cmd --zone=public --add-rich-rule='rule service name="ssh" log prefix="SSH-ATTEMPT" level="notice" limit value="3/m" accept' --permanent
sudo firewall-cmd --reload

Пример 5 — Разрешить определённый порт с определённого IP

sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="10.0.0.5" port port="3306" protocol="tcp" accept' --permanent
sudo firewall-cmd --reload

Список всех Rich Rules в зоне

sudo firewall-cmd --zone=public --list-rich-rules

Удалить Rich Rule

sudo firewall-cmd --zone=public --remove-rich-rule='rule family="ipv4" source address="198.51.100.25" drop' --permanent
sudo firewall-cmd --reload

Шаг 8: Мониторинг и аудит вашего брандмауэра

Регулярный пересмотр конфигурации брандмауэра необходим для поддержания надежной безопасности. Firewalld предоставляет несколько команд для проверки текущего состояния ваших правил.

Просмотр полной конфигурации для зоны по умолчанию

sudo firewall-cmd --list-all

Пример вывода:

public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: dhcpv6-client http https ssh
  ports: 8080/tcp
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
    rule family="ipv4" source address="203.0.113.50" service name="ssh" accept

Просмотр конфигурации для всех зон

sudo firewall-cmd --list-all-zones

Просмотр конфигурации для определенной зоны

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

Проверка разрешения определенной службы

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

Проверка открытия определенного порта

sudo firewall-cmd --zone=public --query-port=8080/tcp

Шаг 9: Runtime vs. Permanent Rules — Понимание различий

Firewalld работает с двумя отдельными слоями конфигурации:

СлойФлагПостоянствоСлучай использования
Runtime*(без флага)*Теряется при перезагрузке/перезапускеВременное тестирование правил
Permanent--permanentСохраняется при перезагрузке и перезапускеПроизводственные конфигурации

Рекомендуемый рабочий процесс

  1. Сначала протестируйте правило в режиме runtime (без --permanent), чтобы убедиться, что оно работает как ожидается
  2. Добавьте правило постоянно после подтверждения
  3. Перезагрузите Firewalld, чтобы синхронизировать конфигурации runtime и permanent
# Step 1: Test at runtime
sudo firewall-cmd --zone=public --add-service=http

# Step 2: Verify it works as expected, then make it permanent
sudo firewall-cmd --zone=public --add-service=http --permanent

# Step 3: Reload to sync
sudo firewall-cmd --reload

Кроме того, примените постоянное правило и немедленно перезагрузитесь в одном рабочем процессе:

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

Шаг 10: Назначение сетевых интерфейсов зонам

Если ваш сервер имеет несколько сетевых интерфейсов (обычно на Dedicated Servers с публичными и приватными NIC), вы можете назначить каждый интерфейс другой зоне с разными уровнями доверия.

Назначить интерфейс зоне

sudo firewall-cmd --zone=internal --add-interface=eth1 --permanent
sudo firewall-cmd --reload

Изменить зону интерфейса

sudo firewall-cmd --zone=public --change-interface=eth0 --permanent
sudo firewall-cmd --reload

Удалить интерфейс из зоны

sudo firewall-cmd --zone=internal --remove-interface=eth1 --permanent
sudo firewall-cmd --reload

Шаг 11: Включение IP Masquerading и Port Forwarding

Для серверов, действующих в качестве шлюзов или работающих с NAT (Network Address Translation), Firewalld поддерживает masquerading и port forwarding встроенно.

Включить Masquerading (NAT)

sudo firewall-cmd --zone=external --add-masquerade --permanent
sudo firewall-cmd --reload

Перенаправить порт (например, перенаправить внешний порт 80 на внутренний порт 8080)

sudo firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080 --permanent
sudo firewall-cmd --reload

Перенаправить трафик на другой хост

sudo firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=80:toaddr=192.168.1.10 --permanent
sudo firewall-cmd --reload

Практические конфигурации безопасности для серверов AlexHost

Если вы запускаете веб-сервер, сервер базы данных или сервер приложений на инфраструктуре AlexHost, вот рекомендуемые базовые конфигурации Firewalld:

Базовая конфигурация веб-сервера

# Allow SSH (restrict to your IP in production)
sudo firewall-cmd --zone=public --add-service=ssh --permanent

# Allow HTTP and HTTPS
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --zone=public --add-service=https --permanent

# Reload to apply
sudo firewall-cmd --reload

# Verify
sudo firewall-cmd --list-all

> Совет профессионала: Сочетайте конфигурацию брандмауэра с действительным SSL-сертификатом, чтобы обеспечить сквозное шифрование всего веб-трафика. AlexHost предлагает SSL-сертификаты для всех сред хостинга.

Базовая конфигурация сервера базы данных (MySQL/MariaDB)

# Allow MySQL only from a specific application server IP
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="10.0.0.5" port port="3306" protocol="tcp" accept' --permanent

# Block direct MySQL access from the public internet
sudo firewall-cmd --zone=public --remove-service=mysql --permanent 2>/dev/null

sudo firewall-cmd --reload

Базовая конфигурация сервера cPanel/WHM

Если вы используете VPS с cPanel, вам потребуется открыть порты, необходимые для cPanel и WHM:

# Web traffic
sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --zone=public --add-service=https --permanent

# cPanel/WHM ports
sudo firewall-cmd --zone=public --add-port=2082/tcp --permanent   # cPanel HTTP
sudo firewall-cmd --zone=public --add-port=2083/tcp --permanent   # cPanel HTTPS
sudo firewall-cmd --zone=public --add-port=2086/tcp --permanent   # WHM HTTP
sudo firewall-cmd --zone=public --add-port=2087/tcp --permanent   # WHM HTTPS
sudo firewall-cmd --zone=public --add-port=2095/tcp --permanent   # Webmail HTTP
sudo firewall-cmd --zone=public --add-port=2096/tcp --permanent   # Webmail HTTPS

# Mail ports
sudo firewall-cmd --zone=public --add-service=smtp --permanent
sudo firewall-cmd --zone=public --add-service=imaps --permanent
sudo firewall-cmd --zone=public --add-service=pop3s --permanent

sudo firewall-cmd --reload

Устранение распространённых проблем Firewalld

Проблема 1: Firewalld не запускается

Проверьте конфликты с другими инструментами брандмауэра:

sudo systemctl status iptables
sudo systemctl stop iptables
sudo systemctl disable iptables
sudo systemctl start firewalld

Проблема 2: Правила не сохраняются после перезагрузки

Убедитесь, что вы использовали флаг --permanent и перезагрузили:

sudo firewall-cmd --runtime-to-permanent
sudo firewall-cmd --reload

Команда --runtime-to-permanent сохраняет все текущие правила времени выполнения в постоянную конфигурацию.

Проблема 3: Заблокирован доступ по SSH

Если вы случайно заблокировали доступ SSH, вам потребуется получить доступ к серверу через консоль (доступна через панель управления VPS AlexHost) и выполнить:

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

Проблема 4: Проверка журналов Firewalld

sudo journalctl -u firewalld -f

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

sudo grep -i firewall /var/log/messages

Firewalld Quick Reference Cheat Sheet

ЗадачаКоманда
Проверить статусsudo systemctl status firewalld
Запустить Firewalldsudo systemctl start firewalld
Остановить Firewalldsudo systemctl stop firewalld
Включить при загрузкеsudo systemctl enable firewalld
Получить зону по умолчаниюsudo firewall-cmd --get-default-zone
Список всех зонsudo firewall-cmd --get-zones
Список активных зонsudo firewall-cmd --get-active-zones
Установить зону по умолчаниюsudo firewall-cmd --set-default-zone=public
Добавить сервисsudo firewall-cmd --zone=public --add-service=http --permanent
Удалить сервисsudo firewall-cmd --zone=public --remove-service=http --permanent
Открыть портsudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
Закрыть портsudo firewall-cmd --zone=public --remove-port=8080/tcp --permanent
Список сервисовsudo firewall-cmd --zone=public --list-services
Список портовsudo firewall-cmd --zone=public --list-ports
Список всех правилsudo firewall-cmd --list-all
Добавить расширенное правилоsudo firewall-cmd --zone=public --add-rich-rule='...' --permanent
Сохранить правила времени выполненияsudo firewall-cmd --runtime-to-permanent
Перезагрузить Firewalldsudo firewall-cmd --reload
Режим паники (заблокировать все)sudo firewall-cmd --panic-on
Отключить режим паникиsudo firewall-cmd --panic-off

Заключение

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

Ключевые принципы, которые следует запомнить:

  1. Всегда разрешайте SSH перед включением брандмауэра, чтобы избежать блокировки доступа к себе
  2. Используйте флаг --permanent для всех правил в production, и всегда следуйте с --reload
  3. Ограничивайте доступ к чувствительным сервисам (SSH, базы данных, панели администратора) конкретными доверенными IP-адресами, используя расширенные правила
  4. Регулярно проверяйте правила брандмауэра — ваша политика безопасности должна развиваться по мере изменения инфраструктуры
  5. Сначала протестируйте правила во время выполнения, а затем сделайте их постоянными после проверки

Управляете ли вы одним VPS или парком Dedicated Servers, AlexHost предоставляет инфраструктуру, производительность и полный root-доступ, необходимые для реализации конфигураций безопасности корпоративного уровня. Дополните вашу настройку Firewalld SSL Certificates для зашифрованной коммуникации и изучите VPS Control Panels для упрощенного управления сервером — все доступно на надежной высокопроизводительной платформе AlexHost.