Telnet
Telnet ist der Name eines zeichenorientierten Netzwerkprotokolls, sowie als auch der Name eines Programms um dieses Protokoll zu verwenden, und des Daemons, um einen Telnet-Server zu betreiben.
Sicherheitsaspekte
Telnet, das im Jahre 1983 spezifiziert wurde, besitzt von sich aus keinerlei Verschlüsselungsmethoden. Jeglicher über Telnet abgewickelte Datenverkehr geschieht daher im Klartext, und kann problemlos mitgeschnitten und analysiert werden.
Aufgrund dieser Tatsache sollte Telnet ausschließlich für nicht sicherheitsrelevante Dinge, oder nur zum Testen der Funktionsfähigkeit auf Protokollebene verwendet werden. Die Server-Fernwartung erledigt man heutzutage sinnvoller Weise mittels SSH.
Installation
Alle nötigen Telnet-Programme befinden sich im Paket inetutils
, das im core-Repository verfügbar ist, und mittels Pacman aus diesem installiert werden kann.
pacman -Sy inetutils
Der Telnet-Daemon (welcher – siehe Abschnitt Sicherheitsaspekte – allerdings heutzutage nicht mehr verwendet werden sollte) wird in /etc/xinetd.d/telnet
konfiguriert und über xinetd gestartet/gestoppt.
Aufgrund des Sicherheitsrisikos wird der Daemon in diesem Artikel nicht behandelt, und sollte darüber hinaus auch nicht gestartet werden, wenn man sich nicht zu einhundert Prozent sicher ist, was man tut.
Benutzung
Der Telnet-Client, aufzurufen mittels des Befehls telnet
nimmt neben verschiedenen Optionen zwei Parameter, Zielhost und Zielport, an. Es wird durch den Client dann eine Verbindung zum angegebenem Host auf dem angegebenem Port hergestellt. Dabei werden keine protokollrelevanten Daten übertragen, sondern lediglich eine Verbindung hergestellt.
Man kann hier nun, je nach Art der Gegenstelle, Protokolldaten eingeben und die Rückgaben auswerten. So kann man zum Beispiel die HTTP-Antwort eines Webservers auf Protokollebene überprüfen.
$ telnet testserver.local 80 Trying 10.10.0.50... Connected to localhost. Escape character is '^]'. GET /index.htm HTTP/1.1 Host: testserver.local HTTP/1.1 200 OK Transfer-Encoding: chunked Content-type: text/html Date: Thu, 22 Jul 2010 14:06:26 GMT Server: lighttpd/1.4.26 [Ausgabe der Seite http://localhost/index.htm]
Hier wird eine Verbindung auf Port 80 aufgebaut. Nach den Telnet-eigenen Ausgaben zum Verbindungsaufbau und der Information über das Escape-Zeichen folgt die Eingabe des Benutzers: Hier eine sehr einfache Anfrage des HTTP-Funktionssatzes, nämlich lediglich ein GET, gefolgt von der obligatorischen Host-Angabe. Durch zweimaliges Bestätigen mittels Enter (also dem Senden einer leeren Zeile) wird die Anfrage vom Server verarbeitet, und nach Ausgabe des HTTP-Headers die angeforderte Seite ausgegeben, und die Verbindung offen gehalten.
$ telnet testserver.local 80 Trying 10.10.0.50... Connected to localhost. Escape character is '^]'. GET /index.htm HTTP/1.1 Host testserver.local HTTP/1.1 400 Bad Request Connection: close Content-Type: text/html Content-Length: 349 Date: Thu, 22 Jul 2010 14:15:02 GMT Server: lighttpd/1.4.26 [Ausgabe der Bad-Request-Fehlerseite des Webservers] Connection closed by foreign host.
Hier wurde die selbe Anfrage an den Server gestellt, allerdings wurde bei der obligatorischen Host-Angabe kein Doppelpunkt gesetzt. Dies ist eine Protokollverletzung und führt zum Abbruch der Verbindung durch den Server, da eine ungültige Anfrage gestellt wurde.
Ein weiteres Beispiel ist die Abfrage eines NTP-Zeitservers.
$ telnet de.pool.ntp.org 13 Trying 141.40.103.102... Connected to de.pool.ntp.org. Escape character is '^]'. 22 JUL 2010 16:22:00 CEST Connection closed by foreign host.
Das Network-Time-Protocol ermöglicht keine Interaktion, sondern gibt lediglich das aktuelle Datum inklusive der Uhrzeit zurück, und beendet die Verbindung.
Ebenfalls besteht die Möglichkeit, mittels Telnet mit einem SMTP-Server zu kommunizieren, um eine E-Mail zu versenden. Dabei ist zu beachten, dass die Kommunikation mit dem Server unverschlüsselt stattfindet, und dadurch ein Sicherheitsrisiko darstellt.
$ telnet smtp.testserver.local 25 HELO clientpc1.local MAIL FROM:username@clientpc1.local RCPT TO:testuser@testserver.local DATA [Hier folgt der Mailinhalt] . QUIT
Damit wird dem User testuser@testserver.local
eine Mail von username@clientpc1.local
zugestellt. Im Beispiel wurden die Serverantworten zwar ausgelassen, aber Anhand dieser kann man auf das (un-)erwünschte Verhalten des Mailservers schließen.
Das Abrufen einer Mail funktioniert ebenfalls.
$ telnet pop.testserver.local 110 USER testuser PASS p4ssw0rd LIST
An dieser Stelle erscheint eine Liste mit Nummern (ID) gefolgt von Größenangaben in Byte. Anhand der ID kann man nun eine Mail abrufen.
RETR 2
Hier wird die Mail mit der ID 2 abgerufen, und ausgegeben. Es ist dabei zu beachten, dass der Datenverkehr vom und zum Server unverschlüsselt stattfindet, und damit ein Sicherheitsrisiko darstellt. Nachdem man das Verhalten des Servers hier überprüft hat, besteht auch die Möglichkeit, die Mail direkt zu löschen.
DELE 2
Somit wurde die Mail mit der ID 2 gelöscht.
Telnet-Seiten
Auch heutzutage noch erfreut sich Telnet in einigen Kreisen großer Beliebtheit, hier mal eine kleine Auswahl von per Telnet aufrufbaren „Seiten“:
telnet
…
- …
towel.blinkenlights.nl 23
– StarWars-ASCII-Animation - …
towel.blinkenlights.nl 666
– BOFH-Ausreden - …
mud.darkerrealms.org 2000
– Darker Realms (Text-Adventure) - …
cop.bbbs.no 4000
– Circle Of Protection BBS - …
ParadiseBBS.ath.cx 23
– Die „einzig verbliebene Amiga-Mailbox“
Siehe auch
- SSH – Dank Verschlüsselung sichererer Fernzugriff