FreeBSD Packet Filter tulemüüriga

From ICO wiki
Revision as of 11:47, 8 March 2011 by Pkodotsi (talk | contribs)
Jump to navigationJump to search

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 saate teada "step by step" kuidas käivitada PF tulemüür FreeBSD (8.1 stable) OS-l.

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ähme alltoodud kausta (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 PF

vi PF

Paneme uuele tuumale nime „GENERIC“ asemel - näiteks „GENERIC_PF“

ident GENERIC_PF

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

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

device pf device pflog device pfsync

See lõik pole kohustuslik (aga väga soovitan), 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.

  1. altq(9). Enable the base part of the hooks with the ALTQ option.
  2. Individual disciplines must be built into the base system and can not be
  3. loaded as modules at this point. ALTQ requires a stable TSC so if yours is
  4. broken or changes with CPU throttling then you must also have the ALTQ_NOPCC
  5. 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 kerneliga 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! Kui te kavatsete teha tulemüür siis teie arvutis peab olema vähemalt 2 võrgukaarti! Teie /etc/rc.conf fail peab sisaldama vähemalt umbes järgmised read, sõltuvusest teie võrgu ülesehitamisest (teiste sõnadega IP aadressid ja võrgumaskid on teised):

  1. Väline võrgukaart, mis vaatab maailma

ifconfig_em0="inet 192.168.1.1 netmask 255.255.255.0"

  1. Sisene võrgukaart, mis vaatab lokaalvõrgu

ifconfig_fxp0="inet 192.168.2.1 netmask 255.255.255.0"

  1. 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 net.inet.ip.forwarding=1 net.inet6.ip6.forwarding=1

Ja viimasena tehke

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). Kujutame ette et 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.

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


  1. $FreeBSD: src/share/examples/pf/pf.conf,v 1.1.4.1.4.1 2010/06/14 02:09:06 kensmith Exp $
  2. $OpenBSD: pf.conf,v 1.34 2007/02/24 19:30:59 millert Exp $
  3. See pf.conf(5) and /usr/share/examples/pf for syntax and examples.
  4. Remember to set net.inet.ip.forwarding=1 and/or net.inet6.ip6.forwarding=1
  5. in /etc/sysctl.conf if packets are to be forwarded between interfaces.
              1. OPTIONS #########
  1. set block-policy option - Määrab filtrite ülesanded pakettide blokeerimisel
  2. set debug option - Määrab tagasiside taseme
  3. set fingerprints file - Määrab avalike võtmete faili
  4. set limit option value - Määrab PF piirangud
  5. set loginterface interface - Määrab logiliidese, vaikimis pflogd0
  6. set optimization option - Määrab optimeerimise taseme
  7. set skip on interface - Määrab ignoreeritavad võguliidesed
  8. set state-policy option - Määrab pakettide hoidmise reeglid
  9. set timeout option value - Määrab ooteaja

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


              1. MACROS AND TABLES #########
  1. Tuulemüri võrgukaardid
  2. väline

ext_if="em0"

  1. sisene

int_if1="fxp0"

  1. Välisvõrgukaardi aadress

external_addr="192.168.1.1"

  1. Sisevõrgukaardi aadress

internal_addr="192.168.2.1"

  1. Sisevõrgu aadress ja võrgu mask

internal_net="192.168.2.0/24"

  1. Serverite aadressid sisevõrgus

webserver=192.168.2.2 mailserver=192.168.2.3

  1. Musta nimekirja IP aadressid

table <blacklist> persist \ { 207.46.197.32, 84.19.166.249 }

  1. 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}

                  1. TRANSLATION ##########
  1. NAT võrguaadresside tõlkimine

nat on $ext_if from $internal_net to any -> $external_addr

  1. Pordite SMTP, HTTPs, IMAPs ümbersuunamine postiserverile
  2. välisvõrgust

mail="{ 25, 443, 993 }" rdr on $ext_if proto tcp from any to $external_addr/32 port $mail -> $mailserver

  1. 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

  1. Pordite HTTP, FTP ja FTP-data ümbersuunamine veebiserverile
  2. välisvõrgust:

web="{80, 20, 21}" rdr on $ext_if proto tcp from any to $external_addr/32 port $web -> $webserver

  1. 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

                1. FILTER##########
  1. vaikimisi blokeeritakse igasugust liiglust läbi tulemüüri seadmete

block in log all block out log all

  1. 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>

  1. 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

  1. Pingida on lubatud

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

  1. Loopback liidesel traafiku lubamine

pass quick on lo0 all

  1. 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

  1. 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

  1. 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