Telnet

Aus wiki.archlinux.de

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 -S 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://testserver.local/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“
  • atari-bbs.kicks-ass.net 23 – BBS System auf einem Atari 800XL

Siehe auch

  • SSH – Dank Verschlüsselung sichererer Fernzugriff

Weblinks