Спестете 15% от всички хостинг услуги

Тествай уменията си и получи Отстъпка за всеки хостинг план

Използвайте код: Skills За начало
Заглавия
Linux Защита

Как да конфигурирате защитна стена с Firewalld на Linux (Пълно ръководство)

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

Това всеобхватно ръководство ви преведе през всичко, което трябва да знаете: инсталиране на Firewalld, разбиране на зони, управление на услуги и портове, писане на rich правила и мониторинг на вашия 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 сесия (держете я отворена през цялото време — ще модифицирате правилата на firewall)

> Критично предупреждение: Винаги се уверете, че SSH (порт 22 по подразбиране) е явно разрешен в правилата на вашия firewall, преди да активирате 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 записва правилото в постоянната конфигурация, но не го прилага незабавно към работещия firewall. Винаги презаредете след направяне на постоянни промени:

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 Syntax

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]

Example 1 — Allow SSH from a Specific IP Address Only

Това е една от най-важните конфигурации на сигурност за всеки отдалечен сървър. Ако управлявате сървъра си от фиксиран 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

Example 2 — Block All Traffic from a Specific IP Address

За да блокирате напълно IP адрес, който генерира злонамерен трафик:

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

Example 3 — Allow HTTP from a Specific Subnet

За да позволите 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

Example 4 — Rate-Limit SSH Connections to Prevent 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

Example 5 — Allow a Specific Port from a Specific 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

List All Rich Rules in a Zone

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

Remove a 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: Мониторинг и одит на вашия Firewall

Редовното преглеждане на конфигурацията на вашия firewall е от съществено значение за поддържането на силна позиция по отношение на сигурността. 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 и постоянните конфигурации
# 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

> Съвет за професионалисти: Комбинирайте конфигурацията на вашия firewall с валиден 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 Бързо справочно ръководство

ЗадачаКоманда
Проверка на статуса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 за всички производствени правила и винаги следвайте с --reload
  3. Ограничете чувствителните услуги (SSH, бази данни, административни панели) до конкретни доверени IP адреси, използвайки богати правила
  4. Преглеждайте редовно вашите правила за защитната стена — вашата позиция за сигурност трябва да се развива, когато вашата инфраструктура се променя
  5. Тестирайте правилата по време на изпълнение първо, след това ги направете постоянни, след като бъдат проверени

Независимо дали управлявате един VPS или флот от Dedicated Servers, AlexHost предоставя инфраструктурата, производителността и пълния root достъп, които ви трябват, за да внедрите конфигурации за сигурност на ниво предприятие. Комбинирайте вашата настройка на Firewalld с SSL Certificates за криптирана комуникация и изследвайте VPS Control Panels за опростено управление на сървъра — всичко налично на надеждната, високопроизводителна платформа на AlexHost.