Packet filteri optimiseerimine

Allikas: Kuutõrvaja
Redaktsioon seisuga 13. mai 2011, kell 12:19 kasutajalt Jj (arutelu | kaastöö)

Packet filter teeb üldiselt silmajärgi hinnates süsteemile väga vähe koormust. Näiteks FreeBSDs tundub kernel tegevat rohkem tööd pakettide edastamisega kui packet filteri endaga. Üsnagi suurel tulemüüril millel koormuseks keskmiselt 20000-40000 state püsib koormus üsnagi normaalne.

Siiski järgnevalt pisut packet filteri erinevatest optimiseerimisvõimalustest

Võimalik on seadistada tcp optimiseerimist. Võimalikud valikud on normal, aggressive ja conservative. Neid saab seadistada packet filteri alguses kasutades rida

set optimization aggressive
  • normal - suitable for almost all networks.
  • aggressive - aggressively expires connections from the state table. This can greatly reduce the *memory requirements on a busy firewall at the risk of dropping idle connections early.
  • conservative - extremely conservative settings. This avoids dropping idle connections at the expense of greater memory utilization and slightly increased processor utilization.

high-latency

 A high-latency environment (such as a satellite connection).

mis tähendab vist äärmiselt pikkasid paketiliikumise aegasid ja arvestab võimalike kadudega. "pfctl -s timeouts" peaks ära näitama mis erinevused ühel või teisel valikul on.

Nagu öeldud muudetakse sellega ainult tcp timeoute. Vaikimisi timeoudid FreeBSD 8.2 opsüsteemis on

*TIMEOUTS:		   Normal	Aggressive	Conservative
tcp.first                   120s	   30s		  3600s
tcp.opening                  30s	    5s		   900s
tcp.established           86400s	18000s		432000s
tcp.closing                 900s	   60s		  3600s
tcp.finwait                  45s	   30s		   600s
tcp.closed                   90s	   30s		   180s
tcp.tsdiff                   30s	   10s		    60s

Limits püsib kõigil

LIMITS:
states        hard limit    10000
src-nodes     hard limit    10000
frags         hard limit     5000
tables        hard limit     1000
table-entries hard limit   100000

Ei muutu samuti järgnevad asjad

adaptive.start             6000 states
adaptive.end              12000 states
src.track                     0s
udp.first                    60s
udp.single                   30s
udp.multiple                 60s
icmp.first                   20s
icmp.error                   10s
other.first                  60s
other.single                 30s
other.multiple               60s
frag                         30s
interval                     10s

Muutujate seletus

set timeout tcp.first - millal handsake tehakse, kaua oodatakse
set timeout tcp.closed - kui väike sulgetakse aeglaste ühendustega kiirelt

Näide, kuidas võib valede ja teadmatute seadistustega serveri võimekust tõsiselt kahjustada. Paneme nimeserverile järgneva optimiseerimise.

set timeout udp.multiple 2

timeout.2 teeb kõvasti kahju. Kõik õnnestunud kustutakse kahe sekundiga ära ebaõnnestunuid hoitakse aga alles 60 sekundit ja kauem. Sellega läbustatakse state tabelit.

Nimeserveri spetsfiifikaks on, et kliendi poolt tehakse 1 päring ja siis ei puututa kaua. Teistel masinatel on teissugune spetsiifika. Andmebaasiserver näiteks. Seal pole vaja agresiivset optimiseerimist. Kümmekond masinat kasutavad pole vaja olekute tabelit sättida. Konservatiivsed seaded.

Järgnev seadistus on mõeldud kõrge loadi all oleva nimeserveri jaoks, palju trafficut udp peal ja tillukesed paketid. timeoudid väiksemad.

set optimization aggressive
set timeout tcp.established 7200
set timeout { udp.first 20, udp.single 5, udp.multiple 30 }
set limit states 1000000 
  • first =üks server üheainsa paketiga, pagan teab mis nende ühendustega veel edasi saab
  • single =üks server mitu paketti aga vastust pole saanud. Timeout väikse, et doss attack ei tõmbaks täis
  • multiple = õnnestunud sessioon, mida võiks kauem hoida, väärtuslikum.

Veebiserver näiteks paljude veebidega. Peaks vaatama rohkem tcp timeoute, olekute tabel võiks olla suur.

Kas agresiivne või normal on otsustamise küsimus. Agresiivne masinale mil kliente palju laiali. Kui kliente keskmiselt mõistlik arv ja kõik mõistlike päringutega ei pea olema agresiivne.

Veel töötavad NFS/Radius udp peal, muudel serveritel tuleks seadistada rohkem TCP numbreid.

Vaja vaadata mis defauldid eri poliitikatega (agresiivne-passiivne)

Sageli ühenduste aegumisd ei paista niiasma välja. St ühendus ei pruugi katkeda vaid ühendus tuuakse üles uue paketi saabumisel kliendilt. Tehakse lihtsalt märkamatult taustal rohkem tööd näiteks state tabeliga. See paistab välja vaid siis kui suurem ddos rünnak serveri/seadme suunas.

Kui tulemüür töötab nö dioodina, et välja lubab kõiki aga sisse on filtreeritud võib samas ühendus ka puhtalt katki minna state maha viskamisega.

Igal interfacel oma tabel

set state-policy if-bound