Brandväggar

Vad hjälper en brandvägg mot? Vad hjälper den inte mot?

I detta sammanhang är en brandvägg en hårdvara eller ett program som på något sätt begränsar nättrafiken (släpper igenom vissa saker och spärrar andra). Ofta används brandvägg för att minska riskerna i samband med nätanslutning, men den kan också användas för att spärra olämplig trafik av andra skäl.

Det är viktigt att komma ihåg att en brandvägg inte är en universallösning som gör att man sedan kan strunta i andra säkerhetsåtgärder. En rätt använd brandvägg är en del av skyddet, inte hela skyddet. Det finns många skräckhistorier om företag och organisationer som har haft en hård brandvägg mot "det farliga Internet" och känt sig säkra, för att sedan råka riktigt illa ut när någon mask hamnat på insidan av brandväggen eller någon cracker lyckats ta sig förbi brandväggen. Om man litar för mycket på brandväggen är det lätt hänt att man slarvar med säkerheten på insidan.

En brandvägg är till syvende och sist beroende av de regler som styr den. Dessa kan vara väldigt enkla (till exempel "Alla uppkopplingar utåt är OK men inga försök att koppla upp sig inåt ska släppas igenom.") eller komplicerade (långa listor som talar om vilka adresser som får prata med vilka andra, med vilka protokoll och på vilka portar, osv).

Oavsett vilket, så är brandväggen beroende av att reglerna är korrekta och aktuella. Om man inte vet vad man vill tillåta och vad som ska vara förbjudet, så har man ingen nytta av en brandvägg. Den kommer antingen tillåta för mycket (och därmed inte minska riskerna) eller för litet (och därmed vara i vägen för normal användning av nätverket).

Olika typer av brandväggar

Den traditionella bilden av en brandvägg är en burk med två nätverkskontakter: en för insidan och en för utsidan. Brandväggen fungerar sedan som en router som transporterar trafik mellan de två näten, men bara om trafiken tillåts enligt de regler man konfigurerat.

Det finns fortfarande gott om brandväggar som ser ut så. Nuförtiden är det dock vanligt med flera nätverkskontakter än två. Om man exempelvis har tre sådana, så kan man till exempel få plats med ett extra nät för externt exponerade servrar (detta nät brukar ibland lite skämtsamt kallas för DMZ efter "De-Militarized Zone") så att man kan begränsa kontakten mellan dessa och insidan.

Med ännu flera nätverkskontakter så kan man ha flera insidor, för att kunna reglera trafiken mellan datorerna där. Det krävs ju att brandväggen sitter "mellan" två datorer för att kunna göra något; två datorer på samma nätverk bakom brandväggen kan skicka vad som helst mellan sig utan att brandväggen kan göra något åt saken.

Nätverkskontakterna vi pratar om här behöver inte vara fysiska. En brandvägg som förstår sig på VLAN-teknik kan filtrera trafik mellan många olika VLAN utan att behöva ha många fysiska anslutningar.

Det är ofta smidigt att köpa brandväggen färdig från en leverantör som ansvarar för både hårdvaran och mjukvaran. Därför är de flesta kommersiella brandväggar idag "burkar" som man köper kompletta, istället för att köpa en brandväggsprogramvara och installera på en dator som man själv satt ihop och installerat operativsystem på.

Däremot är det ganska vanligt att man bygger brandväggar själv genom att kombinera PC-hårdvara och fri programvara. Två populära val är Linux (där brandväggssystemet iptables ingår) och OpenBSD (med sin motsvarighet pf). Det finns också färdiga Linux-distributioner för brandväggsändamål.

Ovan utgår vi från att en brandvägg är någon slags utrustning som placeras på nätet mellan olika delar. Att ha brandväggen som en separat utrustning är bra så tillvida att man inte kan manipulera brandväggen bara för att man knäckt datorer på insidan av den. Man måste komma åt brandväggen som sådan. En nackdel är dock att det går åt många brandväggar om man vill få ut skyddet nära de enskilda datorerna. Därför finns sedan ett tag tillbaka även brandväggar i form av program som man kör på enskilda datorer för att skydda just den enskilda datorn mot resten av nätet.

I Windows-miljö brukar detta kallas för "personlig brandvägg". En enklare sådan ingår numera till exempel i Windows XP. Mera avancerade sådana kan skaffas separat eller ingå tillsammans med antivirusprodukter. Precis som med mera traditionella brandväggar så gäller det att reglerna fungerar i den miljö man har, så att brandväggen inte konstant falsklarmar för all legitim trafik, eller släpper igenom på tok för mycket. En brandväggsprogramvara som körs på maskinen den ska skydda har i alla fall den fördelen att den kan kontrollera vilket program som vill prata med nätet, något som är omöjligt för en brandvägg i form av en burk intill.

I Unix/Linux-miljö brukar man inte prata om "personlig brandvägg", men samma teknik kan användas där också, till exempel för att skydda en enskild server mot resten av världen. Samma system (iptables, pf och så vidare) som man använder när man bygger en "burk-brandvägg" kan användas för att skydda datorn som sådan.

Olika tekniker för filtreringen

Brandväggen följer sina inställningar för att se om trafik ska släppas fram eller ej. Oftast består inställningarna av ett antal regler som gås igenom från början till slut, och så fort en regel passar in på trafiken bestämmer den vad som ska ske (släppas fram, stoppas på något sätt, loggas, larmas osv).

Olika brandväggar tillåter olika avancerade regler. I den enklaste formen tar brandväggen beslut om varje paket som vill passera, och använder den information som finns i paketet för att jämföra mot reglerna. Exempel på det man kan använda är: sändande IP-adress, mottagande IP-adress, protokoll (TCP/UDP/ICMP osv), sändande portnummer och mottagande portnummer.

Enklare filterliste-funktionalitet i routrar brukar vara på denna nivå. Problemet med dem är att de inte har någon kunskap om vad som hänt tidigare i förbindelsen, då ju varje paket hanteras för sig utan sammanhang. Det kan ibland vara svårt att tillåta trafik ut (och svar tillbaka) och samtidigt blockera trafik in (och svar tillbaka).

Moderna brandväggar klarar att hålla reda på förbindelserna. Tekniken har många namn (connection tracking, stateful firewall, stateful inspection, osv). Det handlar om att brandväggen håller reda på pågående TCP-förbindelser (och UDP- och ICMP-dito). På så sätt kan man ta beslut om förbindelsen en gång när den kopplas upp (och man vet riktningen) och sedan kan man släppa in resten av paketen för att de tillhör en sedan tidigare godkänd uppkoppling.

Ännu mer avancerade brandväggar förstår också de tillämpningsprotokoll som pratas. Med de hittills diskuterade sorterna får man till exempel släppa in trafik till port 25/tcp för att kunna få in e-post till e-post-servern. Med en brandvägg som förstår tillämpningsprotokoll så kan man dessutom kontrollera att det är e-postprotokollet SMTP som pratas i trafiken man släpper in till port 25/tcp.

Att kontrollera trafiken på tillämpningsnivån tar mycket mer kraft än att kontrollera den på paket- och förbindelsenivån. Det kräver också att brandväggen har stöd för de tillämpningsprotokoll som ska släppas igenom. Därför är denna typ av brandvägg hittills inte så vanlig i praktiken, utanför särskilda tillämpningar där extra mycket kontroll behövs.

Det är däremot vanligt att brandväggar med förbindelseföljning använder lite trick som går ut på att tjuvtitta på tillämpningsprotokollet för att klara av vissa särskilda saker. Till exempel måste de för att brandvägga aktiv FTP-trafik korrekt "tjuvtitta" inuti en FTP-kontrollförbindelse för att se vilka adresser och portar som ska tillåtas för datakanal, som sätts upp som en separat förbindelse och som därför annars skulle ha spärrats.

Brandväggar kan också erbjuda olika mycket stöd för att gruppera maskiner och tjänster. En primitiv variant kan till exempel kräva att du skriver en regel för varje webbserver som det är OK att släppa in HTTP-trafik till, medan en mera avancerad tillåter att du definierar en grupp med alla webbservrar i, och sedan lägger in en enda regel som tillåter HTTP-trafik till hela WWW-server-gruppen.

Adressöversättning (NAT)

Brandväggar har ofta möjlighet att använda adressöversättning (NAT, Network Address Translation). Detta innebär för det mesta att man "döljer" hela det interna nätet (flera adresser) bakom en enda adress (brandväggens egen) på det externa nätet. För att klara det så manipulerar brandväggen portnumren i TCP/UDP-paket och kommer ihåg vilka portnummer som hörde ihop med vilka adresser på det interna nätet, osv. För att kunna ta emot inkommande trafik initierad utifrån måste man ofta tala om för brandväggen att trafik till vissa portnummer på den yttre adressen ska skickas vidare till portnummer på intern adress, så kallad "port forwarding".

Adressöversättning är mycket populärt i hemmabrandväggar, då man ju oftast får en eller i alla fall väldigt få IP-adresser av sin nätleverantör.

En stor nackdel med adressöversättning är att den saboterar "the end-to-end principle" på nätet. Detta ställer till exempel till problem för protokoll som utgår från att de kan göra en uppkoppling tillbaka "åt andra hållet" som svar på en uppkoppling i framåtriktningen. Adressöversättande brandväggar måste därför förstå sig på diverse applikationsprotokoll (till exempel FTP) och ändra adresser och/eller portar i dataströmmen.

Att brandväggen döljer hela nätet bakom en enda adress kan ge stora problem med spårbarhet. Om någon ute i världen rapporterar att en dator på vårt nät verkar knäckt och har används för intrångsförsök mot dem, så talar de (förhoppningsvis) om vilken IP-adress som attacken kommer från. Om vi använder adressöversättning så är det dock tyvärr adressen på utsidan av brandväggen vi får och vi vet inte vilken dator på insidan som trafiken egentligen kom från. Om rapporten är fullständig (inklusive portnummer och bra tidsstämplar) så finns det en chans att reda ut det hela, men då krävs det att vi loggar alla utgående uppkopplingar i den adressöversättande brandväggen.

IPS

Det är vanligt att man kompletterar brandväggar med intrångsdetekteringssystem (IDS).

En utveckling av IDS:er är IPS:er (Intrusion Prevention System) där man också ger dessa system möjligheten att avbryta förbindelser som har klassificerats som "skumma". På så sätt får man ännu en brandväggsliknande funktion.

Brandväggar hindrar förhoppningsvis angripare från att prata med portar som eventuella sårbara program lyssnar på. Tyvärr hindrar de också åtkomst till samma portar från de datorer man letar efter sårbarheter från (med Nessus eller liknande "skanningsprogram"), ifall man inte tänkt på detta i förväg, och släppt igenom trafik från dessa datorer (eller placerat dem på insidan).

IPv6 och annat icke-IPv4

Att köra IPv6 parallellt med IPv4 blir allt vanligare. Samtidigt finns det äldre protokoll som IPX och AppleTalk som också går "vid sidan om" IPv4. Det gäller att se till att brandväggen hanterar dessa på ett vettigt sätt, så att de inte släpps igenom helt utan kontroll. Notera att det kan behövas en separat konfiguration m.a.p. ipv6.


IT-säkerhetshandboken | Utskriftsvänlig sida | Kontakt