Cum se instalează, se configurează și se utilizează Firewalld în CentOS și Ubuntu


Firewalld (daemon firewall) este o alternativă la serviciul iptables, pentru gestionarea dinamică a firewall-ului unui sistem cu suport pentru zone de rețea (sau firewall) și oferă o interfață D-Bus pentru gestionarea configurațiilor. Este ușor de utilizat și configurat, iar acum este instrumentul implicit de gestionare a paravanului de protecție pe RHEL/CentOS, Fedora și alte câteva distribuții Linux.

În acest articol, vom discuta despre cum să configurați firewall-ul de sistem cu firewalld și să implementăm filtrarea de bază a pachetelor în CentOS/RHEL 7 și Ubuntu.

Elementele de bază despre Firewalld

Firewalld cuprinde trei straturi, care sunt:

  • stratul central: responsabil pentru gestionarea configurației și a componentelor din spate (enumerate mai jos).
  • Interfață D-Bus: mijlocul principal de modificare și creare a configurației paravanului de protecție.
  • backend-uri: pentru interacțiunea cu netfilter (modulul kernel-ului nativ folosit pentru firewall). Acestea includ iptables, ip6tables, ebtables, ipset, nft, linnftables; manager de rețea; și module.

Gestionează regulile firewall prin implementarea zonelor de rețea/firewall care definesc nivelul de încredere al conexiunilor de rețea sau al interfețelor. Alte caracteristici de firewall acceptate includ servicii, configurație directă (folosită pentru a transmite direct sintaxa iptables brute), IPSets, precum și tipuri ICMP.

Două tipuri de medii de configurare sunt acceptate de firewalld:

  • Configurație de rulare care este eficientă numai până când mașina a fost repornită sau a fost repornit serviciul firewalld
  • configurație permanentă care este salvată și funcționează constant.

Instrumentul de linie de comandă firewall-cmd este folosit pentru a gestiona timpul de rulare și configurația permanentă. Alternativ, puteți utiliza instrumentul de configurare a interfeței grafice de utilizator (GUI) firewall-config pentru a interacționa cu demonul.

În plus, firewalld oferă o interfață bine definită pentru ca alte servicii sau aplicații locale să solicite modificări direct la regulile paravanului de protecție, dacă acestea rulează cu privilegii root.

Fișierul de configurare globală pentru firewalld se află la /etc/firewalld/firewalld.conf, iar caracteristicile paravanului de protecție sunt configurate în format XML.

Înțelegerea caracteristicilor importante pentru firewalld

Caracteristica centrală a firewalld sunt zonele de rețea/firewall. Orice altă caracteristică este delimitată de o zonă. O zonă de firewall descrie nivelul de încredere pentru o legătură, interfață sau adresa sursă.

Configurația implicită vine cu un număr de zone predefinite sortate în funcție de nivelul de încredere implicit al zonelor de la neîncredere la de încredere: drop, block, public, external, dmz, work, home, intern și trusted. Acestea sunt definite în fișierele stocate în directorul /usr/lib/firewalld/zones.

Puteți să configurați sau să adăugați zonele dvs. personalizate utilizând clientul CLI sau pur și simplu să creați sau să copiați un fișier de zonă în /etc/firewalld/zones din fișierele existente și să îl editați.

Un alt concept important sub firewalld este serviciile. Un serviciu este definit folosind porturi și protocoale; aceste definiții reprezintă un anumit serviciu de rețea, cum ar fi un server web sau un serviciu de acces la distanță. Serviciile sunt definite în fișierele stocate în directorul /usr/lib/firewalld/services/ sau /etc/firewalld/services/.

Dacă cunoașteți conceptele de bază iptables/ip6tables/ebtables, puteți utiliza și interfața directă (sau configurația) pentru a obține acces direct la firewall. Dar, pentru cei fără cunoștințe de iptables, puteți folosi limbajul bogat pentru a crea reguli de firewall mai complexe pentru IPv4 și IPv6.

Cum se instalează pachetul Firewalld în Linux

Pe CentOS 7, pachetul firewalld vine preinstalat și puteți verifica folosind următoarea comandă.

$ rpm -qa firewalld

Pe Ubuntu 16.04 și 18.04, îl puteți instala folosind managerul de pachete implicit, așa cum se arată.

$ sudo apt install firewalld

Cum să gestionați serviciul Firewalld în Linux

Firewalld este un serviciu systemd obișnuit care poate fi gestionat prin comanda systemctl.

 
$ sudo systemctl start firewalld	#start the service for the mean time
$ sudo systemctl enable firewalld	#enable the service to auto-start at boot time
$ sudo systemctl status firewalld	#view service status

După pornirea serviciului firewalld, puteți verifica și dacă daemonul rulează sau nu, folosind instrumentul firewall-cmd (în cazul în care nu este activ, această comandă va scoate\nu alearga).

$ sudo firewall-cmd --state

Dacă se întâmplă să salvați orice modificări permanent, puteți reîncărca firewalld. Acest lucru va reîncărca regulile firewall și va păstra informațiile de stat. Configurația permanentă actuală va deveni o nouă configurație de rulare.

$ sudo firewall-cmd --reload

Cum să lucrați cu zonele de firewall în Firewalld

Pentru a obține o listă cu toate zonele și serviciile de firewall disponibile, rulați aceste comenzi.

$ sudo firewall-cmd --get-zones
$ sudo firewall-cmd --get-services

Zona implicită este zona care este utilizată pentru fiecare caracteristică de firewall care nu este limitată în mod explicit la o altă zonă. Puteți obține zona implicită setată pentru conexiunile de rețea și interfețele rulând.

$ sudo firewall-cmd --get-default-zone

Pentru a seta zona implicită, de exemplu la externă, utilizați următoarea comandă. Rețineți că adăugarea opțiunii --permanent setează configurația permanent (sau permite interogarea informațiilor din mediul de configurare permanent).

$ sudo firewall-cmd --set-default-zone=external
OR
$ sudo firewall-cmd --set-default-zone=external --permanent
$ sudo firewall-cmd --reload 

În continuare, să vedem cum să adăugați o interfață la o zonă. Acest exemplu arată cum să adăugați adaptorul de rețea fără fir (wlp1s0) la zona de domiciliu, care este utilizat în zonele de domiciliu.

$ sudo firewall-cmd --zone=home --add-interface=wlp1s0

O interfață poate fi adăugată doar într-o singură zonă. Pentru a o muta într-o altă zonă, utilizați comutatorul --change-interface după cum se arată sau eliminați-l din zona anterioară folosind comutatorul –remove-interface, apoi adăugați-l spre noua zonă.

Presupunând că doriți să vă conectați la o rețea WI-FI publică, ar trebui să mutați interfața wireless înapoi în zona publică, astfel:

$ sudo firewall-cmd --zone=public --add-interface=wlp1s0
$ sudo firewall-cmd --zone=public --change-interface=wlp1s0

Puteți utiliza mai multe zone în același timp. Pentru a obține o listă a tuturor zonelor active cu funcțiile activate, cum ar fi interfețe, servicii, porturi, protocoale, rulați:

$ sudo firewall-cmd --get-active-zones

În legătură cu punctul anterior, dacă doriți să găsiți mai multe informații despre o anumită zonă, adică tot ce este adăugat sau activat în ea, utilizați una dintre aceste comenzi:

$ sudo firewall-cmd --zone=home --list-all
OR
$ sudo firewall-cmd --info-zone public

O altă opțiune utilă este --get-target, care vă arată ținta unei zone permanente. O țintă este una dintre: implicit, ACCEPT, DROP, REJECT. Puteți verifica ținta diferitelor zone:

$ sudo firewall-cmd --permanent --zone=public --get-target  
$ sudo firewall-cmd --permanent --zone=block --get-target  
$ sudo firewall-cmd --permanent --zone=dmz --get-target  
$ sudo firewall-cmd --permanent --zone=external --get-target
$ sudo firewall-cmd --permanent --zone=drop --get-target

Cum să deschideți și să blocați porturile în Firewalld

Pentru a deschide un port (sau o combinație port/protocol) în firewall, pur și simplu adăugați-l într-o zonă cu opțiunea --add-port. Dacă nu specificați în mod explicit zona, aceasta va fi activată în zona implicită.

Următorul exemplu arată cum să adăugați porturile 80 și 443 pentru a permite traficul web de intrare prin HTTP și HTTPS > protocoale, respectiv:

$ sudo firewall-cmd --zone=public --permanent --add-port=80/tcp --add-port=443/tcp

Apoi, reîncărcați firewalld și verificați încă o dată funcțiile activate în zona publică, ar trebui să puteți vedea porturile tocmai adăugate.

$ sudo firewall-cmd --reload
$ sudo firewall-cmd --info-zone public

Blocarea sau închiderea unui port în firewall este la fel de ușoară, pur și simplu eliminați-l dintr-o zonă cu opțiunea --remove-port. De exemplu, pentru a închide porturile 80 și 443 din zona publică.

$ sudo firewall-cmd --zone=public --permanent --remove-port=80/tcp --remove-port=443/tcp

În loc să utilizați combinația de port sau port/protocol, puteți utiliza numele serviciului căruia îi este alocat un port, așa cum este explicat în secțiunea următoare.

Cum să deschideți și să blocați serviciile în Firewalld

Pentru a deschide un serviciu în firewall, activați-l utilizând opțiunea --add-service. Dacă zona este omisă, va fi utilizată zona implicită.

Următoarea comandă va activa permanent serviciul http în zona publică.

$ sudo firewall-cmd --zone=public --permanent --add-service=http 
$ sudo firewall-cmd --reload 

Opțiunea --remove-service poate fi folosită pentru a dezactiva un serviciu.

$ sudo firewall-cmd --zone=public --permanent --remove-service=http 
$ sudo firewall-cmd --reload 

Cum să activați și să dezactivați IP Masquerading folosind Firewalld

IP Masquerading (cunoscut și ca IPMASQ sau MASQ) este un NAT (Network Address Translation) mecanism în rețelele Linux care permite gazdelor dvs. dintr-o rețea, cu adrese IP private, să comunice cu Internetul folosind adresa IP publică atribuită serverului dumneavoastră Linux (gateway IPMASQ).

Este o mapare unu-la-mulți. Traficul de la gazdele tale invizibile va apărea altor computere de pe internet ca și cum ar proveni de la serverul tău Linux.

Puteți activa mascarea IP într-o zonă dorită, de exemplu în zona publică. Dar înainte de a face asta, mai întâi verificați dacă masquerading-ul este activ sau nu (un \„nu” înseamnă că este dezactivat, iar un \„da” înseamnă altfel).

$ sudo firewall-cmd --zone=public --query-masquerade
$ sudo firewall-cmd --zone=public --add-masquerade

Un caz de utilizare tipic pentru masquerading este efectuarea de redirecționare a portului. Presupunând că doriți să faceți SSH de la o mașină la distanță la o gazdă din rețeaua internă cu IP-ul 10.20.1.3, pe care demonul sshd ascultă pe portul 5000.

Puteți redirecționa toate conexiunile către portul 22 de pe serverul dvs. Linux către portul dorit de pe gazda dvs. țintă emitând:

$ sudo firewall-cmd --zone=public --add-forward-port=port=22=proto=tcp:toport=5000:toaddr=10.20.1.3

Pentru a dezactiva mascarea într-o zonă, utilizați comutatorul --remove-masquerade.

$ sudo firewall-cmd --zone=public --remove-masquerade

Cum să activați și să dezactivați mesajul IMCP în Firewalld

Mesajele ICMP (Internet Control Message Protocol) sunt fie solicitări de informații, fie răspunsuri la solicitări de informații sau în condiții de eroare.

Puteți activa sau dezactiva mesajele ICMP în firewall, dar înainte de aceea, listați toate tipurile ICMP acceptate.

$ sudo firewall-cmd --get-icmptypes

Pentru a adăuga sau elimina un tip de bloc dorit.

$ sudo firewall-cmd --zone=home --add-icmp-block=echo-reply
OR
$ sudo firewall-cmd --zone=home --remove-icmp-block=echo-reply

Puteți vizualiza toate tipurile de icmp adăugate într-o zonă folosind comutatorul --list-icmp-blocks.

$ sudo firewall-cmd --zone=home --list-icmp-blocks

Cum să utilizați interfața directă pentru a trece comenzile brute iptables

Firewall-cmd oferă, de asemenea, opțiuni directe (--direct) pentru a obține acces mai direct la firewall. Acest lucru este util pentru cei cu cunoștințe de bază despre iptables.

Important: ar trebui să utilizați opțiunile directe numai ca ultimă soluție atunci când nu este posibil să utilizați opțiunile obișnuite de firewall-cmd explicate de mai sus.

Iată un exemplu despre cum să treceți regula iptables brută, folosind comutatorul --add-rules. Puteți elimina cu ușurință aceste reguli înlocuind --add-rule cu --remove-rule:

$ sudo firewall-cmd --direct --add-rule ipv4 filter IN_public_allow 0 -m tcp -p tcp --dport 80 -j ACCEPT

Pentru mai multe informații despre iptables, consultați acest ghid: Cum se configurează un firewall Iptables pentru a activa accesul de la distanță la servicii în Linux.

Dacă nu sunteți familiarizat cu sintaxa iptables, puteți opta pentru „limbajul bogat” al lui firewalld pentru a crea reguli de firewall mai complexe într-un mod ușor de înțeles, așa cum este explicat în continuare.

Cum să utilizați limbajul bogat în Firewalld

Limbajul bogat (cunoscut și ca reguli bogate) este folosit pentru a adăuga reguli de firewall mai complexe pentru IPv4 și IPv6 fără cunoașterea sintaxei iptables.

Extinde caracteristicile zonei (serviciu, port, icmp-block, masquerade și forward-port) pe care le-am acoperit. Acceptă adresele sursă și destinație, înregistrarea în jurnal, acțiunile și limitele pentru jurnalele și acțiunile.

--add-rich-rule este folosit pentru a adăuga reguli bogate. Acest exemplu arată cum să permiteți noile conexiuni IPv4 și IPv6 pentru serviciul http și să înregistrați 1 pe minut utilizând auditul:

$ sudo firewall-cmd --add-rich-rule='rule service name="http" audit limit value="1/m" accept'

Pentru a elimina regula adăugată, înlocuiți opțiunea --add-rich-rule cu --remove-rich-rule.

$ sudo firewall-cmd --remove-rich-rule='rule service name="http" audit limit value="1/m" accept'

Această caracteristică permite, de asemenea, blocarea sau permiterea traficului de la o anumită adresă IP. Următorul exemplu arată cum să respingeți conexiunile de la IP-ul 10.20.1.20.

$ sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.0.254" reject'

Cum să activați și să dezactivați modul de panică în Firewalld

Modul de panică este un mod special sub firewalld în care toate pachetele de intrare și de ieșire sunt eliminate, iar conexiunile active vor expira odată activate.

Pentru a interoga modul de panică, utilizați opțiunea --query-panic.

$ sudo firewall-cmd --query-panic

Pentru a activa modul de panică, utilizați opțiunea --panic-on. Puteți testa dacă funcționează folosind comanda ping așa cum se arată. Deoarece pachetul este aruncat, numele www.google.com nu poate fi rezolvat, prin urmare eroarea afișată.

$ sudo firewall-cmd --panic-on
$ ping -c 2 www.google.com

Pentru a dezactiva modul de panică, utilizați opțiunea --panic-off.

$ sudo firewall-cmd --panic-off

Cum să blocați firewalld

Amintiți-vă, am menționat la elementele de bază despre firewalld că aplicațiile sau serviciile locale pot modifica configurația firewall-ului dacă rulează cu privilegii root. Puteți controla ce aplicații pot solicita modificări de firewall, specificând apoi într-o listă albă de blocare.

Această funcție este dezactivată în mod implicit, o puteți activa sau dezactiva cu comutatorul --lockdown-on sau --lockdown receptiv.

$ sudo firewall-cmd --lockdown-on
OR
$ sudo firewall-cmd --lockdown-off

Rețineți că este recomandat să activați sau să dezactivați această funcție prin editarea fișierului de configurare principal, deoarece firewall-cmd poate să nu existe în lista albă de blocare când activați blocarea.

$ sudo vim /etc/firewalld/firewalld.conf

Găsiți parametrul Lockdown și schimbați-i valoarea de la no (înseamnă dezactivat) la da (înseamnă activat).

Lockdown=yes

Pentru a face această setare permanentă, reîncărcați firewalld.

$ sudo firewall-cmd --reload
rezumat

Firewalld este un înlocuitor ușor de utilizat pentru serviciul iptables, care folosește iptables ca backend. În acest articol, am arătat cum să instalați pachetul firewalld, am explicat caracteristicile importante ale firewalld și am discutat cum să le configurați în mediile de rulare și de configurare permanentă.

Dacă aveți întrebări sau comentarii, nu ezitați să ne contactați prin formularul de comentarii de mai jos. Puteți consulta pagina de manual firewalld (man firewalld) sau documentația firewalld de pe site-ul web al proiectului, pentru mai multe informații.