Vor laengerer Zeit gab es hier ja mal einen Beitrag der sich um das rudimentaere Testen eines Webservers via telnet und openssl drehte. Da war es nur konsequent, dass dem auch mal ein Beitrag folgt, der sich um das Thema Mail dreht.
Fangen wir erst mal einfach an und schauen, ob wir uns via SMTP mit unserem Mailserver verbinden und testweise mal eine Mail verschicken koennen.
ramon@client:~$ telnet 192.168.100.25 25 Trying 192.168.100.25... Connected to mailserver. Escape character is '^]'. ehlo client 220 mailserver NuNu 3.3(18) ipop3d (Amiga) 250-mailserver Hello client ([192.168.100.25]), pleased to meet you 250-HELP 250-SIZE 20971520 250 PIPELINING MAIL FROM:ramon@kukla.info 250 ramon@kukla.info... Sender OK RCPT TO:ramon@kukla.info 250 ramon@kukla.info... Recipient OK DATA 354 Enter message, end with "." on a line by itself SUBJECT:testmail testmail . 250 Message accepted for delivery quit 221 mailserver SMTP Service closing transmission channel Connection closed by foreign host.
Hat alles geklappt haben wir anschliessend eine Mail in unserem Zielpostkorb. Jetzt haben wir einen Server, der es erfordert sich vorab als berechtigter Benutzer zu authentifizieren. Da wir unsere Authentifizierung nicht unverschluesselt ueber das Netz schicken werden wir uns nun via SSL mit dem Mailserver verbinden.
Vorab noch ein Hinweis. Bei der Nutzung von openssl im folgenden Beispiel passiert es, dass bei Kommandos, wo das erste Zeichen ein R ist, ein Regonitiation initiiert wird. Das wuerde uns dann also spaetestens beim „RCPT TO:“ zum Verhaengnis werden. Daher rufen wir openssl mit der Option -ign_eof
auf.
ramon@client:~$ openssl s_client -connect mailserver:465 -ign_eof CONNECTED(00000003) depth=0 /C=DE/ST=Saxonia/L=Falkenstein/O=ptlx/OU=Administration/CN=mailserver/emailAddress=admin@mailserver verify error:num=18:self signed certificate verify return:1 depth=0 /C=DE/ST=Saxonia/L=Falkenstein/O=ptlx/OU=Administration/CN=mailserver/emailAddress=admin@mailserver verify return:1 --- Certificate chain 0 s:/C=DE/ST=Saxonia/L=Falkenstein/O=ptlx/OU=Administration/CN=mailserver/emailAddress=admin@mailserver i:/C=DE/ST=Saxonia/L=Falkenstein/O=ptlx/OU=Administration/CN=mailserver/emailAddress=admin@mailserver --- Server certificate -----BEGIN CERTIFICATE----- MIIDnDCCAwWgAwIBAgIJAJLLd/ciGa54MA0GCSqGSIb3DQEBBQUAMIGRMQswCQYD VQQGEwJERTEQMA4GA1UECBMHU2F4b25pYTEUMBIGA1UEBxMLRmFsa2Vuc3RlaW4x DTALBgNVBAoTBHB0bHgxFzAVBgNVBAsTDkFkbWluaXN0cmF0aW9uMRQwEgYDVQQD Ewtmb28ucHRseC5kZTEcMBoGCSqGSIb3DQEJARYNYWRtaW5AcHRseC5kZTAeFw0x MTAyMjAxMzMxMzVaFw0yMTAyMTcxMzMxMzVaMIGRMQswCQYDVQQGEwJERTEQMA4G A1UECBMHU2F4b25pYTEUMBIGA1UEBxMLRmFsa2Vuc3RlaW4xDTALBgNVBAoTBHB0 bHgxFzAVBgNVBAsTDkFkbWluaXN0cmF0aW9uMRQwEgYDVQQDEwtmb28ucHRseC5k ZTEcMBoGCSqGSIb3DQEJARYNYWRtaW5AcHRseC5kZTCBnzANBgkqhkiG9w0BAQEF AAOBjQAwgYkCgYEA1VqGIqHj1sH8MAO8+kA2JPzb4dmEvRcnRMOvS0eCpmLsN+GX Tz+RUZLu5/2tfB7ntggU/R0P/LozFbUsFDqckKrzTuzus21/EJGfN51p9pixpGBi GyiXlUJ2hg3zwwckCwxEuoY+By/KlEH6sN7vGpycYj2rmaf0nBTuoL+DGoMCAwEA AaOB+TCB9jAdBgNVHQ4EFgQUpSWQtdmGGGMs8yYIWQZbtRQbJCswgcYGA1UdIwSB vjCBu4AUpSWQtdmGGGMs8yYIWQZbtRQbJCuhgZekgZQwgZExCzAJBgNVBAYTAkRF MRAwDgYDVQQIEwdTYXhvbmlhMRQwEgYDVQQHEwtGYWxrZW5zdGVpbjENMAsGA1UE ChMEcHRseDEXMBUGA1UECxMOQWRtaW5pc3RyYXRpb24xFDASBgNVBAMTC2Zvby5w dGx4LmRlMRwwGgYJKoZIhvcNAQkBFg1hZG1pbkBwdGx4LmRlggkAkst39yIZrngw DAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQCQAvHWM1QUAw447V/l+1X+ R8+ATWJJUsj1dCtSrkrCuS9hS1mxnnLlWa/Jpe+ipRcHLdvYQ7g+iaWupujeZv8B PqpipLSPyuaSlIlCJe38fUKbXuPbSLkx6RA8PrY6O3y32T23Rmc13HV5gwbf+8zI /A3WXwxoOTYz/GzIA2+VMg== -----END CERTIFICATE----- subject=/C=DE/ST=Saxonia/L=Falkenstein/O=ptlx/OU=Administration/CN=mailserver/emailAddress=admin@mailserver issuer=/C=DE/ST=Saxonia/L=Falkenstein/O=ptlx/OU=Administration/CN=mailserver/emailAddress=admin@mailserver --- No client certificate CA names sent --- SSL handshake has read 1499 bytes and written 319 bytes --- New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-SHA Server public key is 1024 bit Secure Renegotiation IS supported Compression: NONE Expansion: NONE SSL-Session: Protocol : TLSv1 Cipher : DHE-RSA-AES256-SHA Session-ID: 6CFEC94B29AEFC1099D87B785F58631DF6D328F135B2CA75D5368566C1D3C19D Session-ID-ctx: Master-Key: 330430753D0F29C93467334FA9D0C43700C0B5DE6F8AD2F9D606B0A4ACD565FC9012F49DD7EEE2F7BE04AF2E0FC9137F Key-Arg : None Start Time: 1318419830 Timeout : 300 (sec) Verify return code: 18 (self signed certificate) --- 220 mailserver NuNu 3.3(18) ipop3d (Amiga) ehlo client 250-mailserver 250-PIPELINING 250-SIZE 30720000 250-VRFY 250-ETRN 250-AUTH PLAIN LOGIN 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN
Jetzt kommt der interessantere Teil, die Authentifizierung. Diese erfolgt via AUTH LOGIN oder AUTH PLAIN. Der Unterschied zwischen den beiden Methoden ist, dass bei ersterer (AUTH LOGIN) Benutzername und Kennwort getrennt uebertragen werden, wohingegen bei AUTH PLAIN Benutzername und Kennwort „am Stueck“ uebertragen werden. Allerdings werden Benutzername und Kennwort nicht im Klartext sondern Base64-kodiert uebermittelt. Um einen solchen kodierten String zu erhalten kann man entweder einen der diversen Online-Konverter nutzen, oder ein lokales Perl mit dem MIME::Base-Modul.
ramon@client:~$ perl -MMIME::Base64 -e 'print encode_base64("meinpasswort");' bWVpbnBhc3N3b3J0 ramon@client:~$ perl -MMIME::Base64 -e 'print encode_base64("ramon\@kukla.info");' cmFtb25Aa3VrbGEuaW5mbw==
Mit Hilfe der generierten Werte koennen wir uns nun also Authentifizieren und unsere Mail senden.
AUTH LOGIN 334 VXNlcm5hbWU6 cmFtb25Aa3VrbGEuaW5mbw== 334 UGFzc3dvcmQ6 bWVpbnBhc3N3b3J0 235 2.7.0 Authentication successful MAIL FROM:ramon@kukla.info 250 2.1.0 Ok RCPT TO:ramon@kukla.info 250 2.1.5 Ok DATA SUBJECT:testmail 354 End data with <CR><LF>.<CR><LF> testmail . 250 2.0.0 Ok: queued as BAA9C19EFD6E quit 221 2.0.0 Bye read:errno=0
Soweit so prima. Jetzt moechten wir natuerlich noch mal schauen, wie es sich mit IMAP darstellt. Bei IMAP ist wichtig zu wissen, dass alle Kommandos von einem sogenannten Identifier angefuehrt werden muessen.
ramon@client:~$ openssl s_client -connect mailserver:993 CONNECTED(00000003) depth=0 /O=Dovecot mail server/OU=mailserver/CN=mailserver/emailAddress=root@mailserver verify error:num=18:self signed certificate verify return:1 depth=0 /O=Dovecot mail server/OU=mailserver/CN=mailserver/emailAddress=root@mailserver verify return:1 --- Certificate chain 0 s:/O=Dovecot mail server/OU=mailserver/CN=mailserver/emailAddress=root@mailserver i:/O=Dovecot mail server/OU=mailserver/CN=mailserver/emailAddress=root@mailserver --- Server certificate -----BEGIN CERTIFICATE----- MIIDJTCCAo6gAwIBAgIJAO3v57G3iscCMA0GCSqGSIb3DQEBBQUAMGsxHDAaBgNV BAoTE0RvdmVjb3QgbWFpbCBzZXJ2ZXIxFDASBgNVBAsTC2Zvby5wdGx4LmRlMRQw EgYDVQQDEwtmb28ucHRseC5kZTEfMB0GCSqGSIb3DQEJARYQcm9vdEBmb28ucHRs eC5kZTAeFw0xMTAyMjAxMDQzNTBaFw0xMjAyMjAxMDQzNTBaMGsxHDAaBgNVBAoT E0RvdmVjb3QgbWFpbCBzZXJ2ZXIxFDASBgNVBAsTC2Zvby5wdGx4LmRlMRQwEgYD VQQDEwtmb28ucHRseC5kZTEfMB0GCSqGSIb3DQEJARYQcm9vdEBmb28ucHRseC5k ZTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA7CqNuyJwyDYfkhjOYsBdLouu tLDx/QjVulAyisf+YMWwRr/ZMI5dZCoB2+VYVk+px4pP0asNjtiMD7/aKgPs3SJH LmcaPIfXayBYVVpwi1jEFhSNowCcQjmoPHAM0PrNJNz9qVGpxJkk/kwpXd8kPdBk Eq1b/41Xb7NDbTLZ/GUCAwEAAaOB0DCBzTAdBgNVHQ4EFgQU6q65YYtCAUMqLMDi crAg+zYxfSIwgZ0GA1UdIwSBlTCBkoAU6q65YYtCAUMqLMDicrAg+zYxfSKhb6Rt MGsxHDAaBgNVBAoTE0RvdmVjb3QgbWFpbCBzZXJ2ZXIxFDASBgNVBAsTC2Zvby5w dGx4LmRlMRQwEgYDVQQDEwtmb28ucHRseC5kZTEfMB0GCSqGSIb3DQEJARYQcm9v dEBmb28ucHRseC5kZYIJAO3v57G3iscCMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcN AQEFBQADgYEARNxqxB3K++zRyB1mdaSU/P52yXEb03tqqaV+58lf75hfsBUHnz/8 1GUM2I98HM6r7nsqxG9WjCuNgDfvuZZ4A+5T3O1TPdJViTBZG/zAi4lvIHfalF5f 3ZmLUye2qLFlBScxCGdsvZ3RAOg/tskbJDgeKr/HaWAxqRlmcAxO1h8= -----END CERTIFICATE----- subject=/O=Dovecot mail server/OU=mailserver/CN=mailserver/emailAddress=root@mailserver issuer=/O=Dovecot mail server/OU=mailserver/CN=mailserver/emailAddress=root@mailserver --- No client certificate CA names sent --- SSL handshake has read 1380 bytes and written 319 bytes --- New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-SHA Server public key is 1024 bit Secure Renegotiation IS supported Compression: NONE Expansion: NONE SSL-Session: Protocol : TLSv1 Cipher : DHE-RSA-AES256-SHA Session-ID: 7DA8529181D88B345F6DF5771AA502682D534C7816F9036265D69F22A958AA50 Session-ID-ctx: Master-Key: 4112D1CB2EE9357F5DF0226395E1D007C1C6401FD8F8EDC4D0C4E1CE0A98A3AA91BEB23165974633A8E60EAC349D2981 Key-Arg : None Start Time: 1318426371 Timeout : 300 (sec) Verify return code: 18 (self signed certificate) --- * OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE AUTH=PLAIN AUTH=LOGIN] Dovecot ready. a0001 LOGIN ramon@kukla.info meinpasswort a0001 OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE SORT SORT=DISPLAY THREAD=REFERENCES THREAD=REFS MULTIAPPEND UNSELECT IDLE CHILDREN NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH] Logged in a0003 EXAMINE INBOX * FLAGS (\Answered \Flagged \Deleted \Seen \Draft $label1 $label2 $label3 $label4 $label5 $Forwarded) * OK [PERMANENTFLAGS ()] Read-only mailbox. * 23 EXISTS * 0 RECENT * OK [UIDVALIDITY 1249171322] UIDs valid * OK [UIDNEXT 25979] Predicted next UID * OK [HIGHESTMODSEQ 10887] Highest a0003 OK [READ-ONLY] Select completed. a0004 FETCH 14 BODY[] * 14 FETCH (BODY[] {1467} Return-Path: <ramon@kukla.info> Delivered-To: ramon@kukla.info Received: from localhost (localhost [127.0.0.1]) by mailserver NuNu 3.3(18) ipop3d (Amiga) with ESMTP id 21D0E141E0A4; Tue, 11 Oct 2011 22:45:38 +0200 (CEST) From: Ramon Kukla <ramon@kukla.info> To: ramon@kukla.info Subject: testmail User-Agent: Yet Another Mailer (YAM) (2.6p1) Content-Type: text/plain; charset=ISO-8859-1; format=flowed; DelSp=Yes MIME-Version: 1.0 Content-Disposition: inline testmail -- Blog: http://ramon.kukla.info - http://adminstories.de Software failure! Press left mouse button to continue. Guru Meditation #8100000A.000FEA00 ) a0004 OK Fetch completed. a0005 LOGOUT * BYE Logging out a0005 OK Logout completed. closed
Soweit, so fertig. Wer nicht nur einen, sondern mehrfach Tests mit (s)einem SMTP-Server durchfuehren muss, dem sei swaks (Swiss Army Knife SMTP) empfohlen. Das erleichtert einem ungemein die Arbeit mit dem ganzen getippe.