Telnet für Mailserver und mehr

Mailserver kann man noch immer sehr gut per telnet ansprechen. Telnet kann nämlich wesentlich mehr, als man auf den ersten Blick vermuten mag. Durch die Angabe des gewünschten Ports kann man nahezu alles ansprechen, was irgendwie einen Textoutput hat und TCP spricht. Als Beispiel hier die Kontaktaufnahme mit einem SMTP bzw. POP-Server.

SMTP per telnet

SMTP ist das “simple mail transfer protocol”. Gottseidank ist es “simple”, damit ist es sehr gut per telnet ansprechbar und ein guter Test, ob ein Mailserver erreichbar ist und welche Fähigkeiten dieser aufweist.

[14:43]luke@marvin:~> telnet fortytwo 25
Trying 192.168.0.42...
Connected to fortytwo.universe.
Escape character is '^]'.
220 fortytwo.universe ESMTP Postfix
ehlo schratz.at
250-fortytwo.universe
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250 8BITMIME
mail from:lukas.schratz@gmail.com
250 Ok
rcpt to:lukas.schratz@gmail.com
250 Ok
data
354 End data with <CR><LF>.<CR><LF>
from:Lukas
to:mich
subject:Testmail

Dies ist eine Testmail. Sie zeigt, daß man eine komplette Kommunikation mit dem Mailserver nur per telnet durchführen kann.
Um den data-input zu beenden, gibt man wie oben beschrieben einen Punkt auf einer Zeile an.
.
250 Ok: queued as D685B5B86
quit
221 Bye
Connection closed by foreign host.
[14:46]luke@marvin:~>

Man sieht hier folgende einzelnen Abschnitte:
Zuerst wird Kontakt aufgenommen, hier im Beispiel ist es mein eigener kleiner Heimserver (ein postfix, in dem Fall, ist aber nicht weiter wichtig, denn diese Befehle versteht jeder Mailserver):

[14:43]luke@marvin:~> telnet fortytwo 25
Trying 192.168.0.42...
Connected to fortytwo.universe.
Escape character is '^]'.
220 fortytwo.universe ESMTP Postfix

Klar, der telnet-Befehl, der servername und der Port. Telnet liest aber auch aus /etc/services und man könnte hier auch “telnet fortytwo smtp” schreiben. Zuerst wird der Name aufgelöst, dann kommt der Connect. Der Escape-Character ist noch eine Überbleibsel aus alten Zeiten, dann meldet sich der Mailserver mit einem 220 (also connected und bereit) und schickt sogar sein Banner mit.

Danach ist es höflich und üblich, sich mit einem “helo” oder “ehlo” (extended helo) vorzustellen. Viele Mailserver erwarten das und erwarten auch eine domain-Angabe (im Beispiel schratz.at).
Danach gibt der mailserver Auskunft, was er alles kann. Im vorliegenden Beispiel nicht allzu viel. Pipelining, d.h. daß alle Daten bzgl. Authentifizierung auch auf einer Zeile eingegeben werden kann, die Größe der Mails darf 10 MB nicht überschreiten. Vrfy ist zwar noch da, ist aber bei den meisten Mailservern nicht mehr freigeschaltet (sonst könnte man gültige Mailadressen abfragen und somit gezielter spammen) und ETRN ist eigentlich nur in Kontakt mit anderen Mailservern von Bedeutung, nämlich wenn einer für den anderen den Spooler spielt.

Bezüglich verify reagieren die meisten Server heute ähnlich und reagieren mit einer Meldung, die möglichst nichtssagend ist. Hier wieder die von meinem Postfix:

vrfy lukas.schratz@gmail.com\\
252 lukas.schratz@gmail.com\\

oder von einem Exim:

vrfy lukas.schratz@gmail.com
252 Administrative prohibition

Manche schreiben auch z.B. einfach ein “252 I’ll do my best”

Dann gibt der Mailserver noch an, aus eigener Kraft 8bitmime zu können, d.h. Nachrichten müssen nicht nach ASCII konvertiert werden und der Mailserver kann selber nach ASCII konvertieren, falls er mit einem Mailserver spricht, der diese Möglichkeit nicht hat.
Andere Mailserver, wie z.B. der Exim können das nicht:

[15:03]luke@marvin:~> telnet mail.utanet.at 25
Trying 213.90.36.103...
Connected to mail.utanet.at.
Escape character is '^]'.
220 andrea.utanet.at ESMTP Exim 4.50 Sat, 24 Mar 2007 15:03:41 +0100
ehlo schratz.at
250-andrea.utanet.at Hello h081217119117.dyn.cm.kabsi.at [81.217.119.117]
250-SIZE 20971520
250-PIPELINING
250-AUTH PLAIN LOGIN CRAM-MD5
250-AUTH=LOGIN
250-STARTTLS
250 HELP
quit
221 andrea.utanet.at closing connection
Connection closed by foreign host.
[15:03]luke@marvin:~> 

Dafür kann dieser Server z.B. STARTTLS (also Verschlüsselung nach der Verbindungsaufnahme)

Dann kommt der Teil, wo man den “Envelope” definiert. D.h. man gibt die eigene Mailadresse und die Adresse an, an die man senden will. Ist weder die eigene Mailadresse freigegeben, noch die Adresse, an die man senden will im Verwaltungsbereich des Servers (d.h. fühlt er sich für die Domain nicht zuständig), so wird man mit einer entsprechenden Meldung abgelehnt:

[15:12]luke@marvin:~> telnet mail.utanet.at 25
Trying 213.90.36.103...
Connected to mail.utanet.at.
Escape character is '^]'.
220 anya.utanet.at ESMTP Exim 4.50 Sat, 24 Mar 2007 15:12:54 +0100
helo
250 anya.utanet.at Hello h081217119117.dyn.cm.kabsi.at [81.217.119.117]
mail from:lukas.schratz@gmail.com
250 OK
rcpt to:lukas.schratz@gmail.com
530 no unauthenticated mail from your network on this MSA
quit
221 anya.utanet.at closing connection
Connection closed by foreign host.
[15:13]luke@marvin:~>

Hat man diesen Punkt überwunden, dann kann man “data” eingeben und nun wird man aufgefordert, alles zu schreiben und dann zum Schluß mit einem einzelnen Punkt auf einer Zeile die Eingabe zu beenden. Hier wird also der dem Benutzer angezeigte Header angezeigt. In dem genannten Beispiel habe ich gewählt, daß das “From” Lukas heißen soll und das “To” mich. Jetzt ist hoffentlich auch klar, warum viele Spammails “an den falschen Empfänger” geschickt werden, denn was ich nach “data” reinschreibe ist komplett egal für den Kontakt der Mailserver untereinander.

Man kann sich das so vorstellen wie einen Briefumschlag, auf dem die echte Adresse steht, aber im innenliegenden Briefkopf wird jemand anderer angesprochen. Sollte sowas im wahren Leben passieren, würde man nie die Post deswegen beschuldigen, falsch geliefert zu haben, denn man sieht ja den Umschlag noch. Bei Email ist der Mailserver bei der Zustellung so “nett”, daß er den Brief bereits auspackt, also so wie eine aufmerksame Sekretärin.

Tja, und dann endet der Austausch mit dem Mailserver mit dem besagten einsamen Punkt auf einer Zeile, der Mailserver gibt mir sogar an, unter welcher internen Nummer er das in die Warteschlange gestellt hat und schon wird meine Email zugestellt.

Noch ein paar Hinweise:
Auch z.B. auf Port 587 bieten viele Mailserver eine Kommunikation, extra für die jeweiligen Kunden des Mailservers an. Dort ist eine Authentifizierung umbedingt notwendig und unumgänglich:

[15:22]luke@marvin:~> telnet mail.utanet.at submission
Trying 213.90.36.103...
Connected to mail.utanet.at.
Escape character is '^]'.
220 andrea.utanet.at ESMTP Exim 4.50 Sat, 24 Mar 2007 15:29:52 +0100
helo
250 andrea.utanet.at Hello h081217119117.dyn.cm.kabsi.at [81.217.119.117]
mail from:lukas.schratz@gmail.com
530 Authentication required


Hier wird es dann etwas umständlich mit der Kommunikation, weil man zuerst seine Authentifizierungsdaten eingeben muß und diese noch dazu in base 64 kodiert sein müssen. Hierzu gibt es zwar Möglichkeiten, aber diese würden wahrscheinlich den Rahmen dessen sprengen, wenn man verzweifelt genug ist, telnet fürs Mailversenden benutzen zu müssen oder einfach nur die Funktionalität des Mailservers feststellen will. ;-)

POP3 per telnet

Ja, auch POP3, auch wenn es nicht das “simple” im Namen führt, ist ein einfach gestricktes Protokoll und deshalb einfach per telnet ansprechbar. Hier eine typische Session, der Benutzername und das Kennwort wurden anonymisiert, ebenso das abgeholte mail ;-)

[15:58]luke@marvin:~> telnet mail.utanet.at pop3
Trying 213.90.36.103...
Connected to mail.utanet.at.
Escape character is ‘^]’.
+OK POP3 - Hello, sailor! anya.utanet.at
user USERNAME
+OK USER USERNAME set
pass PASSWORD
+OK You are so in.
list
+OK Easy.
1 152020
2 2495
3 2044
.
retr 3
+OK Easy.
Return-path: <lukas.schratz@gmail.com
Delivery-date: Sat, 24 Mar 2007 15:59:07 +0100
Received: from vida.utanet.at ([213.90.36.66])
by manuela.utanet.at with esmtp (Exim 4.12)
id 1HV7hy-0003CI-00
for USERNAME@utanet.at; Sat, 24 Mar 2007 15:59:06 +0100
Received: from mx03.kabsi.at ([195.202.128.130])
by vida.utanet.at with esmtps (TLSv1:AES256-SHA:256)
(Exim 4.66)
(envelope-from <lukas.schratz@gmail.com)
id 1HV7hy-0006yo-DF
for USERNAME@utanet.at; Sat, 24 Mar 2007 15:59:06 +0100
Received: from fortytwo.universe (dyn.cm.kabsi.at)
by mx03.kabsi.at (8.13.6/8.13.6) with SMTP id l2OEx5QR013225
for <USERNAME@utanet.at; Sat, 24 Mar 2007 15:59:06 +0100
Received: from localhost (localhost [127.0.0.1])
by fortytwo.universe (Postfix) with ESMTP id 74F6B12283
for <USERNAME@utanet.at; Sat, 24 Mar 2007 15:58:49 +0100 (CET)
Received: from fortytwo.universe ([127.0.0.1])
by localhost (fortytwo [127.0.0.1]) (amavisd-new, port 10024) with ESMTP
id 28448-10 for <USERNAME@utanet.at; Sat, 24 Mar 2007 15:58:38 +0100 (CET)
Received: from marvin (marvin.universe [192.168.0.23])
by fortytwo.universe (Postfix) with SMTP id E04A52D47
for <USERNAME@utanet.at; Sat, 24 Mar 2007 15:57:45 +0100 (CET)
Received-SPF: neutral (vida.utanet.at: domain of lukas.schratz@gmail.com
is neutral about designating 195.202.128.130 as permitted sender)
from: Lukas@fortytwo.universe
to: Testmx@fortytwo.universe
subject: Testmail fuer Schulung
Message-Id: <20070324145745.E04A52D47@fortytwo.universe
Date: Sat, 24 Mar 2007 15:57:45 +0100 (CET)
X-Virus-Scanned: amavisd-new at universe
X-DNSWL-Notice: listed at whitelist.rbl.ispa.at
X-DCC-UTA-Metrics: vida.utanet.at 32730; Body=0
X-Virus-Scanned: Yes, on vida.utanet.at
X-Spam-Score-Int: -44
X-Spam-Level: —-
X-Spam-Checker: Spamassassin 3.1.8 on vida.utanet.at
X-Spam-Status: No, score=-4.5 required=8.0 tests=NO_REAL_NAME,RCVD_IN_ISPAWL
X-Spam-Report:
* 0.6 NO_REAL_NAME From: does not include a real name
* -5.0 RCVD_IN_ISPAWL Received via a relay in whitelist.rbl.ispa.at
Testblabbel
.
quit
+OK Been nice to serve you.
Connection closed by foreign host.
[15:59]luke@marvin:~>

Man sieht hier, daß die eigentlich Verbindungaufnahme genauso einfach ist wie bei SMTP, man aber natürlich hier zwingend (über die Befehle “user” und “pass” ) Benutzername und Kennwort eingeben muß

POP3 ohne Verschlüsselung macht Klartext und ist dabei von jedem, der einem über die Schulter schaut, auslesbar


Danach bitte ich mithilfe des Befehls “list” den Mailserver, mir eine Liste der verfügbaren Mails anzuzeigen. Er hat drei für mich vorrätig mit verschiedenen IDs, die mir egal sein können. Ich bitte mit “retr 3” darum, die dritte angezeigt zu bekommen und bekomme hier wieder rohen Text vorgesetzt, der aber dennoch halbwegs gut lesbar ist.

Bezüglich der Header-Zeilen und ähnlichem ist E-Mail-Header lesen und verstehen noch immer die Referenzquelle für eine gute und verständliche Einführung.

telnet für andere Protokolle

Wie schon erwähnt, kann man telnet auch für andere Tests “mißbrauchen”. Die eigentliche Grundlage, nämlich den telnet-Server installiert heute keiner mehr, da es definitiv bessere Möglichkeiten gibt (vor allem ssh)

Was kann man noch per telnet testen? Viele Server geben noch immer ein “banner” an, mit dem sie sich melden. So auch z.B. ein nntp(news-)server:

[22:24]luke@heartofgold:~> telnet news.netway.at 119
Trying 195.96.0.8...
Connected to news.netway.at.
Escape character is ‘^]’.
200 newsreader2.utanet.at InterNetNews NNRP server INN 2.4.3 ready (posting ok).
quit
205 .
Connection closed by foreign host.
[22:25]luke@heartofgold:~>

Hier sieht man also, daß sich da ein newsserver meldet, und zwar der wohl häufigste Newsserver und gleichzeitig ein Schwergewicht namens “INN”. Und der sagt uns sogar, welche Version er hat, ob er das posten erlaubt etc. Auch hier könnte man mit telnet seine News lesen.

Selbst einen ssh-server kann ich mit telnet ein banner entlocken und damit zumindest nachsehen, was hier läuft... auch wenn ich dann keine Verschlüsselung über telnet zusammenbringe ;-)

[22:33]luke@heartofgold:~> telnet fortytwo 22
Trying 192.168.0.42...
Connected to fortytwo.
Escape character is ‘^]’.
SSH-1.99-OpenSSH_3.9p1
exit
Protocol mismatch.
Connection closed by foreign host.
[22:33]luke@heartofgold:~>

oder auch ein vmware-server:

[22:35]luke@heartofgold:~> telnet fortytwo 904
Trying 192.168.0.42...
Connected to fortytwo.
Escape character is ‘^]’.
220 VMware Authentication Daemon Version 1.10: SSL Required, MKSDisplayProtocol:VNC
quit
Connection closed by foreign host.
[22:35]luke@heartofgold:~>

Allerdings gibt es auch einige Ports, an denen der server einfach still bleibt und trotzdem lauscht...

[22:38]luke@heartofgold:~> telnet fortytwo 785
Trying 192.168.0.42...
Connected to fortytwo.
Escape character is ‘^]’.
?
help
quit
Connection closed by foreign host.
[22:39]luke@heartofgold:~>

Diesen schweigsamen Kandidaten muß man dann eher mit anderen Mitteln auf den Leib rücken, hier empfiehlt sich im Normalfall nmap, ein sehr flexibler Portscanner

In diesem Fall ist das mein Mount-Daemon von nfs.

Viel Spaß beim experimentieren :-)

 
telnet_fuer_mailserver_und_mehr.txt · Zuletzt geändert: 2007/05/19 23:21 von admin
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki