Arvutiteaduse instituut
  1. Kursused
  2. 2024/25 kevad
  3. Andmeturve (LTAT.06.002)
EN
Logi sisse

Andmeturve 2024/25 kevad

  • Pealeht
  • Loengud
  • Praktikumid
  • Referaat
  • Kirjandus
  • Lingid

Praktikum 10 - Tulemüür, iptables, nmap & IPv6

Tulemüüri abil on võimalik filtreerida võrguliidese kaudu liikuvaid pakette. Võrguliikluse filtreerimiseks võetakse arvesse läbivate pakettide puhul näiteks nende IP-aadressi (nii lähte- kui sihtaadressi), porte (teenused on mingil kindla pordi kaudu kättesaadavad) ja ühenduse lippe (nt saab lubada ainult sisevõrgust algatatud TCP-ühendusi). Antud praktikumis vaatame, kuidas on võimalik iptables abil Linuxi kernelisse sisseehitatud tulemüüri seadistada.

Võrguturbe teemal on meil ka olemas Tarmo Oja 2022 videoloengud:

  • video1
  • video2

Videoloengute vaatamine ei ole kohustuslik edukaks sooritamiseks, kuid on siiski abiks teemast ja juhendist arusaamisel.

Ettevalmistus

Selle nädala praktikum toimub Linux Mint virtuaalmasinas. Hoolitsege selle eest, et virtuaalmasin oleks lokaalses võrgus (näiteks: 192.168.10.1/24), selleks seadistage võrguadapteri tüübiks Bridged Adapter. Järgnevalt paigaldame praktikumis vajaminevad programmid.

  • NB! Käesolevas praktikumis on oluline, et teie virtuaalmasinal oleks IPv4 aadress.

Uuendage pakettide nimistut käsuga:

$ sudo apt update
$ sudo apt install nmap netcat-traditional iptables conntrack telnet telnetd ssh postfix

NB! Juhul kui uuendamine jääb 0% juures seisma, siis veenduge, et teil on ühendus Internetiga ning eemaldage faili /etc/gai.conf rea precedence ::ffff:0:0/96 100 eest kommentaari tähistav sümbol (#).

Valige paigaldamisel vaikeväärtused.

Kloonimine

Loome praktikumi ülesannete jaoks taas kloonitud virtuaalmasina.

NB! Need kellel on olemas eelnevatest praktikumidest virtuaalmasina kloon ei pea uut klooni looma ja võib kasutada olemasolevat. Kontrollige siiski järgnevaid samme oma masinal.

  1. Lülitage virtuaalmasin kloonimiseks välja
  2. VirtualBoxis valige parem klahviga Andmeturve virtuaalmasinal ning seejärel:
    1. clone
    2. Linked Clone
    3. Generate new MAC addresses for all network adapters
    4. Clone.

Kujutis 1. Virtualbox klooni seaded.

NB! Kui teie füüsilises arvutis on piiratud koguses muutmälu RAM, andke Linux Mint virtuaalmasinale vähem mälu näiteks 2 GB ja sulgege füüsilises arvutis kõik üleliigsed programmid.

Selleks, et tegevused arusaadavamad oleks muutke ära kloonis hostname kujule perenimi-kloon ja samuti ka hosts failis.

$ sudo hostnamectl set-hostname perenimi-kloon
$ sudo nano /etc/hosts

Seejärel liigume edasi praktikumi ülesannete juurde.

Tulemüüri testimine

Nüüd käivitage mõlemad Andmeturve virtuaalmasinad edaspidi viidatud kui Põhimasin ja Kloon.

Põhimasin

Pange enda virtuaalmasinates Apache uuesti tööle, et kuulavaid porte oleks rohkem. Apache taaskäivitamisel küsitakse sertifikaadi parooli (vaikimisi oli selleks: "serveriparool")

$ sudo service apache2 restart
$ sudo service apache2 status

Kui teil apache2 millegipärast pole saate selle paigaldada käskudega:

$ sudo apt install apache2
$ sudo a2enmod ssl
$ sudo a2ensite default-ssl

DEBUG: Kui teil tekib probleeme Apache taaskäivitamiseg, siis võite proovida installida endale hoopis nginx serveri: https://phoenixnap.com/kb/how-to-install-nginx-on-ubuntu-20-04#:~:text=1%20How%20to%20Install%20and%20Configure%20Nginx%20on,...%207%20Test%20Nginx.%20...%208%20More%20items (Sammud 1-4)

Selgitage välja ja jätke meelde oma virtuaalmasina IP-aadress. Peaksite olema lokaalses võrgus: 192.168.10.1/24. /24 on lühikujul kirjutatud võrgumask, mis on pikal kujul 255.255.255.0.

Vihje: ip addr ls

Käsu netstat abil on võimalik uurida, millised TCP/UDP pordid on avatud ja millised võrguühendused on hetkel aktiivsed. Uuri järgmise kahe käsu väljundit:

$ sudo netstat -tua
$ sudo netstat -tulpn

Teine programm, millega saab leida avatud porte on võrguskänner nmap.
Installeerige nmap:

$ sudo apt install nmap

Kasutage seda oma virtuaalmasina IP-aadressi peal:

$ sudo nmap -sV localhost
$ sudo nmap -sV <oma_masina_ip>

NB! Pange tähele kuidas localhost käsu vastuses on rohkem avatud porte kui teie välist IP-d kontrollides (teie enda masinast).

Kloon

Nmap on mõeldud eelkõige teiste masinate skaneerimiseks. Seega proovige nmap käsku Andmeturve kloon virtuaalmasinast teie põhi virtuaalmasina IP peal.

$ sudo apt install nmap
$ sudo nmap -sV <oma_põhivirtuaalmasina_ip>

Võrrelge saadud vastust põhi-virtuaalmasinas tehtud nmap käsu väljundiga, kas leidsite mingi erinevuse?

Kujutis 2. Näidisvastus kloon masinast kontrollides oma põhimasina porte.

Põhimasin Järgnevalt katsetame nmap käsu erinevaid parameetreid. Võrdle iseseisvalt erinevate käskude väljundeid ja loe man nmap käsu abil mida vastavad võtmed muudavad nmap töös:

$ sudo nmap <oma_põhivirtuaalmasina_ip>
$ sudo nmap -v -O <oma_põhivirtuaalmasina_ip>
$ sudo nmap -v -A <oma_põhivirtuaalmasina_ip>

Iptables

Iptables on tööriist, mis võimaldab kasutajal manipuleerida Linuxi kernelisse ehitatud pakettide filtreerimise mehhanismiga. Meie kasutame seda lihtsa personaalse tulemüüri ehitamiseks.

Nii nagu iptables nimi vihjab, toimub filtreerimine tabelite põhiselt. Vaikimisi kasutatakse tabelit filter, mis on mõeldud tavaliste tulemüüriga seotud filtreerimiste jaoks. Tabelid omakorda koosnevad ahelatest, mida mööda paketid liiguvad ja kus neid filtreeritakse. Meil huvitavad vaikimisi kasutatavad ahelad: INPUT, OUTPUT ja FORWARD.

Väga lihtsustatult (tegelikult on iptables palju keerulisem) võime ette kujutada, et arvutis on kaks ahelat, mida paketid läbivad: INPUT sisse tulevate pakettide jaoks ja OUTPUT väljuvate pakettide jaoks.

Kujutis 3. Tulemüüri sisend- ja väljundahelad lihtsustatult.

Ahelaid on võimalik ka juurde luua ning pakette erinevate ahelate vahel suunata. Iga ahelaga saame seostada pakettide filtreerimise reegleid. Reegli juures kirjeldame, milliste pakettide kohta see reegel kehtib ja mida paketiga teha, kui see vastab sellele reeglile. Tuleb aru saada, et reeglite järjekord on oluline ning sellest sõltub, kunas pakett välja filtreeritakse.

Tulemüüri toime sõltub sellest, kuidas ahelad ja reeglid on seadistatud. Kui sissetulev pakett suunatakse INPUT ahelasse, siis hakatakse sellele järjest reegleid rakendama (vastavalt reeglite järjestusele) ning kui reegel ütleb, et pakett on keelatud, siis visatakse see minema ning järgmiste reegliteni see pakett enam ei jõua (see on välja filtreeritud).

Kujutis 4. Iptables filtreerimiskäsu näide

See reegel on seotud INPUT ahelaga (sissetulevad paketid), kehtib ainult pakettide kohta, mis tulevad eth0 võrguliidesesse ning määrab, et need paketid lükatakse tagasi. Teisisõnu blokeerib antud reegel kogu sissetuleva võrguliikluse eth0 võrguliidesel.

iptables tööriistaga saab seadistada ainult IPv4 aadresside ja NAT seadeid, kuid mitte IPv6 aadresside omi. Selleks on tööriist ip6tables, mis on analoogne iptables tööriistaga.

Tulemüüri skripti loomine

Selle praktikumi ülesandeks on kirjutada käsurea skript, mis sisaldab kõiki vajalikke käske iptables tulemüüri seadistamiseks. Iga kord, kui me soovime tulemüüri ümber seadistada, saame me muudatused kirjutada skripti ning siis selle uuesti käivitada.

Põhimasin

Alustuseks looge uus skriptifail nimega skript.sh (lihtne tekstifail) ning kirjutage selle skripti algusesse järgmised read:

#!/bin/sh
iptables -F 

#!/bin/sh ütleb järgnevale skriptile millist shelli kasutada (siinkohal system shell). Käsu iptables -F tulemusena eemaldatakse kõik olemasolevad reeglid ning taastab esialgse olukorra.

NB! Kõik iptables reeglite muutmise käsud peab edaspidi kirjutama sellese skripti. Iga kord kui soovite tulemüüri ümber seadistada, tuleb see skript käivitada nii:

$ sudo sh skript.sh

Selleks, et aru saada iptables käsu parameetritest uurige vastavat man lehte: man iptables. Järgmiseks lisage skripti logimisreeglid:

iptables -A INPUT -j LOG  --log-prefix="input "
iptables -A OUTPUT -j LOG --log-prefix="output "

Nende reeglite põhjal kirjutatakse iga vastuvõetud paketi kohta kirje /var/log/kern.log failis asuvasse logisse.

Iptables'i kasutamise juures on filtreerimise käskude järjekord väga tähtis! Kui te soovite näha juba lisatud filtreerimise reegleid, siis saate selleks kasutada järgmist käsku:

$ sudo iptables -L -nv --line-numbers

Kasutage seda käsku edaspidi, et kontrollida kas tulemüür on seadistatud korrektselt.

Kloon

Proovige kloon virtuaalmasinast enda põhi-virtuaalmasinasse SSH abil sisse logida.

Põhimasin

Otsige iptables logist ssh'ga seotud pakette:

$ sudo grep "DPT=22" /var/log/kern.log

DEBUG:

  • Kui grep käsuga mingit väljundit ei tule, siis kontrollige, kas olete põhimasinas logimisreeglid lisanud ning kas olete vastavad muudatused skriptifaili käivitamisega jõustanud.
  • Juhul kui SSH-ga ühendamine ei õnnestu, siis kontrollige kas virtuaalmasina SSH-teenus töötab (sudo service ssh status). Kui see ei aita, siis kontrollige, et te pole iptables abil enda ühendusi ära blokeerinud ja vajadusel tehke iptables -F.

Ühenduste lubamine/keelamine

Nüüd eemaldage praegused logimisreeglid ning keelake skriptis väljastpoolt masinasse uute ühenduste loomine kasutades järgmist nelja filtreerimise käsku:

Esimene reegel lubab kõik paketid, mis liiguvad läbi lo ehk loopback liidese. See on võrguliides, mida arvuti kasutab iseendale (localhost'le) pakettide saatmiseks.

iptables -A INPUT -i lo -j ACCEPT

Teine reegel lubab kõik vastuspaketid ehk paketid mis on seotud juba varasemalt lubatud ühendustega ehk aktiivsete seanssidega. Antud reegel lubab meil vältida varasemalt lubatud seanssidega seotud pakettide filtreerimist. Enamasti on tegu seest initsialiseeritud ühendustega näiteks veebilehitsejale mõeldud paketid koos veebilehe bittide ja baitidega, olukorras kus kasutaja on avaldanud veebilehitsejas soovi mingit veebilehte külastada. Sellest on oluline aru saada ning teil läheb seda reeglit vaja ka hiljem skripti koostamiseks!

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Kolmas reegel logib kõik ülejäänud paketid. Varasemate reeglite põhjal juba lubatud või keelatud pakettide kohta midagi logisse enam ei kirjutata.

iptables -A INPUT -j LOG --log-prefix "input-reject "

Neljas reegel keelab kõik ülejäänud paketid.

iptables -A INPUT -j REJECT 

Aktiveerige muudatused (käivitage skript) ja pärast seda uurige iptables seadistust sudo iptables -L -nv --line-numbers. Samuti uurige hetkel tulemüürile teada olevate seansside tabeli conntrack -L sisu ja proovige sellest aru saada (tehke seda ka hiljem) - küsige, kui aru ei saa. Vihjeks niipalju, et see on seotud eelmise punkti 2. reegliga. Rohkem infot conntrack kohta leiab siit: http://www.faqs.org/docs/iptables/theconntrackentries.html.

Veenduge, et pärast seda ei saa enam kõrvalmasinast teie masinasse logida.

Proovige muuta ühenduste keelamise viisi ja üritage aru saada kuidas need üksteisest erinevad. Ühenduse keelamise viisi asendamiseks/täpsustamiseks muutke viimast keelamisrida, nii et -j REJECT asemel kasutataks -j DROP:

iptables -A INPUT -j DROP

Pärast muudatust skriptifailis käivitage skript ja proovige jälle kloon-masinast põhiarvutisse SSH abil sisse logida.

Kujutis 5. Näide Reject ja Drop väljunditest.

Lugege iptables manuaali ja vaadake, missuguseid teisi valikuid saab kasutada koos - j REJECT --reject-with parameetriga.

Proovige erinevate keelamisviiside mõju nmap'i väljundile. Antud juhul on vajalik -Pn, kuna ping on meie reeglite järgi keelatud.

Nüüd modifitseerige skripti ning lubage SSH porti (22) saabuvad paketid. Lisame ka sisenevate SSH ühenduste logimiseks eraldi reegli. Pange järgnevad kaks reeglit skriptis iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT rea järgi.

iptables -A INPUT -m state --state NEW -p tcp --dport 22 -j LOG --log-prefix "ssh yhendused: "
iptables -A INPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT

Salvestage ja käivitage skript. Veenduge, et üle ssh ühenduse loomine ja logimine töötab kloon-arvutist põhivirtuaalmasinasse.

Tekitage reegel ping (ICMP echo) lubamiseks ja lisage SSH reeglite ette skriptis:

iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

Täiendage SSH ja ICMP1 reegleid nii, et need lubaksid ühendusi ainult mingite kindlate IP-aadresside pealt. IP-aadressi põhjal filtreerimiseks saab kasutada iptables käsu --source või -s lippu:

iptables -A INPUT -s 192.168.1.210,192.168.1.211 -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -s 192.168.1.210,192.168.1.211 -m state --state NEW -p tcp --dport 22 -j LOG --log-prefix "ssh yhendused: "
iptables -A INPUT -s 192.168.1.210,192.168.1.211 -m state --state NEW -p tcp --dport 22 -j ACCEPT

1 Interneti kontrollsõnumiprotokoll. https://et.wikipedia.org/wiki/Interneti_kontrolls%C3%B5numiprotokoll

NB! Testige, et lubatud "õigest" arvutist saab teie masinat pingida ning SSH kaudu sisse logida, aga teistest arvutitest seda teha ei saa (muutke varasemalt lubatud arvuti IP skriptist valeks ja proovige uuesti). Probleemide korral kontrollige skripti reeglite järjekorda.

Lisage veel juurde ka HTTP port 80, HTTPS ja SMTP serveri portide lubamine naaberarvutitest. Selleks peame teadma levinud teenuste kokkuleppelisi vaikimisi kasutatavaid pordinumbreid, mida on mugav meelde tuletada näiteks Wikipedia vastavast tabelist https://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers . Õppejõu skripti näidiskood, mis ei sisalda HTTPS ja SMTP tulemüüri reegleid ja võiksite iseseisvalt lisada modifitseerides olemasolevaid näiteid.

#!/bin/sh
iptables -F

iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -s 192.168.1.210,192.168.1.211 -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -s 192.168.1.210,192.168.1.211 -m state --state NEW -p tcp --dport 22 -j LOG --log-prefix "ssh yhendused: "
iptables -A INPUT -s 192.168.1.210,192.168.1.211 -m state --state NEW -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 80  -j ACCEPT
iptables -A INPUT -j LOG --log-prefix "input-reject "
iptables -A INPUT -j REJECT

Käivitage skript ja tutvuge iptables olekuga kasutades käsku sudo iptables -L -nv --line-numbers.

NB! Enne järgmise ülesande juurde minemist võiks teha koopia praegusest skriptist, et teil oleks võimalik praegust olukorda taastada, kui hiljem kogemata skripti ära lõhute.

Uute ahelate loomine

Sellisel viisil IP-põhiste reeglite lisamine on tihti vajalik, aga mis juhtub, kui naabreid on väga palju? Suure arvu lubatud IP-aadresside ja protokollide korral kasvab iptables reeglite arv väga kiiresti. Kümne protokolli ja pordi avamine 10 naabri jaoks nõuaks meilt 100 filtreerimise reeglit.

Selliste olukordade lihtsustamiseks saab kasutada uusi filtreerimise ahelaid. Kasutaja poolt defineeritud iptables ahelaid võib käsitleda sarnaselt funktsioonide või meetodite kasutamisele programmeerimises. Nendesse saab kokku koguda kõik teatud olukorras vajalikud reeglid ning selle olukorra tekkimisel saab paketid sinna ahelasse suunata, kus neid reegleid siis rakendatakse. Iptables ahelate kohta saate lugeda iptables manuaalist või näiteks viidatud blogipostitusest.

Meie soovime teatud hulgale naabriarvutitele lubada SSH, ICMP, HTTP, HTTPS ja SMTP protokolle. Selleks saame me luua uue NAABRID ahela ning sinna panna kõik nende protokollidega seotud filtreerimise reeglid. Edaspidi, kui pakett tuli naabri IP-aadressilt, saame selle paketi lihtsalt suunata sinna ahelasse (sarnaselt funktsiooni välja kutsumisega programmeerimises).

Modifitseerige iptables skripti nii, et koondada naabrite grupi jaoks mõeldud reeglid eraldi ühisesse NAABRID ahelasse, ning suunake kõik naabrite IP-aadressilt saabuvad paketid sinna ahelasse.

Kujutis 6. Naabrid ahela loogika järjestus.

Järgmine reegel loob uue naabrite ahela (paigutage see skripti algusesse peale iptables -F rida):

iptables -N naabrid

Lisage skripti algusesse peale iptables -F rida ja enne eelnevat uuesti loomist ka reegel, mis eemaldab süsteemist naabrid ahela, et teie skript saaks selle uuesti luua. See on vajalik, sest iptables -F ei eemalda süsteemist naabrite ahelat ja kui teie skript üritaks seda uuesti luua siis saaksite igakord käivitamisel veateate (nüüd ainult skripti esimesel käivitamisel, et naabrid nimeline ahel ei eksisteeri).

iptables -X naabrid 2>/dev/null # Vaikselt eirame viga, kui ahel puudub esimesel korral

Liigutage kõik naabritele kehtivad reeglid (SSH, ICMP, HTTP, HTTPS ja SMTP) NAARBID ahelasse ning lisage ahela lõppu reegel, mis suunab paketid tagasi eelmisesse ahelasse (-j RETURN abil):

iptables -A naabrid ...
iptables -A naabrid ...
iptables -A naabrid ...
iptables -A naabrid ...
iptables -A naabrid -j RETURN

Seejärel lisage INPUT ahelasse filtreerimise reeglid naabrite arvutitest pärit (IP järgi) pakettide suunamiseks NAABRID ahelasse:

iptables -A INPUT -s 192.168.XX.ZZZ,192.168.YY.XYZ -j naabrid 

Lisage logimise reegel, mis logib kõik naabrite ahelasse saabunud paketid nii, et logimise teade oleks kujul: "Perenimi-NAABRID-ahel", kus siis "Perenimi" on asendatud teie nimega. NB! maksimaalne lubatud --log-prefix parameetri väärtus on kuni 29 tähemärki, seega kui teil on väga pikk perenimi lühendage nime või sõnumit.

Tulemus võiks iptables väljundis välja näha näiteks selline (ei pea olema täpselt sama, see on näidis vihjeteks ja enesekontrolliks).

Kujutis 7. sudo iptables -L -nv --line-numbers väljund.

NB! Testige kindlasti üle, et loodud skript töötab korrektselt. Ärge unustage, et iptables kontrollib reegleid järjestikku, seega reeglite järjekord skriptis on väga oluline. Kontrollige, et lubatud arvuti IP-lt saab teie masinat pingida ning SSH kaudu sisse logida ja "valelt" IP-lt ei saa (modifitseerige varasemalt lubatud arvuti IP skriptis "valeks" ja proovige uuesti). Testimiseks kasutage kloon virtuaalmasinat.

Iseseisev ülesanne

  • 10-1: Arvestuse saamiseks esitage oma skript.sh tekstilisel kujul, mis sisaldab naabrite jaoks ühise ahela kasutamist ja vastab järgmistele nõuetele:
    1. INPUT ahel peab sisaldama lokaalsete ühenduste (-i lo) ning varasemalt juba lubatud ühenduste (-state ESTABLISHED,RELATED) reegleid.
    2. INPUT ahelas peavad olema reeglid naabrite ahelasse IP'de järgi suunamiseks.
    3. Naabrite ahelas peavad olema reeglid ICMP, SSH, HTTP, HTTPS ja SMTP lubamise kohta.
    4. Skriptis peab olema logimise reegel, mis logib kõik naabrite ahelasse saabunud paketid nii, et logimise teade oleks kujul: "Perenimi-NAABRID-ahel", kus siis "Perenimi" on asendatud teie nimega.
      • NB! maksimaalne lubatud --log-prefix parameetri väärtus on kuni 29 tähemärki, seega kui teil on väga pikk perenimi lühendage nime või sõnumit.
    • Kõik teised ühendused/paketid peavad olema keelatud.
    • Kui teil testimise käigus selgub et mõni port on puudu siis pordi 25 saate kui teete käsud:
      1. sudo apt remove postfix
        • apt remove eemaldab programmi binaarid aga mitte konfiguratsioonifailid.
      2. sudo apt purge postfix
        • purge eemaldab lisaks ka konfiguratsioonifailid, pärast mida saab programmi uuesti paigaldada.
      3. sudo apt install postfix (valige vaikeväärtused paigaldades)
      • Pordid 80 ja 443 on apache veebiserveri teenindada, kui teil need pordid puudu on, siis proovige apache veebiserver uuesti käima panna.

NB! Testige kindlasti, et skript töötab. Selgelt vigase ja testimata skripti esitamise eest on tulemuseks 0 punkti!

  • 10-2: Tehke ekraanitõmmis oma skripti testimise tõestuseks nii, et kahes kõrvutiolevas terminaliaknas oleks näha tegevused nii nagu need on järgnevas tabelis kirjeldatud.
Vasak terminaliakenParem terminaliaken
Andmeturve Linux MintEsialgu Andmeturve Linux Mint hiljem kloon virtuaalmasin
teie IP-aadress käsuga hostname -I 
käsk, mis eemaldab olemasolevad iptables reeglid sudo iptables -F 
uurige millised pordid on kuulamas teie masinas sudo nmap -sV -O localhost 
käivitage enda iptables skript sudo sh skript.sh 
  tehke ssh ühendus naabri ahelas olevasse IP-ga kloon virtuaalmasinasse X ssh kasutaja@kloon-VM-IP
  kasutage nmap-i, et skaneerida arvutist X enda IP-ga seotud porte sudo nmap enda-ip-aadress
  logige naabri ahela arvutist välja exit
Modifitseerige nano skript.sh käsuga tulemüüri seadistust nii, et klooni IP ei oleks naabrite ahelas 
käivitage enda iptables skript sudo sh skript.sh uuesti 
Kirjuta terminali käsureale enda eesnimi ja perenimi käsuga echo "Eesnimi Perenimi" 
  tehke ssh ühendus kloon virtuaalmasinasse, mis seekord pole naabrite ahelas ssh kasutaja@kloon-VM-IP
  kasutage nmap-i, et skaneerida kloonist enda IP-ga seotud porte sudo nmap enda-ip-aadress
  logige kloonist välja exit

Ekraanipilt võiks välja näha midagi sellist:

Kujutis 8. Skripti testimise näidisväljundid.

IPv6 ja turvalisus

Käesolevas ja varasemates praktikumides oleme keskendunud peamiselt IPv4 võrguühenduse näidetele ja turvalisusele. Samas IPv6 on juba aastaid kasutusel ja enamik kaasaegseid operatsioonisüsteeme toetab IPv6. Kuigi IPv6 on iga päevaga järjest populaarsem on IPv6 veel siiski "uus" asi paljude jaoks ja isegi Interneti avarustest on suhteliselt raske leida kvaliteetseid IPv6 turvalisust tutvustavaid videosid. Samas väga paljud pahalased kasutavad viimastel aastatel just inimeste (k.a. IT-spetsialistide) vähest teadlikkust IPv6-st rünneteks ära.

IPv6 loomise vajalikkus

IPv4 kasutab 32-bitiseid aadresse, mis teoreetiliselt võimaldab umbes 4,3 miljardit unikaalset aadressi. Interneti ja sellega ühendatud seadmete arvu eksponentsiaalse kasvu tõttu hakkas see aadressiruum aga kiiresti ammenduma ning selle ajutiseks lahenduseks loodi NAT2 ehk võrguaadresside teisendus. NAT on marsruuterite (ruuterite) tehnika, mis teisendab avalikud IPv4-aadressid lokaalseteks IPv4-aadressideks, et iga võrguga ühendatud seade ei kasutaks ära üht avalikku IPv4 aadressi, vaid võrguliiklus suunatakse avaliku aadressiga ruuterisse, mis omakorda edastab liikluse kohalikus võrgus õigele seadmele. Seeläbi on võimalik näiteks ühe kontorikorruse kõik seadmed peita ühe IPv4 aadressi taha.

IPv6 loodi selleks, et pakkuda palju suuremat aadressiruumi, kasutades 128-bitiseid aadresse, mis võimaldavad kasutada 2128 IPv6 aadressi ehk triljoneid kordi rohkem unikaalseid aadresse3. IPv6 pakub tohutult palju aadresse, mistõttu on teoreetiliselt võimalik igale internetti ühendatud seadmele anda unikaalne avalik aadress. See on üks IPv6 peamisi eeliseid, kuna see vähendab vajadust võrguaadresside tõlkimise (NAT) järele ja aadresside puudus ei ole teoreetiliselt võimalik praeguste eelduste kohaselt.

Kujutis 9. IPv4 ja IPv6 võrdlustabel. https://www.avast.com/c-ipv4-vs-ipv6-addresses

Proovige muuta oma skript.sh kasutama ka IPv6 põhiseid IP-aadresse kasutades ip6tables tööriista.


2 Network address translation. https://en.wikipedia.org/wiki/Network_address_translation
3 IPv6 Address Math. https://www.reddit.com/r/ipv6/comments/utfxqa/ipv6_address_math/

Enda valmisolekut IPv6 kasutamiseks saate mugavalt testida lehel https://test-ipv6.com. Kontrollige kas ka teie teenusepakkuja on teile IPv6 aadressi eraldanud. Kui teil on IPv6 aadress olemas, siis võite järgnevaid harjutusi katsetada ka enda seadme aadressidega.

IP-aadresside analüüs

Järgmiseks analüüsime õppejõu seadme IPv4 ja IPv6 aadresse Windowsi ipconfig väljundist:

Wireless LAN adapter Wi-Fi:

   Connection-specific DNS Suffix  . : lan
   IPv6 Address. . . . . . . . . . . : 2001:7d0:87e9:ce00:a6c2:9709:2c99:739a
   Temporary IPv6 Address. . . . . . : 2001:7d0:87e9:ce00:f841:bf32:6197:3209
   Link-local IPv6 Address . . . . . : fe80::974b:e4de:c862:ce25
   IPv4 Address. . . . . . . . . . . : 192.168.1.219
   Subnet Mask . . . . . . . . . . . : 255.255.255.0
   Default Gateway . . . . . . . . . : fe80::d635:1dff:fed1:b57d
                                       192.168.1.1

Uurige esmalt väljundit iseseisvalt ning mõelge, mida erinevad aadressid teie arvates tähendada võiksid. Võite küsida analüüsil abi tekstirobotitelt.

Seejärel minge leheküljele https://whatismyipaddress.com/ip-lookup ning sisestage erinevaid väljundi ip-aadresse:

  1. Milliste IP-aadresside kohta andis lehekülg rohkem infot?
  2. Kus lehekülje arvates õppejõu seade asub?
  3. Mis on õppejõu ISP ehk interneti teenusepakkuja?

Loodetavasti leidsite eelnevatele küsimustele vastused ja saame nüüd arutleda. Tõenäoliselt tekkis küsimus, miks osad IP-aadressid annavad tulemusi ja osad ei anna. Nagu varem mainisime, siis enamjaolt ei omistata seadmetele avalikke IPv4 aadresse nende vähese arvu tõttu ning selle asemel eraldatakse igale seadmele privaatne IP-aadress, mis ei oma väljaspool ruuteri sisevõrku mingit tähendust. Ka näiteks fe80 algusega IPv6 aadressid on privaatsed aadressid, täpsemalt linklokaalsed, mida kasutatakse ainult kohtvõrkudes (ei marsruudita Internetti). See-eest näiteks 2001 algusega IPv6 aadressid on globaalsed monoaadressid ehk need on läbi Interneti ligipääsetavad ja seadmepõhised. Pange tähele, et seadmel on ka Temporary IPv6 Address, mis on samuti seadmepõhine, kuid muutub mingi operatsioonisüsteemi poolt ettemääratud intervalliga, et säilitada anonüümsust.

Rohkem infot erinevate IPv6 prefiksite kohta leiab siit: https://www.ripe.net/participate/member-support/lir-basics/ipv6_reference_card.pdf

IP-aadressid ja asukoha määramine

Mis puutub aga seadme asukohta, siis kuigi õppejõu asukohaks näidati eelnevas peatükis Tallinna linna ümbrust, asus õppejõud väljundi hetkel hoopis Tartus. Asukohaks on määratud ISP asukoht ehk antud juhul Telia peakontori asukoht ja selle ümbrus. Selle põhjuseks on, et IP-aadressid aadressid on seotud nende omaniku (väljastaja) informatsiooniga mitte kasutaja. Antud näites on Telia Eesti AS IP-aadressi omanik ning meie oleme selle kasutaja. Mõningal juhul võib siiski IP-aadresside asukoht olla täpsem. Leiame näiteks oma aadressi ülikooli sisevõrgus olles:

  1. Ühenduge ülikooli sisevõrku läbi eduroam WiFi, võrgukaabli või VPN-i
    • NB! Soovituslik on lülitada ka klassiruumis VPN sisse, vastasel juhul ei pruugita teile IPv6 aadressi eraldada.
  2. Minge leheküljele https://whatismyipaddress.com/ ning oodake, kuni lehekülg mõlemad IP-aadressid leiab
  3. Vaadake lehekülje kaardi pealt oma asukohta ning leidke millist ip-aadressi selle leidmiseks kasutatakse
  4. Vajutage vastava ip-aadressi peale lisainfo saamiseks
    • Mis on teie umbkaudne asukoht nüüd?
    • Mis võiks olla selle põhjus?
    • Mis võiks olla tulemus siis kui korrata harjutust välismaal olles läbi VPN-i?

10-3: Esitage ekraanivaade, kust on IP-aadressi abil näha, et teie asukoht on Tartu linnas ning teenusepakkuja on Haridus- ja Teadusministeerium.

Reaalsuses ei ole võimalik igaühel ainult ip-aadressi teades teie asukohta välja uurida4. Siinkohal on IPv6 nii plussid kui miinused:

  • IPv6 puhul ei sega NAT seadme täpsema asukoha määratlemist, kuid see-eest peavad geolokatsiooniteenused tegelema suure hulga individuaalsete avalike aadressidega, mitte ainult ühe ruuteri aadressiga.
  • IPv6-l on tohutult palju unikaalseid aadresse, seega võib see teoreetiliselt võimaldada täpsemat seadmete tuvastamist, k.a asukoha määramist, kuid annab võimaluse teenusepakkujal luua keerulisemaid jaotussüsteeme, mis ei pruugi lõppkasutajatele alati selgelt geograafilist asukohta peegeldada.
  • Võrreldes IPv4-ga on IPv6 geolokatsiooni andmebaasid sageli vähem ulatuslikud ja täpsed. IPv4 on olnud kasutusel palju kauem, mis on andnud rohkem aega andmete kogumiseks ja verifitseerimiseks. Samuti kuna IPv6 pole veel kõikjal laialdaselt kasutuses, võib geolokatsiooni andmete kättesaadavus ja täpsus piirkonniti erineda.

4 How Do I Get Someone’s Location From An IP Address?. https://youtu.be/iiPdmJrKa5g?si=Rr-hje8cXv7YblcN.

Ohud IPv6 puhul

Kuigi IPv6 on täiustatum variant IPv4-st, leidub siiski ohte, mis on mõnevõrra kaalukamad just IPv6 puhul5:

  • Portide skaneerimine - sarnaselt praktikumi esimeses osas tehtule on võimalik skaneerida mingi kindla seadme avatud porte ning rünnata seadet läbi avatud portide turvaaukude. IPv6 puhul on rünnet mõnevõrra kergem läbi viia, kuna see on rohkem seadmepõhine kui IPv4.
  • DoS/DDos - ründaja võib üritada üle koormata sihtmärgi seadme või võrgu ressurssi, saates suures koguses pahatahtlikku liiklust just sihtmärgi IPv6 aadressile.
  • Fragmentatsiooni rünnakud - ründajad saavad pahatahtliku koodi jagada mitmeks fragmendiks, millest igaüks eraldi ei tundu ohtlik. Tulemüürid ja IDS-id6 ei pruugi kõiki fragmente korrektselt kokku panna ja analüüsida, mistõttu on võimalik neist mööda hiilida. Kuigi see rünnak toimib ka IPv4 peal, siis IPv6 puhul on seisneb üks erinevus selles, et vaheruuterid ei tohi ise fragmenteerida, mistõttu väheneb selle rünnaku keerukus marsruudil.

Nagu näha, siis paljud ohud seisnevad selles, et IPv6 aadressid on seadmepõhisemad kui IPv4 aadressid, mille puhul käitus NAT justkui tulemüürina. Praktikas ei tohiks kunagi NAT-i võtta kui tulemüüri, kuid paljud IT-spetsialistid on arendustööl just nii mõelnud, seega on IPv6 puhul NAT-i puudumine paljudele rakendustele ühe kaitsekihi eemaldamine. Just see on üks põhjus, miks üks eeskujulik IT-spetsialist peab olema kursis IPv6 eripäradega ning nendega arvestama.

  • 10-4: Millised 3 uut rünnakut teeb IPv6 tehnoloogia võimalikuks võrreldes "IPv4 only" võrguga?
  • 10-5: Linux ja MacOS tulevad vaikimisi "avatud" või mitteaktiivse tulemüüriga võrreldes Microsoft Windows'iga, kus tulemüür on vaikimisi seadistatud "sissetulevatele ühendustele" (Enabled on incoming trafficking). Leidke Internetist põhjendus ja kirjutage enda sõnadega paari lausega eesti keeles: Miks Linux ja MacOS on otsustanud vaikimisi tulemüüri mitte aktiveerida sissetulevatele ühendustele võrreldes Windowsiga, kus tulemüür on vaikimisi aktiivne sissetulevatele ühendustele?
  • 10-6: IPv6 ei kasuta ARP tehnoloogiat IP-aadresside jagamiseks, seega ei saa teha ka ARP spoof rünnet (8. praktikum). Mis nime kannab teie arvates ARP spoofile sarnane rünne IPv6 aadressiruumis? Põhjenda paari lausega (lisa viide millisele veebilehele/videole pärineb sinu vastus).

5 IPv6 Security: Attacks and Countermeasures in a Nutshell. https://www.usenix.org/system/files/conference/woot14/woot14-ullrich.pdf
6 Sissetungituvastuse süsteem, IDS. https://akit.cyber.ee/term/798-sissetungi-tuvastuse-susteem-ids

Videomaterjalid

Et saada veelgi detailsemat ülevaadet IPv6 kohta, siis oleme lisanud mõned videod vaatamiseks.

Esimene video tutvustab pfsense (vabavaraline tulemüüri ja ruuteri tarkvara) näitel kuidas IPv6 kodustes tingimustes testida saab:

Teine video keskendub juba täpsemalt IPv6 turvanüannsidele, kuid eeldab osalejatelt varasemaid teadmisi IPv6 võrgundusest:

Lisalugemine:

  • IPv6 Security Guide: Do you Have a Blindspot? https://www.varonis.com/blog/ipv6-security/
  • Teadusartikkel: IPV4/IPV6 security and threat comparisons https://www.sciencedirect.com/science/article/pii/S187704281000902X
  • IPv6 protokolli tutvustav tekst: https://www.geeksforgeeks.org/what-is-ipv6/
  • Ka IPv6 üldse kunagi asendab IPv4 ? https://www.networkworld.com/article/3254575/what-is-ipv6-and-why-aren-t-we-there-yet.html

Vabatahtlik IPv6 lisamaterjal (tudengite saadetud soovituslikud IPv6 lingid):

  • Cisco IPv6 Security: https://www.cisco.com/c/dam/global/en_sg/training-events/advantage_now/assets/pdfs/ipv6__security__ericvyncke.pdf
    • See on hea kokkuvõtlik materjal Cisco ja NetAcadi võrgutehnoloogia tasulisest kursusest. Nagu agendas märgitud räägitakse algul IPv4 ja IPv6 ühistest murekohtadest ning siis minnakse edasi IPv6 turvalisusele. Materjalist saab ka sissejuhatuse IPv6-le ning räägib, miks see vajalik ja selle võimalustest.
  • Cisco IPv6 Security Best Practices: https://www.cisco.com/web/SG/learning/ipv6_seminar/files/02Eric_Vyncke_Security_Best_Practices.pdf
    • See on sisuliselt sama asi, mis eelnev materjal, kuid natuke põgusam teemade osas.
  • Cisco Advanced IPv6 Security Threats and Mitigation slaidid: https://www.ciscolive.com/c/dam/r/ciscolive/emea/docs/2020/pdf/BRKSEC-3200.pdf
  • Video samal teemal - Advanced IPv6 Security Threats and Mitigation - BRKSEC 3200:
  • Artiklis kirjeldatakse paljusid üldtuntud IPv4 ohte ning võrreldakse kuidas need või sarnased ohud võivad IPv6 võrku mõjutada. Lisaks on artiklis välja toodud ka uued IPv6-le omased ohud.
    • https://www.hpc.mil/images/hpcdocs/ipv6/cisco_ipv6_and_ipv4_threat_comparison_and_best_practice_0304.pdf
  • Materjali algul tutvustatakse lühidalt ka teema tausta: räägitakse sellest, miks IPv6 üldse vajalik on; räägitakse, kuidas toimub üleminek IPv4-lt IPv6-le ning ka sellest, mida IPv6 endast üldse kujutab. Sissejuhatus on kompaktne, kuid ülevaatlik. Peale seda on ülevaatlikult tutvustatud erinevaid nõrkuseid ning võimalikke ründeid, mida IPv6 võimaldab. Kirjeldused ei ole liiga mahukad ega detailseid, kuid annavad siiski hea ülevaate. Lõpus on ka mainitud viise, mida saab nõrkuste kaitseks teha.
    • https://www.usenix.org/system/files/conference/woot14/woot14-ullrich.pdf
  • IPv6 kommunikatsioonijuht kirjutab 30 leheküljel, mis on IPv6 võimalused ja turvalisuse eelised.
    • https://ipv6now.com.au/LookupBook2ndEd.pdf

Boonus: Kui leiate Internetist vabalt kättesaadava (tasuta ja ei vaja sisselogimist) video või iseseisva lugemise IPv6 turvalisuse kohta, mida teie arvates võiks ülesande kirjelduses kasutada meie näidete asemele saatke link ja lühike kirjeldus materjali sisu kohta alo.peets@ut.ee ja võite teenida boonuspunkte.

Praktikumi ülesanded

Praktikumi ülesannete lahendamine annab neli punkti ja esitamiseks on kaks nädalat alates praktikumi toimumisajast (Personaalne tähtaeg vahemikus 28. aprill - 01. mai).

  • 10-1: Esitage praktikumi juhendis kirjeldatud nõuetele vastav skript.sh tekstilisel kujul, mis sisaldab naabrite jaoks ühise ahela kasutamist. - 1p
  • 10-2: Tehke ekraanitõmmis nii, et kahes kõrvutiolevas terminaliaknas oleks näha tegevused nii nagu need on juhendis kirjeldatud (vt näidispilti ja kirjeldust). - 2p
  • 10-3: Esitage ekraanivaade, kust on IP-aadressi abil näha, et teie asukoht on Tartu linnas ning teenusepakkuja on Haridus- ja Teadusministeerium. - 0.3p
  • 10-4: Millised 3 uut rünnakut teeb IPv6 tehnoloogia võimalikuks võrreldes "IPv4 only" võrguga? - 0.3p
  • 10-5: Linux ja MacOS tulevad vaikimisi "avatud" või mitteaktiivse tulemüüriga võrreldes Microsoft Windows'iga, kus tulemüür on vaikimisi seadistatud "sissetulevatele ühendustele" (Enabled on incoming trafficking). Leidke Internetist põhjendus ja kirjutage enda sõnadega paari lausega eesti keeles: Miks Linux ja MacOS on otsustanud vaikimisi tulemüüri mitte aktiveerida sissetulevatele ühendustele võrreldes Windowsiga, kus tulemüür on vaikimisi aktiivne sissetulevatele ühendustele? - 0.2p
  • 10-6: IPv6 ei kasuta ARP tehnoloogiat IP-aadresside jagamiseks, seega ei saa teha ka ARP spoof rünnet (8. praktikum). Mis nime kannab teie arvates ARP spoofile sarnane rünne IPv6 aadressiruumis? Põhjendage paari lausega ning lisage viide milliselt veebilehelt/videost pärineb sinu vastus. - 0.2p

Otselink Moddle keskkonda esitamiseks: https://moodle.ut.ee/mod/assign/view.php?id=1276012

Vabatahtlik lisaülesanne - Väljuvate ühenduste piiramine

Kui te soovite piirata mingi kindla arvuti kasutaja pakette, siis saab kasutada sellist reeglit:

iptables -A OUTPUT -m state --state NEW -m owner --uid-owner=kasutaja -j DROP

Tekitage reeglid, et "kasutaja" saaks ainult veebi sirvida. (Millised erinevad võimalused selleks on? Nende puudused?)

NB! Veebisirvimise jaoks on vajalik ka nimelahenduse (DNS) lubamine - UDP port 53. Vaadake erinevate teenuste pordinumbreid failist /etc/services

Praktiline lisainfo - Tulemüüri seadistamine üle võrgu.

Praktikas tuleb tihti tulemüüri konfigureerida üle võrgu. Et vältida sellises olukorras kogemata enda süsteemist väljalukustamist (nagu ülevalolev käsk teeb), on mõistlik enne sellise reegli sisestamist paika panna varuvariant, mis eelneva olukorra automaatselt taastab.
Näiteks võib tekitada endale käivitatava skripti, sisuga iptables -F, mis kõik olemas olevad iptables reeglid kustutab ning siis käivitada see viitega:

# at -f /täis/tee/skriptini.sh now+10 minutes

Sel juhul kui te ennast kogemata süsteemist välja lukustate, taastatakse esialgne olukord automaatselt 10 minuti möödudes. Praktikumi masinates käsku at ei ole, aga vastava paketi võib sinna paigaldada:

$ sudo apt install at

Lisainfo...

  • iptables diagramm
  • Arvutiteaduse instituut
  • Loodus- ja täppisteaduste valdkond
  • Tartu Ülikool
Tehniliste probleemide või küsimuste korral kirjuta:

Kursuse sisu ja korralduslike küsimustega pöörduge kursuse korraldajate poole.
Õppematerjalide varalised autoriõigused kuuluvad Tartu Ülikoolile. Õppematerjalide kasutamine on lubatud autoriõiguse seaduses ettenähtud teose vaba kasutamise eesmärkidel ja tingimustel. Õppematerjalide kasutamisel on kasutaja kohustatud viitama õppematerjalide autorile.
Õppematerjalide kasutamine muudel eesmärkidel on lubatud ainult Tartu Ülikooli eelneval kirjalikul nõusolekul.
Courses’i keskkonna kasutustingimused