Zum Hauptinhalt springen
Zurück zur Kategorie

Port-Weiterleitung und NAT-Konfiguration: iptables-Anleitung

NAT-Konzepte, DNAT/SNAT-Regeln, Port-Weiterleitung mit iptables und nftables, Masquerading und Anwendungsfälle: Spielserver, Webserver hinter NAT.

Lesezeit: 13 min Sicherheit
port-weiterleitungnatiptablesdnatsnatmasqueradelinuxnetzwerkkonfiguration

Inhaltsverzeichnis

Port-Weiterleitung und NAT-Konfiguration: iptables-Anleitung

Port-Weiterleitung und NAT (Network Address Translation) sind grundlegende Werkzeuge für die Verwaltung von Netzwerkverkehr. Sie verwenden diese Techniken, um Dienste hinter einem Server nach außen zu öffnen, Spielserver einzurichten oder mehrere Dienste über eine einzige IP zu verwalten.

Was ist NAT?

NAT (Network Address Translation) ist eine Netzwerktechnik, die Quell- oder Zieladressen von IP-Paketen ändert. Es gibt zwei Haupttypen:

  • SNAT (Source NAT): Ändert die Quell-IP-Adresse — für ausgehenden Verkehr
  • DNAT (Destination NAT): Ändert die Ziel-IP-Adresse — für eingehenden Verkehr
  • Masquerade: Spezieller SNAT-Typ für dynamische IPs

IP-Weiterleitung aktivieren

hljs bash
# Vorübergehend aktivieren
sudo sysctl -w net.ipv4.ip_forward=1

# Dauerhaft aktivieren
sudo nano /etc/sysctl.conf
# Zeile hinzufügen:
# net.ipv4.ip_forward=1

# Änderungen anwenden
sudo sysctl -p

# Überprüfen
cat /proc/sys/net/ipv4/ip_forward
# Ausgabe: 1

Port-Weiterleitung mit iptables (DNAT)

Grundlegende Port-Weiterleitung

hljs bash
# Externen Port 80 an internen Server weiterleiten
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.10:80

# Externen Port 443 an internen Server weiterleiten
sudo iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to-destination 192.168.1.10:443

# An andere Portnummer weiterleiten (extern 8080 → intern 80)
sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.10:80

# Weitergeleiteten Verkehr erlauben
sudo iptables -A FORWARD -p tcp -d 192.168.1.10 --dport 80 -j ACCEPT
sudo iptables -A FORWARD -p tcp -d 192.168.1.10 --dport 443 -j ACCEPT

UDP-Port-Weiterleitung

hljs bash
# UDP-Port-Weiterleitung für Spielserver
sudo iptables -t nat -A PREROUTING -p udp --dport 27015 -j DNAT --to-destination 192.168.1.30:27015
sudo iptables -A FORWARD -p udp -d 192.168.1.30 --dport 27015 -j ACCEPT

SNAT und Masquerade

hljs bash
# Masquerade — für dynamische IP
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

# SNAT — für statische IP (effizienter)
sudo iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 203.0.113.1

Vollständige NAT-Konfiguration

hljs bash
# 1. Bestehende Regeln löschen
sudo iptables -F
sudo iptables -t nat -F

# 2. Standardrichtlinien
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT

# 3. Loopback und bestehende Verbindungen
sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

# 4. SSH-Zugriff
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# 5. Port-Weiterleitungsregeln
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.10:80
sudo iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to-destination 192.168.1.10:443
sudo iptables -t nat -A PREROUTING -p udp --dport 27015 -j DNAT --to-destination 192.168.1.30:27015

# 6. Forward-Regeln
sudo iptables -A FORWARD -p tcp -d 192.168.1.10 --dport 80 -j ACCEPT
sudo iptables -A FORWARD -p tcp -d 192.168.1.10 --dport 443 -j ACCEPT
sudo iptables -A FORWARD -p udp -d 192.168.1.30 --dport 27015 -j ACCEPT

# 7. Masquerade
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

# 8. Regeln speichern
sudo apt install iptables-persistent -y
sudo netfilter-persistent save

Port-Weiterleitung mit nftables

#!/usr/sbin/nft -f

flush ruleset

table ip nat {
    chain prerouting {
        type nat hook prerouting priority -100;
        tcp dport 80 dnat to 192.168.1.10:80
        tcp dport 443 dnat to 192.168.1.10:443
        udp dport 27015 dnat to 192.168.1.30:27015
    }
    
    chain postrouting {
        type nat hook postrouting priority 100;
        oif eth0 masquerade
    }
}

table inet filter {
    chain input {
        type filter hook input priority 0; policy drop;
        iif lo accept
        ct state established,related accept
        tcp dport 22 accept
    }
    
    chain forward {
        type filter hook forward priority 0; policy drop;
        ct state established,related accept
        ip daddr 192.168.1.10 tcp dport { 80, 443 } accept
        ip daddr 192.168.1.30 udp dport 27015 accept
    }
    
    chain output {
        type filter hook output priority 0; policy accept;
    }
}

Anwendungsfälle

Anwendungsfall 1: Spielserver (CS2, Minecraft)

hljs bash
# CS2-Server
sudo iptables -t nat -A PREROUTING -p udp --dport 27015 -j DNAT --to-destination 192.168.1.30:27015
sudo iptables -t nat -A PREROUTING -p tcp --dport 27015 -j DNAT --to-destination 192.168.1.30:27015
sudo iptables -A FORWARD -d 192.168.1.30 -p udp --dport 27015 -j ACCEPT

# Minecraft-Server
sudo iptables -t nat -A PREROUTING -p tcp --dport 25565 -j DNAT --to-destination 192.168.1.31:25565
sudo iptables -A FORWARD -d 192.168.1.31 -p tcp --dport 25565 -j ACCEPT

Anwendungsfall 2: Webserver hinter NAT

hljs bash
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.10:80
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j DNAT --to-destination 192.168.1.10:443
sudo iptables -A FORWARD -i eth0 -d 192.168.1.10 -p tcp -m multiport --dports 80,443 -j ACCEPT

Fehlerbehebung

hljs bash
# NAT-Tabelle anzeigen
sudo iptables -t nat -L -n -v

# Verbindungsverfolgungstabelle anzeigen
sudo conntrack -L

# Verkehr auf bestimmtem Port überwachen
sudo tcpdump -i eth0 port 80

# IP-Weiterleitung prüfen
cat /proc/sys/net/ipv4/ip_forward

Nach dem Hinzufügen von Port-Weiterleitungsregeln vergessen Sie nicht, sowohl PREROUTING (DNAT) als auch FORWARD-Regeln hinzuzufügen. Nur eine DNAT-Regel hinzuzufügen reicht nicht aus — der Verkehr muss auch in der FORWARD-Kette erlaubt sein.

Fazit

Port-Weiterleitung und NAT sind grundlegende Komponenten der Linux-Netzwerkverwaltung. Durch die korrekte Konfiguration von DNAT-, SNAT- und Masquerade-Regeln mit iptables oder nftables können Sie Spielserver, Webdienste und andere Anwendungen hinter NAT nach außen öffnen.