Як налаштувати брандмауер за допомогою 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, 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
Або на новіших версіях з використанням DNF:
sudo dnf install firewalld
На Fedora
sudo dnf install firewalld
На Debian / Ubuntu
Хоча Firewalld найчастіше асоціюється з системами на основі RHEL, він повністю підтримується на дистрибутивах на основі Debian:
sudo apt update && sudo apt install firewalld
> Примітка для користувачів Ubuntu/Debian: Якщо ufw наразі активний у вашій системі, вимкніть його перед включенням Firewalld, щоб уникнути конфліктів:
> 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; vendor preset: enabled)
Active: active (running) since Mon 2024-01-15 10:23:45 UTC; 2min 34s ago
Якщо статус показує 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
internal
interfaces: eth1
Крок 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=internal
Перевірте:
sudo firewall-cmd –get-default-zone
Очікуваний вихід:
internal
Приклад 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 –permanent –add-service=http –zone=public
Щоб дозволити трафік HTTPS (порт 443/TCP):
sudo firewall-cmd –permanent –add-service=https –zone=public
Щоб дозволити SSH (порт 22/TCP) — завжди переконайтеся, що це дозволено перед внесенням інших змін:
sudo firewall-cmd –permanent –add-service=ssh –zone=public
Застосуйте зміни, перезавантажуючи Firewalld
Прапор –permanent записує правило в постійну конфігурацію, але не застосовує його негайно до запущеного брандмауера. Завжди перезавантажуйте після внесення постійних змін:
sudo firewall-cmd –reload
Перевірте сервіси у зоні
sudo firewall-cmd –list-services –zone=public
Приклад виходу:
http https ssh
Видаліть сервіс із зони
Щоб видалити HTTPS із зони public:
sudo firewall-cmd –permanent –remove-service=https –zone=public
Крок 6: Прямого управління портами
У випадках, коли сервіс не має попередньо визначеного визначення Firewalld, ви можете відкрити або закрити конкретні порти безпосередньо.
Відкрийте конкретний порт
Щоб відкрити порт 8080 через TCP у зоні public:
sudo firewall-cmd –permanent –add-port=8080/tcp –zone=public
Щоб відкрити порт UDP (наприклад, порт 53 для DNS):
sudo firewall-cmd –permanent –add-port=53/udp –zone=public
Щоб відкрити діапазон портів (наприклад, 6000–6100 TCP):
sudo firewall-cmd –permanent –add-port=6000-6100/tcp –zone=public
Закрийте конкретний порт
Щоб закрити порт 8080:
sudo firewall-cmd –permanent –remove-port=8080/tcp –zone=public
Список всіх відкритих портів у зоні
sudo firewall-cmd –list-ports –zone=public
Крок 7: Розширена конфігурація з розширеними правилами
Розширені правила дають вам детальний, умовний контроль над трафіком — набагато більше, ніж дозволяють прості правила сервісу або порту. Вони підтримують фільтрацію за вихідною IP, IP призначення, протоколом, портом та дією (accept, reject, drop, log).
Синтаксис розширеного правила
sudo firewall-cmd –permanent –add-rich-rule=’rule family=”ipv4″ source address=”SOURCE_IP” service name=”SERVICE” accept’
Приклад 1 — Дозволити SSH лише з конкретної IP-адреси
Це одна з найважливіших конфігурацій безпеки для будь-якого віддаленого сервера. Якщо ви керуєте своїм сервером із фіксованої IP-адреси, обмежте доступ SSH лише цією IP:
sudo firewall-cmd –permanent –add-rich-rule=’rule family=”ipv4″ source address=”203.0.113.50″ service name=”ssh” accept’
Приклад 2 — Заблокуйте весь трафік із конкретної IP-адреси
Щоб повністю заблокувати IP-адресу, яка генерує шкідливий трафік:
sudo firewall-cmd –permanent –add-rich-rule=’rule family=”ipv4″ source address=”192.0.2.100″ reject’
Приклад 3 — Дозволити HTTP лише з конкретної підмережі
Щоб дозволити трафік HTTP лише з надійної внутрішної підмережі (наприклад, 10.0.0.0/8):
sudo firewall-cmd –permanent –add-rich-rule=’rule family=”ipv4″ source address=”10.0.0.0/8″ service name=”http” accept’
Приклад 4 — Обмежити з’єднання SSH для запобігання атакам перебору
Логуйте та обмежуйте спроби підключення SSH, щоб зменшити вразливість до атак перебору:
sudo firewall-cmd –permanent –add-rich-rule=’rule family=”ipv4″ service name=”ssh” limit value=”3/m” accept’
Приклад 5 — Дозволити конкретний порт із конкретної IP
sudo firewall-cmd –permanent –add-rich-rule=’rule family=”ipv4″ source address=”192.168.1.100″ port protocol=”tcp” port=”3306″ accept’
Список всіх розширених правил у зоні
sudo firewall-cmd –list-rich-rules –zone=public
Видаліть розширене правило
sudo firewall-cmd –permanent –remove-rich-rule=’rule family=”ipv4″ source address=”203.0.113.50″ service name=”ssh” accept’
Крок 8: Моніторинг та аудит вашого брандмауера
Регулярний перегляд конфігурації брандмауера є важливим для підтримання сильної позиції безпеки. Firewalld надає кілька команд для перевірки поточного стану ваших правил.
Перегляд повної конфігурації для зони за замовчуванням
sudo firewall-cmd –list-all
Приклад виходу:
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: http https ssh
ports: 8080/tcp
protocols:
forward: no
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
Перегляд конфігурації для всіх зон
sudo firewall-cmd –list-all-zones
Перегляд конфігурації для конкретної зони
sudo firewall-cmd –list-all –zone=internal
Перевірте, чи дозволений конкретний сервіс
sudo firewall-cmd –query-service=http –zone=public
Перевірте, чи відкритий конкретний порт
sudo firewall-cmd –query-port=8080/tcp –zone=public
Крок 9: Правила виконання та постійні — розуміння різниці
Firewalld працює з двома окремими шарами конфігурації:
| Шар | Прапор | Постійність | Випадок використання |
|---|---|---|---|
| Runtime | *(без прапора)* | Втрачається при перезавантаженні/перезавантаженні | Тимчасове тестування правил |
| Permanent | –permanent | Виживає перезавантаження та перезавантаження | Виробничі конфігурації |
Найкращий робочий процес практики
- Спочатку протестуйте правило під час виконання (без –permanent), щоб переконатися, що воно працює як очікується
- Додайте правило постійно після підтвердження
- Перезавантажте Firewalld, щоб синхронізувати конфігурацію виконання та постійну
sudo firewall-cmd –add-service=http –zone=public
sudo firewall-cmd –permanent –add-service=http –zone=public
sudo firewall-cmd –reload
Крім того, застосуйте постійне правило та негайно перезавантажте в одному робочому процесі:
sudo firewall-cmd –permanent –add-service=
