Как настроить брандмауэр с помощью Firewalld на Linux (Полное руководство)
Защита вашего Linux-сервера от несанкционированного доступа и вредоносного трафика — это не опция, а фундаментальная ответственность любого системного администратора. Независимо от того, запускаете ли вы личный проект, бизнес-приложение или production веб-сервер, правильно настроенный брандмауэр — это ваша первая и наиболее критическая линия защиты. Firewalld — один из самых мощных и гибких инструментов управления брандмауэром, доступных на Linux, предлагающий динамическое управление правилами, контроль трафика на основе зон и богатую поддержку правил — всё без необходимости полной перезагрузки сервиса при применении изменений.
Это подробное руководство проведёт вас через всё, что вам нужно знать: установка Firewalld, понимание зон, управление сервисами и портами, написание расширенных правил и мониторинг вашего брандмауэра в реальном времени. Если вы размещаете свой сервис на VPS или Dedicated Server от AlexHost, это руководство поможет вам защитить вашу среду и поддерживать сильную, адаптивную позицию безопасности.
Что такое Firewalld и почему его использовать?
Firewalld — это демон динамического управления брандмауэром, доступный в большинстве основных дистрибутивов Linux, включая CentOS, RHEL, Fedora, Rocky Linux, AlmaLinux, а также всё чаще на Debian и Ubuntu. В отличие от старого подхода с iptables — где каждое изменение правила требовало очистки и перезагрузки всего набора правил — Firewalld применяет изменения динамически во время выполнения без прерывания активных соединений.
Ключевые преимущества Firewalld
- Архитектура на основе зон — назначайте разные уровни доверия разным сетевым интерфейсам или диапазонам IP
- Динамическое обновление правил — применяйте изменения без перезагрузки брандмауэра или разрыва существующих соединений
- Абстракция сервисов — управляйте трафиком по имени сервиса (например, http, https) вместо номеров портов
- Расширенные правила — пишите сложные условные правила, нацеленные на конкретные 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 — Установка зоны по умолчанию на internal
Если ваш сервер работает в надёжной частной сети (например, домашняя лаборатория или внутренняя среда разработки), зона internal позволяет более разрешительное взаимодействие между надёжными хостами:
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Шаг 7: Расширенная конфигурация с расширенными правилами
Расширенные правила дают вам детальный, условный контроль над трафиком — намного больше, чем позволяют простые правила сервисов или портов. Они поддерживают фильтрацию по исходному IP, целевому IP, протоколу, порту и действию (accept, reject, drop, log).
Синтаксис расширенного правила
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-соединений для предотвращения перебора
Логируйте и ограничивайте попытки подключения 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Список всех расширенных правил в зоне
sudo firewall-cmd --zone=public --list-rich-rulesУдаление расширенного правила
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: Правила времени выполнения и постоянные правила — понимание различия
Firewalld работает с двумя отдельными слоями конфигурации:
| Слой | Флаг | Постоянство | Случай использования |
|---|---|---|---|
| Время выполнения | *(без флага)* | Теряется при перезагрузке/перезагрузке | Временное тестирование правил |
| Постоянный | –permanent | Сохраняется при перезагрузке и перезагрузке | Production-конфигурации |
Лучший рабочий процесс
- Сначала протестируйте правило во время выполнения (без –permanent), чтобы убедиться, что оно работает как ожидается
- Добавьте правило постоянно после подтверждения
- Перезагрузите Firewalld, чтобы синхронизировать конфигурации времени выполнения и постоянные
# 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 и переадресации портов
Для серверов, действующих как шлюзы или работающих с NAT (Network Address Translation), Firewalld поддерживает маскировку и переадресацию портов изначально.
Включение маскировки (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)
###PPT_NOTR
