Kako instalirati, konfigurirati i koristiti Firewalld u CentOS-u i Ubuntu-u


Firewall (demon zaštitnog zida) je alternativa usluzi iptables, za dinamičko upravljanje zaštitnim zidom sistema uz podršku za mrežne (ili firewall) zone i pruža D-Bus interfejs za upravljanje konfiguracijama. Jednostavan je za korištenje i konfiguraciju, a sada je zadani alat za upravljanje vatrozidom na RHEL/CentOS, Fedora i nekoliko drugih Linux distribucija.

U ovom članku ćemo razgovarati o tome kako konfigurirati zaštitni zid sistema sa firewalld i implementirati osnovno filtriranje paketa u CentOS/RHEL 7 i Ubuntu.

Osnove o Firewalldu

Firewalld se sastoji od tri sloja, a to su:

  • sloj jezgre: odgovoran za rukovanje konfiguracijom i pozadinskim dijelovima (navedeno ispod).
  • D-Bus interfejs: primarno sredstvo za promjenu i kreiranje konfiguracije zaštitnog zida.
  • pozadina: za interakciju sa netfilterom (matični modul kernela koji se koristi za zaštitni zid). Oni uključuju iptables, ip6tables, ebtables, ipset, nft, linnftables; networkmanager; i moduli.

Upravlja pravilima zaštitnog zida implementacijom zona mreže/zaštitnog zida koje definiraju nivo povjerenja mrežnih veza ili sučelja. Ostale podržane funkcije zaštitnog zida uključuju usluge, direktnu konfiguraciju (koristi se za direktno prosljeđivanje sirove iptables sintakse), IPSetove kao i ICMP tipove.

Firewalld podržava dvije vrste konfiguracijskih okruženja:

  • runtime konfiguraciju koja je efikasna samo dok se mašina ne pokrene ili restartuje firewalld servis
  • stalna konfiguracija koja se čuva i radi uporno.

Alat komandne linije firewall-cmd koristi se za upravljanje vremenom izvođenja i trajnom konfiguracijom. Alternativno, možete koristiti alat za konfiguraciju grafičkog korisničkog sučelja (GUI) za firewall-config za interakciju s demonom.

Osim toga, firewalld nudi dobro definirano sučelje za druge lokalne usluge ili aplikacije za direktno traženje promjena u pravilima firewall-a, ako se pokreću sa root privilegijama.

Globalna konfiguraciona datoteka za firewalld se nalazi na /etc/firewalld/firewalld.conf, a funkcije zaštitnog zida su konfigurisane u XML formatu.

Razumijevanje važnih karakteristika Firewalld-a

Centralna karakteristika firewalla su mreže/zaštitnog zida zone. Svaka druga karakteristika je ograničena na zonu. Zona zaštitnog zida opisuje nivo poverenja za vezu, interfejs ili vezu izvorne adrese.

Podrazumevana konfiguracija dolazi sa brojnim unapred definisanim zonama sortiranim u skladu sa podrazumevanim nivoom poverenja zona od nepouzdanih do pouzdanih: drop, block, public, external, dmz, work, home, internal i trusted. Definirani su u datotekama pohranjenim u /usr/lib/firewalld/zones direktoriju.

Možete konfigurirati ili dodati svoje prilagođene zone koristeći CLI klijent ili jednostavno kreirati ili kopirati datoteku zone u /etc/firewalld/zones iz postojećih datoteka i urediti je.

Drugi važan koncept pod firewalld-om su usluge. Usluga je definirana korištenjem portova i protokola; ove definicije predstavljaju datu mrežnu uslugu kao što je web server ili usluga udaljenog pristupa. Usluge su definirane u datotekama pohranjenim u direktoriju /usr/lib/firewalld/services/ ili /etc/firewalld/services/.

Ako poznajete osnovne koncepte iptables/ip6tables/ebtables, također možete koristiti direktno sučelje (ili konfiguraciju) za direktan pristup firewall-u. Ali, za one bez ikakvog znanja o iptables-u, možete koristiti bogati jezik za kreiranje složenijih pravila zaštitnog zida za IPv4 i IPv6.

Kako instalirati Firewalld paket u Linux

Na CentOS 7, paket firewalld dolazi unaprijed instaliran i možete ga provjeriti koristeći sljedeću naredbu.

rpm -qa firewalld

Na Ubuntu 16.04 i 18.04, možete ga instalirati koristeći zadani menadžer paketa kao što je prikazano.

sudo apt install firewalld

Kako upravljati uslugom Firewalld u Linuxu

Firewalld je obična systemd usluga kojom se može upravljati preko systemctl komande.

 
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

Nakon pokretanja usluge firewalld, također možete provjeriti da li je demon pokrenut ili ne, koristeći firewall-cmd alat (u slučaju da nije aktivan, ova komanda će ispisati “not trčanje”).

sudo firewall-cmd --state

Ako slučajno sačuvate bilo kakve promjene trajno, možete ponovo učitati firewalld. Ovo će ponovo učitati pravila zaštitnog zida i zadržati informacije o stanju. Trenutna trajna konfiguracija će postati nova runtime konfiguracija.

sudo firewall-cmd --reload

Kako raditi sa zonama zaštitnog zida u Firewalldu

Da biste dobili listu svih dostupnih zona i usluga zaštitnog zida, pokrenite ove komande.

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

Podrazumevana zona je zona koja se koristi za svaku funkciju zaštitnog zida koja nije eksplicitno ograničena na drugu zonu. Možete dobiti zadanu zonu postavljenu za mrežne veze i interfejse pokretanjem.

sudo firewall-cmd --get-default-zone

Za postavljanje zadane zone, na primjer na eksternu, koristite sljedeću naredbu. Imajte na umu da dodavanje opcije --permanent trajno postavlja konfiguraciju (ili omogućava traženje informacija iz stalnog konfiguracijskog okruženja).

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

Zatim, pogledajmo kako dodati interfejs u zonu. Ovaj primjer pokazuje kako dodati vaš bežični mrežni adapter (wlp1s0) u kućnu zonu, koja se koristi u kućnim područjima.

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

Interfejs se može dodati samo jednoj zoni. Da ga premjestite u drugu zonu, koristite prekidač --change-interface kao što je prikazano, ili ga uklonite iz prethodne zone pomoću prekidača –remove-interface, a zatim ga dodajte u novu zonu.

Pod pretpostavkom da želite da se povežete na javnu WI-FI mrežu, trebalo bi da premestite svoj bežični interfejs nazad u javnu zonu, ovako:

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

Možete koristiti više zona u isto vrijeme. Da biste dobili listu svih aktivnih zona sa omogućenim funkcijama kao što su interfejsi, usluge, portovi, protokoli, pokrenite:

sudo firewall-cmd --get-active-zones

U odnosu na prethodnu tačku, ako želite pronaći više informacija o određenoj zoni, odnosno o svemu dodanom ili omogućenom u njoj, koristite jednu od ovih naredbi:

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

Još jedna korisna opcija je --get-target, koja vam pokazuje cilj trajne zone. Cilj je jedan od: default, ACCEPT, DROP, REJECT. Možete provjeriti cilj različitih zona:

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 otvoriti i blokirati portove u Firewalld-u

Da biste otvorili port (ili kombinaciju porta/protokola) u firewall-u, jednostavno ga dodajte u zonu sa opcijom --add-port. Ako izričito ne navedete zonu, ona će biti omogućena u zadanoj zoni.

Sljedeći primjer pokazuje kako dodati port 80 i 443 da omogućite ulazni web promet putem HTTP i HTTPSa > protokoli, odnosno:

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

Zatim ponovo učitajte firewalld i još jednom provjerite omogućene funkcije u javnoj zoni, trebali biste moći vidjeti upravo dodane portove.

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

Blokiranje ili zatvaranje porta u firewall-u je jednako lako, jednostavno ga uklonite iz zone pomoću opcije --remove-port. Na primjer, da zatvorite portove 80 i 443 u javnoj zoni.

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

Umjesto korištenja kombinacije porta ili porta/protokola, možete koristiti ime usluge kojoj je port dodijeljen kao što je objašnjeno u sljedećem odjeljku.

Kako otvoriti i blokirati usluge u Firewalld-u

Da otvorite uslugu u zaštitnom zidu, omogućite je pomoću opcije --add-service. Ako je zona izostavljena, koristit će se zadana zona.

Sljedeća komanda će trajno omogućiti http uslugu u javnoj zoni.

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

Opcija --remove-service se može koristiti za onemogućavanje usluge.

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

Kako omogućiti i onemogućiti IP maskiranje koristeći Firewalld

IP maskiranje (također poznato kao IPMASQ ili MASQ) je NAT (Prevođenje mrežne adrese) mehanizam u Linux umrežavanju koji omogućava vašim domaćinima u mreži, sa privatnim IP adresama, da komuniciraju sa Internetom koristeći javnu IP adresu dodijeljenu vašem Linux serveru (IPMASQ gateway).

To je mapiranje jedan prema više. Saobraćaj sa vaših nevidljivih hostova će se činiti drugim računarima na internetu kao da dolazi sa vašeg Linux servera.

Možete omogućiti IP maskiranje u željenoj zoni, na primjer javnoj zoni. Ali prije nego to učinite, prvo provjerite da li je maskiranje aktivno ili ne (“ne ” znači da je onemogućeno, a “da ” znači drugačije).

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

Tipičan slučaj upotrebe maskiranja je izvođenje prosljeđivanja portova. Pod pretpostavkom da želite SSH sa udaljene mašine na host u vašoj internoj mreži sa IP 10.20.1.3, na kojem sshd demon sluša na portu 5000.

Možete proslijediti sve veze na port 22 na vašem Linux serveru na predviđeni port na vašem ciljnom hostu tako što ćete izdati:

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

Da onemogućite maskiranje u zoni, koristite prekidač --remove-masquerade.

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

Kako omogućiti i onemogućiti IMCP poruku u Firewalld-u

ICMP (Internet Control Message Protocol) poruke su ili zahtjevi za informacijama ili odgovori na zahtjeve za informacijama ili u stanju greške.

Možete omogućiti ili onemogućiti ICMP poruke u zaštitnom zidu, ali prije toga prvo navedite sve podržane icmp tipove.

sudo firewall-cmd --get-icmptypes

Za dodavanje ili uklanjanje željenog tipa bloka.

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

Možete vidjeti sve icmp tipove dodane u zoni koristeći --list-icmp-blocks prekidač.

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

Kako koristiti direktno sučelje za prosljeđivanje sirovih iptables komandi

Firewall-cmd takođe pruža direktne opcije (--direct) za direktniji pristup zaštitnom zidu. Ovo je korisno za one sa osnovnim znanjem o iptables.

Važno: direktne opcije trebate koristiti samo kao posljednje sredstvo kada nije moguće koristiti uobičajene opcije firewall-cmd koje su gore objašnjene.

Evo primjera kako proslijediti raw iptables pravilo, koristeći --add-rules prekidač. Ova pravila možete jednostavno ukloniti zamjenom --add-rule sa --remove-rule:

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

Za više informacija o iptables, pogledajte ovaj vodič: Kako postaviti Iptables firewall da omogućite daljinski pristup uslugama u Linuxu.

Ako niste upoznati sa sintaksom iptablesa, možete se odlučiti za firewalld-ov “bogati jezik” za kreiranje složenijih pravila zaštitnog zida na način koji je lako razumljiv kao što je objašnjeno u nastavku.

Kako koristiti bogat jezik u Firewalldu

bogati jezik (također poznat kao bogata pravila) se koristi za dodavanje složenijih pravila zaštitnog zida za IPv4 i IPv6 bez znanja iptables sintakse.

On proširuje karakteristike zone (usluga, port, icmp-block, maskerada i naprijed-port) koje smo pokrili. Podržava izvorne i odredišne adrese, evidentiranje, akcije i ograničenja za evidencije i akcije.

--add-rich-rule se koristi za dodavanje obogaćenih pravila. Ovaj primjer pokazuje kako dozvoliti nove IPv4 i IPv6 veze za uslugu http i log 1 po minuti korištenjem revizije:

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

Da biste uklonili dodano pravilo, zamijenite opciju --add-rich-rule sa --remove-rich-rule.

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

Ova funkcija također omogućava blokiranje ili dopuštanje prometa sa određene IP adrese. Sljedeći primjer pokazuje kako odbiti veze sa IP 10.20.1.20.

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

Kako omogućiti i onemogućiti režim panike u Firewalld-u

Panik način rada je poseban način rada pod firewalld-om gdje se odbacuju svi ulazni i izlazni paketi, a aktivne veze će isteći kada se aktiviraju.
Ovaj način rada možete omogućiti u hitnim situacijama kada prijeti prijetnja vašem mrežnom okruženju.

Za upit u načinu panike, koristite opciju --query-panic.

sudo firewall-cmd --query-panic

Da biste omogućili način rada panike, koristite opciju --panic-on. Možete testirati da li radi koristeći komandu ping kao što je prikazano. Budući da je paket odbačen, naziv www.google.com se ne može riješiti, stoga se prikazuje greška.

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

Da biste onemogućili način rada panike, koristite opciju --panic-off.

sudo firewall-cmd --panic-off

Kako zaključati zaštitni zid

Zapamtite, pod osnovama o firewalld-u smo spomenuli da lokalne aplikacije ili usluge mogu promijeniti konfiguraciju zaštitnog zida ako se pokreću s root privilegijama. Možete kontrolirati koje aplikacije mogu zahtijevati izmjene zaštitnog zida tako što ćete ih navesti na bijeloj listi zaključavanja.

Ova funkcija je podrazumevano isključena, možete je omogućiti ili onemogućiti pomoću prekidača --lockdown-on ili --lockdown.

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

Imajte na umu da se preporučuje da omogućite ili onemogućite ovu funkciju uređivanjem glavne konfiguracione datoteke, jer firewall-cmd možda neće postojati na beloj listi zaključavanja kada omogućite zaključavanje.

sudo vim /etc/firewalld/firewalld.conf

Pronađite parametar Zaključavanje i promijenite njegovu vrijednost iz ne (znači isključeno) u yes (znači uključeno).

Lockdown=yes

Da biste ovu postavku učinili trajnim, ponovo učitajte firewald.

sudo firewall-cmd --reload
Sažetak

Firewalld je jednostavna zamjena za uslugu iptables, koja koristi iptables kao pozadinu. U ovom članku smo pokazali kako instalirati firewalld paket, objasnili važne značajke firewalld-a i razgovarali o tome kako ih konfigurirati u okruženju za izvršavanje i trajnu konfiguraciju.

Ako imate bilo kakvih pitanja ili komentara, slobodno nam se obratite putem obrasca za komentare ispod. Možete pogledati stranicu priručnika za firewalld (man firewalld) ili firewalld dokumentaciju na web stranici projekta, za više informacija.