SMTP

Από τη Βικιπαίδεια, την ελεύθερη εγκυκλοπαίδεια
Μετάβαση σε: πλοήγηση, αναζήτηση

Το πρωτόκολλο Simple Mail Transfer Protocol (SMTP) έχει καθιερωθεί για την μετάδοση μηνυμάτων ηλεκτρονικού ταχυδρομείου στο Διαδίκτυο. Επίσημα περιγράφεται στα έγγραφα RFC821 και RFC1123. Το πρωτόκολλο που χρησιμοποιείται σήμερα αποτελεί επέκταση του αρχικού προτύπου και περιγράφεται στο έγγραφο RFC 2821.

Ιστορία[Επεξεργασία | επεξεργασία κώδικα]

Ήδη από τα τέλη της δεκαετίας του 1960 είχε αρχίσει η ανταλλαγή μηνυμάτων ηλεκτρονικού ταχυδρομείου μεταξύ χρηστών mainframe υπολογιστών. Καθώς ο αριθμός των χρηστών και των υπολογιστών αυξανόταν, έγινε φανερή η ανάγκη δημιουργίας ενός πρωτοκόλλου για την ανταλλαγή ηλεκτρονικών μηνυμάτων μεταξύ χρηστών που χρησιμοποιούσαν διαφορετικά συστήματα υπολογιστών. Εξέλιξη των αρχικών πρωτοκόλλων που αναπτύχθηκαν την εποχή (δεκαετία του 1970) αυτή αποτελεί το SMTP. Συγκεκριμένα οι ρίζες του SMTP εντοπίζονται στα πρωτόκολλα Mail Box Protocol (1971), FTP Mail (1973) και Mail Protocol. Όταν όμως άρχισε να σχηματίζεται το Διαδίκτυο (1980), ο Jon Postel πρότεινε την δημιουργία ενός νέου πρωτοκόλλου για την ανταλλαγή ηλεκτρονικών μηνυμάτων, το οποίο δεν θα βασιζόταν τόσο πολύ στο FTP όπως έκαναν οι πρόγονοί του. Έτσι λοιπόν το 1982 γεννήθηκε το SMTP.

Το πρόγραμμα Sendmail ήταν ένα από τα πρώτα προγράμματα που υλοποίησε το SMTP, ενώ σήμερα υπάρχει μία πληθώρα τέτοιων προγραμμάτων όπως για παράδειγμα τα Postfix, qmail, Novell GroupWise, Exim, Novell NetMail και άλλα. Σε μία μέτρηση που έγινε το 2001 βρέθηκαν τουλάχιστον 50 προγράμματα τα οποία υλοποιούσαν το πρωτόκολλο SMTP είτε ως client (δηλαδή αποστολείς ηλεκτρονικών μηνυμάτων) είτε ως server (δηλαδή παραλήπτες ηλεκτρονικών μηνυμάτων).

Το αρχικό SMTP υποστήριζε κατά βάση μονάχα μηνύματα απλού κειμένου και όχι μετάδοση αρχείων (πχ. εικόνες, εκτελέσιμα, μουσική κοκ). Στην συνέχεια όμως αναπτύχθηκαν διάφορα standards που επέτρεπαν την εισαγωγή αρχείων στα ηλεκτρονικά μηνύματα. Ένα από αυτά τα standards είναι και το Multipurpose Internet Mail Extensions (MIME), το οποίο κωδικοποιεί τα αρχεία με τέτοιον τρόπο ούτως ώστε να μπορούν να μεταδοθούν σε απλά μηνύματ SMTP.

Λειτουργία[Επεξεργασία | επεξεργασία κώδικα]

Για την αποστολή ενός ηλεκτρονικού μηνύματος θα πρέπει ο χρήστης να έχει πρόσβαση σε έναν SMTP Server. Όλα τα προγράμματα ηλεκτρονικής αλληλογραφίας (πχ Mozilla Thunderbird, Microsoft Outlook κ.α.) θα πρέπει να ρυθμιστούν κατάλληλα από τον χρήστη για να λειτουργήσουν σωστά. Συγκεκριμένα ο χρήστης θα πρέπει να καθορίσει τον SMTP server που θα χρησιμοποιήσει για να στείλει και να παραλάβει ηλεκτρονική αλληλογραφία. Με τον τρόπο αυτό μπορεί για παράδειγμα ένας χρήστης να ανταλλάξει ηλεκτρονικά μηνύματα χωρίς να είναι συνδεδεμένος στο διαδίκτυο, εάν χρησιμοποιεί έναν τοπικό SMTP server.

Οι SMTP servers θα πρέπει να έχουν ανοιχτή μία τουλάχιστον από τις πόρτες 25 και 587, ούτως ώστε να μπορούν να επικοινωνήσουν με άλλους SMTP servers για την αποστολή ή παραλαβή ηλεκτρονικών μηνυμάτων. Πολλοί SMTP servers χρησιμοποιούν και τις δύο πόρτες για λόγους συμβατότητας.

Μία τυπική παραλαβή ηλεκτρονικού μηνύματος από έναν SMTP server έχει ως εξής: Αρχικά δημιουργείται μία σύνδεση μεταξύ του SMTP server που έχει τον ρόλο του αποστολέα και του SMTP Server που έχει τον ρόλο του παραλήπτη. Στην συνέχεια οι δύο SMTP servers "συνομιλούν" ούτως ώστε να επιτευχθεί χωρίς προβλήματα η ανταλλαγή του μηνύματος. Στην συνέχεια παρατίθεται ως παράδειγμα μία υποτυπώδης συνομιλία μεταξύ του αποστολέα (Α) και του παραλήπτη (Π) του μηνύματος. Για την δημιουργία σύνδεσης μεταξύ των δύο υπολογιστών μπορεί να χρησιμοποιηθεί το πρόγραμμα telnet, ως εξής:

telnet www.example.com 25

Η παραπάνω εντολή δημιουργεί μία TCP σύνδεση από τον αποστολέα προς τον παραλήπτη (www.example.com) στην πόρτα 25. Αφού γίνει η σύνδεση, ακολουθεί η εξής συνομιλία μεταξύ των δύο υπολογιστών:

Π: 220 www.example.com ESMTP Postfix
Α: HELO mydomain.com
Π: 250 Hello mydomain.com
Α: MAIL FROM:<sender@mydomain.com>
Π: 250 Ok
Α: RCPT TO:<friend@example.com>
Π: 250 Ok
Α: DATA
Π: 354 End data with <CR><LF>.<CR><LF>
Α: Subject: test message
Α: From: sender@mydomain.com
Α: To: friend@example.com
Α:
Α: Hello,
Α: This is a test.
Α: Goodbye.
Α: .
Π: 250 Ok: queued as 12345
Α: QUIT
Π: 221 Bye

Ουσιαστικά η παραπάνω συνομιλία χρησιμοποιείται για να στείλει το ακόλουθο μήνυμα από τον SMTP Server mydomain.com (ηλεκτρονική διεύθυνση sender@mydomain.com) στον SMTP Server example.com (ηλεκτρονική διεύθυνση friend@example.com):

Hello,
This is a test.
Goodbye.

Υπάρχουν φυσικά και αρκετές άλλες επιλογές στην συνομιλία, οι οποίες δεν παρουσιάζονται στο παραπάνω παράδειγμα. Ενδεικτικά αξίζει να αναφερθεί η λέξη SIZE που χρησιμοποιείται από τον αποστολέα για να μάθει το μέγιστο μέγεθος μηνύματος που μπορεί να παραλάβει ο παραλήπτης. Επίσης η λέξη EHLO (αναγραμματισμένο HELO) χρησιμοποιείται αντί της HALLO στην παραπάνω συνομιλία για να ξεκινήσει μία σύνοδο Extended SMTP (ESMTP) αντί για μία σύνοδο απλού SMTP. Παρακάτω φαίνεται ένα παράδειγμα όπου χρησιμοποιούνται οι δύο προαναφερθείσες επιλογές.

Π: 220-serverdomain.com ESMTP {postfix version and date}
Π: 220 NO UCE. {etc., terms of service}
Α: EHLO mydomain.com
Π: 250-serverdomain.com Hello mydomain.com [127.0.0.1]
Π: 250-SIZE 14680064
Π: 250-PIPELINING
Π: 250 HELP

Στο παράδειγμα αυτό ο SMTP Server serverdomain.com (Παραλήπτης) χρησιμοποιεί την λέξη SIZE για να ενημερώσει τον SMTP Server mydomain.com (Αποστολέας) ότι δεν πρόκειται να δεχθεί μηνύματα το μέγεθος των οποίων υπερβαίνει κάποια προκαθορισμένη τιμή. Στην συγκεκριμένη τιμή το μέγεθος αυτό είναι 14,680,064 bytes ή 14 ΜΒ. Εάν το μήνυμα που προσπαθεί να μεταδώσει ο αποστολέας είναι μεγαλύτερο από 14ΜΒ, τότε δεν θα γίνει αποδεκτό και η μετάδοση θα αποτύχει.

Ασφάλεια και Ανεπιθύμητα Μηνύματα (Spam)[Επεξεργασία | επεξεργασία κώδικα]

Ένας από τους βασικούς περιορισμούς του πρωτοκόλλου είναι ότι δεν υπάρχει τρόπος αυθεντικοποίησης των χρηστών. Για να καλυφθεί αυτή η αδυναμία, αναπτύχθηκε μια επέκταση του πρωτοκόλλου που ονομάζεται SMTP-AUTH. Δυστυχώς όμως η επέκταση αυτή είναι αρκετά δύσκολο και πολύπλοκο να χρησιμοποιηθεί ευρέως, πράγμα που σημαίνει ότι δεν μπορεί να αξιοποιηθεί για την αντιμετώπιση του προβλήματος των ανεπιθύμητων μηνυμάτων (Spamming). Γενικότερα δεν είναι πλέον δυνατόν να γίνουν ριζικές αλλαγές στο πρωτόκολλο, διότι αυτό σημαίνει ότι θα πρέπει οι αλλαγές αυτές να υιοθετηθούν από τους εκατομμύρια υπολογιστές που χρησιμοποιούν ήδη το SMTP, πράγμα που θεωρείται μη πρακτικό και κατά βάση αδύνατο. Παρόλα αυτά όμως έχουν αναπτυχθεί μερικά εναλλακτικά πρωτόκολλα που φιλοδοξούν να αντικαταστήσουν το SMTP, όπως για παράδειγμα το Internet Mail 2000.

Το φαινόμενο των ανεπιθύμητων μηνυμάτων (spamming) οφείλεται σε διάφορους λόγους, μερικοί από τους οποίους είναι και οι εξής:

  • Πολλοί servers που διαθέτουν υπηρεσία SMTP δεν εφαρμόζουν στο ακέραιο τους διάφορους περιορισμούς που εισάγει το πρωτόκολλο και κατά συνέπεια δημιουργούν σημαντικές δυσκολίες σε όλους τους υπόλοιπους servers που προσπαθούν να εφαρμόσουν το πρωτόκολλο στο ακέραιο. Με τον τρόπο αυτό ουσιαστικά σχεδόν κανένας server δεν εφαρμόζει τους περιορισμούς που αναφέρονται στο πρωτόκολλο, επιτρέποντας την ανταλλαγή μηνυμάτων spam που δεν συμμορφώνονται με αυτό.
  • Οι αδυναμίες (vulnerabilities) που εντοπίζονται στα διάφορα λειτουργικά συστήματα επιτρέπουν στους spammers να χρησιμοποιήσουν τον υπολογιστή ενός απλού χρήστη για την μαζική αποστολή ανεπιθύμητων μηνυμάτων.
  • Τα προγράμματα που χρησιμοποιούνται για την αποστολή και παραλαβή ηλεκτρονικών μηνυμάτων δεν είναι αρκετά "έξυπνα" ούτως ώστε να εμποδίζουν την μετάδοση ανεπιθύμητης αλληλογραφίας.

Για τον περιορισμό του φαινομένου των ανεπιθύμητων μηνυμάτων (spamming) έχουν γίνει διάφορες προτάσεις από την ομάδα Anti-Spam Research Group (ASRG) του οργανισμού Internet Research Task Force (IRTF), η οποία προσπαθεί να βρει διάφορους τρόπους αυθεντικοποίησης των χρηστών που χρησιμοποιούν το SMTP για να ανταλλάξουν ηλεκτρονικά μηνύματα.

Εξωτερικές συνδέσεις[Επεξεργασία | επεξεργασία κώδικα]

  • Πρωτόκολλο SMTP: RFC 821 αντικαταστάθηκε απο το RFC 2821
  • Διαμόρφωση του ηλεκτρονικού ταχυδρομείου: RFC 822 αντικαταστάθηκε απο το RFC 2822
  • Προέκτασης SMTP: RFC 1651