15%

Economisește 15% la toate serviciile de găzduire

Testează-ți abilitățile și obține Reducere la orice plan de găzduire

Utilizați codul:

Skills
Începeți
01.11.2024

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 sudo la 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 -y

Sau, pe versiuni mai noi folosind DNF:

sudo dnf install firewalld -y

Pe Fedora

sudo dnf install firewalld -y

Pe 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 firewalld

Verificați că serviciul rulează corect:

sudo systemctl status firewalld

Ar 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 încredereCaz de utilizare tipic
dropCel mai scăzutToate conexiunile de intrare sunt abandonate fără răspuns
blockFoarte scăzutConexiunile de intrare sunt respinse cu un mesaj ICMP
publicScăzutZona implicită pentru rețele publice nesigure
externalScăzutPentru interfețe orientate spre exterior cu mascaradă NAT
dmzMediuServere accesibile din exterior dar izolate intern
workMediu-ÎnaltRețele de lucru cu încredere moderată
homeÎnaltRețele de acasă unde alte gazde sunt de încredere
internalÎnaltRețele interne, similare cu acasă
trustedCel mai înaltToate conexiunile sunt acceptate

Verificați zona implicită curentă

sudo firewall-cmd --get-default-zone

Listați toate zonele disponibile

sudo firewall-cmd --get-zones

Vizualizați zonele active în prezent și interfețele acestora

sudo firewall-cmd --get-active-zones

Exemplu de ieșire:

public
  interfaces: eth0

Pasul 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=public

Verificați schimbarea:

sudo firewall-cmd --get-default-zone

Ieșire așteptată:

public

Exemplul 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=home

Verificați:

sudo firewall-cmd --get-default-zone

Ieșire așteptată:

home

Exemplul 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=work

Verificați:

sudo firewall-cmd --get-default-zone

Ieșire așteptată:

work

Pasul 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-services

Permiteț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 --permanent

Pentru a permite traficul HTTPS (portul 443/TCP):

sudo firewall-cmd --zone=public --add-service=https --permanent

Pentru 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 --permanent

Aplicaț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 --reload

Verificați serviciile într-o zonă

sudo firewall-cmd --zone=public --list-services

Exemplu de ieșire:

dhcpv6-client http https ssh

Eliminaț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 --reload

Pasul 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 --reload

Pentru a deschide un port UDP (de exemplu, portul 53 pentru DNS):

sudo firewall-cmd --zone=public --add-port=53/udp --permanent
sudo firewall-cmd --reload

Pentru 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 --reload

Listați toate porturile deschise într-o zonă

sudo firewall-cmd --zone=public --list-ports

Pasul 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 --reload

Exemplul 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 --reload

Exemplul 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 --reload

Exemplul 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 --reload

Exemplul 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 --reload

Listați toate regulile bogate într-o zonă

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

Eliminaț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 --reload

Pasul 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-all

Exemplu 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" accept

Vizualizați configurația pentru toate zonele

sudo firewall-cmd --list-all-zones

Vizualizați configurația pentru o zonă specifică

sudo firewall-cmd --zone=dmz --list-all

Verificați dacă un serviciu specific este permis

sudo firewall-cmd --zone=public --query-service=http

Verificați dacă un port specific este deschis

sudo firewall-cmd --zone=public --query-port=8080/tcp

Pasul 9: Reguli de runtime vs. permanente — Înțelegerea diferenței

Firewalld funcționează cu două straturi de configurație distincte:

StratSteagPersistențăCaz de utilizare
Runtime*(fără steag)*Pierdut la reîncărcare/repornireTestarea regulilor temporar
Permanent--permanentSupraviețuiește reîncărcării și reporniriiConfigurații de producție

Fluxul de lucru cu bune practici

  1. Testați regula la runtime mai întâi (fără --permanent) pentru a verifica că funcționează conform așteptărilor
  2. Adăugați regula permanent odată ce confirmată
  3. 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 --reload

Alternativ, 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 --reload

Pasul 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 --reload

Schimbați zona unei interfețe

sudo firewall-cmd --zone=public --change-interface=eth0 --permanent
sudo firewall-cmd --reload

Eliminați o interfață dintr-o zonă

sudo firewall-cmd --zone=internal --remove-interface=eth1 --permanent
sudo firewall-cmd --reload

Pasul 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 --reload

Redirecț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 --reload

Redirecț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 --reload

Configuraț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 --reload

Configuraț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 --reload

Depanarea 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 firewalld

Problema 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 --reload

Comanda --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

15%

Economisește 15% la toate serviciile de găzduire

Testează-ți abilitățile și obține Reducere la orice plan de găzduire

Utilizați codul:

Skills
Începeți