Protokollanalyse mit Linux (Teil1)

Dies ist eine Schritt für Schritt Anleitung zum Einrichten von Linux zur Analyse des Netzwerkverkehrs zwischen verschiedenen Komponenten.

Eine Analyse des Netzwerkverkehrs kann dazu eingesetzt werden Fehler in der Kommunikation von Komponenten (Soft- sowie Hardware) aufzudecken und zu beseitigen. Einer anderen Anwendung soll dieses Beispiel nicht dienen!

Testumgebung

  • Laptop mit Linux (Debian 6.0.6)
  • USB-Ethernet Adapter (Apple)
  • USB-WLAN Adapter (Realtek 8187)
  • DHCP-Server
  • Aircrack-NG Suite
  • Wirshark

Ich gehe davon aus das Debian 6 (Squeeze) bereits auf dem Laptop installiert ist und man sich in einem Terminal unter GNOME / KDE / etc. befindet.

WICHTIG!
Für diese Anleitung ist es Erforderlich das die Schritte als ROOT ausgeführt werden.
Es sollte daher mit Bedacht vorgegangen werden, da der Spruch „Ich bin root, ich darf das!“ nicht von ungefähr kommt.
Daher hafte ich für keinerlei Schäden die ihr dem System zufügt.
Wenn ihr ganz sicher gehen wollt macht das in einer VM in die ihr die USB-Adapter durchreicht.

Schritt 1: Installation der benötigten Pakete

apt-get install build-essential curl libssl-dev libsqlite3-dev
apt-get install iw wireless-tools wireshark bridge-utils isc-dhcp-server

Schritt 2: Herunterladen des aktuellen Aircrack-NG Suite Quellcodes

wget http://download.aircrack-ng.org/aircrack-ng-1.1.tar.gz

Schritt 3: Entpacken und patchen des Quellcodes

Entpacken

tar –zxvf aircrack-ng-1.1.tar.gz

Patchen

cd aircrack-ng-1.1
nano common.mak

Aus der Zeile „CFLAGS ?= -g -W -Wall -Werror -03“ das „-Werror“ entfernen da sich sonst Aircrack nicht kompilieren lässt.

Schritt 4: Kompilieren und installieren der Aircrack-NG Suite

Kompilieren

make sqlite=true

Installieren

make sqlite=true install

Schritt 5: Update der OUI-Datei

airodump-ng-oui-update

Schritt 6: Monitor Modus von wlan1 starten

airmon-ng start wlan1

Schritt 7: Einen WLAN-Accesspoint mit airbase starten

airbase-ng -e FreeWifi -c 11 mon0 &

Schritt 8: Einrichten der Schnittstellen

ifconfig at0 up
ifconfig eth1 up

Einrichten der Netzwerkbrücke

brctl addbr wifibr0
brctl addif wifibr0 at0
brctl addif wifibr0 eth1
ifconfig wifibr0 10.0.0.254 netmask 255.255.255.0
ifconfig wifibr0 up

Schritt 9: Routing und IP_FORWARDING einrichten

echo „1“ > /proc/sys/net/ipv4/ip_forward
route add net 10.0.0.0 netmask 255.255.255.0 gw 10.0.0.254
iptables –flush
iptables –table nat –flush
iptables –delete-chain
iptables –table nat –delete-chain
iptables -P FORWARD ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQERADE

Schritt 10: DHCP Server einrichten und starten

Bindung des DHCP-Servers an die Netzwerkbrücke

nano /etc/default/isc-dhcp-server

Als INTERFACES wifibr0 eintragen. (INTERFACES=“wifibr0″)

DHCP Einstellungen bearbeiten

nano /etc/dhcp/dhcpd.conf

ddns-update-style ad-hoc;
default-lease-time 600;
max-lease-time 7200;
authoritive;

subnet 10.0.0.0 netmask 255.255.255.0 {
    range 10.0.0.10 10.0.0.30;
    option netmask 255.255.255.0;
    option routers 10.0.0.254;
    option broadcast-address 10.0.0.255;
    option domain-name-servers 8.8.8.8;
}

DHCP Server starten

/etc/init.d/isc-dhcp-server restart

Schritt 11: Start der Analyse mit Wireshark

wireshark -i wifibr0 –k &

NFS Server mit NIC Bonding

Um einen NFS Server mit NIC Bonding (HP: NIC Teaming) aufzusetzen benötigt man folgendes:

Hardware:
PC mit freien PCI- und PCIe-Steckplätzen
mind. 2 Gigabit Ethernet Karten
1x HDD oder RAID als Systemplatte
1x Größtmögliche(s) HDD o. RAID5 (empfohlen)
RAM: mind. 1GB
CPU: ab 2GHz (mit 64bit Unterstützung)

OS: Debian 6.0.5 x64
Pakete:
ifenslave-2.6
nfs-kernel-server
nfs-common
portmap

(optional: openssh-server, samba)

Für das Beispiel wird das Ganze in einer VM als Demo laufen, die einzelnen Schritte sind aber auf das reale System übertragbar.

Beispiel:
ISO-Datei des Debian Systems (debian-6.0.5-amd64-netinst.iso) herunterladen und auf CD-brennen. (Für die VM reicht die ISO)

VM mit 3 Festplatten und 2 Netzwerkkarten erstellen
1. Festplatte (System) 8GB
2. & 3. Festplatte 0.5GB

Das Debian System ohne die Grafische Desktop-Umgebung installieren.
Nach dem Neustart sich als root anmelden.

Jetzt die oben genannten Pakete installieren.
apt-get install ifenslave-2.6 nfs-kernel-server nfs-common portmap

Konfigurieren des NIC Bondings

Netzwerkschnittstellen herunterfahren
ifconfig eth0 down
ifconfig eth1 down

mit nano die Datei /etc/network/interfaces öffnen und die folgenden Zeilen mit einer # auskommentieren.
# allow-hotplug eth0
# iface eth0 inet dhcp

Folgendes der Datei /etc/network/interfaces hinzufügen
auto bond0
iface bond0 inet dhcp
slaves eth0 eth1
# Wenn alle Netzwerkschnittstellen verwendet werden sollen.
# slaves all

# Modes
#
# mode=0 (balance-rr)
# Round-robin policy: Transmit packets in sequential order from the first
# available slave through the last. This mode provides load balancing and
# fault tolerance.
#
# mode=1 (active-backup)
# One slave interface is active at any time. If one interface fails,
# another interface takes over the MAC address and becomes the active
# interface. Provides fault tolerance only. Doesn’t require special switch # support
#
# mode=2 (balance-xor)
# Tranmissions are balanced across the slave interfaces based on ((source
# MAC) XOR (dest MAC)) modula slave count. The same slave is selected for
# each destination MAC. Provides load balancing and fault tolerance.
#
# mode=3 (broadcast)
# Transmits everything on all slave interfaces. Provides fault tolerance.
#
# mode=4 (802.3ad)
# This is classic IEEE 802.3ad Dynamic link aggregation. This requires
# 802.3ad support in the switch and driver support for retrieving the speed # and duplex of each slave.
#
# mode=5 (balance-tlb)
# Adaptive Transmit Load Balancing. Incoming traffic is received on the
# active slave only, outgoing traffic is distributed according to the
# current load on each slave. Doesn’t require special switch support
#
# mode=6 (balance-alb)
# Adaptive Load Balancing - provides both transmit load balancing (TLB) and
# receive load balancing for IPv4 via ARP negotiation. Doesn’t require
# special switch support, but does require the ability to change the MAC
# address of a device while it is open.
bond-mode 0
bond-miimon 100

Speichern der Datei mit [Ctrl]+[O].

NFS freigaben einrichten

Als root anmelden.

Einhängepunkte erstellen:
mkdir /media/DATA1
mkdir /media/DATA2

Gerätenamen der Datenfestplatten ermitteln:
fdisk –l

Für das VM Beispiel:
Disk /dev/sdb: 536 MB, 536870912 bytes
64 heads, 32 sectors/track, 512 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/sdb doesn't contain a valid partition table

Disk /dev/sdc: 536 MB, 536870912 bytes
64 heads, 32 sectors/track, 512 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000

Disk /dev/sdc doesn't contain a valid partition table

Partitionen und Dateisystem auf den Datenfestplatten erstellen:
fdisk /dev/sdb
n
p
1
[Return]
[Return]
w

mkfs.ext3 /dev/sdb1
das gleiche für /dev/sdc

Automatisches Einhängen beim Bootvorgang:
Die Datei /etc/fstab mit nano öffnen und die folgenden Zeilen hinzufügen

/dev/sdb1 /media/DATA1 ext3 rw,user,auto 0 0
/dev/sdc1 /media/DATA2 ext3 rw,user,auto 0 0

NFS freigaben bekanntgeben
Die Datei /etc/exports mit nano öffnen und folgendes Zeilen einfügen:

/media/DATA1 *(rw,no_root_squash,no_subtree_check)
/media/DATA2 *(rw,no_root_squash,no_subtree_check)

Speichern der Datei mit [Ctrl]+[O].

Jetzt das System neustarten und der NFS-Server ist soweit eingerichtet.

ESXi Network connection with 65535Mbps [solved]

During the last days I had the problem on my ESXi Server that it was not reachable.

The Server itself and the VMs were running fine. So it was no crash or something like that. After I took a closer look at the problem with the support console, I noticed that my management network connection had some weird values.

Link: Up <- with the cable disconnected?

Linkspeed: 65535Mbs <- Hmm, cool in an Gigabit network

Duplex: Half

The first thing I tried was to restart my management network via the menu but this time it doesn’t helped. So I tried my luck in the support console by typing esxcfg-nics -a vmnic0.

The result was that my Server was reachable again and the values of the network connection were back to normal.

To automate this action I wrote a little Python Script which detects these abnormal values and resets them to normal by executing esxcfg-nics –a <interface>.

All I had to do is to place the script on the ESXi Server in a directory which is not deleted or overwritten if the server gets restarted and to add it as a cronjob which is executed every 30minutes.

In my case I placed the Script on the VMFS-Data storage.

The only thing which is left to do is to save the cronjobs so that they were persistent even if I reboot the Server. But I didn’t figured this out how to do it.

The Script is available here to Download: nic_check.py

ESXi Netzwerkverbindung mit 65535Mbps [gelöst]

Bei meinem ESXi Server hatte ich das Problem das er nach ein paar Tagen nicht mehr erreichbar war.

Der Server selbst und die VMs waren aber nicht betroffen. Kein Absturz oder sowas.

Als ich mit der Support Konsole mir das Problem näher angesehn habe, musste ich feststellen dass mein Netzwerkadapter für das Management etwas komische Werte hatte.

Link: Up <- auch bei abgezogenen Netzwerkkabel ?

Linkspeed: 65535Mbs <- bei einem Gigabit Netzwerk ?

Duplex: Half

Da ein neustart des Management Netzwerks nichts gebracht hat versuchte ich mein Glück mit esxcfg-nics -a vmnic0.

Das resultat war das die werte wieder korrekt waren und der Server wieder mit dem vSphere Client erreichbar war.

Damit ich nicht immer zum Server hinrennen muss hab ich ein kleines Python Script geschrieben das dass Management Netzwerk automatisch wieder zurechtrückt.

Das Script: nic_check.py
Viel Spaß

ESXi 4.0 Disaster recovery

Einer der Schlimmsten Fälle ist wenn das Virtualisierte Produktivsystem einem im stich lässt.

Hier der Problemfall:

Aufgrund eines Systemfehlers wird der Datastorage auf dem die virtuellen Maschinen liegen nicht mehr erkannt und im vSphere Client wird dieser beim versuch ihn hinzuzufügen als leer dargestellt.

Lösungsansatz:

Da die Partition (Datastorage) mit den virtuellen Maschinen ein für Windows unbekanntes Dateisystem (vmfs) ist, entfällt die Möglichkeit die Daten über diesen Weg zu sichern.

Für Linux ist das VMFS-Dateisystem zwar auch nicht von haus aus lesbar, aber es gibt die so genannten vmfs-tools bei einigen Distributionen direkt im Repository um genau dies zu ermöglichen.

Für die Rettung der Maschinen empfehle ich die Debian 6 Distribution, da diese ausreichend getestete und stabile Pakete im Repository hat.

Nun aber auf zur Rettung der VMs:

  • ESXi System herunterfahren (sofern nicht schon geschen)
  • Eine zusätzliche Festplatte in das System einbauen

Die Festplatte sollte groß genug sein um die virtuellen Maschinen aufzunehmen!

  • Debian 6 mit SSH aber ohne Desktop auf der neuen Festplatte installieren
  • Als root anmelden und die vmfs-tools installieren. (apt-get install vmfs-tools)
  • Mit fdisk -l sich die Partitionen anzeigen lassen
    • Beispiel: VMFS Partition ist /dev/sda3
  • Mounten der VMFS Partition mit vmfs-fuse
    • zuerst modprobe fuse ausführen
    • Mountpoint in /media erstellen
    • Partition mounten
      vmfs-fuse /dev/sda3 /media/<mountpoint>

Wenn die Partition erfolgreich eingebunden wurde kann man jetzt die virtuellen Maschinen einfach auf die Linuxpartition kopieren.

Um die so gesicherten VMs direkt auf einen neuen ESXi Server (4.1) zu kopieren, aktiviert dessen SSH zugriff in den Troubleshoot Options.

Kopiert jetzt die gesicherten VMs mit Hilfe von scp auf den neuen ESXi.
scp -r <VM_directory> root@<your_ESXi_Server_IP>:/vmfs/volumes/<DataStorageName>

Im nächsten Schritt muss man die so auf den ESXi kopierten VMs mit Hilfe des vSphere Clients einbinden um diese starten zu können.

  1. Starten Sie den vSphere Client und melden sich am ESXi als root an
  2. Öffnen Sie in der Übersicht der Bestandsliste das Kontextmenü des Datenspeichers auf den Sie die VMs kopiert haben und wählen Sie den Punkt „Datenspeicher durchsuchen…“ aus.
  3. Navigieren Sie nun zu einer der kopierten VMs und öffnen den Ordner
  4. Öffnen Sie das Kontextmenü der .vmx Datei und wählen den Punkt „Zur Bestandsliste hinzufügen“ aus

ESXi 4: SSH und SNMP

SSH

Um beim VMWare ESXi 4 Server die SSH Konsole zu aktivieren gehen Sie wie folg vor:

  • Drücken Sie in der Konsole [ALT]+[F1]
  • Geben Sie unsupported ein und drücken Sie [ENTER]
  • Geben Sie das Passwort des Benutzers „root“ ein um sich einzuloggen
  • Wechseln Sie in das Verzeichnis /etc und öffnen Sie mit „vi inetd.conf“ die Konfigurationsdatei für den Start der Dienste.
  • Scrollen Sie nach unten bis Sie einen Eintrag finden der mit #SSH beginnt und löschen das führende „#“ mit drücken der [ENTF]-Taste.
  • Um die Datei abzuspeichern Drücken Sie zunächst [ESC] und geben dann „:wq“ ein. Bestätigen Sie die Eingabe mit [ENTER] und die Datei wird gespeichert.

Um den SSH Zugang zu aktivieren muss der INETD-Superserver neu gestartet werden. Dazu können Sie den ESXi entweder neu Starten oder den inetd Daemon selbst neu starten um eventuell laufende VMs nicht beenden zu müssen. Gehen Sie dazu wie folgt vor:

  • Geben Sie in der Konsole „ps | grep inetd“ ein

Die Ausgabe sollte folgendermaßen aussehen:
"4864 4864 busybox inetd" (Die Ziffern können abweichen)

  • Geben Sie jetzt in der Konsole „kill 4864“ ein um den Daemon „abzuwürgen“
  • Um den Daemon neu zu starten geben Sie einfach „inetd“ ein

SNMP

Um SNMP zu aktivieren wechseln Sie zunächst in das Verzeichnis /etc/vmware und öffnen die Datei „snmp.xml“ mit Hilfe des „vi„.

Die Datei sollte „unkonfiguriert“ wie folgt aussehen:

<config><snmpSettings><enable>false</enable><communities></communities><targets></targets></snmpSettings></config>

Ersetzen Sie „false“ gegen „true“ und tragen sie direkt hinter <communities> "public" ein.

Jetzt sollte die Datei wie folgt aussehen:

<config><snmpSettings><enable>true</enable><communities>public</communities><targets></targets></snmpSettings></config>

Zum Schluss müssen die Dienste neu gestartet werden, um dies zu erreichen geben Sie „services.sh restart“ in der Konsole ein.