Erinevus lehekülje "Firehol" redaktsioonide vahel

Allikas: Kuutõrvaja
(Sissejuhatus)
7. rida: 7. rida:
  
 
Tegemist on ka kontrollkihiga reeglite ja kasutaja ees. Ehk siis kogematta tehtud näpuviga
 
Tegemist on ka kontrollkihiga reeglite ja kasutaja ees. Ehk siis kogematta tehtud näpuviga
ei hävita hoobilt kogu võrgu ühendust. Fireholi wrapper suudab vigase süntaksi tagasi tõrjuda enne kui iptablesi käskudeks selle moondab.
+
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
 
*http://firehol.sourceforge.net/ Ametlik koduleht

Redaktsioon: 22. veebruar 2011, kell 04:11

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.

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
  1. eth0'il unroutable ip'd blokeerime ehk siis näiteks sisevõrguaadressid jms.
  2. vaikimisi kõik paketid blokeeritakse.
  3. server reaga lubame väljaspoolt internetist ligi teenustele: http, https, icmp ja ssh
  4. 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 :)

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

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

Muutujate kasutamine

PROGEJAD="193.40.0.0/24 192.168.0.0/24"

interface "eth0" internet
   ...
   client "mysql" accept dst "${PROGEJAD}"

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

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 siis väline kaart mis yhendatud internetiallikaga ning eth1 sisevõrgu 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

Ülejäänud read peaksid olema juba tuttavad peale route all accept'i ja masquerade mis lülitavad sisse NATimise.

Logi

Käsu

tail -f /var/log/messages abil võib näha erinevaid ebatavalisi ja blokeeritud ühendusi firehol poolt.

Soovitatav on syslogi abil filtreerida fireholi teated eraldi logisse

Logimise ulatust saab muuta reaga

FIREHOL_LOG_LEVEL

näiteks FIREHOL_LOG_LEVEL="7"

Minemaloobitud pakettide edetabel fireholile

grep 'NEW TCP w/o SYN' /var/log/messages | cut -d \  -f 11 | sort | uniq -c | sort -n

Lisaks erinevad piirangud ja kaitsed

Lingid

http://firehol.sourceforge.net/commands.html?#protection

http://www.shorewall.net/ alternatiivne fireholi sarnane vahend

Probleemid

Kui firehol teatab "cannot find your current kernel configuration." Siis on tegemist põhiliselt hoiatusega ning seda teadet võib ignoreerida.