Як налаштувати брандмауер за допомогою Firewalld на Linux (Повний посібник)
Захист вашого Linux сервера від несанціонованого доступу та шкідливого трафіку — це не опціонально, це фундаментальна відповідальність будь-якого системного адміністратора. Незалежно від того, чи ви запускаєте особистий проект, бізнес-додаток або виробничий веб-сервер, правильно налаштований брандмауер — це ваша перша та найбільш критична лінія захисту. Firewalld — один з найпотужніших та найгнучкіших інструментів управління брандмауером, доступних на Linux, що пропонує динамічне управління правилами, контроль трафіку на основі зон та багату підтримку правил — все без необхідності повного перезапуску служби при застосуванні змін.
Цей комплексний посібник проведе вас через все, що вам потрібно знати: встановлення Firewalld, розуміння зон, управління сервісами та портами, написання розширених правил та моніторинг вашого брандмауера в реальному часі. Якщо ви розміщуєте на 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-portsStep 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-з’єднання, щоб зменшити вразливість до brute-force атак:
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 | Зберігається при перезавантаженні та перезавантаженні | Виробничі конфігурації |
Найкращий практичний робочий процес
- Спочатку протестуйте правило під час виконання (без
--permanent), щоб переконатися, що воно працює як очікується - Додайте правило постійно після підтвердження
- Перезавантажте 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: Призначення мережевих інтерфейсів зонам
Якщо ваш сервер має кілька мережевих інтерфейсів (звичайно на Виділених серверах з публічними та приватними 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
| Завдання | Команда |
|---|---|
| Перевірити статус | sudo systemctl status firewalld |
| Запустити Firewalld | sudo systemctl start firewalld |
| Зупинити Firewalld | sudo 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 |
| Перезавантажити Firewalld | sudo firewall-cmd --reload |
| Режим паніки (заблокувати все) | sudo firewall-cmd --panic-on |
| Вимкнути режим паніки | sudo firewall-cmd --panic-off |
Висновок
Firewalld — це виключно потужний і гнучкий інструмент управління брандмауером, який надає адміністраторам систем Linux точний, динамічний контроль над мережевим трафіком. Опанувавши зони, сервіси, правила портів та розширені правила, ви можете побудувати багатошарову, адаптивну архітектуру безпеки, яка захищає ваш сервер від несанкціонованого доступу, атак перебору та загроз на рівні мережі.
Ключові принципи, які слід запам’ятати:
- Завжди дозволяйте SSH перед увімкненням брандмауера, щоб уникнути блокування себе
- Використовуйте прапор
--permanentдля всіх правил у виробництві та завжди слідуйте--reload - Обмежуйте чутливі сервіси (SSH, бази даних, панелі адміністратора) до конкретних довірених IP-адрес за допомогою розширених правил
- Регулярно переглядайте правила брандмауера — ваша позиція безпеки повинна розвиватися зі змінами вашої інфраструктури
- Спочатку протестуйте правила під час виконання, а потім зробіть їх постійними після перевірки
Незалежно від того, керуєте ви одним VPS чи флотом Dedicated Servers, AlexHost надає інфраструктуру, продуктивність та повний root-доступ, необхідні для впровадження конфігурацій безпеки рівня підприємства. Поєднайте налаштування Firewalld з SSL Certificates для зашифрованих комунікацій та дослідіть VPS Control Panels для спрощеного управління сервером — все доступно на надійній, високопродуктивній платформі AlexHost.
на всіх хостингових послугах