11.9 Weitere nützliche Netzwerktools
In diesem Abschnitt wollen wir Ihnen ein paar einfache Tools zum Testen und Ausprobieren Ihres Netzwerks vorstellen. Mit diesen Tools können Sie beispielsweise die Erreichbarkeit von Netzwerkrechnern überprüfen und nachsehen, welche Verbindungen Ihr Rechner gerade aufgebaut hat oder entgegennehmen kann. Außerdem zeigen wir Ihnen, wie Sie Ihr Netzwerk grundlegend scannen und wie Sie Datenverkehr aufzeichnen können.
11.9.1 ping
ping ist ein sehr nützliches Programm, um die Funktion des Netzwerks zu testen. Dabei versucht ping, einen angegebenen Rechner mit einem ICMP-ECHO-Paket zu erreichen, und der angesprochene Rechner sollte mit einem ICMP-ECHO-REPLY-Paket antworten.
Das Internet Control Message Protocol (ICMP) wurde beim Design von TCP/IP extra zur Kontrolle von Netzwerken entworfen und bietet eine Vielzahl von interessanten Möglichkeiten. Wenn man bedenkt, welche Macht heutzutage mit dem Internet verbunden ist, lohnt es sich zumindest für Informatiker, mal einen Blick hinter die Kulissen zu wagen und so den eigenen kreativen Umgang mit der Technik auszubauen.
Ein ping-Aufruf sieht in der einfachsten (und meist ausreichenden) Form folgendermaßen aus:
$ ping 10.0.2.2
PING 10.0.2.2 (10.0.2.2) 56(84) bytes of data.
64 bytes from 10.0.2.2: icmp_seq=1 ttl=64 time=0.519 ms
64 bytes from 10.0.2.2: icmp_seq=2 ttl=64 time=0.582 ms
64 bytes from 10.0.2.2: icmp_seq=3 ttl=64 time=0.542 ms
64 bytes from 10.0.2.2: icmp_seq=4 ttl=64 time=0.809 ms
64 bytes from 10.0.2.2: icmp_seq=5 ttl=64 time=0.708 ms
^C // Benutzer drückt Strg+C
--- 10.0.2.2 ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 5999ms
rtt min/avg/max/mdev = 0.429/0.596/0.809/0.116 ms
Listing 11.52 Anpingen eines anderen Rechners
In diesem Beispiel haben wir das »Pingen« nach sieben versendeten Paketen mit der Tastenkombination (Strg) + (C) abgebrochen, um uns die Gesamtstatistik anzusehen. Wie Sie in diesem Beispiel sehen, wurden alle sieben Pakete beantwortet, und somit funktioniert die Kommunikation zumindest auf TCP/IP-Ebene zwischen diesen beiden Rechnern.
Es sei allerdings darauf hingewiesen, dass viele moderne Firewalls ICMP-ECHO-Pakete blocken und der Zielrechner sie aus diesem Grund nicht beantworten kann. Wie Sie aus den obigen Fakten leicht ablesen können, ist das aber nicht unbedingt notwendig. ping ist nicht hochgradig sicherheitskritisch – es ist zunächst einmal ein Diagnosemittel. Im allerschlimmsten Fall sieht ein Hacker allerdings, dass ein Rechner online ist, und kann unter Umständen herausfinden, welches Betriebssystem auf dem Rechner läuft: Ein Angreifer kann mit sogenanntem OS Fingerprinting, das unter anderem Fähigkeiten von ICMP ausnutzt, über das Netzwerk Rückschlüsse auf das verwendete Betriebssystem ziehen. Früher, unter Windows 95, war es sogar möglich, das System mit einem modifizierten ICMP-Paket, dem sogenannten »Ping of Death«, zum Absturz zu bringen.
Schlägt ein ping fehl, kann das mehrere Ursachen haben. Entweder sind sie lokal bedingt, etwa durch eine falsch konfigurierte Netzwerkkarte, oder mit dem Routing stimmt etwas nicht. In solchen Fällen hilft oft ein kurzer Blick mit ip auf die Schnittstellenkonfiguration und mit route auf die Routing-Tabelle, um zu sehen, was los ist. Ist dort alles in Ordnung, liegt der Fehler beim anderen Rechner. Oder man hat einfach wieder mal vergessen, das Kabel einzustecken.
11.9.2 netstat
netstat bietet diverse nützliche Funktionen zur Fehlerdiagnose. So können Sie sich beispielsweise die Routing-Tabelle ansehen oder sich einen Überblick über laufende Dienste Ihres Systems verschaffen. Betrachten Sie einmal folgende Beispiele:
netstat mit dem Parameter --tcp liefert die aktiven TCP-Verbindungen, die unser Rechner geöffnet hat. Ohne diesen Parameter würden auch noch die UDP-Verbindungen angezeigt, die allerdings weniger interessant sind.
$ netstat --tcp -n Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 172.20.2.1:36810 129.13.65.195:995 ESTABLISHED
Listing 11.53 Aktive TCP-Verbindungen anzeigen
Hier haben wir die numerische Ausgabe mit dem Switch -n genommen. Das heißt, es werden die IP-Adressen der verbundenen Rechner direkt angezeigt, und es wird nicht versucht, durch Reverse-DNS den IP-Adressen wieder Hostnamen zuzuordnen. Die Ausgabe zeigt uns als interessanteste Information den Socket der Verbindung an – also das Paar der verbundenen IP-Adressen mit den jeweiligen Ports auf beiden Rechnern. Wenn wir jetzt wüssten, was 995 für ein Port ist, könnten wir herausfinden, welchen Dienst unser Rechner gerade in Anspruch nimmt. Dazu schauen wir einmal kurz in die Datei /etc/services und suchen nach dem entsprechenden Port:
$ cat /etc/services | grep 995 | grep tcp pop3s 995/tcp spop3 # pop3 protocol over TLS/SSL
Listing 11.54 So finden Sie den Dienst auf dem TCP-Port 995 heraus.
Unser Rechner ruft gerade über eine verschlüsselte Verbindung Mails ab – also ein ganz normaler Vorgang. Das POP3-Protokoll ist ein einfaches Protokoll zum Abholen von E-Mails von einem Server, und mit SSL/TLS kann man Übertragungen verschlüsseln.
Die Datei /etc/services enthält Standardports für diverse Dienste. Man hat sich im Laufe der Zeit auf diese Verteilung geeinigt. Allerdings gibt es für neue Protokollvarianten oft auch neue Ports, und es ist nicht immer eindeutig, welcher Dienst zu welchem Port gehört.
Doch zurück zu netstat: Wir können netstat auch benutzen, um ähnlich wie mit ip Informationen über unsere Netzwerkschnittstellen zu erhalten. Dazu benutzen wir den Parameter -i, um an Informationen über alle Netzwerkschnittstellen des Systems zu kommen. Zusätzlich setzen wir wieder den Parameter -n ein, um die Ausgabe in numerischer Form zu veranlassen.
$ netstat -i -n Kernel Interface table Iface MTU Met RX-OK RX-ERR RX-DRP TX-OK TX-ERR TX-DRP TX-OVR Flg eth0 1500 0 126214 0 0 209007 0 0 0 BMRU lo 16436 0 148 0 0 148 0 0 0 LRU
Listing 11.55 netstat statt ip
Dieser Aufruf ist vor allem dann nützlich, wenn Sie schnell und übersichtlich Informationen über die übertragenen Pakete erhalten möchten – die Ausgabe bei ip ist zwar auch sehr umfangreich, aber zugegebenermaßen doch nicht sehr übersichtlich. Die Ausgabe von netstat erklärt sich genau dann von selbst, wenn Sie wissen, was Sie mit den Informationen anzufangen haben – und aus diesem Grund werden wir in diesem Buch jetzt nicht weiter darauf eingehen. (Und wenn Sie trotzdem der Ehrgeiz packt – es gibt ja auch noch die Manpage.) Ähnlich wie bei ip können Sie auch mit netstat die Routing-Tabelle ausgeben:
$ netstat -r Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 172.20.0.0 * 255.255.0.0 U 40 0 0 eth0 default 172.20.0.1 0.0.0.0 UG 40 0 0 eth0
Listing 11.56 netstat als Ersatz für route
Sie sehen, dass netstat ein umfangreiches Tool ist, mit dem man viel anfangen kann – vorausgesetzt, man kann die Ausgaben richtig interpretieren.
11.9.3 nmap
Wer Linux einsetzt, beschäftigt sich oft auch mit der Sicherheit seiner Server. Auch wenn Sie kein Netzwerkadministrator bzw. keine Netzwerkadministratorin sind und sich nur mit Ihrem eigenen Rechner beschäftigen, ist es trotzdem wichtig, sich mit diesem Thema auseinanderzusetzen.
Am besten machen Sie das, indem Sie sich die Waffen der Gegenseite zu eigen machen. So können Sie zum Beispiel mit einem Portscanner die eigenen Server auf potenzielle Sicherheitslücken oder die Firewall auf eventuelle Schwachstellen scannen. So ein Portscanner macht dabei nichts anderes, als zu versuchen, sich mit allen Ports des Rechners zu verbinden. Ist so ein Versuch erfolgreich, läuft auf diesem Port ein Dienst. Nun kann in der /etc/services nachgeschaut werden, um welchen Dienst es sich handeln könnte. So wird erst einmal überprüft, was überhaupt auf dem fraglichen Rechner aktiv ist. Mit diesen Informationen könnten Angreifer dann weiterarbeiten und beispielsweise die genaue Software der Serverdienste ermitteln, um diese dann auf Schwachstellen zu untersuchen.
Aber zurück zum Portscanning. Als Beispiel für einen Portscanner möchten wir das Programm nmap behandeln. Es bietet neben den Standardfunktionen auch einige Extras, wie beispielsweise eine automatische Erkennung des Betriebssystems.
Im Folgenden möchten wir einen Scan auf 172.20.0.1 ausführen. Dazu müssen wir jedoch als root eingeloggt sein.
# sudo nmap -sS 172.20.0.1 Starting Nmap 6.40 ( http://nmap.org ) at 2016-05-22 19:18 CEST Nmap scan report for localhost (172.20.0.1) Host is up (0.000015s latency). Not shown: 995 closed ports PORT STATE SERVICE 22/tcp open ssh 139/tcp open netbios-ssn 445/tcp open microsoft-ds 631/tcp open ipp 5432/tcp open postgresql Nmap done: 1 IP address (1 host up) scanned in 1.77 seconds
Listing 11.57 Portscanning mal praktisch
Was man mit diesen Informationen anfangen kann, soll nicht Teil des Buches sein. Allerdings sollten Sie sich, wenn Sie so einen Scan in Ihrem Netzwerk durchführen, immer fragen: Ist das wirklich das Ergebnis, das ich haben will? Sobald mehr Dienste laufen, als Sie brauchen, stellen sie ein potenzielles Sicherheitsrisiko dar.
Wenn Sie mehr über die Funktionsweise, über nmap und über Portscanner erfahren wollen, suchen Sie einfach im Internet, etwa auf insecure.org. Achten Sie nur darauf, dass Sie auf einer halbwegs professionellen Ebene bleiben – es gibt viele Kids, die ohne viel Hintergrundwissen viel Unsinn zusammenschreiben.
11.9.4 tcpdump
Wenn Sie sich für den Inhalt der übertragenen Daten interessieren, wird Ihnen tcpdump weiterhelfen. Dieses Programm ist in der Lage, alle TCP- und UDP-Pakete anzuzeigen, die über den jeweiligen Rechner laufen. So könnte man beispielsweise im Klartext übertragene E-Mails oder Passwörter mitlesen.
Im Folgenden haben wir genau das vor. Aber bevor Sie jetzt schon wieder große Pläne schmieden und die Weltherrschaft an sich reißen wollen, lassen Sie sich gesagt sein, dass Ihnen diese Möglichkeit nicht viel bringt – es sei denn, Sie schneiden den Datenverkehr auf einem Webserver großer Firmen oder zumindest auf einem relevanten Router des Internets mit. Und so etwas wird schnell langweilig.
Aber schauen wir uns das Beispiel an:
# tcpdump -X -n port 110 [...] 16:54:28.961890 172.20.2.1.16582 > 1.2.3.4.110 … 0x0020 8018 16d0 d96c 0000 0101 080a 0236 05ae .....l.......6.. 0x0030 0395 f6c5 4564 af45 2455 6534 6224 6234 ....USER.someuse 0x0040 1234 4342 3423 6234 2345 2632 6234 0a r@somehost.. 16:54:29.076218 1.2.3.4.110 > 172.20.2.1.16582 … … 0x0020 8018 16a0 34c1 0000 0101 080a 0395 f701 ....4........... 0x0030 0236 05ae 2b4f 4b20 4e65 6564 2061 2070 .6..+OK.Need.a.p 0x0040 6173 7377 6f72 640d 0a assword.. 16:54:29.077808 172.20.2.1.16582 > 1.2.3.4.110 0x0000 4500 0042 7f3f 4000 4006 84a4 ac14 0201 E..B.?@.@....... 0x0010 3e32 4a8b 40c6 006e c2d6 7ac9 be8d 972f >2J.@..n..z..../ 0x0020 8018 16d0 339c 0000 0101 080a 0236 05b9 ....3........6.. 0x0030 0395 f701 5041 5353 206f 7574 7369 6465 ....PASS.outside 0x0040 0d0a [...] 53 packets received by filter 0 packets dropped by kernel
Listing 11.58 tcpdump in Aktion
Hier haben wir tcpdump gesagt, dass wir die Inhalte der Pakete sehen wollen (Option -X), und haben einen Filter auf den POP3-Standardport gesetzt, über den im Normalfall die Mails abgeholt werden. Das haben wir gemacht, damit wir auch nur die Informationen bekommen, die uns wirklich interessieren, und nicht in binärem Datenmüll ersticken.
Wie Sie dann dem Dump leicht entnehmen können, lautet die Mailadresse someuser@somehost und hat das Passwort outside. Die Mails wurden dabei vom Rechner 1.2.3.4 abgeholt. Dies sollte vorerst als kleine Demonstration von tcpdump genügen. Mit den Daten aus dem Beispiel könnten Sie nun auch selbst die Mails für dieses Postfach abholen.