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.
Sadržaj
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:
- FirewallD koristi zone i usluge umesto lanaca i pravila.
- 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
- How To Set Up a Firewall with UFW on Ubuntu 16.04
- How To Set Up a Firewall Using FirewallD on CentOS 7
- firewalld
- Introduction to FirewallD on CentOS
- Comparing and contrasting Uncomplicated Firewall and FirewallD