Archiv der Kategorie: Linux / Unix

Netcat

Mit Netcat oder auch nc genannt, lassen sich Daten von der Standardein- oder -ausgabe durch eine Netzwerkverbindung über TCP oder UDP transportieren. Das Ganze läuft als Server und Client ab, dabei werden die Daten unverschlüsselt übermittelt. Das Anwendungsgebiet kann beispielsweise ein internes Netz sein, wo Daten ohne Sicherheitsbedürfnis rasch kopiert werden müssen.

Netcat gibt es für praktisch alle Plattformen, untenstehende Beispiele wurden auf einem Linuxsystem durchgeführt.

Um Daten empfangen zu können wird zuerst auf dem Zielrechner Netcat als Server initialisiert. Folgendes Beispiel lauscht (-l = listen) auf dem Port (-p = Port) 3000 und alle Daten werden in der Datei “kopie” gespeichert. Der Zielrechner lauscht solange auf diesem Port bis Netcat z.B. mittels strg + c abgebrochen wird.

Zielrechner::

nc -l -p 3000 > kopie

Um nun Daten senden zu können, wird auf einem anderen Rechner, nennen wir diesen Startrechner, Netcat aufgerufen, der eine Verbindung zum Zielrechner über den Port 3000 macht und die Datei “original” übermittelt.

Startrechner:

nc Zielrechner 3000 < original

Dabei spielt es keine Rolle in welcher Art die Daten vorliegen, Netcat leitet diese einfach weiter.

Im folgenden Beispiel wird der Inhalt des Arbeitsspeichers mittels dem Programm Disk Dump (dd) zum Zielrechner übermittelt. Das Pipe-Zeichen "|" bedeutet, dass das Ergebnis aus dd an Netcat weitergereicht wird.

Startrechner:

dd if=/dev/mem | nc Zielrechner 3000

Zielrechner:

nc -l -p 3000 > arbeitsspeicher

Auf dem Zielrechner werden dann die Arbeitsspeicherdaten in die Datei "arbeistspeicher" geschrieben.
Natürlich lassen sich so auch ganze Festplatten oder einzelne Partitionen über das Netz sichern.

Startrechner:

dd if=/dev/hda1 | nc Zielrechner 3000

Die Harddiskdaten werden auf dem Zielrechner mittels gzip komprimiert und dann in die Datei "hda1.gz" gespeichert.

Zielrechner:

netcat -l -p 3000 | gzip > hda1.gz

Netcat kann auch als Portscanner eingesetzt werden.
Die Option -z überprüft in diesem Beispiel, ob der SSH Port 22 offen ist und gibt dessen Status mittels -v aus.

netcat -vz Zielrechner 22

Ohne die Option -z initiiert Netcat eine Verbindung auf den Port 22, was bei einem offenen Port und einem laufenden SSH Server mit einem Banner wie z.B. SSH-2.0-OpenSSH_5.1 quittiert werden kann.

Es lassen sich auch ganze Port-Breiche absuchen, hier alle Ports zwischen 21 und 80. Die Option -w gibt das Timeout in Sekunden an.

netcat -vz -w 10 Zielrechner 21-80

Ändern von Dateinamen welche mit einem Sonderzeichen beginnen

Ein Tippfehler bei einem Parameter mit “tar” oder “touch” und schon hat man eine Datei erstellt, die mit einem Sonderzeichen im Dateinamen anfängt, z.B. “-r”.

Ein beherztes

rm -r

wird nicht wie erwartet die Datei “-r” löschen, sondern den gesamten Ordner Inhalt, was zu bösen Überraschungen führen kann 🙂

Um nun so eine Datei löschen zu können, muss dem Dateiname ein “./” vorangestellt werden, dann klappt es auch.

rm ./-r

Peru klopft an meine Firewall

Ist immer wieder spannend mit anzusehen, mit welchen kreativen Benutzernamen versucht wird auf einen SSH Server einzuloggen.


[...]
Apr 2 11:06:11 localhost sshd[7103]: Illegal user elke from 200.60.37.35
Apr 2 11:06:21 localhost sshd[7115]: Illegal user apache from 200.60.37.35
Apr 2 11:06:23 localhost sshd[7117]: Illegal user squid from 200.60.37.35
Apr 2 11:06:26 localhost sshd[7121]: Illegal user mailman from 200.60.37.35
Apr 2 11:06:28 localhost sshd[7123]: Illegal user stephane from 200.60.37.35
Apr 2 11:06:30 localhost sshd[7125]: Illegal user rabbit from 200.60.37.35
Apr 2 11:06:31 localhost sshd[7127]: Illegal user notes from 200.60.37.35
Apr 2 11:06:33 localhost sshd[7129]: Illegal user nick from 200.60.37.35
Apr 2 11:06:35 localhost sshd[7131]: Illegal user jesus from 200.60.37.35
Apr 2 11:06:37 localhost sshd[7133]: Illegal user paul from 200.60.37.35
Apr 2 11:06:39 localhost sshd[7135]: Illegal user penis from 200.60.37.35
Apr 2 11:06:40 localhost sshd[7137]: Illegal user temp from 200.60.37.35
Apr 2 11:06:42 localhost sshd[7139]: Illegal user bob from 200.60.37.35
Apr 2 11:06:44 localhost sshd[7141]: Illegal user software from 200.60.37.35
Apr 2 11:06:46 localhost sshd[7143]: Illegal user advanced from 200.60.37.35
Apr 2 11:06:47 localhost sshd[7145]: Illegal user american from 200.60.37.35
Apr 2 11:06:49 localhost sshd[7147]: Illegal user annmarie from 200.60.37.35
Apr 2 11:06:51 localhost sshd[7149]: Illegal user capital from 200.60.37.35
[...]

Vermutlich ist der arme Tropf aus Peru nicht einmal der Urheber des Übels, er hat vermutlich nicht einmal eine Ahnung davon was auf seinem Rechner – vor allem über den Port 31337 – so abläuft.


Starting nmap 3.81 ( http://www.insecure.org/nmap/ ) at 2009-04-02 11:00 CEST
Interesting ports on ucspperu.info (200.60.37.35):
(The 1654 ports scanned but not shown below are in state: closed)
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
25/tcp open smtp
110/tcp open pop3
111/tcp open rpcbind
143/tcp open imap
623/tcp open unknown
6667/tcp open irc
31337/tcp open Elite

mtr, die bessere Alternative zu traceroute

Unter Linux gibt es das praktische Tool: mtr, welches wie traceroute das routing zwischen zwei Punkten darstellt. Im Gegensatz zu traceroute stellt mtr eine Statistik über die Qualität der Ping-Rate zur Verfügung, unterteilt dargestellt in: Last, Best, Average und Worst.
Die Abfrage erfolgt in einem Intervall und so sieht man über einen bestimmten Zeitraum ganz genau, wo sich evt. ein Flaschenhals bilden kann. Unter Loss% sieht man in Prozent, wie viele ICMP Pakete der Router verworfen hat, ein mögliches Indiz für eine zu starke Auslastung des Gerätes oder eine Limitierung der Anfrage über einen bestimmten Zeitraum. Schön ist an diesem Beispiel mit mtr google.com auch zu sehen, dass (mit hoher Wahrscheinlichkeit) ein Loadbalancer ab Zeile 11 die Anfrage an qf-in-f100.google.com weiterleitet.

du – Verzeichnis -und Dateigrösse unter Linux anzeigen

Unter Linux lassen sich Dateien mit dem Befehl “du” (disk usage) auf ihre Grösse untersuchen und mit einer Handvoll Optionen wird sogar der tägliche Kampf eines Linux Administrators erträglicher.

Der Aufruf von du ohne Option, gefolgt von einer Datei oder einem Verzeichnis.
Die Grösse wird dabei in Blocksize angezeigt.

du /home/schurter
2066440 /home/dschurter

Mit der Option -b wird das Ergebnis als Byte angezeigt.

du -b /home/schurter
2113386772 /home/dschurter

Die Option -sh formatiert die Grösse in eine, für Menschen bessere lesbare Form.
Die Darstellung der einzelnen Grössenordnungen reichen von: K (Kilobyte), M (Megabyte) und G (Gigabyte)
In diesem Fall beträgt die Gesamtgrösse 2 GB.

du -sh /home/schurter
2.0G /home/dschurter

-ch als Option zeigt alle Files in einem Verzeichnis und dessen Grösse an.

du -ch /home/dschurter
2.9M /home/dschurter/xxx
4.0K /home/dschurter/yyy/xxx10
20K /home/dschurter/yyy/xxx11
84K /home/dschurter/yyy/xxx20
120K /home/dschurter/yyy/xxx21
20K /home/dschurter/zzz/aaa1
4.0K /home/dschurter/zzz/aaa2
8.0K /home/dschurter/zzz/aaa3
32K /home/dschurter/zzz/aaa4
...
...
...
2.0G insgesamt

Mit einem Wildcard (*) lassen sich Teile einer Abfrage darstellen.

du -ch /home/dschurter/yyy/*
4.0K /home/dschurter/yyy/xxx10
20K /home/dschurter/yyy/xxx11
84K /home/dschurter/yyy/xxx20
120K /home/dschurter/yyy/xxx21
228K /home/dschurter/yyy

du -ch /home/dschurter/yyy/xxx1*
4.0K /home/dschurter/yyy/xxx10
20K /home/dschurter/yyy/xxx11
24K insgesamt

Nützlich ist auch der exclude Parameter, der mit einem Pattern gefüttert werden kann. Dieser Pattern wird dann bei der Suche nicht mitberücksichtigt.

du -ch --exclude='xxx11' /home/dschurter
2.9M /home/dschurter/xxx
4.0K /home/dschurter/yyy/xxx10
20K /home/dschurter/yyy/xxx11 //Dieses File wird bei der Suche nicht mitberücksichtigt.
84K /home/dschurter/yyy/xxx20
120K /home/dschurter/yyy/xxx21
20K /home/dschurter/zzz/aaa1
4.0K /home/dschurter/zzz/aaa2
8.0K /home/dschurter/zzz/aaa3
32K /home/dschurter/zzz/aaa4
...
...
...
2.0G insgesamt

Es gibt noch weitere Optionen für “du”, welche hier nachgeschlagen werden können.

screen

Eines der vielleicht wichtigsten Programme, wenn man Linux über eine Systemkonsole administrieren will ist: screen

Da je nach Distribution von Linux / Unix nur eine beschränkte Anzahl von Systemkonsolen TTY’s (teletype device) zur Verfügung stehen, bietet sich screen als ideale Lösung an, dieses Problem zu lösen.
screen ist einen sogenannten “Terminal-multiplexer” und ermöglicht es einem innerhalb einer Konsole heraus, beliebige weitere zusätzliche Konsolen-Arbeitsflächen zu öffnen.
Mit dem Aufruf: [Strg-a] + [Option] lässt sich screen steuern.
screen weiterlesen

FreeDNS

Seit Jahren verwende ich zu Hause einen Debian Linux Rechner der als Firewall den Zugriff zur Aussenwelt des Internets regelt.
Da mein Provider zwischendurch die IP Adresse meines Modem erneuert und ich jederzeit Zugriff auf meinen Server haben möchte, ohne mir immer die IP aufschreiben zu müssen, musste eine Lösung her.
Meine Wahl fiel damals auf den kostenlosen Dienst FreeDNS wo ich meine Domain eintragen liess.
FreeDNS weiterlesen