Packet Filter

Allikas: Kuutõrvaja

Packet Filter

Sissejuhatus

(lüh. PF) on OpenBSD tulemüür, alates OpenBSD versioonist 3.0, mille on kirjutanud 2001. aasta suvel Daniel Hartmeier. Packet Filter kirjutati asendamaks Darren Reed'i kirjutatud IPFilter tulemüüri, kes sattus OpenBSD arendajatega konflikti, keelates oma koodi muuta. Darren Reed väitis, et tema kirjutatud tulemüür IPFilter kasutab BSD litsentsi, kuid tegelikult oli ta BSD litsentsi sõna-sõnalt kopeerinud, jättes välja vaid osa, mis lubab koodi muutmist. Tülide lahendamise asemel otsustas OpenBSD projektijuht, Theo De Raadt uue tulemüüri kasuks. 29.05.2001 eemaldati IPFilter'i kood OpenBSD lähtekoodist. Järgnevad kaks kuud oli OpenBSD operatsioonisüsteem ilma tulemüürita, Packet Filter jõudis OpenBSD lähtekoodi 24.06.2001. Paaril järgneval kuul töötasid arendajad meeletu koormusega, ning OpenBSD 3.0 versiooni valmides sisaldas see ka juba Packet Filter tulemüüri. Oma eluaja jooksul on see tulemüür väga kiirelt arenenud ning omab teiste tulemüüride ees mitmeid eeliseid. Tulemüüri reeglite süntaks on sarnane IPFilter'i omale, kuid seda on lihtsustatud kasutusmugavuse tõstmiseks. Packet Filter on tihedalt seotud võrgunduses levinud NAT ning QoS tehnoloogiatega, lubamaks suuremat paindlikkust ning vastupidavust. Packet Filter on porditud ka FreeBSD, NetBSD ning DragonFlyBSD operatsioonisüsteemidele.

Võimalused

Packet Filter on, nagu iga teinegi UNIX-i rakendus, väga paindlik. Seega arendajatel on lihtne koodi uuendada ning uusi võimalusi lisada. Packet Filter areneb väga kiiresti ning pakub palju võimalusi, mida tihtipeale leiab ainult tasulistest tulemüüridest. Siinkohal on lahti seletatud tähelepanuväärseimad võimalused.

NAT

"Network Address Translation". Privaatse või registreerimata IP-aadressi asendamine ametliku IP-aadressiga. NAT annab organisatsioonidele suurema paindlikkuse aadresside kasutamiseks oma kohtvõrkudes ja lubab kasutajatel vastavalt vajadusele ühiselt kasutada piiratud arvu registreeritud IP-aadresse. NAT’i kasutamine teeb ka raskemaks võrgu ründamise väljastpoolt, sest sisemisi IP-aadresse ei edastata üle Interneti. Võrguaadresside ümbernimetamine toimub harilikult ruuteris või tulemüüris.

QoS

"Quality of Service". Tegeleb andmeedastuskiiruste, vigade esinemise sageduste ja teiste karakteristikute mõõtmise, parandamise ja teatud määral garanteerimisega. QoS on eriti oluline laiaribalise video- ja multimeediuminfo pideva ülekande puhul. Sellise info töökindel edastamine üle avalike sidevõrkude on tavalisi protokolle kasutades raske. Interneti ressursside reserveerimise protokolli (RSVP) kasutamisel saab läbi lüüsihosti liikuvaid pakette organiseerida eelnevalt paika pandud poliitika ja reserveerimiskriteeriumide alusel.

ALTQ

"ALTernate Queueing framework for BSD UNIX". ALTQ võimaldab pakettide järjestamist ning teisi QoS-i komponente, mis on vajalikud QoS-i edukaks teostamiseks võrgus, seda kasutatakse enamasti BSD operatsioonisüsteeme kasutatavates ruuterites. ALTQ on osa FreeBSD ja NetBSD distributsioonidest ning on integreeritud Packet Filter tulemüüri.

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

CARP

"The Common Address Redundancy Protocol". CARP on protokoll, mis lubab samas sisevõrgus asuvatel arvutitel jagada IP-aadressite paari, peamine eesmärk on võimaldada tagavararuuteri kasutamist. Juhul, kui ruuter peaks mingil põhjusel töökõlbmatuks muutuma, näiteks riistvara vea tõttu, saab tagavararuuter tema töö kohe üle võtta, tekitamata võrgus tõrkeid ning jäädes kasutajatele märkamatuks.

Pfsync

Pfsync on virtuaalne võrguliides, mis peegeldab Packet Filter tulemüüri tabelis tehtud muudatusi, tcpdump käsku kasutades saab seda reaalajas jälgida, samuti oskab pfsync enda muudatusi üle võrgu laiali saata ning neid ka vastu võtta, näiteks mitmete võrgus asuvate tulemüüride reeglite sünkroniseerimiseks.

Authpf

Authpf on kasutajaliides autentivatele võrgulüüsidele, autentiva võrgulüüsi kasutamiseks tuleb kasutajatel ennast tuvastada enne, kui lüüs nende võrguliikluse läbi laseb. Seda saab kasutada näiteks ainult kasutaja sessiooni ajal kehtivate tulemüürireeglite automatiseeritud loomiseks ja kustutamiseks.

Ftp-proxy

Ftp-proxy on OpenBSD implementatsioon puhverserverist FTP-protokollile, see võimaldab NAT-ruuteri taga asuvatel võrguklientidel kasutada FTP-protokolli, olles tulemüüri ja välise liikluse vahendaja, lisades ning eemaldades vajadusel Packet Filter tulemüüri reegleid.

Kasutamine

Aktiveerimine

Packet Filter tulemüüri käivitamiseks OpenBSD operatsioonisüsteemi käivitudes tuleb lisada /etc/rc.conf.local rida pf=YES, ajutiselt saab tulemüüri käivitada ning sulgeda pfctl käsu abil või kasutades rc skripti /etc/rc.d/pf

näiteks käsuga /etc/rc.d/pf reload

Seadistamine

Packet Filter laeb operatsioonisüsteemi käivitumisel vaikimisi reeglid /etc/pf.conf failist. See on tekstifail, mis laetakse pfctl käsuga ning sisaldab tulemüüri reegleid. Erinevatele rakendustele saab määrata ka teistes failides asuvaid reegleid, seadistusfailis olevaid tühje ridu ignoreeritakse. Seadistusfail pf.conf koosneb seitsmest osast.

Makrod

Makrod on kasutaja poolt määratud muutujad, mis kujutavad mingit hulka IP-aadresse, portide numbreid või võrguliideseid, makrod võimaldavad reegleid lihtsamini loetavaks ja kergemini hallatavaks muuta. Makrod võivad sisaldada numbreid või tähti, neid saab laiendada ka nimekirjadeks ning grupeerida, hilisemalt kasutatakse makrode muutujanimena dollarimärki. Siinkohal on välja toodud mõned näited reeglite lihtsustamiseks.

extIF = "xl0"
See makro määrab välise võrguliidese xl0 nimeks extIF, see lihtsustab hilisemates reeglites välise võrguliidese kasutamist ning välistab võimaluse teiste liidestega segamini ajada.

kliendid1 = "{ 192.168.0.2, 192.168.0.3  }"
See makro määrab IP-aadressite hulga 192.168.0.2-192.168.0.3 ühise grupi alla, see lihtsustab hilisemates reeglites mingi hulga klientide poole pöördumist. Näiteks ühe reegliga saab kogu grupil keelata liikluse, ei pea igale kliendile eraldi reeglit tegema.

kliendid1 = "{ 192.168.0.2, 192.168.0.3  }"
kliendid2 = "{ 192.168.1.2, 192.168.1.3  }"
kliendidKOKKU = "{" $kliendid1 $kliendid2 "}"

Need makrod määravad IP-aadressite hulgad gruppideks ning loovad ühise grupi, mis lihtsustab kõikidele klientidele ühiste reeglite kirjutamist.


Tabelid

Tabelites hoitakse IP-aadresse. Otsingud tabelitest on märksa kiiremad kui otsingud nimekirjadest, mistõttu sobivad tabelid suure hulga aadressite hoidmiseks. Tabeleid saab siduda ka ümbersuunamise ning filtrite reeglitega. Tabeleid tähistatakse nurksulgudega. Tabelitele saab lisana omistada kahte erinevat olekut - konstantne e. const ning jääv e. persist. Konstantse tabeli puhul saab tabelit muuta ainult laadimata olekus, muidu saab neid laadida ka töötades, pfctl käsu abil. Jääva olekuga tabelit hoitakse mälus ka siis, kui sellega ükski reegel seotud pole, muidu kustutatakse tabel viimase seotud reegli kustutamisel automaatselt. Tabeleid saab laadida ka tekstifailidest, kasutades file muutujat.

table <kliendid1> { 192.168.1.0/24, !192.168.1.1 }

Kliendid1 tabelist eraldatakse 192.168.1.1 aadressiga klient.

table <kliendid2> persist file "/etc/kliendid2nimekiri"

Kliendid2 tabel loetakse sisse failist /etc/kliendid2nimekiri, jäävasse olekusse.

block in on xl0 from <kliendid2>to any
pass  in on xl0 from <kliendid1> to any

Kliendid2 grupile keelatakse ning kliendid grupile lubatakse väline juurdepääs.

Muutujad Packet Filteri tööprotsessi muutmiseks.

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 loginterface dc0

Määrab logimisliideseks dc0 võrguliidese.

set skip on lo0

Määrab Io0 liidese ignoreeritavaks, sellele seadmele ei rakendata ühtegi reeglit.

Küürimine Küürimine on pakettide normaliseerimine, mille eesmärk on vältida fragmenteerunud pakettide paljunemist, keelatakse ka valede lippudega TCP-paketid. Küürimise süntaks on väga sarnane filtrite ülesehitusega ning seda on lihtne oma tulemüüri juurutada.

scrub    on xl0 all reassemble tcp

Normaliseerib kõik TCP-paketid, mis läbivad xl0 võrguliidest.

Järjekorrad

Operatsioonisüsteemi valitud pakettide järjekorrast sõltub võrgu jõudlus, näiteks seades suuremat kiirust vajavad protokollid teistest ettepoole ja seega tõstes töökiirust. Pakettide järjestamise strateegiad tulenevad valitud scheduler'ist ehk plaanurist. Packet Filter toetab pakettide järjestamist klassi (CBQ) ning paketi prioriteedi (PRIQ) järgi.

altq on xl0 cbq bandwidth 2Mb queue

Määrab xl0 võrguliidesele CBQ plaanuriga 2Mb piirangu.

Tõlkimine

Võrguaadressite tõlkimine (NAT) võimaldab peita sisevõrgu kliendid ühe välise IP-aadressi taha, suurendamaks turvalisust sisevõrku sissepääsu raskendades.

nat on xl0 from 192.168.1.0/24 to any -> 192.168.2.0

Peidab kõik 192.168.1.0/24 alamvõrgust tulevad IP-aadressi 192.168.2.0 taha.

ftp-proxy vahendab NAT tulemüüri taga olevale klienti

Selleks, et NAT tulemüüri taga asuvad kliendid saaksid ftp serveritega suhelda tuleb lisada paketifiltri seadistusfaili NAT sektsiooni

nat-anchor "ftp-proxy/*"
rdr-anchor "ftp-proxy/*"
rdr on $intIF proto tcp from any to any port 21 -> 127.0.0.1 port 8021

ning reeglite sektsiooni

anchor "ftp-proxy/*"

ning käivitada soketil 127.0.0.1:8021 programm ftp-proxy

# ftp-proxy -r

-r võtit soovitatakse kasutada, et ka vanemad ja nö isikupärasemad kliendid toimiks. Selleks, et ftp-proxy bootimisel käivituks peab olema /etc/rc.conf.local failis rida

ftpproxy_flags="-r"


ftp-proxy vahendab NAT tulemüüri taga olevat ftp serverit

Selleks, et ftp kliendid saaksid internetist pöörduda NAT tulemüüri taga asuva ftp serveri poole, tuleb lisada paketifiltri seadistusfaili NAT sektsiooni

nat-anchor "ftp-proxy/*"
rdr-anchor "ftp-proxy/*"

ning reeglite sektsiooni

pass in on $extIF inet proto tcp to $extIF port 21 \
   flags S/SA keep state
anchor "ftp-proxy/*"

ning käivitada programm ftp-proxy, mis kuulab tulemüüri välisel seadmel aadressil 192.168.10.200 pöördumisi ja vahendab need sisevõrgus aadressil 192.168.1.3 töötavale ftp serverile

# ftp-proxy -R 192.168.1.3 -p 21 -b 192.168.10.200

Selleks, et ftp-proxy bootimisel käivituks, peab olema /etc/rc.conf.local failis rida

ftpproxy_flags="-R 192.168.1.3 -p 21 -b 192.168.10.200"

Kui tulemüüri vahendab kummastki suunas ftp liiklust, siis töötab kaks ftp-proxy eksemplari.

Filtrid

Pakettide filtreerimine on valikuline andmete voo keelamine ja lubamine, tuginedes kindlaksmääratud filtritele. Filtrites määratakse ära, millised paketid läbi lastakse ja millised peatatakse. Saabunud paketti võrreldakse filtritega, filtrid läbitakse järjestikuliselt, viimases filtris määratud tegevus rakendatakse tööle, kui tegevust ei leita, on vaikimisi seade pakett läbi lasta.

Reeglite süntaks

Reeglite lihtsustatud süntaks :

action [direction] [log] [quick] [on interface] [af] [proto protocol] \
  [from src_addr [port src_port]] [to dst_addr [port dst_port]] \
  [flags tcp_flags] [state]
action - Pakettide rakendamine
direction  - Pakettide suund
log - Logitase
quick - Kui pakett vastab quick muutujaga reeglile, kontrollitakse vaid esimest reeglit
interface - Võrguliides
af – IP-protokolli tüübi määrang
src_addr, dst_addr - Päritoluaadress ning suundaadress
src_port, dst_port - Päritoluport ning suundport
tcp_flags - Määrab pakettide TCP-lipud
state - Pakettide hoidmise reeglid

Lisavõimalused

Packet Filter on ünsa populaarne ja leiab pidevalt uusi kasutajaid, paljud kasutajad on aga proovinud lisada Packet Filter'ile mitmeid lisavõimalusi, mis muudaksid seadistamise ning haldamise lihtsamaks, siinkohal on välja toodud lühike ülevaade kahest tuntumast lisast.

Pfw

http://www.allard.nu/pfw/ fw on veebipõhine kasutajaliides Packet Filter tulemüürile, eesmärk on olla sama efektiivne ja kasulik kui PG ning samal ajal pakkuda võimalust tulemüüri läbi veebibrauseri seadistada (lisa 2). Pfw põhineb PHP-l ning toetab perl-i mooduleid, Pfw on tasuta saadaval ning kasutab BSD-litsentsi.

Pf.vim

http://www.vim.org/scripts/script.php?script_id=341 Pf.vim on Vim-i süntaksiskript, mis kohandab Vim-i Packet Filter'i konfiguratsioonifaili pf.conf töötlemiseks, pf.vim oskab pf.conf faili sisu tüübi järgi esile tõsta ning värviliseks muuta, näiteks kõik kehtivad reeglid kuvatakse rohelises kirjas. Pf.Vim süntaksiskripti on loonud Camiel Dobbelaar aastal 2002.

Praktiline Osa. Tulemüüri seadistamine

Tulemüür väiksemale võrgule kus lubatakse mõnedele teenustele ligipääs ning tehakse ka NAT'i sisevõrgule

Tulemüüri automaatseks käivitamiseks tuli /etc/rc.conf.local faili lisada rida pf=YES, operatsioonisüsteemi käivitusskriptid laevad sellest failist käivitatavate rakendust nimekirja, tulemüüri saab ka käsitsi käsurealt käivitada.

pfctl -e -f /etc/pf.conf

Selle käsuga käivitatakse tulemüür ja laetakse reeglid /etc/pf.conf failist. Tulemüüri seadistamisel kasutas autor Vim tekstiredaktorit. Reeglid loodi sellised, et sisevõrgus olevatel klientidel on juurdepääs internetile, juurdepääs väljastpoolt sisevõrku puudub ning sisevõrgu kliendid peidetakse ühise IP-aadressi taha, sisevõrgust välja lubati http, https ja pop3 protokollide kasutamine, täielik tabel on toodud välja lisana (lisa 1). Tulemüüri reeglite kirjutamine :

extIF="rl0"
intIF="xl0"
lubatud="{ 80, 110, 443 }"
#Võrguliidestele ning lubatud protokollidele määrati makrod, lihtsustamaks hilisemat pöördumist.

set loginterface $extIF
set skip on lo
#Lülitati sisse välise liidese logimine ning loopack liidese ignoreerimine.

scrub in all
scrub out all
#Lülitati sisse kõikide pakettide normaliseerimine.
 
nat on $extIF from !($extIF) -> ($extIF:0)
#Lülitati sisse NAT välisel võrguliidesel.

block in
pass out keep state
antispoof quick for { lo $intIF }
pass in on $extIF inet proto tcp from any to ($extIF) port $lubatud flags S/SA keep state
#Keelati kõik sisenev liiklus peale makros $lubatud kirjeldatud portidelt, lubati võrgust väljuv liiklus ning välistati siseneval liiklusel spoof’imine.

pass in inet proto icmp all keep state
pass out inet proto icmp all keep state
#Lubatakse võrku sisenevad ja väljuvad pingimised.

#Lubati väljuv liiklus.
pass quick on $intIF

Lisahääletuseks võib seadistada kiire lingi puhul näiteks

set optimization aggressive

Optimizationi muutujaid saab vaadata käsuga pfctl -s timeouts

Aeglasemate ühenduste korral on kasulik agressive asemel seadistada näiteks high-latency

State tabeli vaikimisi suuruseks kus hoitakse kõiki aktiivseid ühendusi on 10000 mis suuremate ühenduste laviiniga võib täis saada kergelt

Keep state peaks tänapäeval pf-i vaikimisi default olema ja kogu filterdamist isegi kiiremaks tegema.

Ssh läbustajate piiramine

Vaadates igaöist ebaõnnestunud logimiskatsete arvu võib masinal kus ssh ligipääs peab olema avatud kogu maailmale avastada halval päevall neid katseid tuhandeid. Erinevate robotite poolt proovitakse läbi kõikvõimalikke kasutajanimesid ning paroole milledega üritakse sisse logida. Sageli, paljude kasutajatega serveris, kus kasutajatel võimalus ise endile lihtsaid paroole seadistada ka õnnestunult. Lisaks on selline täis läbustatud logifail ebamugav ka debugimisel ning häirib igaöiste raportite lugemist.

Kuidas seda probleemi lahendada? Kõige lihtsam lahendus on tekitada tabel milles olevad aadressid blokitakse koheselt ning seadistada ssh lubamise reale lisaks maksimaalsed ühenduste arvud, millede ületamise korral ip aadress koheselt keelatud aadressite teabelisse lisatakse.

Pf.confi täiendasin järgnevalt:

Tekitasin tabeli jobud

table <jobud> persist

Blokeerisin kõik ühendused sealsetelt aadressidelt

block log quick from <jobud>

Seadistasin limiidid ssh ühendustele milledest alates ip aadress tabelisse lisatakse

pass in on $ext_if proto tcp from any to $ext_if port 22 keep state (max-src-conn 10, max-src-conn-rate 10/5, overload <jobud>  flush global)

Vaadates nüüd logist mõnd läbustajat näeme, et üsna peatselt katkes temaga suhtlus

# cat /var/log/auth.log | grep 89.216.115.128
Feb 27 18:32:15 muheleja sshd[64673]: Did not receive identification string from 89.216.115.128
Feb 27 18:37:40 muheleja sshd[65023]: Invalid user PlcmSpIp from 89.216.115.128
Feb 27 18:37:41 muheleja sshd[65025]: Invalid user plcmspip from 89.216.115.128
Feb 27 18:37:42 muheleja sshd[65027]: Invalid user plcmspip from 89.216.115.128
Feb 27 18:37:44 muheleja sshd[65029]: Invalid user db2inst1 from 89.216.115.128
Feb 27 18:37:46 muheleja sshd[65031]: Invalid user dasusr1 from 89.216.115.128
Feb 27 18:37:47 muheleja sshd[65033]: Invalid user ts from 89.216.115.128
Feb 27 18:37:49 muheleja sshd[65035]: Invalid user TeamSpeak from 89.216.115.128
Feb 27 18:37:51 muheleja sshd[65037]: Invalid user cisco from 89.216.115.128
Feb 27 18:37:52 muheleja sshd[65039]: Invalid user dream from 89.216.115.128
Feb 27 18:37:57 muheleja sshd[65041]: Invalid user spam from 89.216.115.128

Vaatame tabelisse ka

# pfctl -t jobud -T show
No ALTQ support in kernel
ALTQ related functions disabled
   89.216.115.128

Tundub, et läbustaja sai edukalt blokeeritud.


Tabeli saab puhastada käsuga

# pfctl -t jobud -T flush
No ALTQ support in kernel
ALTQ related functions disabled
1 addresses deleted.

IPV6 filtreerimisest

Kui reeglis ei ole sõna inet, siis käib sama reegel nii ipv4 kui ipv6 kohta. Näiteks need:

block in log quick on $ext_if from <global_deny_in> label "global_deny_in"
block in log quick on $ext_if from any to <server_block_out>
block log on $int_if all label "blocked_kontor"

Aadresside võrdlemine on pf-il loomulikult intelligentne, s.t. ipv4 aadress tähendab ühtlasi ka ipv4 protot.

Tulemüüri võrguühenduse võimekus

dmesg | less

Otsida välja väljad Ethernet kohta. Antud näite puhul ei ole testtulemüüri raud piisav 10Gb jaoks (on pci-e2 x4, oleks vaja pci-e3 x8):

ixl0: <Intel(R) Ethernet Connection XL710 Driver, Version - 1.2.8> mem 0xd8800000-0xd8ffffff,0xd87f0000-0xd87f7fff irq 40 at device 0.0 on pci4
ixl0: Using MSIX interrupts with 9 vectors
ixl0: f4.22 a1.2 n04.25 e8000143f
ixl0: Using defaults for TSO: 65518/35/2048
ixl0: Ethernet address: 68:05:ca:32:f0:cc
ixl0: PCI Express Bus: Speed 5.0GT/s Width x4
ixl0: PCI-Express bandwidth available for this device
     is not sufficient for normal operation.
ixl0: For expected performance a x8 PCIE Gen3 slot is required.

ixl1: <Intel(R) Ethernet Connection XL710 Driver, Version - 1.2.8> mem 0xd9000000-0xd97fffff,0xd87f8000-0xd87fffff irq 40 at device 0.1 on pci4
ixl1: Using MSIX interrupts with 9 vectors
ixl1: f4.22 a1.2 n04.25 e8000143f
ixl1: Using defaults for TSO: 65518/35/2048
ixl1: Ethernet address: 68:05:ca:32:f0:cd
ixl1: PCI Express Bus: Speed 5.0GT/s Width x4
ixl1: PCI-Express bandwidth available for this device
     is not sufficient for normal operation.
ixl1: For expected performance a x8 PCIE Gen3 slot is required.


pci-e võimalustest tulenev maksimaalne läbilase

Testimiseks kasutusel olev pci-e slott võimaldab:

5000MHz * 4bitti / 8 = 2500 MB/s

Riistvaraliste komponentide mõju

Komponent Tähtis
Emaplaat PCI siini laius ja kiirus - kindlasti pci-e, soovituslikult vähemalt pci-e3 x8
CPU CPU kiirus ei ole esmane prioriteet.
Mälu kiirus Mhz, hulk ei ole peale 1-2 GB tähtis, peale 8-16GB üldse määrav
Võrgukaart eraldiseisev või spec. (ei kasuta CPU ressursse oma arvutusteks)
Hyper Threading Maha, tekitab latentsust ja turvariski


Tulemüüri läbilaske testid

Testime tulemüüri läbilaset erinevates olukordades, kasutades iperf-i.

Testime erinevate TCP akende suuruste ja samaaegsete ühenduste arvuga 30 sekundise kestvusega, seejärel testime suurema kogumahuga väikeste pakettidega ja siis suurtega.


32KB, 1, 2 ja 4 ühendust. 64KB, 1, 2 ja 4 ühendust. 128KB, 1, 2 ja 4 ühendust. 256KB, 1, 2 ja 4 ühendust. 512KB, 1, 2 ja 4 ühendust.

32, 128 ja 512KB, 1TB kogumahtu, 1 ja 4 ühendust. Näiteks:

Masinal mida pommitada:

iperf -s

Pommitajal:

iperf -t 30 -c 1.2.3.4 -w 32KB -P 1 -i 1 >> PFtest

Tulemusi saab siis lugeda failist PFtest.

Turva

DoS testid

Näiteid hping3 kasutades.

Smurf attack, mida oma võrgus eriti teha ei taha, kui just osa sellest eraldama ei hakka:

hping3 -1 --flood -a SIHTMÄRGI_IP VÕRGU_BROADCAST


DOS Land Attack (SYN flood)

hping3 -V -c 1000000 -d 120 -S -w 64 -p 445 -s 445 --flood --rand-source SIHTMÄRGI_IP

SYN rünnaku ja Portide skänni limiteerimine

Piirame RST vastused. Vaikimisi on piirang 200 paketti sekundis. Lisaks on ka võimalus keelata sellekohaste sõnumite näitamine:

sysctl net.inet.icmp.icmplim=200
sysctl net.inet.icmp.icmplim_output=0


Selgituseks:

From blackhole(7):
Code:

Normal behaviour, when a TCP SYN segment is received on a port where
     there is no socket accepting connections, is for the system to return a
     RST segment, and drop the connection.  The connecting system will see
     this as a ``Connection refused''.  By setting the TCP blackhole MIB to a
     numeric value of one, the incoming SYN segment is merely dropped, and no
     RST is sent, making the system appear as a blackhole.  By setting the MIB
     value to two, any segment arriving on a closed port is dropped without
     returning a RST.  This provides some degree of protection against stealth
     port scans.

Tore on see, et RST piiratakse juba enne tulemüüri, nii et kui keegi selle rakenduse tasemel pangestab, jääb piirang ikka peale niikaua, kui tuuma vastavad deemonid töötavad.


SYN rünnakul kolmest masinast, kasutades kahest hping-i ja juurest 24 ping-i instantsi, igaüks spämmides miljonites pinge minimaalse ooteaknaga ei suutnud tulemüüri silmagi pilgutama panna. (~90K paketti sekundis, CPU maksimaalselt 10% load, mälu kasutus ~2G 16-st)


Lisad

pflog logima faili

# grep -i pflog /etc/rc.local
echo -n "pflog -> syslog"
ifconfig pflog0 up
tcpdump -s 96 -l -e -t -i pflog0 | logger -p local0.info -t pf &
# grep -i local0.info /etc/syslog.conf
local0.info                                     /var/log/pflog.txt
local0.info                                     @loghost
# grep -i pflog.txt /etc/newsyslog.conf
/var/log/pflog.txt                      600  7    *  @T00     Z

pf flush kui reeglid untsuläinud

Üks võimalus oleks anda käsk

# pfctl -f pf.conf && sleep 60 && pfctl -f pf.conf.safe

See näide pole aga hea kui terminali ühendus mahakukub, sellepuhuks tasuks pigem kasutada rida

echo "pfctl -d" | at + 5 minutes

Mis lihtsalt disabled pf kõik reelid

eemaldab pf tabelist ridu mis liiga vanad http://expiretable.fnord.se/