iptables für Minecraft Server einrichten: Komplettanleitung

iptables für Minecraft Server einrichten: Komplettanleitung

Sie haben einen VPS gemietet, Paper installiert, den Server gestartet. Freunde verbinden sich, alles laeuft. Dann findet jemand Ihre IP, und es geht los: Portscans, SSH-Brute-Force-Versuche, und eines Tages eine ausgewachsene DDoS-Attacke auf Port 25565.

Kommt Ihnen bekannt vor? Falls nicht, hatten Sie bisher Glueck. Ein offener Minecraft-Server im Internet ist ein Ziel. Bots scannen IP-Bereiche rund um die Uhr, und Ihr Server wird frueher oder spaeter gefunden. Die erste Verteidigungslinie ist eine Firewall. Unter Linux heisst das iptables.

Warum Ihr MC-Server eine Firewall braucht

Wenn Sie einen Minecraft-Server starten, lauscht er auf Port 25565 (Standard). Aber daneben sind typischerweise noch SSH (22), vielleicht ein Web-Panel (8080 oder 8443), Dynmap (8123), RCON (25575) und diverse andere Dienste offen.

Jeder offene Port ist ein potenzieller Eintrittspunkt. RCON ohne Passwort? Voller Konsolenzugriff. SSH mit root/root? Willkommen, Angreifer. Dynmap ohne Limits? Server per Request-Flut crashen.

Eine Firewall loest ein einfaches Problem: alles schliessen was nicht offen sein muss, und alles einschraenken was offen sein muss.

iptables Grundlagen

Falls Sie noch nie mit iptables gearbeitet haben, hier das Minimum an Theorie.

Tabellen und Ketten

iptables ist in Tabellen organisiert, jede Tabelle enthaelt Ketten von Regeln. Fuer den Schutz eines Minecraft-Servers interessiert uns die filter-Tabelle (Standard) mit drei Ketten:

  • INPUT - eingehender Traffic zum Server
  • OUTPUT - ausgehender Traffic vom Server
  • FORWARD - Transit-Traffic (fuer Router, normalerweise nicht noetig)

Wie Regeln funktionieren

Regeln werden von oben nach unten geprueft. Die erste zutreffende Regel wird angewendet, der Rest ignoriert. Die Reihenfolge ist entscheidend: wenn Sie zuerst allen Traffic erlauben und danach etwas blockieren, greift die Blockierung nie.

Targets (Aktionen)

  • ACCEPT - Paket durchlassen
  • DROP - stillschweigend verwerfen (Absender bekommt keine Antwort)
  • REJECT - verwerfen und ICMP-Fehler zuruecksenden
  • LOG - Paket protokollieren und an die naechste Regel weitergeben

DROP vs REJECT: fuer externe Angriffe verwenden Sie DROP (gibt dem Angreifer keine Informationen). Fuer interne Dienste ist REJECT besser (die Anwendung bekommt sofort einen Fehler statt auf einen Timeout zu warten).

Los geht's: Grundkonfiguration

Bevor Sie etwas aendern, pruefen Sie die aktuellen Regeln:

iptables -L -n -v --line-numbers

Auf einem frischen Server sehen Sie drei leere Ketten mit ACCEPT-Policy. Das bedeutet: aller Traffic geht ungehindert durch. Das aendern wir.

Schritt 1: Loopback und bestehende Verbindungen erlauben

# Traffic auf dem Loopback-Interface erlauben (localhost)
iptables -A INPUT -i lo -j ACCEPT

# Antworten auf bereits bestehende Verbindungen erlauben
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Die ESTABLISHED-Regel ist kritisch. Ohne sie kann der Server neue Verbindungen annehmen, aber keine Antworten auf eigene Anfragen empfangen (Plugin-Updates, DNS-Abfragen usw.).

Schritt 2: SSH erlauben

# SSH erlauben (Port 22)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

ACHTUNG: Diese Regel muss VOR der DROP-Policy stehen. Sonst sperren Sie sich aus. Das ist kein Witz - der haeufigste Fehler ueberhaupt. Jemand fuehrt iptables -P INPUT DROP aus und verliert sofort den SSH-Zugang. Dann hilft nur noch die VNC-Konsole des Hosters.

Falls Ihr SSH auf einem anderen Port laeuft (was es sollte), ersetzen Sie 22:

iptables -A INPUT -p tcp --dport 2222 -j ACCEPT

Schritt 3: Minecraft-Port erlauben

# Minecraft Java Edition erlauben (TCP)
iptables -A INPUT -p tcp --dport 25565 -j ACCEPT

Bei einem Bedrock-Server oder Geyser kommt UDP dazu:

# Fuer Bedrock/Geyser (UDP)
iptables -A INPUT -p udp --dport 19132 -j ACCEPT

Schritt 4: ICMP erlauben (Ping)

# Ping erlauben (mit Limit)
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s --limit-burst 4 -j ACCEPT

Ping ist nuetzlich fuer Monitoring. Ohne Limit kann es aber fuer ICMP-Flood missbraucht werden. Diese Regel erlaubt 1 Ping pro Sekunde mit einem Burst von 4 Paketen.

Schritt 5: Standard-Policy setzen

# Alles andere blockieren
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

OUTPUT bleibt auf ACCEPT, weil es keinen Grund gibt, ausgehenden Traffic eines Minecraft-Servers einzuschraenken.

Komplettes Basis-Skript

Alles zusammen:

#!/bin/bash

# Bestehende Regeln loeschen
iptables -F
iptables -X

# Loopback
iptables -A INPUT -i lo -j ACCEPT

# Bestehende Verbindungen
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# SSH
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# Minecraft
iptables -A INPUT -p tcp --dport 25565 -j ACCEPT

# ICMP mit Limit
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s --limit-burst 4 -j ACCEPT

# Standard-Policy
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

Speichern Sie das als firewall.sh, fuehren Sie chmod +x firewall.sh aus und starten Sie es. Jetzt akzeptiert Ihr Server nur SSH, Minecraft und Ping. Alles andere wird stillschweigend verworfen.

Rate Limiting: Schutz vor Ueberflutung

Grundregeln sind gut, aber nicht ausreichend. Sie muessen Verbindungsraten begrenzen, damit eine einzelne IP nicht tausende Verbindungen oeffnen kann.

SYN-Flood-Schutz

# Neue TCP-Verbindungen begrenzen
iptables -A INPUT -p tcp --syn -m limit --limit 30/s --limit-burst 50 -j ACCEPT
iptables -A INPUT -p tcp --syn -j DROP

Maximal 30 neue TCP-Verbindungen pro Sekunde mit einem Burst bis 50. Fuer einen Minecraft-Server mit 50-100 Spielern reicht das. Fuer groessere Server erhoehen Sie die Werte.

Wichtig: diese Regeln muessen VOR der Port-25565-Regel stehen. Die Reihenfolge in iptables ist entscheidend.

Verbindungslimit pro IP (connlimit)

# Maximal 3 gleichzeitige Verbindungen von einer IP auf den MC-Port
iptables -A INPUT -p tcp --dport 25565 -m connlimit --connlimit-above 3 -j REJECT --reject-with tcp-reset

Warum? Ein normaler Spieler oeffnet 1 Verbindung. Ein Bot-Angriff kann hunderte von einer IP oeffnen. Ein Limit von 3 reicht auch fuer mehrere Personen hinter einem NAT.

SSH Anti-Brute-Force

# Maximal 3 SSH-Versuche pro 60 Sekunden
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 --name SSH -j DROP

Jede neue SSH-Verbindung wird in der "SSH"-Liste erfasst. Kommen mehr als 4 Versuche von derselben IP innerhalb von 60 Sekunden, werden die restlichen geblockt.

Portscan-Schutz

Portscanning ist der erste Schritt eines jeden Angriffs. Nmap schickt Pakete an verschiedene Ports, um laufende Dienste zu entdecken. Sie koennen ihm das Leben schwer machen.

Anomale Pakete blockieren

# NULL-Pakete (Aufklaerung)
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

# XMAS-Pakete (alle Flags gesetzt)
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

# SYN-FIN (ungueltige Kombination)
iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP

# SYN-RST (ungueltige Kombination)
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP

# FIN ohne ACK (ungueltige Kombination)
iptables -A INPUT -p tcp --tcp-flags FIN,ACK FIN -j DROP

# Neue Verbindungen muessen mit SYN beginnen
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

# Fragmentierte Pakete
iptables -A INPUT -f -j DROP

Diese Flag-Kombinationen kommen im normalen TCP-Traffic nicht vor. Tools wie Nmap nutzen sie, um einfache Firewalls zu umgehen.

Komplettes Produktionsskript

Hier das vollstaendige, einsatzbereite Skript:

#!/bin/bash

# === Minecraft Server iptables Firewall ===
SSH_PORT=22
MC_PORT=25565

# Loeschen
iptables -F
iptables -X
iptables -Z

# === Basisregeln ===
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# === Anomale Pakete ===
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
iptables -A INPUT -p tcp --tcp-flags FIN,ACK FIN -j DROP
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
iptables -A INPUT -f -j DROP

# === SYN-Flood-Schutz ===
iptables -A INPUT -p tcp --syn -m limit --limit 30/s --limit-burst 50 -j ACCEPT
iptables -A INPUT -p tcp --syn -j DROP

# === SSH mit Anti-Brute-Force ===
iptables -A INPUT -p tcp --dport $SSH_PORT -m connlimit --connlimit-above 3 -j DROP
iptables -A INPUT -p tcp --dport $SSH_PORT -m state --state NEW -m recent --set --name SSH
iptables -A INPUT -p tcp --dport $SSH_PORT -m state --state NEW -m recent --update --seconds 60 --hitcount 4 --name SSH -j DROP
iptables -A INPUT -p tcp --dport $SSH_PORT -j ACCEPT

# === Minecraft ===
iptables -A INPUT -p tcp --dport $MC_PORT -m connlimit --connlimit-above 3 -j REJECT --reject-with tcp-reset
iptables -A INPUT -p tcp --dport $MC_PORT -j ACCEPT

# === ICMP ===
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s --limit-burst 4 -j ACCEPT

# === Logging + Standard-Drop ===
iptables -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables-dropped: " --log-level 4

# === Standard-Policy ===
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

echo "Firewall-Regeln angewendet."
iptables -L -n --line-numbers

Regeln speichern: iptables-persistent

Was viele vergessen: iptables-Regeln ueberleben keinen Neustart. Server geht aus, Regeln sind weg.

# iptables-persistent installieren
apt install iptables-persistent

# Aktuelle Regeln speichern
netfilter-persistent save

# Oder direkt
iptables-save > /etc/iptables/rules.v4
ip6tables-save > /etc/iptables/rules.v6

# Dienst aktivieren
systemctl enable netfilter-persistent

Pruefen Sie nach einem Neustart mit iptables -L -n --line-numbers, ob die Regeln noch da sind.

UFW: Die einfache Alternative

UFW (Uncomplicated Firewall) ist ein Wrapper um iptables mit menschenfreundlichem Interface. Wenn Sie keine feine Kontrolle brauchen, funktioniert es bestens.

# Installieren
apt install ufw

# Standard-Policy
ufw default deny incoming
ufw default allow outgoing

# SSH erlauben (MUSS vor dem Aktivieren passieren!)
ufw allow ssh

# Minecraft erlauben
ufw allow 25565/tcp

# SSH Rate Limiting
ufw limit ssh

# Aktivieren
ufw enable

# Pruefen
ufw status verbose

UFW speichert und stellt Regeln automatisch beim Neustart wieder her. Fuer einen einfachen Server reicht das.

Aber UFW hat Grenzen. connlimit, komplexe Regeln mit dem recent-Modul oder feingesteuerte Regelreihenfolgen sind nicht moeglich. Fuer fortgeschrittenen Schutz brauchen Sie nach wie vor rohes iptables.

Typische Fehler

1. DROP vor SSH-Erlaubnis

Der haeufigste und schmerzhafteste Fehler. iptables -P INPUT DROP ausfuehren und sofort den SSH-Zugang verlieren.

Sicherheitsnetz: Regeln nach 5 Minuten automatisch zuruecksetzen:

echo "iptables -F; iptables -P INPUT ACCEPT" | at now + 5 minutes

2. Falsche Regelreihenfolge

# FALSCH - zuerst alles erlauben, dann blockieren
iptables -A INPUT -j ACCEPT
iptables -A INPUT -s 1.2.3.4 -j DROP  # Greift nie

# RICHTIG - zuerst blockieren, dann erlauben
iptables -A INPUT -s 1.2.3.4 -j DROP
iptables -A INPUT -j ACCEPT

3. ESTABLISHED,RELATED vergessen

Ohne diese Regel kann der Server keine Antworten auf eigene Anfragen empfangen. Plugin-Updates, DNS, NTP - nichts funktioniert.

4. Regeln nicht gespeichert

Perfekte Firewall aufgebaut, nicht gespeichert, Server neugestartet, Regeln weg.

5. IPv6 vergessen

Wenn IPv6 auf Ihrem Server aktiv ist und Sie nur iptables (IPv4) konfiguriert haben, kann ein Angreifer Ihre Firewall komplett ueber IPv6 umgehen. Konfigurieren Sie ip6tables mit denselben Regeln oder deaktivieren Sie IPv6.

Wenn iptables nicht reicht

Seien wir ehrlich: iptables ist Basisschutz. Es schliesst Ports, begrenzt Verbindungen pro IP, blockiert einfache Angriffe und schuetzt vor Portscans.

Aber gegen eine echte DDoS-Attacke ist iptables machtlos. Wenn 10 Gbps Traffic auf Ihren Server treffen, kann die Firewall dieses Paketvolumen nicht verarbeiten. Die Leitung ist voll, bevor iptables das erste Paket sieht.

Fuer echten DDoS-Schutz brauchen Sie Filterung auf Netzwerkebene, vor Ihrem Server. Dienste wie MineGuard filtern Traffic auf ihrer eigenen Infrastruktur und leiten nur legitime Verbindungen an Sie weiter. iptables bleibt dabei eine wichtige Schicht als letzte Verteidigungslinie.

Mehr zum Verbergen Ihrer Server-IP finden Sie unter Wie man die IP des Minecraft-Servers verbirgt. Und wenn Sie den Server zuhause hosten, lesen Sie den Leitfaden zum Schutz von Heim-Servern fuer die Besonderheiten mit NAT und Routern.

Monitoring: Pruefen ob die Firewall funktioniert

# Paket-Zaehler pruefen
iptables -L -n -v

# Von einem anderen Server einen geschlossenen Port testen
nc -zv ihr-server-ip 3306    # Sollte haengen (DROP) oder ablehnen (REJECT)
nc -zv ihr-server-ip 25565   # Sollte verbinden

# Verworfene Pakete in Echtzeit beobachten
tail -f /var/log/kern.log | grep "iptables-dropped"

Checkliste vor dem Deployment

Bevor Sie Regeln auf einem Produktionsserver anwenden:

  • SSH-Regel steht VOR der DROP-Policy
  • ESTABLISHED,RELATED ist erlaubt
  • Loopback ist erlaubt
  • Minecraft-Port (25565 TCP) ist offen
  • Bedrock/Geyser UDP-Port ist offen (falls noetig)
  • Dynmap/Web-Panel-Ports sind offen mit Limits (falls noetig)
  • Regeln sind via iptables-persistent gespeichert
  • IPv6 ist konfiguriert (oder deaktiviert)
  • Sicherheitsnetz via at ist eingerichtet

Eine Firewall ist keine Loesung nach dem Prinzip "einrichten und vergessen". Pruefen Sie regelmaessig die Logs, aktualisieren Sie Regeln, fuegen Sie Blockierungen fuer neue Bedrohungen hinzu. Aber selbst die Grundkonfiguration aus diesem Artikel stoppt 90% der Angriffe, die einen durchschnittlichen Minecraft-Server treffen.

Fuer einen umfassenden Ueberblick ueber den Schutz von Minecraft-Servern schauen Sie sich unseren Einsteigerleitfaden zum Schutz von Minecraft-Servern an.


Schützen Sie Ihren Server vor DDoS-Angriffen

Kostenloser Schutz mit 5-Minuten-Einrichtung. 1 TB Traffic inklusive.

Kostenlos testen


Weitere Artikel