Kako namestiti, konfigurirati in uporabljati Firewalld v CentOS in Ubuntu


Firewalld (demon požarnega zidu) je alternativa storitvi iptables za dinamično upravljanje požarnega zidu sistema s podporo za omrežna (ali požarna zidna) območja in ponuja vmesnik D-Bus za upravljanje konfiguracij. Je enostaven za uporabo in konfiguriranje, zdaj pa je privzeto orodje za upravljanje požarnega zidu v RHEL/CentOS, Fedora in številnih drugih distribucijah Linuxa.

V tem članku bomo razpravljali o tem, kako konfigurirati požarni zid sistema z firewalldom in implementirati osnovno filtriranje paketov v CentOS/RHEL 7 in Ubuntu.

Osnove o Firewalldu

Firewalld je sestavljen iz treh plasti, in sicer:

  • jedrna plast: odgovorna za upravljanje konfiguracije in hrbtnih strani (spodaj naštetih).
  • Vmesnik D-Bus: primarno sredstvo za spreminjanje in ustvarjanje konfiguracije požarnega zidu.
  • backends: za interakcijo z netfilterjem (izvorni modul jedra, ki se uporablja za požarno zid). Vključujejo iptables, ip6tables, ebtables, ipset, nft, linnftables; upravljavec omrežja; in moduli.

Upravlja pravila požarnega zidu z implementacijo omrežij/požarnih zidov, ki določajo stopnjo zaupanja omrežnih povezav ali vmesnikov. Druge podprte funkcije požarnega zidu vključujejo storitve, neposredno konfiguracijo (uporabljajo se za neposredno posredovanje surove sintakse iptables), IPSet in vrste ICMP.

Firewalld podpira dve vrsti konfiguracijskih okolij:

  • konfiguracija časa izvajanja, ki je učinkovita le, dokler se stroj znova ne zažene ali storitev firewalld ne zažene
  • trajna konfiguracija, ki je shranjena in vztrajno deluje.

Orodje ukazne vrstice požarnega zidu-cmd se uporablja za upravljanje časa izvajanja in trajne konfiguracije. Druga možnost je, da za interakcijo z daemonom uporabite orodje za konfiguracijo grafičnega uporabniškega vmesnika (GUI) požarnega zidu.

Poleg tega firewalld ponuja dobro definiran vmesnik za druge lokalne storitve ali aplikacije, ki zahtevajo neposredno spremembe pravil požarnega zidu, če delujejo s korenskimi pravicami.

Globalna konfiguracijska datoteka za firewalld se nahaja na /etc/firewalld/firewalld.conf in funkcije požarnega zidu so konfigurirane v obliki XML.

Razumevanje pomembnih funkcij Firewalld

Osrednja značilnost firewalld -a so območja omrežja/požarnega zidu. Vsaka druga funkcija je omejena na območje. Območje požarnega zidu opisuje raven zaupanja za povezavo, vmesnik ali izvorni naslov.

Privzeta konfiguracija vsebuje številne vnaprej določene cone, razvrščene glede na privzeto raven zaupanja območij od nezaupanja vrednih do zaupanja vrednih: drop, block, public, external, dmz, work, home, internal in zaupanja vredno. Določeni so v datotekah, shranjenih v imeniku/usr/lib/firewalld /zone.

Z odjemalcem CLI lahko konfigurirate ali dodate svoja območja po meri ali pa preprosto ustvarite ali kopirate datoteko območja v/etc/firewalld/območja iz obstoječih datotek in jo uredite.

Drug pomemben koncept pri firewalldu so storitve. Storitev je definirana z uporabo vrat in protokolov; te definicije predstavljajo dano omrežno storitev, na primer spletni strežnik ali storitev oddaljenega dostopa. Storitve so opredeljene v datotekah, shranjenih v imeniku/usr/lib/firewalld/services/ali/etc/firewalld/services/.

Če poznate osnovne koncepte iptables/ip6tables/ebtables, lahko za neposreden dostop do požarnega zidu uporabite tudi neposreden vmesnik (ali konfiguracijo). Toda za tiste, ki nimajo znanja o iptables, lahko uporabite bogat jezik za ustvarjanje bolj zapletenih pravil požarnega zidu za IPv4 in IPv6.

Kako namestiti Firewalld paket v Linux

Na CentOS 7 je paket firewalld vnaprej nameščen in ga lahko preverite z naslednjim ukazom.

$ rpm -qa firewalld

V Ubuntu 16.04 in 18.04 ga lahko namestite s privzetim upraviteljem paketov, kot je prikazano.

$ sudo apt install firewalld

Kako upravljati Firewalld storitev v Linuxu

Firewalld je redna storitev systemd, ki jo je mogoče upravljati z ukazom 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

Po zagonu storitve firewalld lahko z orodjem požarnega zidu-cmd preverite, ali se demon izvaja ali ne (v primeru, da ni aktiven, bo ta ukaz izpisal\"ne deluje").

$ sudo firewall-cmd --state

Če boste spremembe shranili trajno, lahko znova naložite firewalld. To bo znova naložilo pravila požarnega zidu in ohranilo podatke o stanju. Trenutna trajna konfiguracija bo postala nova konfiguracija časa izvajanja.

$ sudo firewall-cmd --reload

Kako delati z območji požarnega zidu v Firewalldu

Če želite dobiti seznam vseh razpoložljivih območij in storitev požarnega zidu, zaženite te ukaze.

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

Privzeto območje je območje, ki se uporablja za vsako funkcijo požarnega zidu, ki ni izrecno omejena na drugo območje. Z zagonom lahko dobite privzeto območje za omrežne povezave in vmesnike.

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

Če želite nastaviti privzeto območje, na primer zunanje, uporabite naslednji ukaz. Upoštevajte, da dodajanje možnosti --permanent trajno nastavi konfiguracijo (ali omogoči poizvedovanje po informacijah iz stalnega konfiguracijskega okolja).

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

Nato poglejmo, kako vmesniku dodati cono. Ta primer prikazuje, kako dodati brezžični omrežni vmesnik (wlp1s0) v območje doma, ki se uporablja na domačih območjih.

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

Vmesnik je mogoče dodati samo enemu območju. Če ga želite premakniti v drugo območje, uporabite stikalo --change-interface , kot je prikazano, ali pa ga odstranite iz prejšnjega območja s stikalom –remove-interface, nato pa ga dodajte v novo območje.

Ob predpostavki, da se želite povezati z javnim omrežjem WI-FI, bi morali brezžični vmesnik premakniti nazaj v javno območje, na primer:

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

Uporabite lahko več območij hkrati. Če želite dobiti seznam vseh aktivnih con z omogočenimi funkcijami, kot so vmesniki, storitve, vrata, protokoli, zaženite:

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

V zvezi s prejšnjo točko: Če želite poiskati več informacij o določeni coni, torej o vsem, kar je v njej dodano ali omogočeno, uporabite enega od teh ukazov:

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

Druga uporabna možnost je --get-target , ki prikazuje cilj stalnega območja. Cilj je eden od: default, ACCEPT, DROP, REJECT. Lahko preverite cilj različnih območij:

$ 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

Kako odpreti in blokirati vrata v Firewalldu

Če želite odpreti vrata (ali kombinacijo vrat/protokola) v požarnem zidu, jih preprosto dodajte v cono z možnostjo --add-port . Če območja ne določite izrecno, bo omogočeno v privzetem območju.

Naslednji primer prikazuje, kako dodati vrata 80 in 443, da omogočite vezani spletni promet prek protokolov HTTP oziroma HTTPS:

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

Nato znova naložite firewalld in še enkrat preverite omogočene funkcije v javnem območju, tako da boste lahko videli pravkar dodana vrata.

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

Blokiranje ali zapiranje vrat v požarnem zidu je enako enostavno, preprosto jih odstranite iz območja z možnostjo --remove-port . Na primer, zaprite vrata 80 in 443 v javnem območju.

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

Namesto kombinacije vrat ali kombinacije vrat/protokola lahko uporabite ime storitve, ki so ji dodeljena vrata, kot je razloženo v naslednjem razdelku.

Kako odpreti in blokirati storitve v Firewalldu

Če želite odpreti storitev v požarnem zidu, jo omogočite z možnostjo --add-service . Če je območje izpuščeno, bo uporabljeno privzeto območje.

Naslednji ukaz bo trajno omogočil storitev http v javnem območju.

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

Možnost --remove-service lahko uporabite za onemogočanje storitve.

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

Kako omogočiti in onemogočiti maskiranje IP z uporabo Firewallda

IP Masquerading (znan tudi kot IPMASQ ali MASQ) je mehanizem NAT (Network Address Translation) v omrežju Linux, ki gostiteljem v omrežju omogoča zasebne naslove IP za komunikacijo z internetom z uporabo javnega IP -ja vašega strežnika Linux (prehod IPMASQ) naslov.

To je preslikava ena proti več. Promet z vaših nevidnih gostiteljev se bo drugim računalnikom v internetu prikazal, kot da prihaja z vašega strežnika Linux.

Omogočite prikrivanje IP v želenem območju, na primer v javnem območju. Preden to storite, najprej preverite, ali je maskiranje aktivno ali ne (a\"ne" pomeni, da je onemogočeno,\"da" pa pomeni drugače).

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

Tipičen primer uporabe za prikrivanje je izvajanje posredovanja vrat. Ob predpostavki, da želite SSH z oddaljenega stroja na gostitelja v svojem notranjem omrežju z IP 10.20.1.3, na katerem demon sshd posluša na vratih 5000.

Vse povezave lahko posredujete na vrata 22 na vašem strežniku Linux na predvidena vrata na ciljnem gostitelju tako, da izdate:

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

Če želite onemogočiti maskiranje v območju, uporabite stikalo --remove-masquerade .

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

Kako omogočiti in onemogočiti sporočilo IMCP v Firewalldu

Sporočila ICMP (Internet Control Message Protocol) so bodisi zahteve po informacijah ali odgovori na zahteve po informacijah ali v pogojih napak.

V požarnem zidu lahko omogočite ali onemogočite sporočila ICMP, vendar pred tem najprej navedite vse podprte vrste icmp.

$ sudo firewall-cmd --get-icmptypes

Če želite dodati ali odstraniti želeno vrsto bloka.

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

Vse vrste icmp, dodane v cono, si lahko ogledate s stikalom --list-icmp-bloki .

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

Kako uporabljati neposreden vmesnik za posredovanje ukazov surove iptables

Požarni zid-cmd ponuja tudi neposredne možnosti ( --direct ), da dobite bolj neposreden dostop do požarnega zidu. To je uporabno za tiste, ki poznajo iptables.

Pomembno: Neposredne možnosti uporabite le kot zadnjo možnost, kadar ni mogoče uporabiti običajnih zgoraj opisanih možnosti požarnega zidu-cmd.

Tukaj je primer, kako s stikalom --add-rules prenesti surovo pravilo iptables. Ta pravila lahko preprosto odstranite tako, da --add-rule zamenjate z --remove-rule :

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

Za več informacij o iptables glejte ta priročnik: Kako nastaviti požarni zid Iptables za omogočanje oddaljenega dostopa do storitev v Linuxu.

Če niste seznanjeni s sintakso iptables, se lahko odločite za firewalldov\"bogat jezik" za ustvarjanje bolj zapletenih pravil požarnega zidu na enostaven za razumevanje način, kot je razloženo v nadaljevanju.

Kako uporabljati bogat jezik v Firewalldu

Bogati jezik (znan tudi kot bogata pravila) se uporablja za dodajanje bolj zapletenih pravil požarnega zidu za IPv4 in IPv6 brez poznavanja sintakse iptables.

Razširi funkcije območja (storitev, vrata, icmp-blok, maskarada in posredna vrata), ki smo jih zajeli. Podpira izvorne in ciljne naslove, beleženje, dejanja in omejitve za dnevnike in dejanja.

--add-rich-rule se uporablja za dodajanje bogatih pravil. Ta primer prikazuje, kako z revizijo omogočite nove povezave IPv4 in IPv6 za storitev http in dnevnik 1 na minuto:

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

Če želite odstraniti dodano pravilo, zamenjajte možnost --add-rich-rule z --remove-rich-rule .

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

Ta funkcija omogoča tudi blokiranje ali dovoljenje prometa z določenega naslova IP. Naslednji primer prikazuje, kako zavrniti povezave z IP 10.20.1.20.

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

Kako omogočiti in onemogočiti način panike v Firewalldu

Način panike je poseben način v okviru firewalld-a, pri katerem se izločijo vsi vhodni in zunanji paketi, aktivne povezave pa potečejo, ko jih aktivirate.
Ta način lahko omogočite v nujnih primerih, ko grožnja vašemu omrežnemu okolju izstopi.

Za poizvedbo v načinu panike uporabite možnost --query-panic .

$ sudo firewall-cmd --query-panic

Če želite omogočiti način panike, uporabite možnost --panic-on . Ali deluje, lahko preverite z ukazom ping, kot je prikazano. Ker paket izpade, imena www.google.com ni mogoče razrešiti, zato je prikazana napaka.

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

Če želite onemogočiti način panike, uporabite možnost --panic-off .

$ sudo firewall-cmd --panic-off

Kako zakleniti Firewalld

Ne pozabite, da smo v osnovah firewallda omenili, da lahko lokalne aplikacije ali storitve spremenijo konfiguracijo požarnega zidu, če delujejo s korenskimi pravicami. Nadzorujete lahko, katere aplikacije lahko zahtevajo spremembe požarnega zidu, tako da jih nato določite na belem seznamu za zaklepanje.

Ta funkcija je privzeto izklopljena, lahko jo omogočite ali onemogočite s stikalom --lockdown-on ali --lockdown .

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

Upoštevajte, da je priporočljivo, da to funkcijo omogočite ali onemogočite z urejanjem glavne konfiguracijske datoteke, ker požarni zid-cmd morda ne obstaja na belem seznamu za zaklepanje, ko omogočite zaklepanje.

$ sudo vim /etc/firewalld/firewalld.conf

Poiščite parameter Lockdown in spremenite njegovo vrednost iz ne (pomeni izklopljeno) v da (pomeni vklopljeno).

Lockdown=yes

Če želite to nastavitev trajno ponovno naložiti firewalld.

$ sudo firewall-cmd --reload

Firewalld je enostavna zamenjava za storitev iptables, ki uporablja iptables kot zaledje. V tem članku smo pokazali, kako namestiti paket firewalld, razložili pomembne funkcije firewalld in razpravljali o tem, kako jih konfigurirati v okoljih za izvajanje in trajno konfiguracijo.

Če imate kakršna koli vprašanja ali pripombe, nam pišite preko spodnjega obrazca za komentarje. Za več informacij se obrnite na stran priročnika firewalld (man firewalld) ali dokumentacijo firewalld na spletni strani projekta.