Tuesday, 3 October 2006
Keep state! PF firewall state og window scaling
« e-learning.security6.net opdateres | Main | er IPv6 modent i Danmark? »Firewalls har snart eksisteret i 20 år og der er sket meget på internet siden man begyndte at introducere dem. Meningen med en firewall er at filtrere traffik og typisk taler man om filtrering på netværksniveau. Der findes også filtre beregnet til applikationer, eksempelvis mod_security modulet til Apache HTTPD webserveren.
Phil gjorde mig idag opmærksom på nogle potentielle problemer med TCP window scaling og statefull filtering, der kan resultere i problemer med at nå eksempelvis visse websites.
Et af problemerne er systemer på internet som er fejlbehæftede, men hvor fejlen først opstår når man begynder at udnytte TCP window scaling mere, det andet problem opstår når man ikke får indsat den rigtige state i sin statefull filtering firewall. TCP window scaling betyder at man sender flere pakker med data hørende til en forbindelse afsted , før man har fået svar tilbage fra modtageren. Det er nødvendigt hvis man vil udnytte båndbredden på forbindelser med meget båndbredde og lang latency, eksempelvis hurtige ADSL forbindelser.
Det første problem skyldes at nogle ældre systemer på internet ikke behandler pakker med TCP window scaling rigtigt, og derfor kan man ikke udnytte dette fuldt ud. Desværre er det ikke altid til at sige hvor de dårlige systemer er. Enten skal man være konservativ og slå window scaling fra og derved acceptere dårlig udnyttelse af båndbredden. Alternativt skal man fejlsøge hver gang der er problemer med at kommunikere med visse dele af internet.
Problemet forværres yderligere af at symptomerne ikke altid er tydelige, eksempelvis kan det opleves umiddelbart efter en opgradering af ens egen firewall - hvor nogle websites efterfølgende ikke virker. De fleste vil så skyde skylden på den nye firewall, hvor problemet reelt findes længere ude i nettet.
Dette problem beskrives godt i en længere tråd om Linuxkernen på kerneltrap.
Det andet problem omhandler også window scaling men her er problemet typisk relateret til statefull filtering i en firewall som man selv konfigurerer. Jeg ved ikke hvor udtalt problemet er i andre firewalls, men da jeg selv foretrækker OpenBSD PF som firewall vil jeg skrive om dette. NB: OpenBSD PF findes idag også i FreeBSD og NetBSD operativsystemerne.
OpenBSD PF firewallen er meget striks med hensyn til check på pakkerne der tillades igennem firewallen - hvilket er det man ønsker når man laver en firewall. Samtidig er PF statefull, hvilket betyder at når man tillader en forbindelse at blive åbnet kan den lave en liste over åbne forbindelser og tillade resten af kommunikationen i den forbindelse igennem. For at denne statefull filtering kan foretages skal statetabellen opdateres korrekt, hvad den ikke bliver medmindre man ser pakkerne der initierer forbindelsen.
Da det er firewalladministratoren der skriver regelsættet til PF er det vedkommende der bestemmer hvilke regler der indsættes, og hvilke regler der giver anledning til opddatering af statetabellerne. Desværre er det svært at skrive korrekte regelsæt til firewalls, medmindre man gør det efter en meget striks procedure og husker nogle enkle råd.
Problemet med statefull filtering og window scaling er beskrevet flere steder, men det link jeg fik idag er fra PF mailinglisten der findes i arkiv her: http://www.mail-archive.com/pf@benzedrine.cx/msg07836.html
Et af indlæggene indeholder et råd fra Daniel Hartmeier som er programmøren der oprindeligt lavede OpenBSD PF. Rådet er at man altid sætter state på sine regler, specielt dem der modtager den første pakke i en TCP forbindelse. Så skulle den være klaret :-)
If you want a simple way to ensure this is not happening with your ruleset, make sure that
- a) there is a default block policy
- b) all 'pass' rules that can match TCP have 'flags S/SA'
- c) all 'pass' rules have 'keep state'
Daniel som er en vældigt flink fyr har ligeledes skrevet nogle fantastiske artikler om PF for nyligt der findes på Undeadly.org .
Hvis du er interesseret i firewalls bør du købe bogen af Cheswick, Bellovin og Rubin. Firewalls and Internet Security: Repelling the Wily Hacker, Second Edition by William R. Cheswick, Steven M. Bellovin, and Aviel D. Rubin (Paperback - Feb 24, 2003) ISBN: 020163466X
Der er ligelede et par andre steder du bør læse om PF, hvis du har brug for en højtydende firewall:
- OpenBSD FAQ med link til PF FAQ findes her: http://www.openbsd.org/faq/index.html
- Peter N. M. Hansteen har skrevet et godt dokument om PF der kan findes via hans hjemmeside på adressen: http://www.bgnett.no/~peter/pf/
Posted by at CEST 09:10 03/10/2006 in OpenBSD

