Firehol
Sisukord
Sissejuhatus
Sageli on vaja linux masinatele luua keerukamaid tulemüüre. Iptables on selleks enda keeruka süntaksiga üsnagi ebamugav. Raske reegleid lugeda ja neid muuta ja nõuab põhjalikumalt süntaksi tundmist ja jälgimist.
Sellepärast on loodud mõningaid seadistamist hõlbustavaid tarkvarasid näiteks Firehol
http://firehol.sourceforge.net/
http://en.wikipedia.org/wiki/FireHOL
Seadistus
Vajalik on iptablesi tugi kernelis
Networking ---> Networking options ---> [*] Network packet filtering (replaces ipchains) ---> Core Netfilter Configuration ---> <*> Netfilter Xtables support (required for ip_tables)
Firehol install näiteks gentool toimub käsuga
emerge firehol
ja ,et serveris käivitudes stardiks
rc-update add firehol default
Töötamise eelduseks on muidugi see ,et meil oleks kernelis iptables olemas. Kuna see viimane pikem teema siis antud palas sellel ei peatu.
seadistusfail asub kaustas /etc/firehol firehol.conf nimega
Peale seadistusfaili tasub anda käsk
firehol try
Millejärel kontrollitakse reegleid ja küsitakse yes/no küsimust enne reeglite aktiveerimist mis võib osutuda vahel kasulikuks ,et mitte jääda nö ukse taha :)
Näite seadistusfailist firehol.conf ühe tavalise veebiserveri kohta
#!/bin/bash version 5 interface "eth0" internet src not "${UNROUTABLE_IPS}" policy drop server "http https icmp ssh" accept client "dns smtp icmp ntp" accept
Mis siis tegime.
eth0'il unroutable ip'd blokeerime ehk siis näiteks sisevõrguaadressid jms vaikimisi kõik paketid blokeeritakse lubame server reaga serverisse sisse pordid http https icmp ja ssh välja lubame serverist client reaga dns'i smtp icmp ja ntp
Nimekirja teenustest mida firehol toetab n2eme http://firehol.sourceforge.net/services.html
On ka kena selleasemel ,et drop'ida mittesobivad paketid pigem nad reject'ida
Nii ,et saatjal ei tekiks timeout'i. Selleks tuleb asendada policy drop reaga
policy reject
Olles mitte nii paranoiline võib kirjutada ka
client all accept
Lubades nii kõik väljuva liikluse
Gentool näiteks võiks selleks ,et toimiks emerge --sync ja softi uuendamine lisada ka rea
client "http ftp rsync" accept
Kui soovime veel paranoilisemad olla ja näiteks keelata ssh ainult sisevõrku tuleb konfi muuta selliselt
#!/bin/bash version 5 asutuse_kontor="192.168.1.0/25" interface "eth0" internet src not "${UNROUTABLE_IPS}" policy drop server "http https icmp" accept server "ssh" accept src "${asutuse_kontor}" client "dns smtp icmp ntp" accept
Kui vahel on vaja näiteks avada mõne vähemtuntud teenuse port fireholile võib kasutada custom käsku
server custom shoutcast tcp/8000 default accept
Ja avati tcp port 8000 ning sai ta nimeks shoutcast
Firehol on samas üsna paindlik lubades konfi lisada otse ka iptables ridu
Näiteks võime lisada sinna otse rea
DB="192.168.1.100" iptables -t nat -A OUTPUT -p tcp -m tcp --dport 3306 -j DNAT --to-destination ${DB}:3306
Selle reaga suunatakse kõik sisevõrgus tehtud ühenduskatsed pordile 3306 ehk mysql serverile ümber masinale 192.168.1.100 Nagu märkasite saab kasutada iptables käskudes ka muutujaid firehol konfis.
Serverite kaitseks saab kasutada ddos mõningaid abivahendeid. Üks käsk on porotection
protection strong 200/sec 100
võimalused on veel strong, full or all. Sellel real blokeeritakse kui 200 sekundi jooksul tuleb ühest allikast rohkem kui 100 päringut.
Soovides mingeid ip'sid permanentselt blokeerida saab seda teha reaga
blacklist all <ip aadress>
sinna v2ib aadresse kirjutada teineteise j2rele tyhikuga eraldatuna ning m22rata saab ka terveid v2rke
Reegleid n2eb kirjutades
iptables -L
Hea ylevaatlik k2sk on ka
firehol status
Loodud yhendusi n2eb k2ige lihtsamalt /proc/net/ip_conntrack failist
cat /proc/net/ip_conntrack
K2su abil
Kodune ruuter
konfiguratsioon koduseks ruuteriks millel kaks võrgukaarti ja sisemisele toimib nat. Väliselt on lubatud sisse vaid ssh port.
eth0 on siis v2line kaart mis yhendatud internetiallikaga ning eth1 sisev2rgu tarbeks
version 5 interface "eth0" Internet protection strong server "ssh" accept client all accept interface "eth1" LAN policy accept client all accept router lan2internet inface "eth1" outface "eth0" client all accept route all accept masquerade
Ylej22nud read peaksid olema juba tuttavad peale route all accept'i ja masquerade mis lylitavad sisse NATimise.
Logi
tail -f /var/log/messages abil võib näha erinevaid ebatavalisi ja blokeeritud ühendusi firehol poolt.
Logimise ulatust saab muuta reaga
FIREHOL_LOG_LEVEL
näiteks FIREHOL_LOG_LEVEL="7"