Cum să configurezi un Firewall cu Firewalld pe Linux (Ghid Complet)
Securizarea serverului Linux împotriva accesului neautorizat și a traficului malițios nu este opțională — este o responsabilitate fundamentală pentru orice administrator de sistem. Indiferent dacă rulați un proiect personal, o aplicație de afaceri sau un server web de producție, un firewall corect configurat este prima și cea mai critică linie de apărare. Firewalld este unul dintre cele mai puternice și flexibile instrumente de gestionare a firewall-ului disponibile pe Linux, oferind gestionarea dinamică a regulilor, controlul traficului bazat pe zone și suport pentru reguli bogate — toate fără a necesita o repornire completă a serviciului atunci când se aplică modificări.
Acest ghid cuprinzător vă ghidează prin tot ceea ce trebuie să știți: instalarea Firewalld, înțelegerea zonelor, gestionarea serviciilor și porturilor, scrierea regulilor bogate și monitorizarea firewall-ului în timp real. Dacă găzduiți pe un VPS sau Server Dedicat de la AlexHost, acest ghid vă va ajuta să vă securizați mediul și să mențineți o poziție de securitate puternică și adaptivă.
Ce este Firewalld și de ce ar trebui să îl utilizați?
Firewalld este un daemon de gestionare dinamică a firewall-ului disponibil pe majoritatea distribuțiilor Linux majore, inclusiv CentOS, RHEL, Fedora, Rocky Linux, AlmaLinux, și din ce în ce mai mult pe Debian și Ubuntu de asemenea. Spre deosebire de abordarea mai veche iptables — unde fiecare schimbare de regulă necesita golirea și reîncărcarea întregului set de reguli — Firewalld aplică modificări dinamic în timp de rulare fără a întrerupe conexiunile active.
Avantajele cheie ale Firewalld
- Arhitectură bazată pe zone — atribuiți niveluri diferite de încredere interfețelor de rețea diferite sau intervalelor IP
- Actualizări dinamice ale regulilor — aplicați modificări fără a reporni firewall-ul sau a abandona conexiunile existente
- Abstracție de servicii — gestionați traficul după numele serviciului (de exemplu,
http,ssh) mai degrabă decât numere de port brute - Reguli bogate — scrieți reguli complexe și condiționale care vizează IP-uri, protocoale și acțiuni specifice
- Integrare D-Bus — permite altor aplicații și servicii să interacționeze cu firewall-ul prin programare
- Suport IPv4 și IPv6 — gestionați ambele familii de protocoale dintr-o singură interfață
Cerințe preliminare
Înainte de a continua, asigurați-vă că aveți:
- Un server Linux care rulează CentOS 7/8/9, RHEL, Fedora, Rocky Linux, AlmaLinux, Debian sau Ubuntu
- Acces root sau
sudola server - O înțelegere de bază a comenzilor terminalului Linux
- O sesiune SSH activă (păstrați-o deschisă pe tot parcursul — veți modifica regulile firewall-ului)
> Avertisment critic: Asigurați-vă întotdeauna că SSH (portul 22 în mod implicit) este explicit permis în regulile firewall-ului înainte de a activa Firewalld. A vă bloca accesul la un server la distanță este o greșeală comună și evitabilă.
Pasul 1: Instalarea Firewalld
Firewalld este inclus în depozitele implicite ale majorității distribuțiilor Linux majore. Utilizați managerul de pachete corespunzător pentru sistemul dumneavoastră.
Pe CentOS / RHEL / Rocky Linux / AlmaLinux
sudo yum install firewalld -ySau, pe versiuni mai noi folosind DNF:
sudo dnf install firewalld -yPe Fedora
sudo dnf install firewalld -yPe Debian / Ubuntu
Deși Firewalld este cel mai frecvent asociat cu sistemele bazate pe RHEL, este pe deplin suportat pe distribuțiile bazate pe Debian:
sudo apt update
sudo apt install firewalld -y> Notă pentru utilizatorii Ubuntu/Debian: Dacă ufw este în prezent activ pe sistemul dumneavoastră, dezactivați-l înainte de a activa Firewalld pentru a evita conflictele:
> “`bash
> sudo ufw disable
> “`
Pasul 2: Pornirea și activarea Firewalld
După instalare, porniți serviciul Firewalld și configurați-l pentru a se lansa automat la pornirea sistemului:
sudo systemctl start firewalld
sudo systemctl enable firewalldVerificați că serviciul rulează corect:
sudo systemctl status firewalldAr trebui să vedeți o ieșire similară cu:
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled)
Active: active (running) since ...Dacă starea arată active (running), Firewalld este operațional și gata de configurat.
Pasul 3: Înțelegerea zonelor Firewalld
Modelul bazat pe zone este piatra de temelie a arhitecturii Firewalld. O zonă definește un nivel de încredere pentru o conexiune de rețea sau interfață. Fiecare zonă conține propriul set de reguli care determină ce trafic este permis sau refuzat.
Zone Firewalld încorporate
| Zonă | Nivel de încredere | Caz de utilizare tipic |
|---|---|---|
drop | Cel mai scăzut | Toate conexiunile de intrare sunt abandonate fără răspuns |
block | Foarte scăzut | Conexiunile de intrare sunt respinse cu un mesaj ICMP |
public | Scăzut | Zona implicită pentru rețele publice nesigure |
external | Scăzut | Pentru interfețe orientate spre exterior cu mascaradă NAT |
dmz | Mediu | Servere accesibile din exterior dar izolate intern |
work | Mediu-Înalt | Rețele de lucru cu încredere moderată |
home | Înalt | Rețele de acasă unde alte gazde sunt de încredere |
internal | Înalt | Rețele interne, similare cu acasă |
trusted | Cel mai înalt | Toate conexiunile sunt acceptate |
Verificați zona implicită curentă
sudo firewall-cmd --get-default-zoneListați toate zonele disponibile
sudo firewall-cmd --get-zonesVizualizați zonele active în prezent și interfețele acestora
sudo firewall-cmd --get-active-zonesExemplu de ieșire:
public
interfaces: eth0Pasul 4: Schimbarea zonei implicite
Exemplul 1 — Setarea zonei implicite la public (Recomandat pentru VPS/Servere dedicate)
Pentru majoritatea serverelor orientate spre internet, public este zona implicită corespunzătoare. Aplică un nivel de încredere conservator și permite doar traficul explicit permis:
sudo firewall-cmd --set-default-zone=publicVerificați schimbarea:
sudo firewall-cmd --get-default-zoneIeșire așteptată:
publicExemplul 2 — Setarea zonei implicite la home
Dacă serverul dumneavoastră funcționează pe o rețea privată de încredere (cum ar fi un laborator acasă sau un mediu de dezvoltare intern), zona home permite o comunicare mai permisivă între gazde de încredere:
sudo firewall-cmd --set-default-zone=homeVerificați:
sudo firewall-cmd --get-default-zoneIeșire așteptată:
homeExemplul 3 — Setarea zonei implicite la work
Pentru servere pe o rețea corporativă sau de lucru unde încrederea moderată este corespunzătoare:
sudo firewall-cmd --set-default-zone=workVerificați:
sudo firewall-cmd --get-default-zoneIeșire așteptată:
workPasul 5: Gestionarea serviciilor cu Firewalld
Firewalld include o bibliotecă de definiții de servicii predefinite care mapează numele serviciilor la porturile și protocoalele corespunzătoare. Aceasta face mult mai ușor să gestionați regulile după intenție mai degrabă decât după numere de port brute.
Listați toate serviciile predefinite
sudo firewall-cmd --get-servicesPermiteți un serviciu într-o zonă
Pentru a permite traficul HTTP (portul 80/TCP) în zona public permanent:
sudo firewall-cmd --zone=public --add-service=http --permanentPentru a permite traficul HTTPS (portul 443/TCP):
sudo firewall-cmd --zone=public --add-service=https --permanentPentru a permite SSH (portul 22/TCP) — asigurați-vă întotdeauna că aceasta este permisă înainte de a face alte modificări:
sudo firewall-cmd --zone=public --add-service=ssh --permanentAplicați modificări prin reîncărcarea Firewalld
Steagul --permanent scrie regula în configurația persistentă dar nu o aplică imediat firewall-ului în funcțiune. Reîncărcați întotdeauna după ce faceți modificări permanente:
sudo firewall-cmd --reloadVerificați serviciile într-o zonă
sudo firewall-cmd --zone=public --list-servicesExemplu de ieșire:
dhcpv6-client http https sshEliminați un serviciu dintr-o zonă
Pentru a elimina HTTPS din zona public:
sudo firewall-cmd --zone=public --remove-service=https --permanent
sudo firewall-cmd --reloadPasul 6: Gestionarea porturilor direct
În cazurile în care un serviciu nu are o definiție Firewalld predefinită, puteți deschide sau închide porturi specifice direct.
Deschideți un port specific
Pentru a deschide portul 8080 peste TCP în zona public:
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
sudo firewall-cmd --reloadPentru a deschide un port UDP (de exemplu, portul 53 pentru DNS):
sudo firewall-cmd --zone=public --add-port=53/udp --permanent
sudo firewall-cmd --reloadPentru a deschide un interval de porturi (de exemplu, 6000–6100 TCP):
sudo firewall-cmd --zone=public --add-port=6000-6100/tcp --permanent
sudo firewall-cmd --reloadÎnchideți un port specific
Pentru a închide portul 8080:
sudo firewall-cmd --zone=public --remove-port=8080/tcp --permanent
sudo firewall-cmd --reloadListați toate porturile deschise într-o zonă
sudo firewall-cmd --zone=public --list-portsPasul 7: Configurație avansată cu reguli bogate
Regulile bogate vă oferă control granular și condiționat asupra traficului — mult dincolo de ceea ce permit regulile simple de serviciu sau port. Ele suportă filtrarea după IP sursă, IP destinație, protocol, port și acțiune (accept, reject, drop, log).
Sintaxa regulii bogate
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]Exemplul 1 — Permiteți SSH doar de la o adresă IP specifică
Aceasta este una dintre cele mai importante configurații de securitate pentru orice server la distanță. Dacă gestionați serverul din adresa IP fixă, restricționați accesul SSH doar la acea IP exclusiv:
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 --reloadExemplul 2 — Blocați tot traficul de la o adresă IP specifică
Pentru a bloca complet o adresă IP care generează trafic malițios:
sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="198.51.100.25" drop' --permanent
sudo firewall-cmd --reloadExemplul 3 — Permiteți HTTP de la o subrețea specifică
Pentru a permite traficul HTTP doar de la o subrețea internă de încredere (de exemplu, 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 --reloadExemplul 4 — Limitați rata conexiunilor SSH pentru a preveni forța brută
Înregistrați și limitați încercările de conexiune SSH pentru a reduce expunerea la atacuri de forță brută:
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 --reloadExemplul 5 — Permiteți un port specific de la o IP specifică
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 --reloadListați toate regulile bogate într-o zonă
sudo firewall-cmd --zone=public --list-rich-rulesEliminați o regulă bogată
sudo firewall-cmd --zone=public --remove-rich-rule='rule family="ipv4" source address="198.51.100.25" drop' --permanent
sudo firewall-cmd --reloadPasul 8: Monitorizarea și auditarea firewall-ului
Revizuirea regulară a configurației firewall-ului este esențială pentru menținerea unei poziții de securitate puternice. Firewalld oferă mai multe comenzi pentru a inspecta starea curentă a regulilor dumneavoastră.
Vizualizați configurația completă pentru zona implicită
sudo firewall-cmd --list-allExemplu de ieșire:
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" acceptVizualizați configurația pentru toate zonele
sudo firewall-cmd --list-all-zonesVizualizați configurația pentru o zonă specifică
sudo firewall-cmd --zone=dmz --list-allVerificați dacă un serviciu specific este permis
sudo firewall-cmd --zone=public --query-service=httpVerificați dacă un port specific este deschis
sudo firewall-cmd --zone=public --query-port=8080/tcpPasul 9: Reguli de runtime vs. permanente — Înțelegerea diferenței
Firewalld funcționează cu două straturi de configurație distincte:
| Strat | Steag | Persistență | Caz de utilizare |
|---|---|---|---|
| Runtime | *(fără steag)* | Pierdut la reîncărcare/repornire | Testarea regulilor temporar |
| Permanent | --permanent | Supraviețuiește reîncărcării și repornirii | Configurații de producție |
Fluxul de lucru cu bune practici
- Testați regula la runtime mai întâi (fără
--permanent) pentru a verifica că funcționează conform așteptărilor - Adăugați regula permanent odată ce confirmată
- Reîncărcați Firewalld pentru a sincroniza configurațiile runtime și permanente
# 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 --reloadAlternativ, aplicați o regulă permanentă și reîncărcați imediat într-un singur flux de lucru:
sudo firewall-cmd --zone=public --add-service=http --permanent && sudo firewall-cmd --reloadPasul 10: Atribuirea interfețelor de rețea la zone
Dacă serverul dumneavoastră are mai multe interfețe de rețea (obișnuit pe Servere dedicate cu NIC-uri publice și private), puteți atribui fiecare interfață unei zone diferite cu niveluri de încredere diferite.
Atribuiți o interfață unei zone
sudo firewall-cmd --zone=internal --add-interface=eth1 --permanent
sudo firewall-cmd --reloadSchimbați zona unei interfețe
sudo firewall-cmd --zone=public --change-interface=eth0 --permanent
sudo firewall-cmd --reloadEliminați o interfață dintr-o zonă
sudo firewall-cmd --zone=internal --remove-interface=eth1 --permanent
sudo firewall-cmd --reloadPasul 11: Activarea mascaradei IP și redirecționării porturilor
Pentru servere care acționează ca porți sau rulează NAT (Network Address Translation), Firewalld suportă mascarada și redirecționarea porturilor în mod nativ.
Activați mascarada (NAT)
sudo firewall-cmd --zone=external --add-masquerade --permanent
sudo firewall-cmd --reloadRedirecționați un port (de exemplu, redirecționați portul extern 80 la portul intern 8080)
sudo firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080 --permanent
sudo firewall-cmd --reloadRedirecționați traficul la o gazdă diferită
sudo firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=80:toaddr=192.168.1.10 --permanent
sudo firewall-cmd --reloadConfigurații de securitate practice pentru servere AlexHost
Dacă rulați un server web, server de bază de date sau server de aplicații pe infrastructura AlexHost, iată configurațiile Firewalld de bază recomandate:
Configurație de bază pentru server web
# 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> Pro Tip: Asociați configurația firewall-ului cu un certificat SSL valid pentru a asigura că tot traficul web este criptat de la capăt la capăt. AlexHost oferă certificatele SSL pentru toate mediile de găzduire.
Configurație de bază pentru server de bază de date (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 --reloadConfigurație de bază pentru server cPanel/WHM
Dacă utilizați un VPS cu cPanel, va trebui să deschideți porturile necesare cPanel și 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 --reloadDepanarea problemelor comune cu Firewalld
Problema 1: Firewalld nu pornește
Verificați conflictele cu alte instrumente firewall:
sudo systemctl status iptables
sudo systemctl stop iptables
sudo systemctl disable iptables
sudo systemctl start firewalldProblema 2: Regulile nu persistă după repornire
Asigurați-vă că ați folosit steagul --permanent și ați reîncărcat:
sudo firewall-cmd --runtime-to-permanent
sudo firewall-cmd --reloadComanda --runtime-to-permanent salvează toate regulile runtime curente în configurația permanentă.
Problema 3: Blocat din SSH
Dacă ați blocat accidental accesul SSH, va trebui
