Fortgeschrittene Netzwerk-Konfiguration und Problemlösung [3]

netstat – Informationen über Netzwerkverbindungen

# netstat
Proto RefCnt Flags Type State I-Node PID/Program name Path
unix 1 [ N ] StrEAM CONNECTED 2675 - @000004b8
unix 1 [ N ] StrEAM CONNECTED 2271 394/netscape @000003ee
unix 1 [ ] StrEAM CONNECTED 623 360/kpanel @000000bf

netstat Optionen

-a | --all = Infos über alle Sockets anzeigen, auch der Sockets im Listening-Zustand

-i | --interface = Liste aller Netzwerkinterfaces anzeigen

-c | --continuous = Ausgabe wird jede Sekunde aktualisiert

-n | --numeric = Numerische Werte für Ports/IP-Adresse (keine Namensauflösung)

-o = Display timer states, expiration times and backoff state.

-r | --route = Ausgabe Routing table

-t | --tcp = Nur TCP-Verbindungen anzeigen

-u | --udp = Nur UDP-Verbindungen anzeigen

-l | --listening = Nur "listening" Ports anzeigen

-C | --cache = Ausgabe des Caches (Bsp. netstart -C -r)

-w = Display information about raw sockets.

-x = Display information about UNIX domain sockets.

netstat Flags

Route-Flags

U = Route ist up (aktiv)

G = Ziel ist ein Gateway

H = Ziel ist ein Host

R = Route wird bei TimeOut reaktiviert


Interface-Flags

Iface = Name des Interface.

MTU = Max. Größe der Pakete

RX-OK = Fehlerfrei empfangene Pakete

RX-ERR = Fehlerhaft empfangene Pakete

RX-DRP = Empfangene Pakete, die verworfen wurden

RX-OVR = packets that we were unable to receive that fast way

TX-OK = Fehlerfrei gesendete Pakete

TX-ERR = Fehlerhaft gesendete Pakete

TX-DRP = Gesendete Pakete, die verworfen wurden

TX-OVR = packets that we were unable to transmit


A = Interface empfängt Multicast-Pakete

B = Interface empfängt Broadcast-Pakete

D = Debugging ist aktiviert

M = Alle Pakete "lauschen" / Empfangen (Promisc-Mode).

N = Pakete ohne Trailer senden

O = ARP ist deaktiviert

P = Interface ist Point-to-Point Verbindung

R = Interface is running (im Betrieb).

U = Interface is up (aktiv).

ping

Ping ist ein Befehl, der über das Protokoll 'icmp' einen Host anspricht. Es wird ein ICMP-Paket des Typs ECHO_REQUEST geschickt und sollte der Ziel-Host erreichbar sein, schickt dieser ein ECHO_REPLY zurück.


icmp_seq = Durchnummerierung der Pakete

ttl = Time-To-Live, nach jeder Weiterleitung wird die Zahl um 1 heruntergesetzt. Wenn 0, wird es verworfen

time = Übertragungsdauer in ms.

rtt min / avg / max / mdev = Durchschnitt von min. / durchschnittliche / max. Zeit und die mittlere Abweichung.


-b = Ping an eine Broadcastadresse

-c ANZAHL = Anzahl der gesendeten Pakete

-f = Flood ping, soviele Pings wie möglich pro Zeiteinheit

-i INTERVALL = Wartezeit zwischen den Paketen in Sek.

-I INTERFACE = Ping über bestimmtes Interface

-l ANZAHL = Anzahl von Paketen senden, ohne auf eine Antwort zu warten

-n = Keine Namensauflösung

-q = Nur die Zusammenfassungszeilen anzeigen

-s PAKET-Größe = Die Größe des zu sendenden Pakets in Bytes

-t TTL = Time To Live festlegen

-w TIMEOUT = Dauer der Prüfung in Sekunden

-W TIMEOUT = Maximale Wartezeit auf ein Paket


ICMP-Pakete zu empfangen kann in /proc/sys/net/ipv4 deaktiviert werden.

Tcpdump – Fehleranalyse

tcpdump loggt den Netzwerkverkehr mit.


tcpdump -i eth0 = tcpdump lauscht auf Interface eth0


Optionen

-p = Kein Promiscuous-Mode (mehrere tcpdump Aufrufe pro Device möglich)
-w DATEI = Mitgelesene Pakete in Binär-Datei schreiben

-r DATEI = Lesen aus Binärdatei

-a = Netzwerk- und Broadcastadressen in Namen umwandeln

-c ZAHL = Nach angegebener Zahl von Paketen wird Lauschen beendet

-i INTERFACE = Lauschen über angegebene Schnittstelle

-n = Keine Namensauflösung

-v = Verbose, gesprächig


Filter – Welche Pakete werden mitgeloggt?

dst host HOST = Mitloggen von Paketen, die den HOST im Destination-Field haben

src host HOST = Mitloggen von Paketen, die den HOST im Source-Field haben
host HOST = Entweder SOURCE oder DESTINATION enthält den Host.

dst net NETZ = Filtern nach Zielnetzwerk (Destination Address)

src net NETZ = Filtern nach Absende-Netzwerk (Source Address)

net NETZ = Absender- / Zielnetzwerk liegt im angegebenen Netz

net NETZ mask NETZMASKE = Adresse passt zum Netz mit entsprechender Subnetzmaske

dst port PORT = Das Paket hat diesen Zielport

src port PORT = Das Paket hat diesen Absenderport

port PORT = Paket hat diesen Absender- oder Zielport

less LÄNGE = Das Paket ist kleiner oder gleich LÄNGE (auch len <= LÄNGE)

greater LÄNGE = Das Paket ist größer oder gleich LÄNGE (auch len >= LÄNGE)

ip proto PROTOKOLL = Kann sein: icmp, icmp6, igmp, igrp, pim, ah, esp, vrrp, udp, tcp

ip broadcast = IPv4 Broadcast Paket

tcp, udp, icmp = Kurzform für ip proto PROTOKOLL

lsof – Zugriffe auf gemountete Laufwerke anzeigen

lsof /media/cdrom = List Open Files
lsof -i = Zeigt nur über das Netzwerk geöffnete Dateien an

nc – Ein- / Ausgabekanäle eines Programms

nc baut einen TCP-Kanal zum angegebenen Port auf. Alle Eingaben gehen nun über diesen Kanal und erscheint auf dem Zielrechner auf der Standardausgabe.


# Zielhost Port

nc 192.168.0.5 2356


Der Zielhost muss sich um „Listen-Modus“ befinden:


# Listen-Modus aktivieren

nc -l -p 2356

OpenVPN – Virtuelle Private Netzwerke (VPN)

Grundlagen
- VPN wird eingesetzt, wenn über unsichere Netze (WLAN, Internet, etc) kommuniziert werden soll
- Verbindungen werden mittels SSL verschlüsselt

- Als Transport-Protokoll kann UDP und TCP dienen
- Grundlage: 1.) Sichere Authentifizierung der Verbindungspartner 2.) Sichere Verschlüsselung der Verbindung selbst.
- Wird bsp. genutzt bei Verbindung zweier Netzwerke oder Außendienstmitarbeitern in das Firmennetzwerk.

Verbindungsmöglichkeiten Client – Server
- Die VPN-Software erzeugt auf dem Client und Server ein virtuelles Netzwerkinterface

1.) Bridging
- Netzwerk-Device lautet tap0, tap1, usw.
- Mehrere Clients können sich mit dem Server verbinden
- Jeder Client erhält eine IP-Adresse aus dem Server-Subnetz
- Clients werden „Teil“ des Server-Subnetzes
- Es funktionieren alle Protokolle (wegen Bridging)
==> Schwierig aufzusetzen, da vor dem VPN das Bridging eingerichtet werden muss

2.) Routing
- Netzwerk-Device kautet tun0, tun1, usw.
- Client befindet sich im eigenen Subnetz
- Auf dem Server und dem Client werden Routen durch die VPN-Software erzeugt
- IP-Broadcasts werden nicht geroutet
- Es funktionieren nicht alle Protokolle
==> Einfacher zu konfigurieren, beschränkte Funktionalität

nAuthentifizierung
1.) Pre-Shared Key

Statischer Schlüssel, der allen Clients bekannt sein muss.
==> Einfache Konfiguration, höheres Risiko (Bei Bekanntwerden des Keys müssen alle Clients umkonfiguriert werden)

2.) Zertifikate
Verbindungsaufbau erfolgt per TLS. Jeder Client hat eigenes, individuelles Zertifikat.
==> Sicherer, da kein globaler Schlüssel verteilt wird


Beispiel: Routing-VPN mit Pre-Shared-Key Authentifizierung
Auf dem Client wird die Konfigurationsdatei /etc/openvpn/client.conf benötigt:

# /etc/openvpn/client.conf
# Virtuelle Netzwerkinterfaces als tun0, tun1, etc anlegen
dev tun
# IP-Adresse des VPN-Servers
remote 192.168.111.1
# 10.1.0.2 = lokale Adresse für das VPN-Interface
# 10.1.0.1 = Adresse des Verbindungspartner
ifconfig 10.1.0.2 10.1.0.1
# Das Skript /etc/openvpn/home.up setzt die Routen
up ./home.up
# Der gemeinsame Key ist in static.key
secret static.key
# UID / GID werden nach Initialisierung auf nobody gesetzt
user nobody
group nobody

Die Routen werden in home.up definiert:

# /etc/openvpn/home.up auf dem Client
#!/bin/bash
# $5 ersetzt VPN auto. mit der Adresse des lokalen VPN-Adapter
route add -net 10.0.0.0 netmask 255.255.255.0 gw $5

Erstellen des gemeinsam verwendeten Schlüssels auf dem Server. Dieser muss auf dem Client kopiert werden:


openvpn –genkey –secret static.key


Auf dem Server wird die Konfigurationsdatei /etc/openvpn/server.conf erstellt. Der Unterschied zur client.conf liegt darin, dass keine Client-Ip-Adresse angegeben wird:

# /etc/openvpn/server.conf
dev tun
ifconfig 10.1.0.2 10.1.0.1
up ./office.up
secret static.key
user nobody
group nobody

Beispiel: Bridge-VPN mit Authentifizierung via Zertifikaten

Bridge erzeugen:

openvpn –mktun –dev tap0

brctl addbr br0

brctl addif br0 eth0

brctl addif br0 tap0

ifconfig tap0 0.0.0.0 promisc up

ifconfig eth0 0.0.0.0 promisc up

ifconfig br0 10.1.0.2 broadmask 255.255.255.0 netmask 10.1.0.255


VPN auf dem Server einrichten

# /etc/openvpn/server.conf
# lokale Adresse, auf welcher der VPN hört
local 192.168.111.5
# tcp oder udp?
proto udp
dev tap0
# Bridge-Parameter
# Eigene IP 10.1.0.4
# Client erhält IP-adresse aus 10.1.0.40-80
server-bridge 10.1.0.4 255.255.255.0 10.1.0.40 10.1.0.80
# Zertifikate
ca ca.crt
cert server.crt
key server.key
# Diffie-Hellman-Parameter
dh dh1024.pem
# Zuordnung von IP-Adressen speichern
ifconfig-pool-persist ip-adresses.txt
# Setzen von Routen
push "route 192.168.111.0 255.255.255.0"
# Default-Route
push "redirect-gateway"
# Verschlüsselungsalgorithmus
cipher BF-CBC
user nobody
group nobody

Erstellen der Zertifikaten

Die Skripte zum Erzeugen von Zertifikaten befinden sich in /usr/share/doc/packages/openvpn/easy-rsa oder /usr/share/doc/openvpn/easy-rsa.


1.) In vars die Einstellungen (Land, Organisation, etc) anpassen
2.) Zertifikate erstellen:
linux: /usr/share/doc/packages/openvpn/easy-rsa #
./vars

linux: /usr/share/doc/packages/openvpn/easy-rsa # ./clean-all

linux: /usr/share/doc/packages/openvpn/easy-rsa # ./build-ca

3.) Zertifikate & Schlüssel für Server erstellen
linux: /usr/share/doc/packages/openvpn/easy-rsa #
./build-key-server server
==> ca.crt (Certifcate Authority, Zertifikat) auf Server und ALLEN Clients kopieren
==>
ca.key (Schlüssel) nur auf Server kopieren.
==>
server.crt (Zertifikat) auf VPN-Gateway kopieren
==>
server.key (Schlüssel) auf VPN-Gateway kopieren
4.) Für jeden Client Zertifikat erstellen:

linux: /usr/share/doc/packages/openvpn/easy-rsa # ./build-key client001

==> client.crt auf den Client kopieren
==>
client.key auf den Client kopieren
5.) Diffie-Hellmann-Paramater erstellen
openssl dhparam -out dh1024.pem 1024


VPN auf dem Client einrichten

client 
dev tap

proto udp
dev tap0
# IP-Adresse und Port des VPN-Gateways
remote 10.1.0.4 1195
# Zeiter VPN-Gateway als Alternative
# remote random = dynamische Lastverteilung
remote 10.2.0.5 1195

# Zertifikate
ca ca.crt
cert client.crt
cipher BF-CBC
user nobody
group nobody