15%

Збережіть 15% на всі хостинг-послуги

Перевірте свої навички і отримайте Знижку на будь-який план хостингу

Використовуй код:

Skills
Почати
01.11.2024

Як налаштувати брандмауер за допомогою 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Виживає перезавантаження та перезавантаженняВиробничі конфігурації

Найкращий робочий процес практики

  1. Спочатку протестуйте правило під час виконання (без –permanent), щоб переконатися, що воно працює як очікується
  2. Додайте правило постійно після підтвердження
  3. Перезавантажте 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=

15%

Збережіть 15% на всі хостинг-послуги

Перевірте свої навички і отримайте Знижку на будь-який план хостингу

Використовуй код:

Skills
Почати