Email versenden per Telnet
Wie man Emails per telnet versendet
Wer gerade kein Email-Programm zur Hand hat, kann auch telnet, socat oder netcat verwenden um Email zu verschicken. Es gibt dazu zwei Möglichkeiten dies zu tun
- ohne Authentifikation
- mit Authentifikation
Email versenden ohne Authentifikation
Wenn man nicht von localhost auf dem Mailserver kommt, wird diese Methode sehr wahrscheinlich fehlschlagen. Grund dafür ist, dass Postfix die IP mit dem MX-Record der Sender-Domain vergleicht. Stimmen diese nicht überein, so wird der Verbindugsaufbau abgehlehnt.
Beispiel:
Ich will als foo@bar.com an virusalert@nerd2nerd.org eine Email verschicken. Komme ich nicht von der IP-Adresse des MX-Records der Domain bar.com wird mein Verbindungsaufbau abgelehnt.
Komme ich nun von der richtigen IP-Adresse so funktioniert der Rest wie folgt:
telnet mail.nerd2nerd.org 25 Trying 80.244.241.195... Connected to mail.nerd2nerd.org. Escape character is '^]'. 220 mail.nerd2nerd.org ESMTP Postfix helo bar.com 250 mail.nerd2nerd.org mail from: foo@bar.com 250 2.1.0 Ok rcpt to: virusalert@nerd2nerd.org 250 2.1.5 Ok data 354 End data with <CR><LF>.<CR><LF> From: Meine Person <foo@bar.com> To: Virusalert User <virusalert@nerd2nerd.org> Subject: Testmail Testmail . 250 2.0.0 Ok: queued as 140C4A40C9 quit 221 2.0.0 Bye Connection closed by foreign host.
Email versenden mit Authentifikation
Von daheim aus funktioniert das nicht, da wir für unsere IPs daheim in der Regel keinen MX-Record haben. Also müssen wir uns mit Usernamen und Passwort anmelden.
Der Username und das Passwort wird beim PLAIN-Login BASE64 enkodiert. Da man dieses leicht wieder dekodieren kann, sollte man das nicht unverschlüsselt auf dem Mail-Standard-Port 25 machen. Es sei denn man verwendet OpenSSL mit STARTTLS oder verwendet gleich den SMTPS-Port.
Welches Login-Verfahren unterstützt wird findet man ebenfalls per telnet heraus:
telnet mail.nerd2nerd.org 25 Trying 80.244.241.195... Connected to mail.nerd2nerd.org. Escape character is '^]'. 220 mail.nerd2nerd.org ESMTP Postfix ehlo bar.com 250-mail.nerd2nerd.org 250-PIPELINING 250-SIZE 50480000 250-VRFY 250-ETRN 250-STARTTLS 250-AUTH PLAIN LOGIN DIGEST-MD5 CRAM-MD5 250-AUTH=PLAIN LOGIN DIGEST-MD5 CRAM-MD5 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN quit 221 2.0.0 Bye Connection closed by foreign host.
Unser Server bietet also AUTH-PLAIN, AUTH-LOGIN, AUTH-DIGEST-MD5 und AUTH-CRAM-MD5 an. Wir wollen aber ersteinmal bei AUTH-PLAIN bleiben.
Um den Usernamen und das Passwort mit BASE64 zu enkodieren kann man perl verwenden:
perl -MMIME::Base64 -e 'print
encode_base64("\000user\@domain.tld\000meinpasswort")'
Das Passwort lautet dann:
AHVzZXJAZG9tYWluLnRsZABtZWlucGFzc3dvcnQ=
Damit kann ich mich nun per OpenSSL beim Server anmelden.
Für die STARTTLS verwendet man:
openssl s_client -starttls smtp -crlf -connect mail.nerd2nerd.org:25
Für STMPS verwendet man:
openssl s_client -crlf -connect mail.nerd2nerd.org:465
Anschließend kann ich die mail versenden:
openssl s_client -crlf -connect mail.nerd2nerd.org:465
CONNECTED(00000003)
depth=0 /CN=mail.nerd2nerd.org
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 /CN=mail.nerd2nerd.org
verify error:num=27:certificate not trusted
verify return:1
depth=0 /CN=mail.nerd2nerd.org
verify error:num=21:unable to verify the first certificate
verify return:1
---
Certificate chain
0 s:/CN=mail.nerd2nerd.org
i:/O=Root CA/OU=http://www.cacert.org/CN=CA Cert Signing Authority/emailAddress=support@cacert.org
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIEWjCCAkKgAwIBAgIDBKO4MA0GCSqGSIb3DQEBBQUAMHkxEDAOBgNVBAoTB1Jv
b3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9yZzEiMCAGA1UEAxMZ
Q0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJARYSc3VwcG9y
dEBjYWNlcnQub3JnMB4XDTA4MDIwNDE3NTc0N1oXDTEwMDIwMzE3NTc0N1owHTEb
MBkGA1UEAxMSbWFpbC5uZXJkMm5lcmQub3JnMIGfMA0GCSqGSIb3DQEBAQUAA4GN
ADCBiQKBgQC4gN60SRccDFKpvUsQiReG0iJvIQ+087yBTfPU+qFy0b9AvuGJKXwU
yg/xHwbNPM+QLPhQkStM3RDjT+WjcPHnrEVrhqhEngc9FBokqhC4Ta16ts8E8e5p
BUdMZy5fZhXjs5orILydMOvfQ3EBFRMzkdpZYWGmwIKrJNiS9j49sQIDAQABo4HK
MIHHMAwGA1UdEwEB/wQCMAAwNAYDVR0lBC0wKwYIKwYBBQUHAwIGCCsGAQUFBwMB
BglghkgBhvhCBAEGCisGAQQBgjcKAwMwCwYDVR0PBAQDAgWgMDMGCCsGAQUFBwEB
BCcwJTAjBggrBgEFBQcwAYYXaHR0cDovL29jc3AuY2FjZXJ0Lm9yZy8wPwYDVR0R
BDgwNoISbWFpbC5uZXJkMm5lcmQub3JnoCAGCCsGAQUFBwgFoBQMEm1haWwubmVy
ZDJuZXJkLm9yZzANBgkqhkiG9w0BAQUFAAOCAgEAqqSq6Eq5STUCED6oOQ1XRZuz
vq3JS1R2+jyGXFrqHfMY0I7prusnN67kXOBJeBdeeHHHK6viYC64c5b47m8iIF7r
eTje6hLI8USffU2wj3VsvZwneo1eNA5lXdQlek2Zvuxt8bvM+B22xiH9c1hNAZ8C
pb4i3k7MjXZntuCZ02wx0VciK91U5tjFDBsOyVGLat1nFOsSx/96g+aRQH/Hn6Xz
NQTWfM44VsUmCrVDjlO50eCfPNQKWc9FnI1Wt1632Gy5k2Kx21Bdi9tJtrIxmrLp
0bKX00H5VHB0/hS9suAx1R6X4GDrw3B+cmNI4oMceZfJPLfXkfsUywvwclao3ttH
c3DqHxqjctMaKXlHH3eq3s7se47zHLY1wywzX1K0L+yk42H4DNNWh38d459C37rV
P1NGWhQR1YffT0lZHFw3TWVINQpBQvDGtTusyaIhrSJqAEsTGnOJ19Gejdly+7V7
jkasKQkVzCKVyKbPVOTUVIL8Qu/gTKbP7aljuuVpFSyho7DHde2tP79CvjGfA4OE
2hcxCcCNezqqgCvdgxr4MFhTFoJizxHOaI04SDDxMBuFmy7t0raIadZsjbazXBQI
50BT6EjqKZ71ASombcBlCP0I/icIGqRcfn8rDbVbgaZUvvU/Ef7DXjklk5ktkHwN
+Oy/52bXwpF4NpUJciQ=
-----END CERTIFICATE-----
subject=/CN=mail.nerd2nerd.org
issuer=/O=Root CA/OU=http://www.cacert.org/CN=CA Cert Signing Authority/emailAddress=support@cacert.org
---
No client certificate CA names sent
---
SSL handshake has read 1682 bytes and written 340 bytes
---
New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-SHA
Server public key is 1024 bit
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : TLSv1
Cipher : DHE-RSA-AES256-SHA
Session-ID: 071D33AF7BB8310709DA51EE1DAC4F4E76B4BFBA969435E6A94BC8F46611F337
Session-ID-ctx:
Master-Key: 5C062A00DB71CF059FBF0C110378047D22A364CADA5EF4DF03499AFA1509D54766C0FECE0C732AE72783C5308EA039D6
Key-Arg : None
Start Time: 1205034022
Timeout : 300 (sec)
Verify return code: 21 (unable to verify the first certificate)
---
220 mail.nerd2nerd.org ESMTP Postfix
helo bar.com
250 mail.nerd2nerd.org
auth plain AHVzZXJAZG9tYWluLnRsZABtZWlucGFzc3dvcnQ=
235 2.0.0 Authentication successful
mail from: foo@bar.com
250 2.1.0 Ok
rcpt to: virusalert@nerd2nerd.org
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
From: Meine Person <foo@bar.com>
To: Virusalert User <virusalert@nerd2nerd.org>
Subject: Testmail
Testmail
.
250 2.0.0 Ok: queued as 140C4A40C9
quit
221 2.0.0 Bye
read:errno=0
Heff fun und den User: foo@bar.com gibts bei uns nicht!


