> For the complete documentation index, see [llms.txt](https://docs.instantroot.de/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.instantroot.de/kvm-server/allgemein/firewall-grundlagen.md).

# Firewall-Grundlagen

Eine Firewall kontrolliert, welche Netzwerkverbindungen zu deinem KVM-Server erlaubt oder blockiert werden.

Sie ist ein wichtiger Bestandteil der Server-Sicherheit. Mit einer Firewall kannst du festlegen, welche Dienste von außen erreichbar sein dürfen und welche nicht.

### Was ist eine Firewall?

Eine Firewall ist ein Schutzsystem für Netzwerkverbindungen.

Sie prüft eingehende und ausgehende Verbindungen anhand von Regeln. Diese Regeln bestimmen, ob eine Verbindung erlaubt oder blockiert wird.

Bei einem KVM-Server geht es meistens um eingehende Verbindungen.

Beispiele:

* SSH-Zugriff auf Linux
* RDP-Zugriff auf Windows
* Webseite über HTTP oder HTTPS
* Datenbankzugriff
* Gameserver-Port
* Mailserver-Port

Ohne Firewall können Dienste erreichbar sein, die eigentlich nicht öffentlich zugänglich sein sollten.

### Warum ist eine Firewall wichtig?

Ein Server ist dauerhaft über das Internet erreichbar. Dadurch wird er regelmäßig von automatisierten Systemen gescannt.

Diese Scans suchen nach offenen Ports, unsicheren Diensten oder falsch konfigurierten Anwendungen.

Eine Firewall hilft dabei, die Angriffsfläche zu reduzieren.

Das bedeutet: Je weniger Dienste öffentlich erreichbar sind, desto weniger Möglichkeiten gibt es für Angriffe.

### Was ist ein Port?

Ein Port ist eine Nummer, über die ein bestimmter Dienst erreichbar ist.

Die IP-Adresse zeigt auf deinen Server. Der Port zeigt auf einen bestimmten Dienst auf diesem Server.

Beispiel:

| Dienst          | Standardport |
| --------------- | -----------: |
| SSH             |         `22` |
| HTTP            |         `80` |
| HTTPS           |        `443` |
| RDP             |       `3389` |
| Minecraft Java  |      `25565` |
| MySQL / MariaDB |       `3306` |
| PostgreSQL      |       `5432` |

Wenn ein Port offen ist, kann ein Dienst darüber erreichbar sein.

Wenn ein Port blockiert ist, können Verbindungen zu diesem Port nicht aufgebaut werden.

### Eingehende und ausgehende Verbindungen

Bei Firewall-Regeln unterscheidet man zwischen eingehenden und ausgehenden Verbindungen.

### Eingehende Verbindungen

Eingehende Verbindungen kommen von außen zu deinem Server.

Beispiele:

* du verbindest dich per SSH mit deinem Linux-Server
* ein Besucher ruft deine Webseite auf
* ein Spieler verbindet sich mit deinem Gameserver
* du verbindest dich per Remote Desktop mit einem Windows Server

Diese Verbindungen solltest du bewusst erlauben.

### Ausgehende Verbindungen

Ausgehende Verbindungen gehen von deinem Server ins Internet.

Beispiele:

* dein Server lädt Updates herunter
* eine Anwendung ruft eine externe API auf
* ein Mailserver versendet E-Mails
* ein Paketmanager verbindet sich mit einem Repository

Ausgehende Verbindungen werden bei vielen Standardkonfigurationen erlaubt. Trotzdem kann es sinnvoll sein, sie bei besonderen Sicherheitsanforderungen einzuschränken.

### Grundregel für Firewalls

Erlaube nur die Ports, die du wirklich brauchst.

Alles andere sollte geschlossen bleiben.

Beispiele:

* Wenn du nur eine Webseite betreibst, brauchst du meistens `80` und `443`.
* Wenn du Linux verwaltest, brauchst du SSH, meistens Port `22`.
* Wenn du Windows verwaltest, brauchst du RDP, meistens Port `3389`.
* Wenn du einen Minecraft Server betreibst, brauchst du den Minecraft-Port, meistens `25565`.

### Typische Ports

| Zweck             |    Port | Hinweis                                                |
| ----------------- | ------: | ------------------------------------------------------ |
| SSH               |    `22` | Linux-Verwaltung                                       |
| HTTP              |    `80` | unverschlüsselte Webseite                              |
| HTTPS             |   `443` | verschlüsselte Webseite                                |
| RDP               |  `3389` | Windows Remote Desktop                                 |
| Minecraft Java    | `25565` | Standardport für Minecraft Java                        |
| Minecraft Bedrock | `19132` | Standardport für Minecraft Bedrock                     |
| FTP               |    `21` | klassisches FTP, nicht empfohlen wenn SFTP möglich ist |
| SFTP              |    `22` | Dateiübertragung über SSH                              |
| MySQL / MariaDB   |  `3306` | sollte meistens nicht öffentlich offen sein            |
| PostgreSQL        |  `5432` | sollte meistens nicht öffentlich offen sein            |
| SMTP              |    `25` | Mailversand                                            |
| IMAP              |   `143` | E-Mail-Abruf unverschlüsselt                           |
| IMAPS             |   `993` | E-Mail-Abruf verschlüsselt                             |
| SMTPS             |   `465` | Mailversand verschlüsselt                              |
| Submission        |   `587` | Mailversand für Clients                                |

### Welche Ports sollte ich öffnen?

Das hängt davon ab, was auf deinem Server laufen soll.

### Linux-Server ohne Webseite

Wenn du deinen Linux-Server nur verwalten möchtest, reicht meistens:

| Zweck | Port |
| ----- | ---: |
| SSH   | `22` |

### Webseite auf Linux

Für eine normale Webseite brauchst du meistens:

| Zweck |  Port |
| ----- | ----: |
| SSH   |  `22` |
| HTTP  |  `80` |
| HTTPS | `443` |

### Windows Server

Für einen Windows Server brauchst du meistens:

| Zweck |   Port |
| ----- | -----: |
| RDP   | `3389` |

Wenn du zusätzlich eine Webseite oder Anwendung betreibst, kommen weitere Ports dazu.

### Minecraft Server

Für Minecraft Java brauchst du meistens:

| Zweck          |    Port |
| -------------- | ------: |
| Minecraft Java | `25565` |

Für Minecraft Bedrock brauchst du meistens:

| Zweck             |    Port |
| ----------------- | ------: |
| Minecraft Bedrock | `19132` |

Wenn du einen anderen Port konfiguriert hast, musst du genau diesen Port freigeben.

### Datenbankserver

Datenbankports sollten in den meisten Fällen nicht öffentlich erreichbar sein.

Dazu gehören zum Beispiel:

* MySQL / MariaDB: `3306`
* PostgreSQL: `5432`
* Redis: `6379`
* MongoDB: `27017`

Wenn eine Datenbank nur von einer Webseite auf demselben Server genutzt wird, muss der Port nicht öffentlich geöffnet werden.

### Firewall unter Linux

Unter Linux wird häufig `ufw` verwendet. UFW steht für „Uncomplicated Firewall“ und ist eine einfache Oberfläche für Firewall-Regeln.

### UFW installieren

Auf Debian oder Ubuntu kannst du UFW so installieren:

`apt update && apt install ufw -y`

### SSH erlauben

Bevor du die Firewall aktivierst, solltest du SSH erlauben. Sonst kannst du dich möglicherweise selbst aussperren.

`ufw allow 22/tcp`

Oder kürzer:

`ufw allow ssh`

### HTTP und HTTPS erlauben

Für Webseiten:

`ufw allow 80/tcp`

`ufw allow 443/tcp`

### Minecraft Java erlauben

Für Minecraft Java mit Standardport:

`ufw allow 25565/tcp`

### Minecraft Bedrock erlauben

Für Minecraft Bedrock mit Standardport:

`ufw allow 19132/udp`

Wichtig: Minecraft Bedrock nutzt in der Regel UDP.

### Firewall aktivieren

Wenn die benötigten Ports erlaubt sind, kannst du UFW aktivieren:

`ufw enable`

### Status prüfen

Mit folgendem Befehl prüfst du die aktiven Regeln:

`ufw status`

Ausführlicher:

`ufw status verbose`

### Regel entfernen

Eine Regel kannst du zum Beispiel so entfernen:

`ufw delete allow 25565/tcp`

### Wichtig bei SSH

Aktiviere die Firewall niemals, bevor SSH erlaubt ist.

Wenn du SSH blockierst, kannst du dich möglicherweise nicht mehr mit deinem Server verbinden.

In diesem Fall brauchst du die VNC-Konsole im Serverpanel, um die Firewall-Regeln zu korrigieren.

### Firewall unter Windows Server

Unter Windows Server wird die Windows Defender Firewall verwendet.

Dort kannst du festlegen, welche Programme oder Ports erreichbar sein dürfen.

### Port in Windows freigeben

1. Öffne die Windows-Suche.
2. Suche nach **Windows Defender Firewall mit erweiterter Sicherheit**.
3. Öffne den Bereich **Eingehende Regeln**.
4. Klicke auf **Neue Regel**.
5. Wähle **Port**.
6. Wähle **TCP** oder **UDP**.
7. Trage den gewünschten Port ein.
8. Wähle **Verbindung zulassen**.
9. Wähle die passenden Profile aus.
10. Vergib einen Namen für die Regel.
11. Speichere die Regel.

### TCP oder UDP?

Nicht jeder Dienst nutzt dasselbe Protokoll.

| Protokoll | Verwendung                                                                                               |
| --------- | -------------------------------------------------------------------------------------------------------- |
| TCP       | zuverlässige Verbindung, zum Beispiel SSH, HTTP, HTTPS, RDP, Minecraft Java                              |
| UDP       | schnelle Verbindung ohne feste Sitzung, zum Beispiel Minecraft Bedrock, einige Gameserver, Voice-Dienste |

Wenn du den falschen Protokolltyp freigibst, funktioniert der Dienst möglicherweise trotzdem nicht.

Beispiel:

* Minecraft Java: meistens TCP
* Minecraft Bedrock: meistens UDP

### Unterschied zwischen Dienst läuft und Port ist offen

Ein offener Port reicht nicht aus.

Damit ein Dienst erreichbar ist, müssen mehrere Dinge stimmen:

1. Der Dienst muss installiert sein.
2. Der Dienst muss gestartet sein.
3. Der Dienst muss auf dem richtigen Port lauschen.
4. Die Firewall muss den Port erlauben.
5. Die Anwendung muss korrekt konfiguriert sein.
6. Die Verbindung darf nicht durch eine weitere Firewall blockiert werden.

Wenn ein Webserver nicht läuft, hilft es nicht, Port `80` zu öffnen.

Wenn Minecraft auf Port `25570` läuft, hilft es nicht, nur Port `25565` zu öffnen.

### Port prüfen unter Linux

Du kannst prüfen, ob ein Dienst auf einem Port lauscht.

Beispiel:

`ss -tulpn`

Für einen bestimmten Port:

`ss -tulpn | grep 25565`

Wenn dort kein Dienst angezeigt wird, läuft auf diesem Port wahrscheinlich nichts.

### Firewall blockiert mich selbst

Wenn du dich nach einer Firewall-Änderung nicht mehr verbinden kannst, hast du vermutlich den Verwaltungsport blockiert.

Bei Linux betrifft das meistens SSH.

Bei Windows betrifft das meistens RDP.

Lösung:

1. Öffne das Serverpanel.
2. Starte die VNC-Konsole.
3. Melde dich direkt am Server an.
4. Prüfe die Firewall-Regeln.
5. Erlaube SSH oder RDP wieder.
6. Teste die Verbindung erneut.

### Sicherheitsregeln

Öffne Ports nur, wenn du sie wirklich brauchst.

Besonders vorsichtig solltest du bei folgenden Ports sein:

| Port    | Warum vorsichtig?                                           |
| ------- | ----------------------------------------------------------- |
| `22`    | SSH wird häufig automatisch angegriffen                     |
| `3389`  | RDP ist ein häufiges Angriffsziel                           |
| `3306`  | Datenbanken sollten selten öffentlich erreichbar sein       |
| `5432`  | PostgreSQL sollte selten öffentlich erreichbar sein         |
| `6379`  | Redis sollte nicht öffentlich erreichbar sein               |
| `27017` | MongoDB sollte nicht ungeschützt öffentlich erreichbar sein |

### Empfehlungen

* Öffne nur benötigte Ports.
* Verwende sichere Passwörter.
* Nutze SSH-Keys, wenn möglich.
* Halte dein System aktuell.
* Prüfe regelmäßig offene Ports.
* Deaktiviere Dienste, die du nicht brauchst.
* Erstelle vor größeren Änderungen ein Backup.
* Teste Firewall-Änderungen direkt nach dem Speichern.

### Häufige Probleme

#### SSH funktioniert nach Aktivierung der Firewall nicht mehr

Wahrscheinlich wurde Port `22` nicht erlaubt oder SSH läuft auf einem anderen Port.

Prüfe über die VNC-Konsole die Firewall-Regeln und erlaube den richtigen SSH-Port.

#### RDP funktioniert nicht mehr

Wahrscheinlich wurde Port `3389` blockiert oder Remote Desktop ist nicht aktiv.

Prüfe die Windows Defender Firewall über die VNC-Konsole.

#### Webseite ist nicht erreichbar

Prüfe:

* läuft der Webserver?
* sind Port `80` und `443` geöffnet?
* zeigt die Domain auf die richtige IP-Adresse?
* ist SSL korrekt eingerichtet?
* blockiert eine Firewall die Verbindung?

#### Minecraft Server ist nicht erreichbar

Prüfe:

* läuft der Minecraft Server?
* ist der richtige Port in der Minecraft-Konfiguration gesetzt?
* ist der Port in der Firewall geöffnet?
* nutzt du TCP oder UDP korrekt?
* verwendest du die richtige Serveradresse?

#### Datenbank ist nicht erreichbar

Prüfe zuerst, ob die Datenbank überhaupt öffentlich erreichbar sein soll.

In vielen Fällen sollte eine Datenbank nur lokal auf `127.0.0.1` erreichbar sein.

### Support kontaktieren

Wenn du ein Firewall-Problem nicht lösen kannst, kontaktiere den Support.

Gib dabei bitte folgende Informationen an:

* Betriebssystem
* betroffener Dienst
* betroffener Port
* verwendetes Protokoll: TCP oder UDP
* genaue Fehlermeldung
* ob der Dienst lokal läuft
* welche Firewall-Regeln gesetzt wurden
* was du bereits versucht hast

Sende niemals Passwörter, private Schlüssel oder vertrauliche Zugangsdaten an den Support.
