FirewallD este o soluție completă disponibilă pentru serverele cu CentOS 7. Acest articol va explica cum se configurează firewall-ul pe un server cu CentOS 7, precum și gestionarea firewall-ului folosind instrumentul de administrare firewall-cmd
. Pentru testarea firewalld pe CentOS 7 am folosit o mașină virtuală realizată în Virtualbox și un server VPS de la chroot.ro.
Concepte de bază
Înainte de a începe călătoria în lumea firewall-ului din CentOS 7, trebuie să ne familiarizăm cu câteva concepte de bază introduse de această unealtă.
Zonele
FirewallD gestionează grupurile de reguli folosind niște entități numite zone. Zonele sunt grupuri de reguli care hotărăsc tipul traficului care va fi permis, în funcție de nivelul de încredere pe care îl avem în calculatoarele din rețelele cu care suntem conectați.
Pentru calculatoarele care își schimbă des rețeaua (cum ar fi laptopurile), această flexibilitate oferită de firewalld conferă o metodă ușoară și sigură de a schimba regulile în funcție de mediu. Putem avea reguli foarte stricte în rețele nesigure (cum ar fi rețelele Wi-Fi publice), în timp ce pe rețeaua de acasă avem alte reguli mai puțin restrictive. Pentru un server, aceste zone nu sunt foarte importante, căci foarte rar acesta își schimbă mediul în care funcționează.
Indiferent de mediul în care funcționează sistemul nostru, este bine să fim familiari cu ideea generală din spatele fiecări zone predefinte de firewalld. Zonele predefinite de firewalld sunt următoarele (ordonate de la cele mai puțin de încredere la cele mai de încredere):
- drop: cel mai de jos nivel al încrederii; toate solicitările de conectare din exterior sunt respinse fără drept de apel, fiind permise doar conectările de ieșire;
- block: similar cu cel de sus, dar, în loc de refuzul simplu al conexiunii, cererile care vin din exterior sunt respinse cu un mesaj icmp-host-prohibited sau icmp6-adm-prohibite;
- public: se referă la rețele publice, care nu sunt de încredere; nu oferă încredere altor computere, dar permite conectări din exterior de la caz la caz;
- external: rețele externe, în eventualitatea în care folosim firewall-ul ca gateway; configurează o rețea NAT masquerading, astfel încât rețeaua internă rămâne privată dar accesibilă;
- internal: cealaltă față a zonei externe, folosită pentru porțiuni interne a gateway-ului; consideră computerele ca fiind destul de încredere, fiind disponibile câteva servicii adiționale;
- dmz: folosită pentru sisteme situate în DMZ (o Zonă Demilitarizată este o arhitectură conceptuală de reţea în care serverele cu acces public sunt plasate separat pe un segment izolat de reţea; scopul DMZ este acela de a asigura că serverele accesibile publicului nu pot intra în contact cu alte segmente interne de reţea, în situaţia în care un server este compromis); sunt permise numai conexiuni sigure din exterior;
- work: zona este folosită pentru computerele care lucrează împreună într-o rețea; majoritatea computerelor de rețea prezintă încredere, fiind permise câteva servicii;
- home: numele spune tot - e vorba de rețeua de acasă, care implică încredere în aproape toate computerele, fiind acceptate mai multe servicii;
- trusted: toate computerele din rețea prezintă încredere; cele mai multe opțiuni sunt deschise, dar trebuie folosite, totuși, cu moderație.
Folosind firewall-ul, putem crea diferite reguli și să modificăm proprietățile fiecărei zone.
Regula permanentizării
În firewalld, regulile concepute pot fi permanente sau imediate. Dacă o regulă este adăugată sau modificată, firewall-ul își modifică imediat comportamentul. Dar, la următorul restart, vechile reguli revin.
Pentru a preîntâmpina revenirea vechilor reguli, putem adăuga flagul --permanent
cu ajutorul comenzii firewall-cmd
. Faptul că putem adăuga reguli nepermanente este un lucru foarte bun, căci putem testa unele reguli în mediul în care lucrăm, dar dacă nu ne convin, la reboot putem reveni la cele vechi.
Activarea firewall-ului
Înainte de a începe să facem reguli, trebuie să pornim daemon-ul. Unitatea systemd care se ocupă de firewalld este firewalld.service
. Putem porni firewall-ul pentru sesiunea curentă cu comanda:
sudo systemctl start firewalld.service
sau
sudo systemctl start firewalld
Putem verifica dacă serviciul rulează și dacă poate fi accesat rulând comanda:
sudo firewall-cmd --state
La ieșire vom avea răspunsul de mai jos, care indică faptul că firewall-ul este activat și că rulează cu configurația default:
running
În acest moment, nu vom permite serviciului să ruleze la boot - acest lucru se poate face cu flagul enable
. Vom aștepta până vom realiza și testa regulile firewall-ului.
Regulile curente ale firewall-ului
Înainte de orice modificare, trebuie să ne familiarizăm cu regulile curente oferite de firewalld.
Explorarea setărilor default
Putem vedea care din zonele menționate anterior este cea prestabilită cu comanda de mai jos:
sudo firewall-cmd --get-default-zone
Probabil răspunsul va fi cel de mai jos:
public
Deoarece nu am dat încă nicio comandă care să modifice zona default, această zonă va fi și zona activă, adică zona care controlează traficul care trece prin interfața noastră de rețea. Pentru verifricare, vom scrie următoarea comandă:
sudo firewall-cmd --get-active-zones
Și răspunsul (unde enp0s3 este interfața de rețea a serverului):
public
interfaces: enp0s3
Putem vedea care sunt regulile asociate zonei public default cu comanda de mai jos:
sudo firewall-cmd --list-all
Răspunsul:
Putem citi că interfața de rețea folosită de serverul nostru este enp0s3
, iar singurele două servicii active sunt DHCP
(care permite alocarea dinamică a IP-ului) și SSH
, care permite conectarea la server de la distanță (remote).
Explorarea zonelor alternative
Trebuie să aflăm informații și despre alte zone care pot fi folosite de firewalld. Pentru aceasta vom scrie comanda:
sudo firewall-cmd --get-zones
Răspunsul:
Putem lista regulile aferente unei anumite zone cu comanda:
sudo firewall-cmd --zone=home --list-all
Putema afla care sunt regulile pentru toate zonele folosind comanda de mai jos care trimite output-ul către pagerul less:
sudo firewall-cmd --list-all-zones | less
Stabilirea unei zone default
Se face cu comanda de mai jos (setarea se va păstra și după reboot):
sudo firewall-cmd --set-default-zone=home
Configurarea regulilor pentru aplicații
Cea mai simplă metodă de a configura firewall-ul în CentOS 7 este prin adăugarea serviciilor sau porturilor folosite de aplicațiile dorite în zona default. Pentru a vedea care sunt serviciile disponibile vom scrie comanda următoare:
sudo firewall-cmd --get-services
La care vom avea un răspuns ca cel din imaginea de mai jos:
Să presupunem că vrem să instalăm panoul de control Sentora, care are nevoie de următoarele servicii și porturi deschise:
- 20 & 21: FTP
- 25 (TCP): SMTP
- 53 (TCP & UDP): DNS
- 80 (TCP & UDP): HTTP
- 110: POP3
- 143: IMAP
- 443: HTTPS
- 3306: MySQL
Pentru a aloca porturile prestabilite pentru un anumit serviciu, vom da comanda de mai jos (flagul --permanent face ca regula să se aplice și după reboot):
sudo firewall-cmd --permanent --add-service=http
Și tot așa pentru fiecare serviciu dorit în parte. La final, cu comanda sudo firewall-cmd --list-all
vom vedea toate serviciile adăugate zonei default:
Pentru a șterge un anumit serviciu, folosim comanda:
sudo firewall-cmd --permanent --remove-service=ssh
Pentru a adăuga un alt port decât cel folosit de serviciile prestabilite (vom folosi --remove-port
pentru ștergere):
sudo firewall-cmd --permanent --add-port=5246/tcp
Pentru a adăuga un anumit serviciu unei alte zone decât cea default, vom folosi comanda:
sudo firewall-cmd --zone=public --permanent --add-service=http
La final, dacă suntem mulțumiți de regulile implementate, trebuie să restartăm daemon-ul cu comanda:
sudo firewall-cmd --reload
Pentru a face ca firewalld să se inițializeze la pornirea sistemului, trebuie obligatoriu să dăm comanda:
sudo systemctl enable firewalld
Amintiți-vă că trebuie în mod explicit să deschideți porturile în firewall pentru orice serviciu suplimentar sau aplicație adăugată ulterior.
Setările inițiale ale unui server cu CentOS 7 aici.
Setarea firewall-ului pe un server cu Ubuntu 14.04 am explicat-o în acest articol.
[…] Nu este recomandat; normal este să deschideți doar porturile necesare (comenzi utile pentru firewalld aici): […]