Firehol

Allikas: Kuutõrvaja
Redaktsioon seisuga 31. detsember 2008, kell 14:12 kasutajalt Jj (arutelu | kaastöö) (Kodune ruuter)

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://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


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"