iptables

Ettevalmistus

Kõik edasine toimub rooduna

Installige vajalik tarkvara:

# apt-get install nmap wireshark netcat iptables

Selgitage välja (ja jätke meelde) oma arvuti IP aadress (päris aadress, mitte loopback!)

# ip addr ls

Uurige 'netstat -tua' - millised TCP/UDP pordid on avatud, millised ühendused on hetkel loodud.

Seejärel tehke:

# nmap oma_masina_ip

Ja siis sama oma naabri masinaga. Proovige naabri masinasse ssh-ga sisse logida.

Wireshark kasutamine

Wireshark abil saab näha kõiki pakette, mis võrguliidesest läbi käivad. Selleks, et Wireshark saaks võrguliidest pealt kuulata, tuleb ta käivitada root õigustes. Kuna tegemist on graafilise programmiga, siis selle root õigustes käivitamiseks andke tavakasutajana käsk:

$ kdesudo wireshark

Teile antakse hoiatus, et root õigustes tuleb ettevaatlik olla ja küsitakse tavakasutaja parooli.

Vajutage Wiresharki tööriistaribal nupule "List available capture interfaces..." (kõige vasakpoolsem nupp tööriistaribal) ja alustage pakettide püüdmist sellel võrguliidesel, mille IP aadressi te eelnevalt juba välja selgitasite.

Pakettide püüdmise lõpetab nupp "Stop the running live capture" Korrake nmap ja ssh punkte - püüdke väljundist aru saada ning kui ei saa, küsige, kuni saate.

Vahel, kui võrguliiklus on tihe, võib wiresharki väljund tunduda liiga kirju. Otsitava informatsiooni väljafiltreerimiseks võib kasutada erinevaid filtreid (trükkida Wiresharki filtriribale):
ip.addr == 192.168.1.253 - Näitab ainult pakette, mis kas pärinevad või on suunatud antud aadressile
tcp.port == 22 - Näitab ainult pakette, mis kas pärinevad või on suunatud TCP porti 22
Erinevaid filtreid saab kombineerida loogiliste tehetega: &&, ||, !

IPTables

IPTables on tööriist, mis võimaldab kasutajal manipuleerida Linuxi kernelisse ehitatud pakettide filetreerimismehhanismiga. Meie kasutame seda täna lihtsa personaalse tulemüüri ehitamiseks.

Väga lihtsustatult (tegelikult on IPTables palju keerulisem) võime ette kujutada, et meil on kaks ahelat, mida paketid läbivad: INPUT ja OUTPUT.

Ahelaid on võimalik ka juurde luua ning pakette nende vahel suunata. Iga ahelaga saame seostada reegleid. Reegli juures kirjeldame, milliste pakettide kohta see reegel kehtib ja mida teha, kui mõni pakett vastab sellele reeglile.

Näide:

# iptables -A INPUT -i eth0 -j REJECT

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

Tekitage lihtne skript (tekstifail), mille alguses on:

# !/bin/sh
# 
iptables -F 

(iptablesi reeglite muutmise käske kirjutage edaspidi faili ning siis laadige skripti käivitades uued reeglid)

# sh skript.sh

Kehtestage logimisreeglid:

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

Vaadake reegleid:

# iptables -L -nvx

(Tehke seda ka edapidi, et näha mis toimub!)

Proovige uuesti naabri masinasse logida ning võrrelge Wiresharki väljundit ning iptablesi logi, pange eraldi aknas jooksma

# tail -f /var/log/kern.log

Keelake väljastpoolt masinasse uute ühenduste loomine: (enne eemaldage logimisreeglid)

Miks on esimene reegel vajalik?

iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -j LOG --log-prefix "input-reject "
iptables -A INPUT -j REJECT 

Uurige hetkel tulemüürile teada olevate seanssde tabeli /proc/net/ip_conntrack sisu (cat abil) ja proovige aru saada (tehke seda ka hiljem) - küsige, kui aru ei saa. Vihjeks niipalju, et see on seotud eelmise punkti 2. reegliga.

Veenduge, et pärast seda ei saa enam kõrvalmasinasse logida (isegi IP-aadresse kasutades). Uurige Wiresharki abil, mis toimub võrgus.

Proovige ühenduste keelamist erineval moel ja uurige kuidas need töötavad. Selleks muutke viimast keelamisrida, nii et action oleks REJECT asemel üks järgnevatest ning uurige iga kord Wiresharki abil, mis toimub, kui naaber üritab teie masinasse logida:

-j REJECT -p tcp --reject-with tcp-reset
-j DROP

Lugeda man iptables ja vaadata erinevaid --reject-with võtme argumente.

Proovige erinevate keelamisviiside mõju nmap'ile. (vajalik -P0, kuna ping on keelatud)

Lubage ssh (pange reegel ise õigesse kohta!)

iptables -A INPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT

Tekitage sisenevate ssh ühenduste logimiseks eraldi reegel. Veenduge, et logimine töötab.

Tekitage reegel ping-i (ICMP echo) lubamiseks:

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

Täiendage ssh ja icmp reegleid nii, et nad lubaksid ühendusi ainult 2-3 naaberarvutist (leidke ise naabrid), lisage veel juurde ka HTTP ja SMTP serveri portide lubamine.

Koondage naabrite jaoks mõeldud reeglid eraldi ahelasse (reeglid peaksid minema lihtsaks)

iptables -N naabrid
iptables -A naabrid ...
iptables -A naabrid ...
iptables -A naabrid -j RETURN
iptables -A INPUT ... -j naabrid 

Praktikumist arvestuse saamiseks saatke oma praktikumijuhendaja aadressile oma skript.sh, mis sisaldab naabrite jaoks ühise ahela kasutamist.

Väljuvate ühenduste piiramine

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

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

NB! Veebribrausimise edukaks tööks on vajalik ka nimelahenduse (DNS) lubamine - UDP port 53. Vaadake erinevate teenuste pordinumbreid failist /etc/services

(*) Installeerige inetd - veenduge, et discard teenus töötab.

iptables -t nat -A PREROUTING -p tcp -j DNAT --to-destination=masinaomaip:9

ssh läks katki - parandage ära!

Kustutage ajutised failid!

Viited:

Mastering IPTables, Part I

Mastering IPTables, Part II

Mastering IPTables, Final Installment

iptables diagrammina

Sidebar
Page edit