Översikt av basfunktionerna

När det kommer till hemmaroutrar finns det några funktioner som i princip alla är utrustade med. Detta avsnitt innehåller en översikt kring syftet med dessa funktioner.

NAT/PAT

De flesta internetleverantörer delar ut en eller några få så kallade IP-adresser till sina kunder. En teknik som ofta benämns är NAT, Network Address Translation, men som egentligen heter PAT, Port Address Translation, gör det möjligt för flera enheter på hemmanätverket att dela på den IP-adress internetleverantören tillhandahåller.

Då "NAT" är så vedertaget trots att det i hemmanätverksfall i praktiken alltid handlar om "PAT" kommer jag använda termen NAT, även fast det är tekniskt inkorrekt. Jag gissar att det ändå blir mindre förvirrande, framförallt då Pfsense använder termen NAT.

För att översiktligt illustrera vad som sker använder vi denna topologi där två klienter på det lokala nätverket sitter bakom en brandvägg som kör NAT. Brandväggens publika IP-adress är 1.2.3.4 medan den server klienterna kommunicerar med med i detta exempel har IP-adress 8.8.8.8. Klienterna är uppkopplad mot en tjänst på servern på TCP-port S.

nat1.PNG

client1 kommunicerar med server.

Ett paket som skickas från första klienten kommer nå brandväggen med mottagaradress 8.8.8.8 och port S samt avsändaradress 192.168.0.10 och någon slumpmässigt port C1. Brandväggen kommer ersätta avsändaradressen med sin egen adress, 1.2.3.4 i detta exempel. Porten C1 kommer också att ersättas med en annan slumpmässig port, F1. Brandväggen gör en notering om att det nu finns en koppling mellan 192.168.0.10:C1 och 1.2.3.4:F1.

För servern vid 8.8.8.8 ser det alltså ut som om kommunikationen sker med brandväggen, inte direkt med klienten då klienten inte har en adress som går att använda på WAN.

Andra klienten behöver nu också kommunicera med servern. Paketet går iväg med adress 192.168.0.11 och någon slumpmässig port C2. Detta kan vara samma som C1, det spelar ingen roll.

nat2.PNG

client2 kommunicerar med server

Brandvägen gör samma sak här och ersätter avsändaradressen med sin egen och väljer en slumpmässig port F2. Här måste F2 väljas så den skiljer sig från F1. Detta för att veta vilken klient ett svar ska skickas till. Återigen gör brandväggen en notering, denna gång om att 192.168.0.11:C2 är associerad med 1.2.3.4:F2.

Paket som går i andra riktningen får motsatt behandling, det vill säga ett paket som skickas mot 1.2.3.4:F1 kommer matcha en aktuell NAT-regel. Brandväggen ersätter då mottagaradressen med 192.168.0.10:C1.

Och här kommer den lilla säkerhet som NAT ger. Om en klient aldrig skickat ett paket finns ingen aktuell NAT-regel. I det läget kan inte noder på internet överhuvudtaget skicka paket till klienten, den går helt enkelt inte att adressera då klienten inte har en publik IP-adress.

Brandvägg

Syftet med NAT är att låta flera enheter dela på en och samma IP-adress. Tekniken för detta ger som bieffekt ett visst skydd mot enheter ute på internet, då det inte är möjligt att skicka ett paket till valfri enhet på det lokala nätverket (LAN) bakom NAT-noden.

Syftet med en brandvägg är att upprätthålla en policy kring vilka nätverkstjänster som ska tillåtas passera genom brandväggen. Med andra ord, för att upprätthålla en viss policy kring vilka tjänster som ska vara nåbara eller ej är det en brandvägg som krävs.

Matchningskriteriet för brandväggsregler baseras på en eller flera av följande: typ av protokoll, IP-adress/nätverk för avsändare och/eller mottagare och vilken tjänst (vilken "nätverksport") som avses.

När en regel träffar kan brandväggen välja att skicka vidare paketet eller kasta bort paketet tyst, alternativt först skicka en notis om att tjänsten inte är tillgänglig för avsändaren.

Ett exempel är att ett paket från internet mot TCP-port 443 (normalporten för HTTPS) accepteras och grundregeln är att paket mot övriga TCP-portar kastas tyst. I det läget är HTTPS den enda tjänsten i nätverket som kan nås från internet.

I praktiken måste brandväggen och NAT samarbeta, och dessa två tekniker är därför sammanflätade i de flesta operativsystem såsom FreeBSD och Linux. För att NAT ska fungera har brandväggen en specialregel som säger att paket riktade mot portar på WAN-sidan där det finns en aktiv NAT-session accepteras.

DHCP

Även om NAT ser till att hela hemmanätverket kan dela på en IP-adress från internetleverantören måste ändå varje maskin på LAN-uppkopplingen (Local Area Network, det lokala nätverket, trådbundet Ethernet och WiFi) få en IP-adress för att kunna kommunicera.

Det finns en uppsättning IP-adresser som specifikt är tänkta för privata nätverk. Det behövs bara något sätt att automatiskt dela ut en sådan adress, som på LAN-nätverket är unik, till varje maskin. Det är precis vad DHCP (Dynamic Host Configuration Protocol) är till för.

Förfarandet att få en adress, samt lite annan nödvändig information som vilken maskin på LAN som kan förmedla paket ut mot internet, är ungefär som följer. Klienten startar och ropar till alla på LAN:

Finns det någon som kan ge mig en IP-adress?

De DHCP-servrar som hör frågan kikar om det finns en ledig adress i poolen av IP-adresser som administratören skapat. Om så är fallet svarar DHCP-servern:

Jag kan erbjuda IP-adress X.

Då det är fullt okej att ha flera DHCP-servrar kan klienten få flera svar. Klienten väljer ett av svaren och skickar tillbaka ett meddelande till den server som erbjöd adressen klienten vill ha, som säger:

Jag vill ha adress X.

Om DHCP-servern som erbjöd adress X fortfarande har adressen tillgänglig markeras X som reserverad och servern svarar:

OK, adress X är din under de kommande N minuterna/timmarna.

Klienten har nu fått sin adress och är redo att kommunicera med vida världen.

TCP/UDP

Webbläsare, spel, streamingtjänster och liknande kommer alla använda ett eller båda av protokollen TCP (Transmission Control Protocol) och UDP (User Datagram Protocol). Båda dessa protokoll använder sig av så kallade ”portar”, något som är bra att känna till senare när brandväggen ska konfigureras.

Ett sätt att visualisera uppdelningen i adress och port är att tänka på ett kontorshus. Adressen är det som låter användaren hitta rätt byggnad, och porten motsvarar vilken person i byggnaden denne ska träffa då olika personer ansvarar för olika områden.

Några välkända standardportar är 80 (HTTP), 443 (HTTPS) och 22 (SSH). Det numeriska värdet har dock ingen signifikans mer än praxis och det går utmärkt att prata HTTPS över port 42.

Det finns en del praktiska orsaker till att sätta extern SSH-åtkomst på något annat än just port 22. Det ökar inte säkerheten, men många skript som scannar internet efter maskiner testar bara de förvalda portarna. Jag ser exempelvis i mina egna loggar att antal inloggningsförsök mot SSH är vida större när port 22 används än något annat.