Sesam, open u! Kom alles te weten over netwerkpoorten
Geplaatst: 23 september 2024 - 07:24
Toon van Daele
Een woning betreed je via een deur. Datzelfde gebeurt bij data die tussen apparaten wordt verstuurd. Alleen gaat het dan niet om deuren, maar om netwerkpoorten. Hoe werkt dat precies? Op welke manier heb jij daar als gebruiker mee te maken?
Stel je voor dat je in een gebouw met duizend deuren bent. Achter een van die deuren bevindt zich een persoon. Om snel te communiceren, open je het liefst direct de juiste deur. Bij een computer is dat vergelijkbaar, alleen heb je hierbij te maken met 65536 netwerkpoorten (2^16). Het is natuurlijk niet efficiënt als het apparaat voor elke vorm van communicatie alle poorten een voor een moet openen om de juiste ‘gesprekspartner’ te vinden. Hoe dit dan wel werkt, leggen we in dit artikel uit voor de wat gevorderde gebruiker.
Poortnummers
Als je de systeemkast van je pc opent, zie je geen 65536 netwerkpoorten. Logisch, want we hebben het niet over fysieke poorten voor bijvoorbeeld usb en ethernet. De netwerkpoorten zijn virtuele, logische constructies binnen de software en het besturingssysteem. Zo’n netwerkpoort is een punt waar de data binnenkomt of vertrekt.
Een groot aantal communicatievormen, zoals bepaalde diensten en protocollen, gebruiken zogeheten ‘well-known ports’, dit zijn vaste poortnummers. De worden beheerd door de Internet Assigned Numbers Authority (IANA) en zijn genummerd van 0 tot 1023. Bekende poortnummers zijn 20 en 21 (FTP), 25 (SMTP), 53 (DNS), 80 (http) en 443 (https).
Laten we dit eens testen. Ga naar www.id.nl en vervolgens naar https://id.nl:80. Via :80 geef je aan dat je browser verbinding met poort 80 op de webserver moet maken. Dit lukt helaas niet, want het gaat om https en niet om http. Wat wel lukt, is https://id.nl:443, omdat dit de standaardpoort voor zo’n versleutelde verbinding is.
Poorttypes
Naast de 1024 well-known ports zijn er de geregistreerde poorten (van 1024 tot 49151). Deze zijn niet vast gereserveerd, maar kunnen door softwareontwikkelaars voor hun eigen applicaties worden geregistreerd, zoals 3306 (MySQL-database) en 8080 (alternatieve http).
Tot slot zijn er ook nog de dynamische en private poorten (49152 tot 65535). Zoals je verderop kunt lezen, worden deze poortnummers dynamisch toegewezen door het besturingssysteem. Dit gebeurt wanneer een applicatie daarom verzoekt. Deze poorten worden vaak gebruikt voor tijdelijke communicatie, bijvoorbeeld bij het opzetten van een verbinding voor een e-mailapp.
Een overzicht van de poortnummers vind je via deze pagina. In deze lijst kun je navigeren en gericht zoeken naar poortnummers, servicenamen en protocollen.
Poortcommunicatie
Wanneer je met je pc in je thuisnetwerk naar een website surft, stuurt je webbrowser een https-verzoek naar het ip-adres van de webserver, gericht aan poort 443. Op zich is dit eenvoudig, maar in de praktijk blijkt het helaas iets ingewikkelder. Enig inzicht hierin is nuttig om bijvoorbeeld een router of firewall beter en veiliger te configureren.
Wanneer je webbrowser een verzoek stuurt naar de webserver gericht aan poort 443, wijst je pc hiervoor tijdelijk een dynamische poort toe, bijvoorbeeld 62292. Dit verzoek gaat vervolgens eerst naar je router. Deze houdt normaliter een tabel bij, de Network Address Translation-tabel (NAT). Hierin staat welke interne ip-adressen en poorten zijn gekoppeld aan de externe ip-adressen en poorten. De router wijst nu op zijn beurt een externe dynamische poort toe voor deze communicatie, bijvoorbeeld 49800. Ook vervangt de router het interne ip-adres en poort (bijvoorbeeld 192.168.0.181:62292) door zijn eigen externe ip-adres en poort (bijvoorbeeld 84.192.232.207:49800). De webserver ontvangt nu het verzoek (bijvoorbeeld 54.195.223.106:443) en stuurt dit terug naar het ip-adres en poort van je router. Deze raadpleegt vervolgens de NAT-tabel en stuurt het antwoord van de server terug naar je pc met de originele bronpoort. De communicatie is geslaagd.
Poortverkeer
Van het hele protocol- en poortengedoe merk je als eindgebruiker gelukkig weinig. Het is vooralwebadres intikken en gaan. Wil je graag achter de schermen van het netwerkverkeer kijken, dan is Wireshark een krachtige en gratis tool die je daarvoor kunt gebruiken. We beperken ons tot een eenvoudig voorbeeld.
Installeer de tool met alle standaardinstellingen (inclusief Npcap) en start deze op. Dubbelklik op de actieve netwerkadapter, zoals Ethernet. Je zult zien dat er meteen veel netwerkverkeer wordt afgevangen. Beëindig dit met de rode stopknop.
Klik nu met rechts op een willekeurige kolomtitel, zoals Source, kies Column Preferences en druk op het plusknopje. Dubbelklik op New Column, vul de naam Bronpoort in en dubbelklik op Number. Klik op het pijlknopje en kies Source port. Herhaal dit voor Doelpoort (Destination Port). Haal eventueel de vinkjes weg bij alle overige items, behalve bij No., Source en Destination. Bevestig met OK.
Druk op de blauwe haaienvin en surf met je browser naar https://id.nl, waar je snel op een paar interne sitelinks klikt. Ga terug naar Wireshark en vul bovenaan in het filterveld ip.addr == 54.195.223.106 in. Dit zorgt ervoor dat je alleen de communicatie met de webserver van id.nl te zien krijgt. Je kunt het ip-adres van zo’n server achterhalen door op de opdrachtregel nslookup id.nl uit te voeren.
Je zult zien dat de bronpoort van je eigen pc 443 is en de bronpoort van de webserver een tijdelijk toegekend dynamisch poortnummer is. De rol van de tussenliggende NAT-router valt hier niet uit af te leiden.
Powered by
Poortregels
Wanneer je een kamer wilt binnengaan, mag de deur niet op slot zijn. In de netwerkwereld is dit vergelijkbaar. Om via een bepaalde poort te communiceren, moet deze openstaan of minstens opengaan zodra er wordt aangeklopt.
Het openen en sluiten van poorten, eventueel alleen voor specifieke ip-adressen en netwerkprotocollen, is de taak van een firewall die daarmee je netwerk beter beveiligt.
We illustreren dit met een eenvoudig experiment. Stel, we willen op onze Windows-pc het uitgaande verkeer naar alle https-webservers blokkeren.
Druk hiervoor op Windows-toets+R en voer wf.msc uit. Het venster van de Windows Firewall verschijnt. Klik links op Regels voor uitgaande verbindingen en rechts op Nieuwe regel. Selecteer Poort, druk op Volgende, kies TCP en vul bij Specifieke poorten 443 in. Druk op Volgende en selecteer De verbinding blokkeren. Druk op Volgende, laat de drie netwerktypes geselecteerd, druk nogmaals op Volgende en vul een naam voor je regel in, bijvoorbeeld Blokkeer 443. Zodra je bevestigt met Voltooien wordt je regel bovenaan toegevoegd en is deze actief, zoals je merkt na een herstart van je browser. Vanuit het rechterdeelvenster kun je de regel altijd weer Uitschakelen of Verwijderen.
In de praktijk gebeurt ook het omgekeerde. Standaard blokkeert je firewall alle binnenkomende verkeer. Als een webserver een specifieke poort in je pc wil bereiken, kan het nodig zijn dat je in de firewall die poort voor binnenkomend verkeer (van dat protocol en die webserver) openzet. In dit geval kies je Regels voor binnenkomende verbindingen en De verbinding toestaan.
Van buiten naar binnen
Je weet nu al hoe je via Windows Firewall ongewenst verkeer kunt blokkeren en gewenst verkeer kunt toelaten. We hebben dit op poortniveau gedaan, maar bij het opstellen van zo’n regel kun je ook op applicatie-, adres- en/of protocolniveau werken. Vergelijkbare mogelijkheden zitten vast ook in je eigen firewall als je liever niet de ingebouwde Windows Firewall gebruikt.
Helaas zijn we er nog niet helemaal, want zoals gezegd fungeert je router altijd als verbinding voor het verkeer tussen je netwerkapparaten en het internet. Stel dat je in je netwerk een eigen server draait, zoals een bestandsserver, webserver of netwerkcamera, die je ook van buitenaf wilt bereiken. Dit kan problematisch zijn, want het apparaat waarop je service draait, heeft een intern ip-adres (bijvoorbeeld 192.168.0.181) dat niet zomaar van buitenaf bereikbaar is. Je kunt wel (het externe wan-ip-adres van) je router bereiken, maar hoe weet de router dan voor welk netwerkapparaat dat binnengekomen verzoek bedoeld is? Een mogelijke uitweg is poortdoorschakeling (port forwarding). Het komt erop neer dat je je router instrueert om alle binnenkomende verkeer op een specifieke poort automatisch naar (het interne lan-ip-adres van) het gewenste apparaat door te sluizen. Hoe pak je dit aan?
Voorbereiding portforwarding
Allereerst moet je het interne ip-adres van het betreffende netwerkapparaat kennen. Dit doe je het handigst via je router. Start je browser en voer het interne ip-adres van je router in. Dit adres lees je normaal af na het uitvoeren van het commando ipconfig op de Opdrachtprompt, bij Default Gateway (bijvoorbeeld 192.168.0.254). Je belandt nu in de webinterface van je router, waar je een lijst met interne ip-adressen van verbonden netwerkapparaten vindt, bijvoorbeeld bij DHCP Client Table of Connected Devices. Raadpleeg eventueel de routerhandleiding, en noteer het beoogde adres.
Daarnaast heb je het poortnummer nodig waarop de betreffende service bereikbaar is, evenals het gebruikte protocol, meestal tcp of soms (ook) udp. Raadpleeg hiervoor de handleiding bij de betreffende service of het apparaat.
Doorschakelen
Je hebt nu voldoende informatie om een regel voor poortdoorschakeling in te stellen op je router. Hoe je dit doet hangt af van je routertype. Op www.portforward.com/router.htm vind je instructies voor vele routers. Hieronder vind je een algemene werkwijze.
Zoek in je routerinterface naar een onderdeel als Port Forwarding of Virtual Server en klik op Add Rule. Geef je regel een naam, vul bij het juiste item het interne ip-adres van je server of apparaat in, kies het bijbehorende protocol en vul tevens het interne poortnummer in. Vaak wordt ook om een extern poortnummer gevraagd. Meestal is dit hetzelfde als het interne, maar dat hoeft niet. Bewaar je aanpassingen met Save of Apply.
Nu hoef je alleen maar de juiste applicatie te verbinden met het externe ip-adres van je router, op het ingegeven (externe) poortnummer. Dit ip-adres kom je te weten door vanaf een pc in je netwerk te surfen naar www.whatismyip.com.
Bij poortdoorschakeling kunnen er enkele complicaties optreden. Eén daarvan is dat het externe ip-adres van je router vaak dynamisch door je internetprovider wordt toegekend en dus kan veranderen. Om te vermijden dat je steeds het actuele adres moet kennen, kun je een dynamisch DNS (DDNS) gebruiken. Dit kan ook gratis, bijvoorbeeld bij NoIP, Dynu of Duck DNS.
Poortscan
Je begrijpt dat elke open poort een extra kwetsbaarheid in de beveiliging van je thuisnetwerk kan zijn, omdat dit een toegangspunt biedt voor potentiële aanvallers. Het is dus essentieel om alleen de hoogst noodzakelijke poorten open te zetten. Om snel de status van je netwerkpoorten te controleren, kun je een poortscan uitvoeren. Hierbij controleert een tool systematisch alle poorten op een ander apparaat.
Dit kan van binnenuit met een gratis tool als Nmap (de grafische frontend Zenmap wordt mee geïnstalleerd), maar ook van buitenaf. Dit laatste is nuttig omdat je je dan in de positie van een potentiële aanvaller plaatst. Gratis online scanners zijn onder meer Nmap Online (voor een publieke scan vul je het externe ip-adres of de DDNS-domeinnaam van je router/netwerk in) en GRC ShieldsUP!.
Bij GRC ShieldsUP! ga je als volgt te werk: klik op Proceed en kies bij voorkeur All Service Ports. De scan van de ‘laagste’ 1056 poorten start meteen. Een open poortnummer kleurt rood, een gesloten poort blauw en een stealth-poort groen. Dit laatste is iets veiliger omdat zo’n poort helemaal niet reageert op binnenkomende datapakketten, terwijl bij een blauwe poort een aanvaller weet dat er een actief systeem achter zit, alleen hij kan er niet (zomaar) binnen.
Klik op een blokje van een poortnummer voor meer (algemene) feedback. Let onder meer op poorten 22 (ssh) en 23 (telnet), omdat hackers deze graag in de gaten houden. Tref je inderdaad een of meer onverwachte open poorten aan, zoek dan in je router en op je netwerkapparaten welke services deze openingen daadwerkelijk nodig hebben. Eventueel sluit je ze af met je firewall, al dan niet tijdelijk als test.
Powered by