Fortgeschrittene Linux-Netzwerkpraxis: OpenSSH-Tunneling, nftables-Firewalls, Kerndienste & tcpdump
Erstellt: 06.11.2026 · Zuletzt aktualisiert: 06.11.2026 · Nejat Hakan
Management Summary: Sobald physische Verbindungen und IP-Routing stehen, müssen Netzwerkperimeter gehärtet und zentrale Infrastrukturdienste aufgebaut werden. Dieser Leitfaden behandelt die kryptografische OpenSSH-Serverhärtung (
ED25519-Schlüssel,ProxyJump-Bastions und verschlüsselte Portweiterleitungen), zustandsbehaftete Paketfilterung im Linux-Kernel mittelsnftablesundufw, lokale DHCP/DNS- und mikrosekundengenaue NTP-Dienste (dnsmasq&chrony) sowie Paketanalysen auf Leitungsebene mittelstcpdumpund Berkeley Packet Filters (BPF).
-
OpenSSH-Härtung & Tunnel
Ed25519-Public-Key-Authentifizierung erzwingen, Bastion-Hosts transparent viaProxyJumptraversieren und interne Ports (-L,-R,-D) tunneln. -
Zustandsbehaftete
nftables&ufw
Pakete direkt in Kernel-Netfilter-Hooks (
prerouting,input,forward,output) mit atomarennftables-Sets und Rate-Limits filtern. -
DHCP, DNS & Chrony NTP
Automatische Subnetz-Leases und lokale Namensauflösung mit
dnsmasqbereitstellen und Systemuhren für Log-Konsistenz viachronysynchronisieren. -
Wire-Level
tcpdump-Analyse
TCP-3-Wege-Handshakes (
SYN,SYN-ACK,ACK), Verbindungsabbrüche (RST) und TLS-Handshakes mit latenzfreien BPF-Ausdrücken analysieren.
1. Kryptografische OpenSSH-Architektur, Bastions & Portweiterleitung
OpenSSH bildet die administrative Lebensader jedes Linux-Servers. Passwortbasierte SSH-Logins oder direkte root-Anmeldungen sollten niemals im öffentlichen Internet erreichbar sein.
Schritt 1: Ed25519-Schlüssel generieren & ~/.ssh/config einrichten
Elliptische Kurvenschlüssel des Typs Ed25519 (Curve25519) bieten überlegene Sicherheit, deterministische Signaturen und deutlich kompaktere Schlüsselgrößen im Vergleich zu älteren RSA-2048/4096-Schlüsseln:
# Datei: /opt/net-ops/generate_ssh_ed25519.sh
# Ed25519-Schlüsselpaar mit 100 KDF-Runden und starker Passphrase generieren
ssh-keygen -t ed25519 -a 100 -C "nejat@workstation-mint" -f ~/.ssh/id_ed25519_infra
# Öffentlichen Schlüssel auf den Ziel-Debian-Server übertragen
ssh-copy-id -i ~/.ssh/id_ed25519_infra.pub nejat@192.168.1.50
Visualisierung von SSH-Local-Port-Forwarding (-L) & Bastion-ProxyJump (-J)
Statt interne Datenbank-Ports (:5432) oder Administrations-Dashboards (:8080) an öffentlichen Schnittstellen freizugeben, binden wir sie auf dem Zielserver strikt an 127.0.0.1 und tunneln über eine verschlüsselte SSH-Verbindung:
%%{init: {'flowchart': {'wrappingWidth': 600}}}%%
flowchart TB
WORK["💻 Lokale Workstation<br/>127.0.0.1:15432<br/>(psql / DBeaver Client)"]
BAST["🏰 Bastion-Host (DMZ)<br/>203.0.113.10:22<br/>(ProxyJump -J)"]
DBSRV["🗄️ Interner DB-Server<br/>10.10.20.11:22<br/>PostgreSQL auf 127.0.0.1:5432"]
WORK ==>|"1. Verschlüsselter SSH-Tunnel<br/>ssh -J bastion -L 15432:..."| BAST
BAST ==>|"2. Weitergeleiteter Kanal"| DBSRV
# Datei: ~/.ssh/config
# Globales Connection-Multiplexing (wiederverwendet bestehenden TCP/SSH-Handshake)
Host *
ControlMaster auto
ControlPath ~/.ssh/cm-%r@%h:%p
ControlPersist 10m
ServerAliveInterval 30
ServerAliveCountMax 3
IdentitiesOnly yes
Host bastion
HostName 203.0.113.10
User nejat
Port 22
IdentityFile ~/.ssh/id_ed25519_infra
Host db-primary
HostName 10.10.20.11
User nejat
ProxyJump bastion
IdentityFile ~/.ssh/id_ed25519_infra
# Leitet lokalen Port 15432 automatisch an entferntes localhost:5432 weiter
LocalForward 127.0.0.1:15432 127.0.0.1:5432
# Datei: /etc/ssh/sshd_config.d/99-hardening.conf
PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
AuthenticationMethods publickey
# SSH-Zugang strikt auf autorisierte Administrationsbenutzer beschränken
AllowUsers nejat
# Moderne Verschlüsselungsverfahren, MACs und Schlüsselaustausch-Algorithmen
KexAlgorithms sntrup761x25519-sha512@openssh.com,curve25519-sha256
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com
X11Forwarding no
MaxAuthTries 3
LoginGraceTime 20
Syntax prüfen vor dem Neuladen: sudo sshd -t && sudo systemctl reload ssh
2. Zustandsbehaftete Linux-Firewalls: Kernel Netfilter, nftables & ufw
Unter Debian 11/12+ ist nftables das native Kernel-Paketfiltersystem. Es ersetzt ältere Werkzeuge wie iptables, ip6tables, arptables und ebtables durch eine einheitliche, performante inet-Dual-Stack-Architektur (IPv4 + IPv6).
%%{init: {'flowchart': {'wrappingWidth': 600}}}%%
flowchart TB
NIC_IN["📥 Eintreffendes Paket<br/>(NIC RX-Ring)"]
PRE["1. Prerouting-Hook<br/>(DNAT / Port-Redirection)"]
DEC{"Routing-Entscheidung<br/>Lokale IP oder Weiterleiten?"}
INP["2. Input-Hook<br/>(Lokale Host-Firewall)"]
FWD["3. Forward-Hook<br/>(Gerouteter / VM-Traffic)"]
OUT["4. Output-Hook<br/>(Lokaler App-Ausgang)"]
POST["5. Postrouting-Hook<br/>(SNAT / Masquerade)"]
NIC_IN --> PRE
PRE --> DEC
DEC -->|"Lokale IP"| INP
DEC -->|"Geroutete IP"| FWD
INP --> OUT
FWD --> POST
OUT --> POST
Produktions-Firewall-Konfigurationen (nftables vs. ufw)
#!/usr/bin/env nft -f
# Datei: /etc/nftables.conf
flush ruleset
table inet filter {
# Rate-Limited SSH-Brute-Force-Schutzmenge
set ssh_ratelimit {
type ipv4_addr
flags dynamic, timeout
timeout 1m
}
chain input {
type filter hook input priority filter; policy drop;
# 1. Loopback-Traffic und bestehende/zugehörige Verbindungen akzeptieren
iifname "lo" accept
ct state vmap { established : accept, related : accept, invalid : drop }
# 2. Essentielles ICMP und ICMPv6 Neighbor Discovery zulassen (IPv6 NDP nie blockieren!)
ip protocol icmp icmp type { echo-request, destination-unreachable, time-exceeded } limit rate 10/second accept
ip6 nexthdr icmpv6 icmpv6 type { echo-request, nd-neighbor-solicit, nd-router-advert, nd-neighbor-advert } accept
# 3. SSH (Port 22) mit Ratenbegrenzung erlauben (max. 6 neue Verbindungen/Min pro IP)
tcp dport 22 ct state new add @ssh_ratelimit { ip saddr limit rate 6/minute } accept
# 4. HTTP/HTTPS (80/443) für Web-/Reverse-Proxy-Dienste öffnen
tcp dport { 80, 443 } accept
# 5. Alles andere erfassen und verwerfen
counter drop
}
chain forward {
type filter hook forward priority filter; policy drop;
}
chain output {
type filter hook output priority filter; policy accept;
}
}
Dauerhaft aktivieren: sudo nft -c -f /etc/nftables.conf && sudo systemctl enable --now nftables
# Datei: /opt/net-ops/configure_ufw_server.sh
#!/usr/bin/env bash
set -euo pipefail
# 1. Strikte Standardrichtlinien festlegen
sudo ufw default deny incoming
sudo ufw default allow outgoing
# 2. SSH mit Ratenbegrenzung und HTTPS freigeben
sudo ufw limit 22/tcp comment 'Rate-limited OpenSSH'
sudo ufw allow 80/tcp comment 'HTTP ACME / Redirect'
sudo ufw allow 443/tcp comment 'HTTPS TLS 1.3'
sudo ufw allow 443/udp comment 'HTTP/3 QUIC'
# 3. Firewall aktivieren und Status anzeigen
sudo ufw --force enable
sudo ufw status numbered
3. Zentrale Netzwerkinfrastruktur: dnsmasq (DHCP/DNS) & chrony (NTP)
Kryptografische Zeitsynchronisation mit chrony
Eine hochpräzise Systemzeit (< 1 ms Abweichung) ist essenziell für TLS-Zertifikatsvalidierung, Kerberos- und WireGuard-Handshakes, TOTP-2FA-Codes und Transaktionsreihenfolgen in verteilten Datenbanken. Unter Debian übertrifft chrony den klassischen ntpd und unterstützt Network Time Security (NTS):
# Datei: /etc/chrony/chrony.conf
# Authentifizierte NTS-Server (Network Time Security) nutzen
server time.cloudflare.com iburst nts
server nts.netnod.se iburst nts
pool 2.debian.pool.ntp.org iburst
driftfile /var/lib/chrony/chrony.drift
ntsdumpdir /var/lib/chrony
rtcsync
makestep 1.0 3
Synchronisationsgenauigkeit im Terminal prüfen:
Leichtgewichtiger VLAN-DHCP & Split-Horizon-DNS mit dnsmasq
Für isolierte Labornetze, KVM-Management-Bridges oder kleinere Zweigstellen bietet dnsmasq einen extrem schnellen All-in-One-Server für DHCP, lokale autoritative DNS-Auflösung und PXE/TFTP:
# Datei: /etc/dnsmasq.d/10-lab-subnet.conf
# Strikt an die interne Lab-Bridge binden
interface=br-lab0
bind-interfaces
# Reine Hostnamen ohne Domainpunkt niemals an Upstream-Server weiterleiten
domain-needed
bogus-priv
domain=lab.nejat-hakan.de
local=/lab.nejat-hakan.de/
# DHCP-Vergabebereich (10.10.20.100 - 10.10.20.200, 12h Lease-Dauer)
dhcp-range=10.10.20.100,10.10.20.200,255.255.255.0,12h
dhcp-option=option:router,10.10.20.1
dhcp-option=option:dns-server,10.10.20.1
# Statische MAC-zu-IP-Reservierungen
dhcp-host=52:54:00:a1:b2:c3,db-primary,10.10.20.11,infinite
4. Paketanalyse auf Leitungsebene mit tcpdump
Wenn Firewall-Logs und Anwendungs-Fehlermeldungen widersprüchlich wirken, liefern die realen Netzwerkpakete auf der Leitung die Wahrheit. Nutzen Sie tcpdump mit -nn (keine Namensauflösung während der Aufzeichnung – verhindert DNS-Rückkopplungsschleifen!) und Berkeley Packet Filters (BPF).
%%{init: {'flowchart': {'wrappingWidth': 600}}}%%
flowchart TB
CLIENT["💻 Client-Socket<br/>(Ephemerer Port 54312)"]
SRV["🖥️ Server-Socket<br/>(Lauschender Port 443)"]
CLIENT -->|"1. [S] SYN (seq=0)"| SRV
SRV -->|"2. [S.] SYN-ACK (seq=0, ack=1)"| CLIENT
CLIENT -->|"3. [.] ACK (ack=1) -> ESTABLISHED"| SRV
Wichtige tcpdump-Befehle für die Praxis
| Diagnoseziel | Exakter tcpdump-Befehl |
Worauf in der Ausgabe zu achten ist |
|---|---|---|
HTTPS- / SSH-Handshakes prüfen (SYN / RST) |
sudo tcpdump -i eth0 -nn -c 50 'tcp port 443 and (tcp-syn\|tcp-rst) != 0' |
[S] gefolgt von [S.] = Port offen und erreichbar; [S] gefolgt von [R.] = Connection refused; [S] ohne Antwort = Firewall verwirft Pakete. |
| Fehlgeschlagene DNS-Abfragen analysieren | sudo tcpdump -i any -nn port 53 |
Prüfen, ob UDP/53-Anfragen das Interface verlassen und ob NXDOMAIN oder SERVFAIL zurückgemeldet wird. |
ICMP-Ping & Path-MTU analysieren (Frag Needed) |
sudo tcpdump -i any -nn icmp or icmp6 |
Auf Rückmeldungen wie ICMP unreachable - need to frag (mtu 1420) bei VPN/WireGuard-Strecken achten. |
| Vollständiges PCAP für Wireshark aufzeichnen | sudo tcpdump -i eth0 -nn -s 0 -w /tmp/capture.pcap 'host 10.10.20.11' |
Zeichnet vollständige Paket-Payloads (-s 0) in /tmp/capture.pcap für Offline-Analysen auf. |
Nächste Schritte
Vertiefen Sie Ihr Wissen mit komplexem Kernel-Routing, VLAN-Trunking, Netzwerk-Namespaces und KVM-Netzwerksimulationen:
-
Erweitertes Routing, VLANs & Namespaces
Policy-Based Routing, 802.1Q-VLAN-Trunks, LACP-802.3ad-Bonding, Linux-Bridges und isolierte
ip netns-Namespaces. -
KVM/QEMU-Netzwerk-Infrastrukturlabor
Geroutete Multi-VM-DMZ- und interne Servertopologien unter Debian mit KVM/QEMU und
virt-manageraufbauen. -
WireGuard Kernel-VPN-Server
Hochperformante, moderne Point-to-Point- und Road-Warrior-VPN-Tunnel mit nativer WireGuard-Kernelintegration betreiben.