Internetprotocols (deel 3)

0
48
Dit artikel is deel 24 van 35 in het DiskIdee dossier Netwerken ontsluierd (cursus)
DossiernavigatieInternetprotocols (deel 2)Internetprotocols (deel 4)

Bovenop de transportlaag met tcp draait de applicatielaag: applicaties praten met elkaar in een client-serverconfiguratie met behulp van een applicatieprotocol. In vorige delen, dit deel en een aantal volgende delen bekijken we enkele van de populairste internetapplicaties nader. Deze keer is het SMTP-protocol aan de beurt.
netwerken
SMTP staat dus voor ‘eenvoudig protocol voor het versturen van post’. Het is het meest gebruikte posttransmissieprotocol in tcp/ip-netwerken en het internet. Het protocol gaat er echter wel van uit dat post die verstuurd werd ook afgeleverd kan worden bij de bestemmeling. Vandaar dat dit protocol altijd gebruikt wordt voor het versturen van post tussen twee e-mailservers of van je eigen mailclient naar de mailserver van je bedrijf of van je provider. Voor het afhalen van post (van een mailserver naar je mailclient toe) kan SMTP niet gebruikt worden omdat de mailserver de post niet naar je client kan doorsturen zodra hij die binnenkrijgt en SMTP heeft geen voorziening om post vast te houden totdat de bestemmeling zich eindelijk meldt. Daarvoor werd een ander protocol ontworpen: POP3 en dat is meteen het tweede meest gebruikte posttransmissieprotocol. Het verklaart ook waarom je in de meeste e-mailsoftware zowel een SMTP-server als een POP3-server moet opgeven: SMTP dient dan voor het verzenden van je e-mails, POP3 om je post binnen te halen. POP3 bekijken we volgende keer in meer detail. In dit artikel bespreken we hoe SMTP precies werkt.

Client/server
Net zoals alle andere tcp/ip-applicaties werkt ook SMTP in een client/server-opstelling, al moet je dat hier wel heel erg los bekijken. Een smtp-client is gedefinieerd als een applicatie die e-mail verstuurt naar een andere applicatie en deze laatste heet dan de smtp-server. In de praktijk draaien mailservers op internet smtp-daemons die zowel een smtp-client als een smtp-server aan boord hebben. De smtp-server ontvangt binnenkomende post en de smtp-client verzendt uitgaande post. Dit wil meteen zeggen dat je erg voorzichtig moet zijn in het configureren van mailservers. Als jouw mailserver namelijk post van eender wie aanvaardt en post doorstuurt naar eender elke bestemmeling, dan zal je mailserver misbruikt worden voor spam (ongewenste berichten – meestal reclame – die en masse verstuurd worden).
Een mailserver die post die niet bestemd is voor het eigen netwerk doorstuurt naar de opgegeven bestemming elders op het internet, noemt men een ‘open relay’. Elk open relay zal dankbaar misbruikt worden door spammers. We zullen later terugkomen op spam en ‘open relays’ en hoe je mailservers ertegen beveiligt. Net zoals bij alle andere tcp/ip-applicaties wordt een smtp-sessie dus ook begonnen door de client en is het de server die op aanvragen van de client antwoordt. En net zoals bij andere tcp/ip-applicaties bestaat zowat alle communicatie tussen de smtp-client en de smtp-server uit gewone tekst. Die tekst bestaat uit bevelwoorden eventueel gevolgd door parameters of data (de berichtinhoud).

Communicatie
Een smtp-client (dat kan dus zowel je eigen e-mailprogramma als een andere smtp-server zijn) opent een verbinding met een smtp-server op poort 25 (de standaardpoort voorbehouden voor smtp). Je kunt dit trouwens zelf uitproberen met behulp van het telnet-programma. Telnet naar een smtp-serveradres maar geef poort 25 op, dan zal jouw telnetclient zich gedragen alsof hij een smtp-client is, behalve dan dat jij de smtp-communicatie van de smtp-client zelf moet intikken. Als je met Windows werkt, kun je Start/Uitvoeren kiezen en dan gewoon telnet en Enter typen. Windows opent dan een venster dat erg lijkt op een opdrachtregelsessie. Typ achter de prompt ‘open smtp.datatestlab.com 25’ (of een andere smtp-server) en je zult zien dat het scherm gewist wordt en de smtp-server zich meldt. Als je weer wil stoppen met deze telnetsessie, typ je ofwel ‘QUIT’ ofwel ‘EXIT’ om de verbinding met de smtp-server te beëindigen en daarna nogmaals ‘QUIT’ om het telnet-programma af te sluiten. Let wel: bij veel providers kun je dit niet uitproberen omdat zij het gebruik van poort 25 blokkeren om je te verplichten alleen hun smtp-server te gebruiken voor uitgaande post.
De openingsmelding van de smtp-server kan heel kort zijn of wat breedsprakeriger. Een Microsoft smtp-server of Exchange server is gewoonlijk breedsprakerig, Unix-systemen antwoorden gewoonlijk heel beknopt. Elk antwoord van een server bestaat uit een nummer gevolgd door tekst. Het nummer is een soort statuscode. Als je de verbinding tot stand brengt, zegt de smtp-server:

220 smtp.datatestlab.com Weasel 1.64 ready

De statuscode 220 staat voor ‘informatiebericht’ en wordt gevolgd door de identificatie van de server (hostnaam of domeinnaam) en de naam en versienummer van de smtp-software. Nu moet de smtp-client een instructie naar de smtp-server sturen. Zo’n instructie bestaat uit een smtp-woord gevolgd door parameters. Een smtp-woord bestaat altijd uit vier letters. Je begint met hallo te zeggen. Dat kan op twee manieren:

HELO
of
EHLO

HELO was er eerst en als je dat gebruikt gaat de smtp-server ervan uit dat je maar de meest eenvoudige smtp-communicatie aankan. Tegenwoordig kennen de meeste smtp-systemen echter het uitgebreide smtp-protocol ESMTP en clients kunnen aangeven dat ze dat ondersteunen door hallo te zeggen met EHLO. De reactie van de server op je hallo is dus afhankelijk van welk woord je gebruikt.

Dus:

HELO
250 OK


of

EHLO
250-smtp.xxx.com
250-AUTH PLAIN LOGIN CRAM-MD5
250 EXPN


Een Microsoft Exchange Server zou nog omvangrijker reageren:

EHLO
250-xxx.com Hello [194.7.249.4]
250-AUTH GSSAPI NTLM LOGIN
250-AUTH=LOGIN
250-TURN
250-ATRN
250-SIZE 20480000
250-ETRN
250-PIPELINING
250-DSN
250-ENHANCEDSTATUSCODES
250-8bitmime
250-BINARYMIME
250-CHUNKING
250-VRFY
250 OK

Zoals je merkt kan een smtp-server antwoorden op EHLO met een hele waslijst lijnen met code 250, die dus allemaal samen een opsomming geven van de uitgebreide smtp-standaarden die deze server ondersteunt. Zoals je ziet ondersteunt het Microsoft-systeem heel wat meer uitbreidingen dan de Weasel software. Wij zullen ons hier echter beperken tot de paar instructies die nodig zijn om een bericht te versturen. Als je graag alles wil nalezen over de smtp-standaard, verwijs ik je graag naar de RFC-documenten.

220 smtp.xxx.com Weasel 1.64 ready
EHLO
250-smtp.xxx.com
250-AUTH PLAIN LOGIN CRAM-MD5
250 EXPN
MAIL FROM: johanzw@mail.com_NOSPAM
250 Sender accepted
RCPT TO: johan@datatestlab.com
250 User not local; will forward to : johan@datatestlab.com
DATA
354 Socket to me
from: johanzw@mail.com_NOSPAM
to: johan@datatestlab.com
subject: test
Dit is een testbericht.
Ik kan nu zoveel tekst typen als ik maar wil.
Als ik gedaan heb, moet ik afsluiten met één of twee keer een punt op een lege lijn.
.
.
250 OK
QUIT

Hierboven zie je een voorbeeld van zo’n communicatie. Wat de client stuurt, is onderlijnd en cursief; al de rest is wat de server antwoordt. We beginnen dus met de EHLO-groet en het antwoord van de server met code 250 (alles OK). Overigens negeren de meeste clients de tekst achter de code en controleren alleen maar het codenummer om te weten of hun opdrachten met succes uitgevoerd werden.



Vervolgens geven we op van wie het bericht afkomstig is met MAIL FROM. De server kijkt nu na of de afzender wel gebruik mag maken van zijn diensten en zo ja, antwoordt hij weer met een 250-code. Vervolgens geven we op voor wie de mail bestemd is met RCPT TO (afkorting voor ‘receipt to’ of ‘ontvangst naar’).
Als de bestemmeling aanvaard wordt, antwoordt de server weer met een code 250. In dit geval zie je nog de melding “gebruiker niet lokaal; zal het doorsturen naar johan@datatestlab.com” staan, maar dat betekent alleen maar dat onze smtp-server de post zelf nog eens doorstuurt naar een interne smtp-server die ook POP3-voorzieningen heeft waarop de gebruikers van xxx.com terecht kunnen: dat is om beveiligingsredenen gedaan. Daarmee heeft de smtp-server voldoende inlichtingen om een bericht door te sturen en hoeven we alleen nog de inhoud van het bericht in te tikken. Dat initiëren we met het woord DATA. Nu weet de smtp-server dat er geen instructies meer volgen maar wel de berichtinhoud totdat er een punt op een lege lijn getikt wordt. De meeste servers vergen trouwens twee keer naar elkaar een punt op een lege lijn om toe te laten dat je een punt op een lege lijn ook in de inhoud van een bericht kunt gebruiken. Hij antwoordt op de instructie DATA met een code 354 en dat wil zoveel zeggen als ‘zend je berichtdata maar’. Een lijst van uitgebreide statuscodes voor ESMTP vind je hier. Zoals je ziet moet je in de inhoud van het bericht ook nog eens een from- en to-veld opgeven: dat is nodig opdat de mailsoftware die zou kunnen tonen aan de gebruiker. Wat je intikt achter de smtp-bevelen MAIL-TO en RCP-TO wordt immers alleen geïnterpreteerd door de smtp-server en niet doorgestuurd naar de bestemmeling. De meeste mailsystemen zullen post waar geen from- of to-veld in voorkomt daarom weigeren.

Vorig artikelInternetprotocols (deel 4)
Volgend artikelInternetprotocols (deel 2)