FreeBSD Packet Filter tulemüüriga

From EIK wiki

Autor: Pavel Kodotšigov AK22

LÜHIDALT AJALOOST

Packet Filter (lüh. PF) on OpenBSD tulemüür, alates OpenBSD versioonist 3.0, mille on kirjutanud 2001. aasta suvel Daniel Hartmeier asendamaks Darren Reed'i kirjutatud IPFilter tulemüüri. Oma eluaja jooksul on see tulemüür väga kiirelt arenenud. Packet Filter on tihedalt seotud võrgunduses levinud NAT ning QoS tehnoloogiatega, lubamaks suuremat paindlikkust ning vastupidavust. Packet Filter on porditud FreeBSD, NetBSD ning DragonFlyBSD operatsioonisüsteemidele.


INSTALLERIMINE

Selles referaadis käisitletakse tulemüüri installerimine FreeBSD (8.1 Release) OS-l.

Kõik käsud jurukast.

su  <Root password>

Kuna PF filter ei sisalda standardses (GENERIC) FreeBSD tuumas (ingl. kernel), siis tuleb kompileerida vastava tuuma PF toetusega.

Selleks, läheme alltoodud kausta (NB! 64 bit. OSi jaoks valige vastavalt /sys/amd64/conf)

cd /sys/i386/conf

Teeme „GENERIC“ tuuma konfiguratsiooni faili koopiat

cp GENERIC PF

Redigeerime loodud fail:

vi PF

Paneme uuele tuumale nime „GENERIC“ asemel - „GENERIC_PF“

ident GENERIC_PF

Ning lisame alltoodud tekst konfiguratsiooni faili lõppes (infoks: see teksti allikas saate leida siit /usr/src/sys/conf/NOTES)

# The pf packet filter consists of three devices:
# The `pf' device provides /dev/pf and the firewall code itself.
# The `pflog' device provides the pflog0 interface which logs packets.
# The `pfsync' device provides the pfsync0 interface used for
# synchronization of firewall state tables (over the net).
device pf
device pflog
device pfsync

Alltoodud lõik pole kohustuslik (aga väga soovitav), kuna annab võimalust tulemüüri läbilaskmise kiirusega juhtida. ALTQ võimaldab pakettide järjestamist ning teisi QoS-i komponente, mis on vajalikud QoS-i edukaks teostamiseks võrgus.

# altq(9). Enable the base part of the hooks with the ALTQ option.
# Individual disciplines must be built into the base system and can not be
# loaded as modules at this point. ALTQ requires a stable TSC so if yours is
# broken or changes with CPU throttling then you must also have the ALTQ_NOPCC
# option.
options ALTQ
options ALTQ_CBQ # Class Based Queueing
options ALTQ_RED # Random Early Detection
options ALTQ_RIO # RED In/Out
options ALTQ_HFSC # Hierarchical Packet Scheduler
options ALTQ_CDNR # Traffic conditioner
options ALTQ_PRIQ # Priority Queueing
options ALTQ_NOPCC # Required if the TSC is unusable
options ALTQ_DEBUG

Ärge unustage salvestada faili!

Nüüd läheme /usr/src kausta

cd /usr/src

Kompileerime

make buildkernel KERNCONF=PF

ja installime tuuma

make installkernel KERNCONF=PF

Teeme „restart“i, et täiskäivitada juba uue tuumaga ehk „GENERIC_PF „

reboot

Veendume, et tõesti töötame uue tuumaga

uname -i

peame nägema selline vastus:


GENERIC_PF


Kõigepealt kopeerime PF näidiskonfiguratsiooni fail /etc kausta:

cp /usr/share/examples/pf/pf.conf /etc/pf.conf

Seejärel redigeerime /etc/rc.conf

vi /etc/rc.conf

Lisame faili /etc/rc.conf järgmised read, et Packet Filter käivitaks arvuti käivitamisega:

pf_enable="YES"
pf_rules="/etc/pf.conf"

NB! Teie arvutis peab olema vähemalt 2 võrgukaarti! Teie /etc/rc.conf fail peab sisaldama vähemalt järgmised read, sõltuvusest teie võrgu ülesehitamisest (IP aadressid ja võrgumaskid):

# Väline võrgukaart, mis vaatab internetti
ifconfig_em0="inet 193.168.1.1  netmask 255.255.255.0"
# Sisene võrgukaart, mis vaatab lokaalvõrgu
ifconfig_fxp0="inet 192.168.2.1  netmask 255.255.255.0"
# PF käivitamine
pf_enable="YES"
pf_rules="/etc/pf.conf"

Ja lõppes lisame /etc/sysctl.conf faili järgmised read (loe selgitus /etc/pf.conf faili alguses).

vi /etc/sysctl.conf

Lisame:

net.inet.ip.forwarding=1
net.inet6.ip6.forwarding=1


Teeme viimane restart

reboot

Sellega, esimene etapp on edukalt tehtud, alustame nüüd konfigureerida Packet Filter.

KONFIGUREERIMINE

Nüüd vaatame kuidas saab välja näha tavaline skript tulemüüri reeglitega (PF filtri alusel), sisevõrguga, mis on kujutatud alltoodud struktuurskeemil (vt. pilt).

Skeem.jpg

Meil on väike sisevõrk, mis sisaldab postiserver, veebiserver ja mitu tavakasutajate arvutit ühendatud läbi tulemüüri (kasutades sisevõrgukaart) internetiga (kasutades väljavõrgukaart). Ülesanne – kaitsta see võrk maailma väljastpoolt.

NB! DNS ja DHCP serverid siin ei käsitleta, kuid eeldatakse nende olemasolu või käsitsi tavakasutajate arvutite vastav konfigureerimine

Selle skeemi jaoks on /etc/pf.conf faili sisu saab olla järgmisena:

# $FreeBSD: src/share/examples/pf/pf.conf,v 1.1.4.1.4.1 2010/06/14 02:09:06 kensmith Exp $
# $OpenBSD: pf.conf,v 1.34 2007/02/24 19:30:59 millert Exp $
#
# See pf.conf(5) and /usr/share/examples/pf for syntax and examples.
# Remember to set net.inet.ip.forwarding=1 and/or net.inet6.ip6.forwarding=1
# in /etc/sysctl.conf if packets are to be forwarded between interfaces.

####### OPTIONS #########
#set block-policy option - Määrab filtrite ülesanded pakettide blokeerimisel
#set debug option - Määrab tagasiside taseme
#set fingerprints file - Määrab avalike võtmete faili
#set limit option value - Määrab PF piirangud
#set loginterface interface - Määrab logiliidese, vaikimis pflogd0
#set optimization option - Määrab optimeerimise taseme
#set skip on interface - Määrab ignoreeritavad võguliidesed
#set state-policy option - Määrab pakettide hoidmise reeglid
#set timeout option value - Määrab ooteaja

set optimization aggressive
set timeout tcp.established 7200
set timeout udp.multiple 2
set limit states 40000


####### MACROS AND TABLES #########
# Tuulemüri võrgukaardid
# väline
ext_if="em0"
# sisene
int_if1="fxp0"

# Välisvõrgukaardi aadress
external_addr="192.168.1.1"
# Sisevõrgukaardi aadress
internal_addr="192.168.2.1"

# Sisevõrgu aadress ja võrgu mask
internal_net="192.168.2.0/24"

# Serverite aadressid sisevõrgus
webserver=192.168.2.2
mailserver=192.168.2.3

# Musta nimekirja IP aadressid
table <blacklist> persist \
{ 207.46.197.32, 84.19.166.249 }

# Valetatud aadressid
table <NoRouteIPs> persist \
{ 127.0.0.0/8, 172.16.0.0/12, 10.0.0.0/8, 255.255.255.255 }

table <SshClients> persist \
{ 193.40.194.204, 193.40.194.205}

######### TRANSLATION ##########

#NAT võrguaadresside tõlkimine
nat on $ext_if from $internal_net to any -> $external_addr

#Pordite SMTP, HTTPs, IMAPs ümbersuunamine postiserverile
#välisvõrgust
mail="{ 25, 443, 993 }"
rdr on $ext_if proto tcp from any to $external_addr/32 port $mail -> $mailserver
#sisevõrgust:
nat pass on $int_if1 proto tcp from $internal_net to $mailserver port $mail -> $int_if1
rdr on $int_if1 proto tcp from $internal_net to $int_if1 port $mail -> $mailserver

# Pordite HTTP, FTP ja FTP-data ümbersuunamine veebiserverile
#välisvõrgust:
web="{80, 20, 21}"
rdr on $ext_if proto tcp from any to $external_addr/32 port $web -> $webserver
#sisevõrgust:
nat pass on $int_if1 proto tcp from $internal_net to $webserver port $web -> $int_if1
rdr on $int_if1 proto tcp from $internal_net to $internal_addr port $web -> $webserver
rdr on $int_if1 proto tcp from $internal_net to $ext_if port $web -> $webserver

########FILTER##########

# vaikimisi blokeeritakse igasugust liiglust läbi tulemüüri seadmete
block in log all
block out log all

# Blacklistitud ja reserveeritud liikluse keelamine
block in quick on $ext_if from <NoRouteIPs> to any
block out quick on $ext_if from any to <NoRouteIPs>

# Läbipääsu lubamine avalikust võrgust tulemüüri taha
pass in on $ext_if proto tcp from any to $webserver port $web keep state
pass in on $ext_if proto tcp from any to $mailserver port $mail keep state

# Pingida on lubatud
pass in on $ext_if inet proto icmp all icmp-type 8 code 0 keep state

# Loopback liidesel traafiku lubamine
pass quick on lo0 all

# Läbipääsu lubamine tulemüüri tagant avalikku võrku
pass in log on $int_if1 from $internal_net to any
pass out log on $int_if1 from any to $internal_net

# Tulemüürist endast väljapääs
pass out on $ext_if proto tcp all modulate state flags S/SA
pass out on $ext_if proto { udp, icmp } all keep state

# SSH läbipääsu väljastpoolt lubamine ainult SshClients nimekirja järgi
pass in log on $ext_if proto tcp from <SshClients> to $external_addr port ssh modulate state flags S/SA


Lisage ülaltoodud tekst /etc/pf.conf faili juurde (parandage sõltuvusest teie võrgukonfiguratsioonist) ja käivitage Packet Filter käsitsi käsurealt:

pfctl -ef /etc/rc.conf

Kui käivitamine läks ilma veata, siis Packet Filter on edukalt käivitatud, veenduda sellest saab käsuga (sellega vaadate Packet Filtri staatus ja kõik sisse laadidud reeglid)

pfctl -s all

Täpsem info pf.conf faili konfigureemisest saate lugeda siit

KASUTATUD KIRJANDUS

http://kuutorvaja.eenet.ee/wiki/Packet_Filter

http://www.openbsd.org/cgi-bin/man.cgi?query=pf.conf&apropos=0&sektion=0&manpath=OpenBSD+Current&arch=i386&format=html

Autor

Pavel Kodotšigov

AK22