Hoppa till innehållet

Nätverksport

numret som pekar ut en tjänst på en värddator

Vad det är

En nätverksport är ett 16-bitars tal i huvudet på varje TCP- och UDP-segment, och talet säger åt den mottagande maskinen vilket av dess program datan ska till. Adressen tar paketet till rätt värddator; porten tar det till rätt process när det väl är framme. I vardagligt tal heter det bara port, portnummer när man vill vara exakt, och i plural, portar, menas oftast de som en server lyssnar på. Ordet har ingenting med den fysiska porten på en switch att göra, och inte heller med att porta programvara till en annan plattform.

Fältet är 16 bitar brett, så det rymmer 65 536 värden, från 0 till 65535, och TCP och UDP har var sin uppsättning: TCP-port 53 och UDP-port 53 är två skilda saker som DNS råkar använda båda två. TCP-specifikationen, RFC 9293, definierar en socket som en internetadress sammanfogad med en port, och en anslutning som ett par socketar. Det ger fyra värden: klientens adress, klientens port, serverns adress och serverns port. Det förklarar också hur en enda serverport kan bära tusentals samtal samtidigt. Varje samtal skiljer sig i minst ett av de tre andra värdena, oftast i klientporten.

RFC 6335 delar intervallet i tre. Portarna 0–1023 är systemportar (System Ports), 1024–49151 är användarportar (User Ports) och 49152–65535 är dynamiska portar (Dynamic Ports), som IANA aldrig tilldelar någon. IANA för registret som kopplar ett tjänstenamn till ett nummer: 22 för SSH, 53 för DNS, 443 för HTTPS och 5432 för PostgreSQL. En registrering är en konvention som klienter förlitar sig på. Vilket program som helst kan lyssna på vilket ledigt nummer som helst, och det är så SSH hamnar på en port som ingen skulle gissa.

Klientsidan av en anslutning får för det mesta en port som den aldrig har valt. När ett program ansluter utåt plockar operativsystemet en ur sitt intervall av tillfälliga portar (ephemeral ports), och Linux använder som standard 32768–60999 i stället för IANA:s dynamiska intervall. Att be om att binda port 0 betyder samma sak: ge mig vilken ledig port som helst.

Varför det spelar roll

Bakom varje port ligger ett beslut om exponering: vilka program som svarar utifrån, och på vilken adress. En port utan lyssnare ger ett avvisat anslutningsförsök. En port med en lyssnare är ett stycke mjukvara som vem som helst som når adressen kan prata med, buggar inräknade. Den billigaste tjänsten att säkra är den som lyssnar på 127.0.0.1, eftersom paket från andra maskiner aldrig når loopback-adressen, vad brandväggen än säger.

Den första frågan för varje tjänst är alltså om den över huvud taget behöver nås utifrån. En databas som bara applikationen på samma maskin pratar med hör hemma på loopback. Ett verktyg som bara administratörer använder kan också stanna på loopback och nås via en hoppserver eller ett VPN. Det som blir kvar, typiskt 80 och 443 för en webbplats och en port för SSH, är den publika ytan. Att hålla den kort är lika mycket ett kostnadsbeslut som ett säkerhetsbeslut, eftersom varje publik lyssnare ska patchas, loggas och ha en brandväggsregel som matchar den.

Den andra frågan är numret. Standardportar kostar ingenting i konfiguration: webbläsare, klienter och restriktiva nätverk räknar med 443 och släpper igenom den. Att flytta SSH från 22 minskar bruset från skannrar som bara provar standardporten, och loggarna blir lättare att läsa. Men en skanning av hela intervallet hittar den ändå, och varje verktyg som hänvisar till porten måste lära sig det nya numret. Det är den sista delen som team glömmer.

Den tredje gäller privilegier och delning. På Linux behöver en process root eller förmågan (capability) CAP_NET_BIND_SERVICE för att binda en port under 1024, om inte ip_unprivileged_port_start har sänkts från sitt standardvärde 1024. Normalt äger dessutom ett enda program en viss kombination av adress och port, så två tjänster som båda vill ha 443 behöver något framför sig som delar upp trafiken. Oftast är det en omvänd proxy (reverse proxy) som läser vilket värdnamn klienten bad om.

Så ser det ut i praktiken

Tre delar av företagets infrastrukturarbete hänger på portnummer: en handlar om var en lyssnare sitter, en om en port som flyttade och en om att ta reda på vilka portar som faktiskt är öppna.

När företaget satte upp sin egen git-forge i juli 2026 lades forgens SSH-lyssnare på loopback-gränssnittet, port 23231, och den som sitter utanför når den via en hoppserver. Antalet publika portar stod därmed still. En multiplexer som skulle servera HTTPS och git över SSH från en och samma publika port, genom att titta på de första byten i varje anslutning, är skriven och avslagen. En lyssnare som ingen använder skulle ändå behöva försvaras.

I augusti 2026 fann en härdningsgranskning att SSH hade flyttats till port 1986 under värdens första härdning, medan jailen som spärrar intrångsförsök fortsatte att bevaka 22. Varje spärr som jailen skrev gällde en port där ingenting lyssnade, så skyddet hade aldrig en enda gång slagit till. Åtgärden var liten. Det som blev kvar var en regel: varje säkerhetsskydd paras ihop med en kontroll som faktiskt prövar det.

Värden har 464 MB minne och ingen dashboard, så frågorna om den besvaras av sju skrivskyddade rapportroller som återger den levande maskinen som Markdown. Faktarapporten listar de lyssnande socketarna, alltså portarna så som de finns i en körande systemkärna och inte så som konfigurationen beskriver dem. Bland de verkliga saker som rapporterna har hittat fanns en lyssnande port som ingen deklaration nämnde.

Var det går fel

En tjänst som var tänkt för maskinen själv svarar hela internet. Många program lyssnar som standard på alla adresser, vilket syns som 0.0.0.0, [::] eller * i socketlistan, och en databas eller adminpanel som skulle vara lokal är då ett enda brandväggsmisstag från att exponeras. Sätt bindningsadressen uttryckligen till 127.0.0.1 eller ::1 och bekräfta den i kolumnen för lokal adress:

ss -tlnp
ss -ulnp

Ett skydd fortsätter att bevaka en port som tjänsten har lämnat. Tjänsten flyttade till ett nytt nummer, och brandväggsregeln, jailen, sonden för övervakning eller en klientkonfiguration nämner fortfarande det gamla. Vart och ett av verktygen fortsätter att fungera korrekt mot en port där ingen daemon lyssnar. Håll numret i en enda variabel som alla som använder det läser, och lägg till en kontroll som jämför den lyssnande socketen med det som varje skydd bevakar.

Utgående anslutningar börjar fallera under last med ”Cannot assign requested address”. Varje utgående anslutning tar en lokal port ur det tillfälliga intervallet, och en stängd anslutning håller sina fyra värden reserverade i TIME_WAIT en stund efteråt. Med standardintervallet i Linux, 32768–60999, kan en klientadress hålla 28 232 anslutningar mot samma serveradress och port, öppna eller nyss stängda. En proxy eller arbetsprocess som öppnar en ny anslutning per begäran mot en och samma backend gör slut på dem. Återanvänd anslutningar med keep-alive eller en pool först; att bredda intervallet eller lägga till källadresser köper bara marginal.

En tjänst som startas som vanlig användare stannar med ”Permission denied” på port 80. Att binda under 1024 kräver privilegier. Ge tjänsten förmågan CAP_NET_BIND_SERVICE i dess unit-fil för systemd, lägg den på en hög port bakom en omvänd proxy eller, på en värd där varje lokal användare är betrodd, sänk ip_unprivileged_port_start. Att köra hela tjänsten som root för att komma åt en enda port är den sämsta av avvägningarna.

Starten stannar med ”Address already in use”. En annan process håller porten, ofta en gammal kopia av samma tjänst som fortfarande håller på att stänga ned, eller en andra tjänst med samma standardvärde (8080 är ett populärt). ss -tlnp visar vem som äger den. Bestäm vilken tjänst som äger numret och ge var och en en uttrycklig port i sin konfiguration, i stället för att förlita dig på standardvärden.

Läs mer

Ordlista