Packet Filter
Packet Filter
Sisukord
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/