Erinevus lehekülje "Firehol" redaktsioonide vahel
(→Firehol ja ipv6 2011 aasta seisuga) |
(→Firehol ja ipv6 2011 aasta seisuga) |
||
227. rida: | 227. rida: | ||
# cp firehol.sh /usr/sbin/firehol | # cp firehol.sh /usr/sbin/firehol | ||
− | + | Konf | |
− | |||
− | |||
+ | #!/bin/bash | ||
+ | |||
+ | version 5 | ||
+ | |||
interface "eth0" internet | interface "eth0" internet | ||
policy drop | policy drop |
Redaktsioon: 12. august 2011, kell 17:13
Sisukord
Sissejuhatus
Sageli on vaja linux masinatele luua keerukamaid tulemüüre. Iptables on selleks aga enda keeruka süntaksiga üsnagi ebamugav. Raske on suurema tulemüüri reegleid lugeda ja nende muutmine nõuab põhjalikumalt süntaksi tundmist ja tähelepanelikku jälgimist.
Seetõttu on loodud iptablesi/netfiltri seadistamist hõlbustav tarkvara FireHOL. Tegemist on minimalistliku tarkvaraga mise ei nõua apatche/php-d ega X-aknaid ja tema enda konff on maksimaalselt inimloetav. Oma süntaksilt meenutab FireHOL ehk kõige rohkem OpenBSD packet filtrit.
Tegemist on ka kontrollkihiga reeglite ja kasutaja ees. Ehk siis kogematta tehtud näpuviga ei hävita hoobilt kogu võrgu ühendust. Fireholi näol wrapper suudab vigase süntaksi tagasi tõrjuda enne kui iptablesi käskudeks selle moondab.
- http://firehol.sourceforge.net/ Ametlik koduleht
Paigaldamine
Fireholi kasutamiseks on vajalik, et kernelis asuks iptablesi tugi.
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 ta ka teenusena arvuti käivitamisel stardiks stardiks
# rc-update add firehol default
Debianis installiks
# sudo apt-get install firehol
seadistusfail asub kaustas /etc/firehol nimega firehol.conf
Üldiselt teeb firehol moodulite laadimist automaatselt, st. kui ütled talle konfis, et "server ftp accept" siis üritab ta ip_conntrack_ftp moodulit sisse imeda ja tekitab reeglid:
# INFO>>> Setting up rules for initial FTP connection server /sbin/iptables -t filter -A in_internet_ftp_s1 -p tcp --sport 1024:65535 --dport ftp -m state --state NEW,ESTABLISHED -j ACCEPT /sbin/iptables -t filter -A out_internet_ftp_s1 -p tcp --sport ftp --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT # INFO>>> Setting up rules for Active FTP server /sbin/iptables -t filter -A out_internet_ftp_s1 -p tcp --sport ftp-data --dport 1024:65535 -m state -- state ESTABLISHED,RELATED -j ACCEPT /sbin/iptables -t filter -A in_internet_ftp_s1 -p tcp --sport 1024:65535 --dport ftp-data -m state -- state ESTABLISHED -j ACCEPT # INFO>>> Setting up rules for Passive FTP server /sbin/iptables -t filter -A in_internet_ftp_s1 -p tcp --sport 1024:65535 --dport 32768:61000 -m state -- state ESTABLISHED,RELATED -j ACCEPT /sbin/iptables -t filter -A out_internet_ftp_s1 -p tcp --sport 32768:61000 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT
Kasutamine
Näide tavalise LAMP veebiserveri firehol.conf seadistusest:
#!/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
- interface real defineerime mis võrgukaarti hakkame seadistama, hetkel võrgukaarti eth0 ja blokeerime kõik unroutable ip'd ehk siis näiteks sisevõrguaadressid jms.
- policy reaga vaikimisi kõik paketid blokeeritakse.
- server reaga lubame väljaspoolt internetist ligi teenustele: http, https, icmp ja ssh
- client reaga lubame serverist endast väljaspoole internetti dns, smtp, icmp ja ntp päringud
Täpsemat nimekirja kõigist teenustest, mida firehol vaikimisi toetab, näeme aadressil http://firehol.sourceforge.net/services.html
Peale seadistusfaili muutmist tuleb muudatuste aktiveerimiseks käivitada süsteemis käsk
# firehol try
peale mida kontrollitakse reegleid ja küsitakse yes/no küsimusi enne reeglite aktiveerimist, mis võivad osutuda vahel kasulikuks, et mitte jääda nö. ukse taha :)
Võimalik on loodud reegleid ka lihtsalt kontrollida nt süntaksi osas käsuga
# firehol test firehol.conf
Pakettide blokeerimise asemel on viisakas mittesobivad pigem reject'ida, et saatjal ei tekiks timeout'i. Selleks tuleb
policy drop
asemel kirjutada
policy reject
Olles mitte paranoiline, võib kirjutada ka
client all accept
lubades kõik väljuva liikluse
Näiteks Gentool võiks emerge --sync toimimiseks ja softi uuendamiseks lisada ka
client "http ftp rsync" accept
Muutujate kasutamine, keelame eth0 pealt mysqlile ligipääsu mujalt kui kahest võrgust kus asuvad programeerijad. Selleks tekitame muutuja PROGEJAD, kuhu paigutame kaks C klassi ning kasutame seda hiljem reeglite sektsioonis.
PROGEJAD="193.40.0.0/24 192.168.0.0/24"
interface "eth0" internet ... client "mysql" accept dst "${PROGEJAD}"
Kui soovime keelata ssh välisvõrgust ja lubada vaid sisevõrgust, tuleks konf teha 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 avada mõne vähemtuntud teenuse port firehol'ile, võib kasutada custom käsku
server custom shoutcast tcp/8000 default accept
Selle peale avatakse tcp port 8000 nimega shoutcast
Firehol on samas üsna paindlik, lubades otse konfi lisada ka iptables ridu
Näiteks lisame sinna 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 (mysql server) ümber masinale 192.168.1.100. Nagu märkasite saab kasutada iptables käskudes ka muutujaid firehol'i konfis. Lihtsam on muidugi alati kasutada võimaluse korral FireHOLi enda süntaksit, näiteks ülal toodud iptables näide oleks lahendatav
dnat to "${DB}:33066" proto tcp dcport 3306 dst "${NW}"
DDOS rünnaku vastu saab kasutada mõningaid abivahendeid, nagu näiteks porotection
protection strong 200/sec 100
Võimalik on veel strong, full or all. Seega, kui 200 sekundi jooksul tuleb ühest allikast rohkem kui 100 päringut, siis pannakse kliendile peale blokeering.
Soovides mingeid IP'sid permanentselt blokeerida, siis
blacklist all <ip aadress>
Aadresse võib kirjutada ka mitmeid, eraldades nad teineteisest tühikuga
Reegleid näeb kirjutades
iptables -L
Hea ülevaatlik käsk on ka
firehol status
Loodud yhendusi n2eb k2ige lihtsamalt /proc/net/ip_conntrack failist
cat /proc/net/ip_conntrack
Kõiki fireholi reeglite käske näeb ametlikust manualist manualis http://firehol.sourceforge.net/commands.html seal leidub veel hulga huvitavaid ja kasulikke nippe
Kui on vaja millegipärast muutma RESERVED ip aadresse nt võetakse mõni uus ip blokk kasutusse tuleb tekitada lihtsalt firehol kausta fail RESERVED_IPS uue sisuga
FireHOLi üheks puuduseks on see, et kui tegemist paljude võrkudega ja need võrgud on erineva poliitikaga. Näiteks ühel võrgul on default=deny, teistel default=permit. Fireholi sellist lahendust kahjuks ei toeta.
Näidiskonf: Kodune tulemüür koos NAT'iga
konfiguratsioon koduseks ruuteriks millel kaks võrgukaarti ja sisemisele toimib nat. Väliselt on lubatud sisse vaid ssh port. Eth0 on väline kaart mis yhendatud internetiallikaga, näiteks ADSL modem, ning eth1 sisevõrku ühendatud.
# Välisvõrgust lubame sisse ainult ssh ja välja lubame kõik interface "eth0" Internet protection strong server "ssh" accept client all accept # Sisevõrgul lubame kõik liikluse interface "eth1" LAN policy accept client all accept # teeme NAT'i välisvõrgust sisevõrku router lan2internet inface "eth1" outface "eth0" client all accept route all accept masquerade
Ülalolevat teksti tähelepanelikult lugenule peaksid olema kõik read juba tuttavad. Uueks infoks on route all accept'i ja masquerade mis lülitavad "lan2internet" blokis sisse NATimise.
Pordi suunamine
Välise kaardi eth0 pealt suuname 8080 pordi sisemisele masinale 10.0.0.67 porti 80
iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 8080 -j DNAT --to-destination 10.0.0.67:80
Logimine
Failis /var/log/messages näeb erinevaid ebatavalisi ja FireHOLi poolt blokeeritud ühendusi. Soovitatav on syslogi abil filtreerida fireholi teated eraldi logisse. Logimise enda ulatust saab muuta reaga FIREHOL_LOG_LEVEL. Näiteks seadistades selle:
FIREHOL_LOG_LEVEL="7"
Minemaloobitud pakettide edetabelit näeb järgneva käsuga
# grep 'NEW TCP w/o SYN' /var/log/messages | cut -d \ -f 11 | sort | uniq -c | sort -n
Firehol ja ipv6 2011 aasta seisuga
Hetkel ametlik ipv6 tugi puudub. Küll aga saab lisada selle patchina.
You can grab it from:
or
# USE="ipv6" emerge iptables
Paigaldamine ja kasutamine on seletatud kaasapandud failides:
# cp /usr/sbin/firehol /usr/sbin/firehol.ipv4 # cp firehol.sh /usr/sbin/firehol
Konf
#!/bin/bash version 5 interface "eth0" internet policy drop protection strong ipv4 server "icmp" accept server ipv6neigh accept client ipv6neigh accept server ipv6error accept ipv6 server ping accept server "http https" accept ipv4 client "icmp" accept both client "dns smtp ntp whois" accept client "ftp http https rsync" accept
Lingid
http://firehol.sourceforge.net/commands.html?#protection
http://www.shorewall.net/ alternatiivne fireholi sarnane vahend
http://firehol.sourceforge.net/commands.html?#protection Lisaks erinevad piirangud ja kaitsed
Probleemid
Kui firehol teatab "cannot find your current kernel configuration." Siis on tegemist põhiliselt hoiatusega ning seda teadet võib ignoreerida.