un firewall este o metodă de monitorizare și filtrare a traficului de rețea de intrare și ieșire. Funcționează prin definirea unui set de reguli de securitate care determină dacă să permită sau să blocheze traficul specific. Un firewall configurat corect este unul dintre cele mai importante aspecte ale securității generale a sistemului.
CentOS 8 este livrat cu un demon firewall numit firewalld. Este o soluție completă cu o interfață D-Bus care vă permite să gestionați dinamic firewall-ul sistemului.
în acest tutorial, vom vorbi despre cum să configurați și să gestionați firewall-ul pe CentOS 8. Vom explica, de asemenea, conceptele de bază FirewallD.
- cerințe preliminare #
- concepte Firewalld de bază #
- zone Firewalld #
- Firewall services #
- Firewalld Runtime and Permanent Settings #
- activarea FirewallD #
- zone Firewalld #
- schimbarea zonei țintă #
- atribuirea unei interfețe unei zone diferite #
- schimbarea zonei implicite #
- crearea de noi zone #
- Firewalld Services #
- crearea unui nou serviciu FirewallD #
- deschiderea porturilor și a IP-urilor sursă #
- deschiderea unui IP sursă #
- deschiderea unui port sursă #
- porturi de redirecționare #
- redirecționați traficul de la un port la altul pe adresa IP #
- redirecționați traficul către o altă adresă IP #
- redirecționați traficul către un alt server pe un alt port #
- concluzie #
cerințe preliminare #
pentru a configura serviciul firewall, trebuie să fiți conectat ca root sau utilizator cu privilegii sudo.
concepte Firewalld de bază #
firewalld utilizează conceptele de zone și servicii. Pe baza zonelor și serviciilor pe care le veți configura, puteți controla ce trafic este permis sau blocat către și dinspre sistem.
Firewalld poate fi configurat și gestionat folosind utilitarul de linie de comandă firewall-cmd
.
în CentOS 8, iptables este înlocuit cu nftables ca backend firewall implicit pentru demonul firewalld.
zone Firewalld #
zone sunt seturi predefinite de reguli care specifică nivelul de încredere al rețelelor la care este conectat computerul. Puteți atribui interfețe de rețea și surse unei zone.
mai jos sunt zonele furnizate de FirewallD ordonate în funcție de nivelul de încredere al zonei de la neîncredere la încredere:
- picătură: Toate conexiunile primite sunt abandonate fără nicio notificare. Sunt permise numai conexiunile de ieșire.
- block: toate conexiunile primite sunt respinse cu un mesaj
icmp-host-prohibited
pentruIPv4
șiicmp6-adm-prohibited
pentru IPv6n. sunt permise numai conexiunile de ieșire. - public: pentru utilizare în zone publice de încredere. Nu aveți încredere în alte computere din rețea, dar puteți permite conexiunile de intrare selectate.
- extern: pentru utilizarea în rețele externe cu Nat masquerading activat atunci când sistemul dvs. acționează ca un gateway sau router. Sunt permise numai conexiunile de intrare selectate.
- intern: pentru utilizarea în rețele interne atunci când sistemul dvs. acționează ca un gateway sau router. Alte sisteme din rețea sunt, în general, de încredere. Sunt permise numai conexiunile de intrare selectate.
- dmz: utilizat pentru computerele situate în zona dvs. demilitarizată care au acces limitat la restul rețelei. Sunt permise numai conexiunile de intrare selectate.
- lucru: folosit pentru mașini de lucru. Alte computere din rețea sunt, în general, de încredere. Sunt permise numai conexiunile de intrare selectate.
- acasă: folosit pentru mașini de acasă. Alte computere din rețea sunt, în general, de încredere. Sunt permise numai conexiunile de intrare selectate.
- trusted: toate conexiunile de rețea sunt acceptate. Aveți încredere în toate computerele din rețea.
Firewall services #
Firewalld services sunt reguli predefinite care se aplică într-o zonă și definesc setările necesare pentru a permite traficul de intrare pentru un anumit serviciu. Serviciile vă permit să efectuați cu ușurință mai multe sarcini într-un singur pas.
de exemplu, serviciul poate conține definiții despre deschiderea porturilor, redirecționarea traficului și multe altele.
Firewalld Runtime and Permanent Settings #
Firewalld utilizează două seturi de configurare separate, runtime și configurare permanentă.
configurația runtime este configurația de rulare reală și nu persistă la repornire. Când demonul firewalld pornește, încarcă configurația permanentă, care devine configurația runtime.
în mod implicit, atunci când efectuați modificări la configurația Firewalld utilizând utilitarul firewall-cmd
, modificările sunt aplicate configurației runtime. Pentru a face modificările permanente adăugați opțiunea --permanent
la comandă.
pentru a aplica modificările în ambele seturi de configurare, puteți utiliza una dintre următoarele două metode:
-
modificați configurația runtime și faceți-o permanentă:
sudo firewall-cmd <options>
sudo firewall-cmd --runtime-to-permanent
-
schimbați configurația permanentă și reîncărcați demonul firewalld:
sudo firewall-cmd --permanent <options>
sudo firewall-cmd --reload
activarea FirewallD #
pe CentOS 8, firewalld este instalat și activat în mod implicit. Dacă din anumite motive nu este instalat pe sistemul dvs., puteți instala și porni daemonul tastând:
sudo dnf install firewalld
sudo systemctl enable firewalld --now
puteți verifica starea serviciului firewall cu:
sudo firewall-cmd --state
dacă Paravanul de protecție este activat, comanda ar trebui să imprime running
. În caz contrar, veți vedea not running
.
zone Firewalld #
dacă nu l-ați modificat, zona implicită este setată la public
și toate interfețele de rețea sunt atribuite acestei zone.
zona implicită este cea care este utilizată pentru tot ceea ce nu este atribuit în mod explicit unei alte zone.
puteți vedea zona implicită tastând:
sudo firewall-cmd --get-default-zone
public
pentru a obține o listă cu toate zonele disponibile, tastați:
sudo firewall-cmd --get-zones
block dmz drop external home internal public trusted work
pentru a vedea zonele active și interfețele de rețea atribuite acestora:
sudo firewall-cmd --get-active-zones
ieșirea de mai jos arată că interfețele eth0
și eth1
sunt atribuite zonei public
:
public interfaces: eth0 eth1
puteți imprima setările de configurare a zonei cu:
sudo firewall-cmd --zone=public --list-all
public (active) target: default icmp-block-inversion: no interfaces: eth0 eth1 sources: services: ssh dhcpv6-client ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
din ieșirea de mai sus, putem vedea că zona publică este activă și folosește ținta implicită, care este REJECT
. Rezultatul arată, de asemenea, că zona este utilizată de interfețele eth0
și eth1
și permite traficul DHCP client și SSH.
dacă doriți să verificați configurațiile tuturor tipurilor de zone disponibile:
sudo firewall-cmd --list-all-zones
comanda imprimă o listă uriașă cu setările tuturor zonelor disponibile.
schimbarea zonei țintă #
ținta definește comportamentul implicit al zonei pentru traficul de intrare care nu este specificat. Acesta poate fi setat la una dintre următoarele opțiuni: default
, ACCEPT
, REJECT
, și DROP
.
pentru a seta ținta zonei, specificați zona cu opțiunea --zone
și ținta cu opțiunea --set-target
.
de exemplu, pentru a schimba ținta zonei public
la DROP
veți rula:
sudo firewall-cmd --zone=public --set-target=DROP
atribuirea unei interfețe unei zone diferite #
puteți crea seturi specifice de reguli pentru diferite zone și le puteți atribui interfețe diferite. Acest lucru este util mai ales atunci când mai multe interfețe pe mașină.
pentru a atribui o interfață unei zone diferite, specificați zona cu opțiunea --zone
și interfața cu opțiunea --change-interface
.
de exemplu, următoarea comandă atribuie interfața eth1
zonei work
:
sudo firewall-cmd --zone=work --change-interface=eth1
verificați modificările tastând:
sudo firewall-cmd --get-active-zones
work interfaces: eth1public interfaces: eth0
schimbarea zonei implicite #
pentru a schimba zona implicită, utilizați opțiunea --set-default-zone
urmată de numele zonei pe care doriți să o faceți implicită.
de exemplu, pentru a schimba zona implicită la home
, executați următoarea comandă:
sudo firewall-cmd --set-default-zone=home
verificați modificările cu:
sudo firewall-cmd --get-default-zone
home
crearea de noi zone #
Firewalld vă permite, de asemenea, să vă creați propriile zone. Acest lucru este util atunci când doriți să creați reguli per aplicație.
în exemplul următor vom crea o nouă zonă numită memcached
, vom deschide portul 11211
și vom permite accesul numai de la adresa IP 192.168.100.30
:
-
creați zona:
sudo firewall-cmd --new-zone=memcached --permanent
-
adăugați Regulile în zonă:
sudo firewall-cmd --zone=memcached --add-port=11211/udp --permanent
sudo firewall-cmd --zone=memcached --add-port=11211/tcp --permanent
sudo firewall-cmd --zone=memcached --add-source=192.168.100.30/32 --permanent
-
Reîncărcați demonul firewalld pentru a activa modificările:
sudo firewall-cmd --reload
Firewalld Services #
cu firewalld puteți permite traficul pentru anumite porturi și/sau surse bazate pe reguli predefinite numite servicii.
pentru a obține o listă cu toate tipurile de servicii disponibile implicit:
sudo firewall-cmd --get-services
puteți găsi mai multe informații despre fiecare serviciu prin deschiderea asociate .fișier xml în directorul /usr/lib/firewalld/services
. De exemplu, serviciul HTTP este definit astfel:
<?xml version="1.0" encoding="utf-8"?><service> <short>WWW (HTTP)</short> <description>HTTP is the protocol used to serve Web pages. If you plan to make your Web server publicly available, enable this option. This option is not required for viewing pages locally or developing Web pages.</description> <port protocol="tcp" port="80"/></service>
pentru a permite traficul HTTP de intrare (portul 80) pentru interfețele din zona publică, numai pentru tipul de sesiune curentă (configurare runtime:
sudo firewall-cmd --zone=public --add-service=http
--zone
.pentru a verifica dacă serviciul a fost adăugat cu succes, utilizați opțiunea --list-services
:
sudo firewall-cmd --zone=public --list-services
ssh dhcpv6-client http
pentru a menține portul 80 deschis după repornire, executați din nou aceeași comandă cu opțiunea --permanent
sau executați:
sudo firewall-cmd --runtime-to-permanent
utilizați opțiunea --list-services
împreună cu opțiunea --permanent
pentru a verifica modificările:
sudo firewall-cmd --permanent --zone=public --list-services
ssh dhcpv6-client http
sintaxa pentru eliminarea serviciului este aceeași ca la adăugarea unuia. Doar folosi --remove-service
în loc de --add-service
Pavilion:
sudo firewall-cmd --zone=public --remove-service=http --permanent
comanda de mai sus elimină serviciul http
din configurația permanentă a zonei publice.
crearea unui nou serviciu FirewallD #
după cum am menționat deja, serviciile implicite sunt stocate în directorul /usr/lib/firewalld/services
. Cel mai simplu mod de a crea un nou serviciu este să copiați un fișier de serviciu existent în directorul /etc/firewalld/services
, care este locația pentru serviciile create de utilizator și să modificați setările fișierului.
de exemplu, pentru a crea o definiție de serviciu pentru Plex Media Server, puteți utiliza fișierul de serviciu SSH:
sudo cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/plexmediaserver.xml
deschideți fișierul plexmediaserver.xml
nou creat și schimbați numele scurt și descrierea serviciului în etichetele <short>
și <description>
. Cea mai importantă etichetă pe care trebuie să o modificați este eticheta port
, care definește numărul portului și protocolul pe care doriți să îl deschideți.
în exemplul următor, deschidem porturile 1900
UDP și 32400
TCP.
<?xml version="1.0" encoding="utf-8"?><service version="1.0"><short>plexmediaserver</short><description>Plex is a streaming media server that brings all your video, music and photo collections together and stream them to your devices at anytime and from anywhere.</description><port protocol="udp" port="1900"/><port protocol="tcp" port="32400"/></service>
salvați fișierul și reîncărcați serviciul FirewallD:
sudo firewall-cmd --reload
acum Puteți utiliza serviciul plexmediaserver
în zonele dvs. la fel ca orice alt serviciu.
deschiderea porturilor și a IP-urilor sursă #
Firewalld vă permite, de asemenea, să activați rapid tot traficul de la o adresă IP de încredere sau de pe un anumit port fără a crea o definiție a serviciului.
deschiderea unui IP sursă #
pentru a permite tot traficul de intrare de la o anumită adresă IP (sau interval), specificați zona cu opțiunea --zone
și IP-ul sursă cu opțiunea --add-source
.
de exemplu, pentru a permite tot traficul de intrare din 192.168.1.10 în zona public
, executați:
sudo firewall-cmd --zone=public --add-source=192.168.1.10
faceți ca noua regulă să fie persistentă:
sudo firewall-cmd --runtime-to-permanent
verificați modificările utilizând următoarea comandă:
sudo firewall-cmd --zone=public --list-sources
192.168.1.10
sintaxa pentru eliminarea unui IP sursă este aceeași ca la adăugarea unuia. Doar folosi --remove-source
în loc de --add-source
opțiune:
sudo firewall-cmd --zone=public --remove-source=192.168.1.10
deschiderea unui port sursă #
pentru a permite tot traficul de intrare pe un anumit port, specificați zona cu opțiunea --zone
și portul și protocolul cu opțiunea --add-port
.
de exemplu, pentru a deschide portul 8080
în zona publică pentru sesiunea curentă, executați rana:
sudo firewall-cmd --zone=public --add-port=8080/tcp
protocolul poate fi fie tcp
, udp
, sctp
, sau dccp
.
verificați modificările:
sudo firewall-cmd --zone=public --list-ports
8080
pentru a menține portul deschis după repornire, adăugați regula la setările permanente executând aceeași comandă folosind steagul --permanent
sau executând:
sudo firewall-cmd --runtime-to-permanent
sintaxa pentru eliminarea unui port este aceeași ca la adăugarea unui port. Utilizați doar --remove-port
în loc de opțiunea --add-port
.
sudo firewall-cmd --zone=public --remove-port=8080/tcp
porturi de redirecționare #
pentru a redirecționa traficul de la un port la altul, activați mai întâi mascarea zonei dorite utilizând opțiunea --add-masquerade
. De exemplu, pentru a activa Mascarea pentru zona external
, tastați:
sudo firewall-cmd --zone=external --add-masquerade
redirecționați traficul de la un port la altul pe adresa IP #
în exemplul următor redirecționăm traficul de la portul 80
la portul 8080
pe același server:
sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toport=8080
redirecționați traficul către o altă adresă IP #
în exemplul următor redirecționăm traficul de la portul 80
la portul 80
pe un server cu IP 10.10.10.2
:
sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toaddr=10.10.10.2
redirecționați traficul către un alt server pe un alt port #
în exemplul următor redirecționăm traficul de la portul 80
la portul 8080
pe un server cu IP 10.10.10.2
:
sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=10.10.10.2
pentru a face regula înainte persistentă, utilizați:
sudo firewall-cmd --runtime-to-permanent
concluzie #
ați învățat cum să configurați și să gestionați serviciul firewalld pe sistemul dvs. CentOS 8.
asigurați-vă că permiteți toate conexiunile de intrare care sunt necesare pentru buna funcționare a sistemului dvs., limitând în același timp toate conexiunile inutile.