Как да конфигурирате защитна стена с 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-portsStep 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 --reloadExample 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 --reloadExample 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 --reloadExample 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 --reloadExample 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 --reloadList All Rich Rules in a Zone
sudo firewall-cmd --zone=public --list-rich-rulesRemove 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 | Оцелява при преизчисляване и рестартиране | Производствени конфигурации |
Работен процес на най-добрата практика
- Тестирайте правилото при runtime първо (без
--permanent) за проверка дали работи както се очаква - Добавете правилото постоянно след потвърждение
- Преизчислете 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/messagesFirewalld Бързо справочно ръководство
| Задача | Команда |
|---|---|
| Проверка на статуса | 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.
от всички хостинг услуги