SMTP implementieren
RFC: 5321 (2008) - Start 1982 mit RFC 821 Vorgänger der Mail im Arpanet schon ab 1971
Klassischer Port: 25
Aufgabe des Protokolls:
- Versenden einer Mail vom Client zum Server (Start)
- Weiterleitung einer Mail von Server zu Server (Unterwegs)
Das Ziel ist ein Postfach, nicht ein Client.
Das Protokoll liegt in der Anwendungsschicht, implementiert durch den Programmierer oder eine Bibliothek. Der Zugriff auf den Protokollstapel erfolgt über Sockets.
Ausprobieren des Protokolls mit dem telnet-Client: "telnet server 25" (server ist z.B. localhost) und Abarbeitung des Protokolls (https://de.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol).
Alternative zum goblin: Fake-SMTP-Server (https://jar-download.com/artifacts/com.github.tntim96/fakesmtp/2.0/source-code).
Alternative mit python: "sudo python3 -m smtpd localhost:25".
Berühmte Server: sendmail (alt, etwas komplex, leistungsoptimierte Configurationsdateien!, viel Literatur), postfix (IBM-Wurzel, einfacher zu verwalten), qmail (gilt als sicher, Preisgeld für gefundene Lücken), Microsoft Exchange (kann SMTP, ist aber eigentlich eine Groupware)
Aufgabenstellung:
- Wir testen das Protokoll mit telnet auf dem goblin (bzw. auf einem anderen Server Deiner Wahl) und schicken keine Mail nach außen (nur an username@goblin.tfo.local). Dokumentiere (response-codes usw.)! Beispiel: 250 --> Requested mail action ok, 503 --> Bad sequence of commands, usw.
- Wir implementieren SMTP zum Versenden einer Mail aus einer Anwendung. Die Sequenz der SMTP-Kommandos muss dabei eingehalten und die jeweiligen Response-Codes überprüft werden.
- Das laufende Programm muss im Falle von ungültigen Response-Codes dynamisch darauf reagieren, damit die vorherigen Eingaben nicht nocheinmal abgetippt werden müssen.
- Die Software soll eine gewisse Benutzerfreundlichkeit aufweisen (erleichterte Eingabe von Absender und Empfänger, Option für erneutes Versenden einer E-Mail usw.).
In der Schule verwenden wir den postfix. die Konfigurationen liegen unter /etc/postfix, das Protokoll in /var/log/mail.log. Die lokalen Postfächer liegen unter /var/spool/mail.
Teste zusätzlich noch den Erweiterungs-Befehl EHLO (nicht zu verwechseln mit HELO). Welche Funktion hat dieser? Finde heraus was die Optionen in der Antwort auf diesen Befehl bedeuten.
Erweitert euren SMTP-Client und simuliert auch falsche Nachrichten an den Server (welche Codes bekommt ihr zurück).