IPTables firewall – praktikum – Deo II

U prethodnom članku opisan je mrežni sigurnosni sistem – firewall koji nadgleda i kontroliše dolazeći i odlazeći mrežni saobraćaj. Pored toga definisan je koncept korisničkog aplikacionog programa IPTables, njegove karakteristike, osnovne komande i opcije. Način funkcionisanja IPTables-a prikazan je kroz: dozvoljavanje uspostavljenih sesija, dozvoljavanje dolazećeg saobraćaja na specifičnim portovima, dozvoljavanje dolazećeg saobraćaja na specifičnom interfejsu, implementiranje drop pravila, brisanje svih pravila, brisanje lanaca, snimanje konfiguracije IPTables, anti-spoofing, limitiranje ping zahteva, balansiranje opterećenja veb saobraćaja, source NAT i destination NAT.

U nastavku teksta biće opsani osnovni koncepti UFW-a i FirewallD-a kroz način funkcionisanja i njihovo poređenje.

UFW

S obzirom na složenost korisničkog aplikacionog programa IPTables, napisano je mnogo frontend-ova za IPTables prilagođenih različitim korisničkim grupama. Jedan od ovih frontend-ova je i UFW.

UFW (Uncomplicated Firewall) predstavlja program za upravljanje Linux-ovim firewall-om i cilj ovog programa je da pruži jednostavni korisnički interfejs za korisnike.

Podrazumevano, na Linux Ubuntu sistemu UFW je isključen. Da bi se uključio potrebno je koristiti komandu:

sudo ufw enable

Po uključivanju UFW-a definisana su pravila neophodna za svakodnevni rad korisnika. Provera statusa UFW-a vrši se putem sledeće komande:

sudo ufw status verbose

Ukoliko se, nakon uključivanja UFW-a, izlistaju pravila IPTables-a primetićemo sledeće:

sudo iptables -S
-P INPUT DROP
-P FORWARD DROP
-P OUTPUT ACCEPT
-N DOCKER
-N DOCKER-ISOLATION
-N ufw-after-forward
-N ufw-after-input
-N ufw-after-logging-forward
-N ufw-after-logging-input
-N ufw-after-logging-output
-N ufw-after-output
-N ufw-before-forward
-N ufw-before-input
-N ufw-before-logging-forward
-N ufw-before-logging-input
-N ufw-before-logging-output
-N ufw-before-output
-N ufw-logging-allow
-N ufw-logging-deny
-N ufw-not-local
-N ufw-reject-forward
-N ufw-reject-input
-N ufw-reject-output
-N ufw-skip-to-policy-forward
-N ufw-skip-to-policy-input
-N ufw-skip-to-policy-output
-N ufw-track-forward
-N ufw-track-input
-N ufw-track-output
-N ufw-user-forward
-N ufw-user-input
-N ufw-user-limit
-N ufw-user-limit-accept
-N ufw-user-logging-forward
-N ufw-user-logging-input
-N ufw-user-logging-output
-N ufw-user-output
-A INPUT -j ufw-before-logging-input
-A INPUT -j ufw-before-input
-A INPUT -j ufw-after-input
-A INPUT -j ufw-after-logging-input
-A INPUT -j ufw-reject-input
-A INPUT -j ufw-track-input
...

UFW je kreirao svoje lance i pravila nad IPTables.

Da bi se isključio UFW potrebno je koristiti komandu:

sudo ufw disable

Dozvoliti i odbiti (specifična pravila)

Kako bi se dozvolili dolazni tcp i udp paketi na portu 53, potrebno je koristiti sledeću komandu:

sudo ufw allow 53

Da bi se dozvolio samo dolazeći tcp saobraćaj na portu 53, potrebno je koristiti komandu:

sudo ufw allow 53/tcp

Za odbijanje tcp i udp paketa na portu 53 potrebno je koristiti sledeću komandu:

sudo ufw deny 53

Da bi se blokirao pristup portu 22 sa 192.168.0.1 i 192.168.0.7 ali i dozvolio sa svih ostalih sa adresom 192.168.0.x mogu se koristiti sledeće komande:

sudo ufw deny from 192.168.0.1 to any port 22
sudo ufw deny from 192.168.0.7 to any port 22
sudo ufw allow from 192.168.0.0/24 to any port 22 proto tcp

Brisanje postojećih pravila

Da bi se obrisalo postojeće pravilo potrebno je dodati prefiks „delete“ orginalnom pravilu. Na primer, ako je orginalno pravilo:

ufw deny 80/tcp

onda je potrebno koristiti komandu:

sudo ufw delete deny 80/tcp

Još jedan način da se obriše pravilo jeste da se prvo izlistaju sva pravila komandom:

sudo ufw status numbered

Ova komanda će dati pregled svih pravila i njihove redne brojeve koji se mogu iskoristiti za brisanje pravila tako što se komandi delete prosledi broj:

sudo ufw delete broj_pravila

$ sudo ufw deny 80/tcp
Rule added
Rule added (v6)
$ sudo ufw status numbered
Status: active

     To         Action      From
     --         ------      ----
[ 1] 80/tcp     DENY IN     Anywhere
[ 2] 80/tcp     DENY IN     Anywhere (v6)

$ sudo ufw delete 1
Deleting:
 deny 80/tcp
Proceed with operation (y|n)? y
Rule deleted

Na datom izlazu možemo primetiti da su kreiranjem pravila, kreirana dva pravila, jedno za IPv4 i jedno za IPv6. Ovim načinom brisanja potrebno je dva puta koristiti komandu delete.

Servisi

Takođe, mogu se dozvoliti ili odbiti servisi prema imenu pošto UFW čita iz /etc/services.

Komanda za dozvoljavanje servisa po imenu je:

sudo ufw allow ime_servisa

Na primer, ako se dodaje pravilo za dozvoljavanje ssh po imenu koristi se komanda:

sudo ufw allow ssh

Za odbijanje se koristi komanda:

sudo ufw deny ssh

Vođenje dnevnika

Kako bi se omogućilo vođenje dnevnika neophodna je komanda:

sudo ufw logging on

a kako bi se onemogućilo korišćenje dnevnika komanda:

sudo ufw logging off

FirewallD

FirewallD predstavlja frontend za IPTables koji se koristi kako bi se implementirala stalna pravila mrežnog saobraćaja. Pruža interfejs komandne linije, kao i grafički interfejs i dostupan je u repozitorijumima skoro svih Linux distribucija. Rad sa FirewallD ima dve glavne razlike u poređenju sa direktnim radom sa IPTables:

  1. FirewallD koristi zone i usluge umesto lanaca i pravila.
  2. Dinamički upravlja pravilima, omogućavajući ažuriranja bez prekida postojećih sesija i veza.

Zone

FirewallD pozadinski proces upravlja grupom pravila koristeći entitete koji se nazivaju “zone”. Zone su, u suštini, skupovi pravila koji diktiraju šta bi se saobraćaju trebalo dozvoliti na osnovu nivoa poverenja u mreže na koje je računar povezan. Mrežnim interfejsima su dodeljenje zone kako bi se odredio dozvoljeni saobraćaj od strane firewall-a.

Neke od predefinisanih zona za firewallD, raspoređene od najmanje pozudanih do najviše pouzdanih, su:

  • drop – najnižiji nivo poverenja, sav dolazeći saobraćaj je odbačen bez odgovora i samo odlazeće konekcije su moguće,
  • block – slična prethodnoj ali umesto jednostavnog odbacivanja paketa, svi paketi su odbijeni sa porukom icmp-host-prohibited ili icmp6-adm-prohibited,
  • public – predstavlja javne, nepouzdane mreže
  • external
  • internal
  • dmz – koristi se za kompjutere koji su locirani u DMZ (izolovani kompjuteri koji neće imati pristup ostatku mreže) i samo određene dolazne konekcije su moguće,
  • work – koristi se za poslovne računare,
  • home – kućno okruženje,
  • trusted – svi računari na mreži su pouzdani i ovo je ujedno i najotvorenija od svih dostupnih opcija.

Da bi koristili firewall, moguće je kreirati pravila i izmeniti svojstva zona, a onda dodeliti mrežnom interfejsu odgovarajuću zonu.

Permanentnost pravila

Kod firewallD-a, pravila mogu biti ili stalna ili neposredna. Ukoliko je pravilo dodato ili modifikovano, podrazumevano trenutno pokrenut firewall biće izmenjen. Prilikom sledećeg pokretanja računara, stalna pravila će se vratiti.

Većina firewall-cmd operacija ima –permanent opciju koja ukazuje na to da pravila nisu samo kratkotrajna. Ovo razdvajanje znači da se mogu testirati pravila u aktivnoj instanci firewall-a, a zatim ponovo učitati stara pravila ako postoje problemi. Takođe, moguće je korišćenje –permanent opcije kako bi se izgradio čitav niz pravila, koji onda mogu da se primene izdavanjem komande reload.

Uključivanje firewall-a

Za uključivanje firewall-a, neophodno je uključiti pozadinski proces. Pokretanje pozadinskog procesa za ovu sesiju vrši se putem komande:

sudo systemctl start firewalld.service

Moguće je proveriti da li je servis pokrenut i dostupan koršćenjem komande:

firewall-cmd --state

$ firewall-cmd --state
running

Izlaz ukazuje da je firewall pokrenut sa podrazumevanom konfiguracijom.

Omogućavanje servisa će učiniti da se firewall pokreće prilikom pokretanja sistema. Međutim, omogućavanje servisa potrebno je izvršiti tek nakon kreiranja svih pravila i njihovog testiranja, jer se time sprečava mogućnost zaključavanja od strane računara ukoliko se nešto pogrešno dogodi. Nakon testiranja svih pravila, moguće je primeniti konfiguraciju za stalno.

Osnovne komande

Trenutno izabranu podrazumevanu zonu moguće je videte koristeći komandu:

firewall-cmd --get-default-zone

$ firewall-cmd --get-default-zone
public

Kako nije korišćena nijedna firewalld komanda kako bi se odstupilo od podrazumevane zone i nijedan od interfejsa nije vezan za neku drugu zonu, zona prikazana na izlazu (public) biće jedina “aktivna” zona (zona koja kontroliše saobraćaj za naše interfejse). Ovo možemo proveriti koristeći komandu:

firewall-cmd --get-active-zones

$ firewall-cmd --get-active-zones
public
  interfaces: wlp8s0

Na izlazu je prikazano da je trenutno jedan mrežni interfejs kontrolisan od strane firewall-a. Njime se trenutno upravlja prema pravilima definisanim za public zonu.

Pravila povezana sa public zonom mogu se videti koristeći komandu:

firewall-cmd --list-all

$ firewall-cmd --list-all
public (default, active)
  interfaces: wlp8s0
  sources: 
  services: dhcpv6-client ssh
  ports: 80/tcp
  protocols: 
  masquerade: no
  forward-ports: 
  icmp-blocks: 
  rich rules: 

Sa izlaza možemo videti da je public zona podrazumevana i aktivna i da je interfejs wlp8s0 vezan sa ovom zonom. Takođe, možemo videti da ova zona dozvoljava normalne operacije vezane za DHCP klijenta i SSH.

Kako bi se dobila lista svih dostupnih zona koristi se komanda:

firewall-cmd --get-zones

$ firewall-cmd --get-zones
block dmz drop external home internal public trusted work

Moguće je videti specifičnu konfiguraciju vezanu za određenu zonu koristeći –zone= parametar u –list-all komandi:

firewall-cmd --zone=home –list-all

Međutim, ako se firewall kompletno restartuje, interfejs će se vratiti na podrazumevanu zonu.

$ firewall-cmd --zone=home --list-all
home
  interfaces: 
  sources: 
  services: dhcpv6-client mdns samba-client ssh
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  icmp-blocks: 
  rich rules: 

Zone za interfejs se mogu promeniti tokom sesije koristeći –zone= parametar u kombinaciji sa –change-interface= parametrom. Kao i sa svim komandama koje menjaju firewall, potrebno je koristiti sudo.

Na primer, da bi se promenio wlp8s0 interfejs na “home” zonu, koristi se komanda:

sudo firewall-cmd --zone=home --change-interface=wlp8s0

$ sudo firewall-cmd --zone=home --change-interface=wlp8s0
success

Da bi se izmenila podrazumevana zona moguće je koristiti –set-default-zone= parametar.

sudo firewall-cmd --set-default-zone=home

Da bi se dodao port 80 tcp protokola public zoni koristi se sledeća komanda:

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

Nakon čega je potrebno ponvo učitati firewall

sudo firewall-cmd –reload

I proveriti da li je tcp port 80 dodat ili ne

sudo firewall-cmd --zone=public --list-ports

$ sudo firewall-cmd --permanent --zone=public --add-port=80/tcp
success
$ sudo firewall-cmd --reload
success
$ sudo firewall-cmd --zone=public --list-ports
80/tcp

Na izlazu možemo videti da je tcp port 80 dodat.

Da bi se izbrisao tcp port 80 iz public zone, koristi se sledeća komanda:

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

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

Na izlazu je prikazano uspešno brisanje porta.

Da bi se dodao ftp i smpt servis u firewalld, potrebno je koristiti sledeće komande:

sudo firewall-cmd --zone=public --add-service=ftp
sudo firewall-cmd --zone=public --add-service=smtp

$ sudo firewall-cmd --zone=public --add-service=ftp
success
$ sudo firewall-cmd --zone=public --add-service=smtp
success

Za brisanje ftp i smtp servisa iz firewalld-a, potrebno je koristiti sledeće komande:

sudo firewall-cmd --zone=public --remove-service=ftp
sudo firewall-cmd --zone=public --remove-service=smtp

$ sudo firewall-cmd --zone=public --remove-service=ftp
success
$ sudo firewall-cmd --zone=public --remove-service=smtp
success
$ sudo firewall-cmd --zone=public --list-services
dhcpv6-client ssh

Nakon čega je moguće proveriti da li je izvršeno brisanje komandom za izlistavanje servisa.

Da bi se blokirao sav dolazeći ili odlazeći saobraćaj koristi se panic-on i komanda:

sudo firewall-cmd --panic-on

Za isključivanje se koristi

sudo firewall-cmd --panic-off

Da bi firewalld prihvatio IPv4 pakete sa 192.168.1.4 moguće je koristiti sledeću komandu:

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

$ sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.4" accept'
success

Slično, da bi se blokirali paketi sa iste adrese, potrebno je koristiti sledeću komandu:

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

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

Poređenje UFW i FirewallD

Poređenje složenosti komandi UFW i FirewallD-a moguće je prikazati na primeru omogućavanja http i https saobraćaja i provere statusa. Da bi se dozvolio http i https saobraćaj i nakon toga proverio status potrebno je uneti sledeće komande:

  • kod UFW je potrebno ukucati sledeće: ufw allow http,https
    ufw status
  • kod FirewallD-a je potrebno ukucati: firewall-cmd --permanent --add-service=http --add-service=https
    firewall-cmd --reload
    firewall-cmd --state

Na osnovu navedenog, moguće je primetiti da je komanda za omogućavanje http i https saobraćaja i provere statusa kod firewalld-a složenija nego kod UFW-a.

Zaključak

Firewalll predstavlja kritičan deo bilo kojeg računara koji se povezuje sa nezaštićenom mrežom poput interneta. IPTables firewall pruža fleksibilan način da se računar osigura kroz kreiranje pravila i lanaca. UFW kao frontend iptables-a, predstavlja lakši način za upravljanje firewall-om i namenjen je više regularnim korisnicima. Firewalld poseduje sve što i UFW ali uvodi pojam zona. Upravljanje zonama dozvoljava različite postavke u zavisnosti od mrežnih uslova ili lokacije.

Korisni linkovi