Ugniasienė (angl. firewall) skirta vidinio kompiuterių tinklo (arba atskiro tinklo kompiuterio) saugumui užtikrinimui. Ji analizuoja bei valdo duomenų sraute esančių paketų antraštes. Antraštėje (header) yra siuntėjo ir gavėjo IP adresai. Ugniasienė paremta paketų filtru, analizuojančiu paketų pradžią ir kontroliuojančiu paketo judėjimą. Yra du taisyklių kūrimo principai:
- viskas leidžiama, kas neuždrausta;
- viskas draudžiama, kas neleista (dažniausiai naudojamas).
Paketų filtras “iptables”
Paketų valdymo taisyklės yra sudaromos naudojant programą „iptables“. Tai paketų filtras, kuris programiškai peržiūri paketo antraštę ir nusprendžia, ką su paketu daryti: jį sustabdyti, praleisti, arba atmesti (pranešant apie tai siuntėjui).
Linux operacinėje sistemoje paketų filtras yra integruotas į branduolį. Paketų filtravimas yra valdomas programa iptables, kuri kreipiasi į branduolį, įterpia į branduolio paketų filtravimo lentelę taisykles, ir taip nustato, kokius paketus filtruoti. Taip padaryti filtrai galioja iki sistemos perkrovimo, todėl po perkrovimo reikia iptables komandas suvesti į paleidimo skriptus. Linux sistemoje tai padaryti galima pasinaudojus cron programa.
Taisyklės yra apjungiamos į sąrašus, vadinamus grandimis (chain). Branduolys turi tris pagrindines grandis: INPUT, OUTPUT, FORWARD.
- Iš tinklo į sąsają patekęs paketas tiriamas – analizuojama paketo antraštė
- Jei jis skirtas šiam kompiuteriui, jis perleidžiamas INPUT grandžiai
- Jei jis skirtas kitam kompiuteriui, ir jei yra įjungtas persiuntimas (FORWARDING), paketas nusiunčiamas nurodytai grandžiai,
- Kitais atvejais – paketas sustabdomas
- Į tinklą siunčiami paties kompiuterio generuojami paketai persiunčiami OUTPUT grandžiai.
Keletas veiksmų, kuriuos galima atlikti su grandimis:
- sukurti naują grandį (-N) iptables -N syn-flood
- išmesti taisykles iš grandies (-F) iptables -F
- šalinti tuščią grandį (-X) iptables -X
- nustatyti bazines (default) taisykles (policy) grandžiai (-P) iptables -P INPUT DROP (bazinė INPUT grandies taisyklė – sustabdyti paketus)
- perskaityti grandies taisykles (-L)iptables -L
- pridėti taisyklę prie grandies (-A) iptables -A INPUT -i eth0 -d 127.0.0.1 -j DROP (sustabdyti paketus, atėjusius į sąsają eth0, adresuotus 127.0.0.1). Pridedant taisykles svarbu žinoti, kad jos bus taikomos iš eilės!
- pašalinti taisyklę iš grandies (-D)iptables -D INPUT -i eth0 -d 127.0.0.1 -j DROP (pašalinti anksčiau apibrėžtą taisyklę)
- INPUT - dedamos taisyklės, kurios filtruoja į sistemą ateinančius paketus.
- OUTPUT - dedamos taisyklės, kurios filtruoja iš sistemos išeinančius paketus.
- FORWARD - dedamos taisyklės, kurios filtruoja per sistemą iš vieno į kitą interfeisą siunčiamus paketų srautus.
Kiti nurodomi iptables parametrai:
-s <adresas> | siuntėjo adresas |
-d <adresas> | gavėjo adresas |
-p <proto> | protokolas. (TCP, UDP, ICMP) |
-i <int> | interfeisas įėjimo |
-o <int> | interfeisas įšėjimo |
-j <target> | Nurodoma ką daryti su paketu: ACCEPT ar DROP. |
Adresas gali būti užrašomas:
- Pilnu vardu: www.google.lt
- Ip adresu: 192.168.58.2
- Ip adresu su kauke (netmask): 192.168.58.2/255.255.255.0
- Ip adresu su prefiksu: 192.168.58.2/24
- Norint nurodyti paneigimą: !192.168.58.2 Šiuo atveju taisyklė bus taikoma visiems adresams, išskyrus nurodytąjį.
Eil.nr | iptables konfigūracijos eilutė | Atliekamos funkcijos |
1 |
/sbin/iptables -P INPUT DROP /sbin/iptables -P OUTPUT DROP /sbin/iptables -P FORWARD DROP |
Grandžių standartinės taisykles nustatytos taip, kad būtų numesti visi paketai |
2 |
/sbin/iptables -A INPUT -i lo -j ACCEPT
/sbin/iptables -A OUTPUT -o lo -j ACCEPT
|
Leisti išsiųsti ir gauti paketus per lokalų lo interfeisą. |
3 |
/sbin/iptables -A INPUT -i eth0 -s 10.0.0.0/8 -j DROP
/sbin/iptables -A INPUT -i eth0 -s 127.0.0.0/8 -j DROP
/sbin/iptables -A INPUT -i eth0 -s 172.16.0.0/12 -j DROP
/sbin/iptables -A INPUT -i eth0 -s 192.168.0.0/16 -j DROP
|
Sustabdyti iš siuntėjo atėjusius broadcast paketus. |
4 |
/usr/sbin/iptables -A INPUT -i eth1 -p all -s 160.86.0.0/16 -j ACCEPT /usr/sbin/iptables -A INPUT -i eth1 -p all -j DROP |
Priima/Uždraudžia visus įeinančius protokolus į įšorinį (eth1) interfeisą iš siuntėjo. |
5 |
iptables -A INPUT -i eth0 -p icmp --icmp-type destination-unreachable -j ACCEPT
iptables -A INPUT -i eth0 -p icmp --icmp-type time-exceeded -j ACCEPT
iptables -A INPUT -i eth0 -p icmp --icmp-type echo-reply -j ACCEPT
iptables -A INPUT -i eth0 -p icmp --icmp-type echo-request -j ACCEPT
|
Į grandį INPUT pridedama taisyklė: ICMP protokolo pranešimas: destination-unreachable/time-exceeded/echo-reply/echo-request |
6 |
iptables -A INPUT -s !127.0.0.0/8 -p tcp --dport 111 -j DROP
|
Sustabdyti atėjusius visus TCP paketus išskyrus 127.0.0.0/8 į 111 portą. |
7 |
iptables -A INPUT -p tcp -i eth0 --dport 113 -j REJECT --reject-with tcp-reset
|
Atmesti visus atėjusius TCP paketus į 113 portą ir išsiunčiamas ICMP pranešimas: tcp-reset. |
8 |
/sbin/iptables -A INPUT -p tcp -i eth0 --dport 4 -j ACCEPT
|
Priimti visus atėjusius TCP paketus į 4 portą (sfs). |
9 |
/sbin/iptables -A INPUT -p tcp -i eth0 --dport 21 -j ACCEPT
|
Priimti visus atėjusius TCP paketus į 21 portą (ftp). |
10 |
/sbin/iptables -A INPUT -p tcp -i eth0 --dport 22 -j ACCEPT
|
Priimti visus atėjusius TCP paketus į 22 portą (ssh) |
11 |
/sbin/iptables -A INPUT -p tcp -i eth0 --dport 80 -j ACCEPT
|
Priimti visus atėjusius TCP paketus į 80 portą (http) |
12 |
/sbin/iptables -A INPUT -p tcp -i eth0 --dport 443 -j ACCEPT
|
Priimti visus atėjusius TCP paketus į 443 portą ( https). |
13 |
/sbin/iptables -A OUTPUT -p ALL -o lo -j ACCEPT
/sbin/iptables -A OUTPUT -p ALL -o eth1 -j ACCEPT
/sbin/iptables -A OUTPUT -p ALL -o eth0 -j ACCEPT
|
Leidžia visus išeinančius protokolus iš šių interfeisų: lo/eth1/eth0 |
14 |
/sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
/sbin/iptables -A FORWARD -i eth1 -j ACCEPT
/sbin/iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
|
1. Pirma taisyklė prijungia LAN prie interneto naudojant NAT.
2. Grandinei FORWARD leidžia įeinančius paketus iš eth1 interfeiso. 3. Leidžia sekti tokias susijungimo būsenas: ESTABLISHED, RELATED |
15 |
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 160.86.0.50
iptables -t nat -A PREROUTING -p tcp --dport 21 -j DNAT --to-destination 160.86.0.51
|
1. Nukreipia per TCP 80 portą iš interneto į vidinio tinklo adresą 160.86.0.50
2. Nukreipia per TCP 21 portą iš interneto į vidinio tinklo adresą 160.86.0.51 |
Sistemos saugumo skanavimas su “Nmap”
Programa „NMap“ skirta tinklo ir jo saugumo tyrimui. Programa gali:
- nustatyti veikiančius tinklo įrenginius
- skenuoti prievadus, surasti atvirus prievadus
- nustatyti programinės įrangos versiją
- atpažinti operacinę sistemą.
Papildomos taisyklės:
- Drausti vietinio tinklo vartotojui 10.0.0.44 jungtis prie Linux ugniasienės TCP 8080 porto (Lokalios -Intranet Web svetainės) iš vidinio tinklo
- Leisti įeinančius tik iš 10.0.0.0/24 tinklo paketus jungtis prie TCP 110 porto (Pašto POP3 serveris laiškų paėmimui iš pašto dėžės) per vidinio tinklo (eth2) interfeisą.
- Leisti įeinančius paketus jungtis prie TCP 143 porto (Pašto IMAP serveris laiškų paėmimui iš pašto dėžės) per vidinio tinklo (eth2) interfeisą.
- Nustatykite DNAT nukreipimą iš interneto į TCP 443 portą ateinantiems srautams į vidiniame tinkle esančio HTTPS serverio 10.0.0.32 TCP 443 portą.
iptables -A INPUT -i eth2 -s 10.0.0.44 -p tcp –dport 8080 -j DROP
iptables -A INPUT -i eth2 -s 10.0.0.0/24 -p tcp –dport 110 -j ACCEPT
iptables -A INPUT -i eth2 -p tcp –dport 143 -j ACCEPT
iptables -t nat -A PREROUTING -i eth1 -p tcp –dport 443 -j DNAT –to-destination 10.0.0.32:443