Zum Inhalt springen

Developer 4 Fun Posts

MTU-Wert ermitteln

Der MTU-Wert (Maximum Transmission Unit) ist die maximale Größe eines Protokolls der Vermittlungsschicht. Durch jedes zusätzliche Protokoll wird ein gewisser Overhead übertragen, welches die gesamte Größe erhöht.
Im Ethernet wird, wenn man den Wert 1500 überschreitet, das Paket geteilt (fragmentiert), was wiederum bewirkt, dass jedes zweite Paket mit einem kleinen Inhalt versendet wird. Dies kann natürlich zu Leistungseinbuße führen.
Aus diesem Grund sollte man bei jeder Firewall den MTU-Wert Richtung Internet optimieren. Dies kann man ganz einfach mit dem Ping-Befehl realisieren. Um den richtigen Wert herauszufinden muss man den Wert 1500 solange reduzieren, bis das Paket nicht mehr fragmentiert wird.

In unserm Beispiel ist der Internet-Anschluss der Firewall an eth1 angeschlossen und hat zu beginn ein MTU-Wert von 1500 konfiguriert.

Das Herantasten an den richtigen MTU-Wert kann man z.B. so realisieren (hier 1473 statt 1500):


ping -I eth1 -M do -s 1473 8.8.8.8
  • Mit -I gibt man den Netzwerk-Adapter an
  • Mit -M do prüft man die Fragmentierung
  • Mit -s wird die Paket-Größe angegeben

Wie man an der folgenden Ausgabe erkennbar, muss das Paket fragmentiert werden (Frag needed):

PING 8.8.8.8 (8.8.8.8) from 1.2.3.4 eth1: 1473(1501) bytes of data.
ping: sendmsg: Message too long
From 1.2.3.4 icmp_seq=1 Frag needed and DF set (mtu = 1500)
ping: sendmsg: Message too long
From 1.2.3.4 icmp_seq=2 Frag needed and DF set (mtu = 1500)
ping: sendmsg: Message too long
From 1.2.3.4 icmp_seq=3 Frag needed and DF set (mtu = 1500)

Hat man den richtigen MTU-Wert erreicht (hier im Beispiel 1472):

ping -I eth1 -M do -s 1472 8.8.8.8

So entfällt der Hinweis, dass eine Fragmentierung benötigt ist:

PING 8.8.8.8 (8.8.8.8) from 1.2.3.4 eth9: 1472(1500) bytes of data.
76 bytes from 8.8.8.8: icmp_seq=1 ttl=120 (truncated)
76 bytes from 8.8.8.8: icmp_seq=2 ttl=120 (truncated)
76 bytes from 8.8.8.8: icmp_seq=3 ttl=120 (truncated)
76 bytes from 8.8.8.8: icmp_seq=4 ttl=120 (truncated)

Jetzt muss man nur noch in der Firewall im Netzwerk-Adapter eth1 den MTU-Wert 1472 konfigurieren, dann ist die Paket-Größe für diesen Internet-Aschluss optimiert.

Bestimmter Inhalt von Dateien in einem Verzeichnis suchen

Sucht man eine bestimmte Zeichenkette, um z.B. eine Konfiguration unter Linux anzupassen, weiß aber nicht in welcher Datei diese vorkommt, so kann man sich mit find, xargs und grep aushelfen.

Im folgenden Beispiel suchen wir alle Dateien im Verzeichnis /etc , in denen der String localhost vorkommt:

find /etc -type f | xargs grep localhost

Am Ergebnis erkennen wir, dass in der hosts Datei zwei mal localhost enthalten ist:

/etc/hosts:127.0.0.1 localhost
/etc/hosts:::1 ip6-localhost ip6-loopback

Natürlich lässt sich die Suche auch einschränken. Im folgenden Beispiel werden keine *.log Dateien durchsucht:

find /foo/bar -type f -not -name "*.log" | xargs grep localhost

Bestimmte Dateien finden und löschen

Wenn man zum Beispiel in aktuellen Verzeichnis alle Log Dateien von 2015 löschen will, kann man dies mit dem Befehl find machen.

Zuerst sucht man die gewünschten Dateien, die man löschen möchte:

find ./ -name "*2015*.log"

Hat man die richtigen Dateien gefunden, dann kann man dem Befehl „-exec rm {} \;“ anhängen, damit diese gelöscht werden.

find ./ -name "*2015*.log" -exec rm {} \;

Alle Dateien einzeln packen

Möchte man unter Linux alle Dateien im aktuellen Verzeichnis einzeln packen, so kann man dies mit folgendem Befehl machen:

for f in *; do tar cfvz $f.tgz $f; done

Falls man nur Log-Dateien packen will, kann man das so tun:

for f in *.log; do tar cfvz $f.tgz $f; done

Will man die Dateien nach dem Packen löschen, erweitert man einfache den Befehl:

for f in *.log; do tar cfvz $f.tgz $f; rm $f; done

Dateien finden, die größer als …

Dateien finden, die eine bestimmte Größe überschritten haben.

Jeder kennt es: Eine Partiton / Festplatte läuft voll. Mit folgendem Befehl kann man schnell Dateien finden, die größer als 10MB sind, um zu schauen was man löschen könnte:

ls -lahS $(find / -type f -size +10000k)

Wireshark

Netzwerkanalyse mit Wireshark.

Mit dem Programm wireshark kann man über eine grafische Oberfläche den Netzwerk-Verkehr eines Netzwerk-Interface überwachen und analysieren. Über die Filter kann man sich nur die wichtige Pakete anzeigen lassen. Das Kommandozeilenprogramm ohne Oberfläche nennt sich tshark.

Man kann sich mit Hilfe von wireshark und tshark über das Netzwerk einen Server analysieren, indem man sich per ssh auf den Server verbindet, die Pakete mit tshark direkt zu wireshark schicken lässt.

In diesem Beispiel wird der HTTP und DNS Verkehr zu wireshark zur Analyse gesendet:

ssh user@meinserver "tshark -i eth0 -F pcap -f 'not tcp port 22 && (tcp port 80 || tcp port 53 || udp port 53)' -w -" | wireshark -k -i -

https://www.wireshark.org/