Connection Tracking

Onderstaand artikel is gepubliceerd in het septembernummer van Linux News, jaargang 2001. Het is enigszins aangepast aan de huidige situatie.

Wanneer we een netwerk willen beveiligen met een firewall is het gebruik van Linux een aantrekkelijke optie. Sinds kernelversie 2.4 biedt Linux een krachtige en complete firewall.

Met de komst van de Linux 2.4 kernel in 2001 zijn de mogelijkheden om IP-verkeer te filteren sterk uitgebreid. Het in eerdere kernelversies (2.2 en eerder) toegepaste ipchains is vervangen door iptables, met netfilter als onderliggende structuur. Deze faciliteit vinden we nog steeds terug in de huidige kernels. Met deze structuur is onder andere statefull filtering tot de mogelijkheden gaan behoren. De linux implementatie hiervan wordt overigens connection tracking genoemd. Door gebruik te maken van connection tracking is het mogelijk om het beveiligingsniveau dat door de firewall geboden wordt op een hoog niveau te brengen. “Connection Tracking” verder lezen

De TCP/IP protocolsuite

Iedere IP verbinding is herkenbaar aan de combinatie client ip-adres, client poortnummer, server ip-adres en server poortnummer.

TCP

TCP staat voor Transaction Control protocol. Bij dit type verbinding is er sprake van een connectie waarbij de status binnen het protocol gedefinieerd is. Een TCP connectie wordt opgebouwd in drie stappen. De client kiest een vrij poortnummer, doorgaans boven de 1023. De client probeert een connectie te maken naar een bekend, doorgaans laag, poortnummer op de server. Voorbeelden van bekende poortnummers zijn 80 voor HTTP, 23 voor Telnet en 22 voor SSH. De client stuurt een pakket waarbij de SYN-vlag is gezet naar het bekende poortnummer op de server en gebruikt daarbij het zojuist gekozen hoge poortnummer. Wanneer de server akkoord gaat met het opzetten van de connectie stuurt deze een pakketje met zowel de SYN-vlag als de ACK-vlag gezet terug naar het hoge poortnummer van de client. Dit pakket wordt weer door de client weer beantwoord met een ACK, echter zonder SYN. De connectie is nu tot stand gekomen. De status is nu ESTABLSHED.

     Client                     Server 

      SYN      ---> 
                     <---     SYN+ACK 
      ACK      ---> 

Het beëindigen van een connectie kan op twee manieren gebeuren. Een normale beëindiging vindt plaats wanneer de client een pakket stuurt waarbij de FIN en de ACK vlag gezet zijn. De server beantwoordt dit met een ACK of FIN+ACK.

     Client                     Server 

      FIN+ACK  ---> 
                     <---         ACK 
                     <---     FIN+ACK 
      ACK      ---> 

Een connectie kan ook beëindigd worden wanneer een van de partijen een pakket met de RST vlag stuurt. Dit gebeurt vaak wanneer na een periode van inactiviteit een van de partijen er van uit gaat dat de ander niet meer geïnteresseerd is in voortzetting van de connectie. maar ook wanneer een connectie om een of andere redden geweigerd wordt. Een RST wordt niet bevestigd met een ACK.

UDP

Bij UDP, User Datagram Protocol, is er op netwerk protocol niveau geen sprake van een connectie. De applicaties die dit protocol gebruiken zijn zelf verantwoordelijk voor het bewaken van de status en de kwaliteit van de verbinding. Net als bij TCP maakt de client doorgaans gebruik van een hoog poortnummer en de server van een bekend laag poortnummer.

ICMP

ICMP is het Internet Control Message Protocol. Het dient om berichten die verband houden met een goed functioneren van het IP protocol, of een van de bovenliggende protocollen, door te geven. Er zijn 18 verschillende bericht types, waarbinnen weer diverse bericht codes mogelijk zijn. De bekendste toepassing is het ping commando, dat een ICMP `echo request’ (type 8 code 0) stuurt. Een echo request wordt beantwoord door een `echo reply’ (type 0 code 0).

FTP

FTP is het File Transfer Protocol. Het maakt gebruik van TCP, net zoals HTTP of Telnet. Het bijzondere aan FTP is dat het gebruik maakt van meerdere connecties. Een client maakt contact met poort 21 op de server. Wanneer er data verkeer plaats moet vinden, dit kan een file upload of download zijn, maar ook het resultaat van een ls of dir, wordt er een aparte data connectie geopend. De client geeft daartoe aan de server een hoog poortnummer door waarop het de data connectie verwacht. De data connectie wordt opgezet door de server vanaf poort 20, naar het poortnummer dat de client doorgegeven heeft.

Een variant hierop is passive FTP. Hierbij geeft de server een hoog poortnummer op aan de client en opent de client de data connectie vanaf een hoog poortnummer naar de server.

Het ontstaan van IP

Onderstaand citaat is met toestemming van de auteur H.J. Thomassen overgenomen uit UNIX het standaard operating system ISBN 90 395 1510 7.

Aan het einde van de jaren ’60 ontstond in de Verenigde Staten het ARPANET: een netwerk van geografisch verspreide mainframe-computers, gekoppeld via lange-afstands telefoon- huurlijnen. De ontwikkeling werd geïnitieerd en gefinancierd door ARPA (later herdoopt in DARPA, het `Defense Advanced Research Projects Agency’ een onderdeel van het Amerikaanse Department of Defense. De belangrijkste contractant was het commerciële researchbedrijf Bolt Beranek & Newman. In die dagen waren computernetwerken meer luchtkasteel dan werkelijkheid. Elementaire functies zoals files transporteren, remote inloggen en electronic mail bestonden nog slechts in de gedachten van researchers, en hun praktische haalbaarheid moest nog worden bewezen.

De eerste openbare demonstraties, eind 1972, waren meteen een doorslaand succes, en gaven voldoende argumentatie om de uitbouw voort te zetten. De eerste helft van de jaren ’70 vond ook de opkomst van de minicomputer plaats. Daardoor ontstond de wens om plaatselijk meerdere minicomputers met elkaar te verbinden, en dergelijke clusters weer te verbinden met de mainframe-computers die de lange-afstands verbindingen hadden. In feite betekende dit het onderling koppelen van Local Area netwerken met een Wide Area netwerk, en de term internetworking ontstond om zo’n `netwerk van netwerken’ aan te duiden.

Internetworking brengt een nieuwe klasse van problemen met zich mee: informatie moet kunnen `overstappen’ van één netwerk op een ander. Er zijn dan computers nodig die zijn uitgerust met een dubbele netwerk-interface, en er is een protocol nodig om beslissingen over route-keuzes af te handelen. Hiervoor werd het Internetworking Protocol (IP) ontwikkeld. Ook protocollen en bijbehorende user-interfaces voor remote inloggen en voor file transfer werden in dit kader ontwikkeld: de nog steeds zeer bekende commando’s telnet en ftp.

In de eerste helft van de jaren ’80 financierde het DARPA een project aan de University of California at Berkeley, om een operating system te bouwen ter ondersteuning van research in Artificial Intelligence laboratoria. Dat moest draaien op middenklasse-computers, en de (in 1978 geïntroduceerde) VAX-lijn van Digital Equipment leek hiervoor ideaal. Om samenwerking tussen verschillende AI- laboratoria te ondersteunen, eiste DARPA dat dat operating system ook in het ARPANET moest kunnen werken, dus dat IP (en alle aanverwante zaken) erin geïntegreerd moesten zijn.

Ken Thompson, een van de twee oorspronkelijke auteurs van UNIX, had toevallig een sabbatical gasthoogleraarschap aan Berkeley, juist in het jaar dat dit allemaal van start ging. Zo kwam het huwelijk tussen UNIX en IP tot stand, en verdiende de BSD-UNIX (Berkeley Software Distribution) versie haar plaats op de landkaart. De kernleden van deze Berkeley-groep (maar niet Thompson zelf) richtten na afloop van dit project hun eigen computerbedrijf op om het concept nog een stap te verkleinen van middenklasse-computer naar persoonlijk workstation (de Intel-gebaseerde PC bestond nog niet!). Zo ontstond Sun Microsystems.

Ongeveer in diezelfde tijd splitsten de militaire opdrachtgevers het ARPANET in tweeën. De militaire helft werd het MILNET. De overblijvende civiele tak werd op een aantal punten uitgebreid, met name om toegang tot een nieuwe reeks centraal opgestelde supercomputers te verschaffen aan veel meer onderwijsinstituten dan de `happy few’ die tot dan toe dat genot hadden gehad. Deze civiele ARPANET- opvolger noemde men het Internet. De hoofdletter I in deze schrijfwijze is karakteristiek als men specifiek dát netwerk bedoelt. Zoals bekend heeft het Internet vanaf het einde van de jaren ’80 een wereldwijde vlucht genomen. Overigens is aan een van deze supercomputer-centra (NCSA Chicago) de eerste browser Mosaic ontworpen, dat de killer-application bleek te zijn waarmee het Internet voor het grote publiek interessant werd. De bedenker van Mosaic (Andreessen) richtte later het bedrijf Netscape op.

© Copyright 2000, AT Computing