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