Dienste auf Multi-IP-Servern an eine IP binden
Niveau: Fortgeschritten
Geschätzte Dauer: ca. 25 Minuten
Ziel: SSH, Nginx, Apache und MySQL/MariaDB so konfigurieren, dass sie auf einem Server mit mehreren IP-Adressen nur auf einer bestimmten IP-Adresse statt auf allen Schnittstellen lauschen.
Einführung
Wenn ein Server mehrere IP-Adressen hat, lauscht standardmäßig jeder Dienst auf allen diesen Adressen. Das ist selten gewünscht: Eine Datenbank sollte nicht über eine öffentliche IP-Adresse erreichbar sein, und ein Webserver für einen Kunden sollte nicht auf der Adresse eines anderen Kunden antworten. Eine saubere Multi-IP-Serverkonfiguration stellt sicher, dass jede Netzwerkschnittstelle den richtigen Datenverkehr verarbeitet. Das IP-Binding bietet eine genauere Zugriffskontrolle, erleichtert die Steuerung des eingehenden Datenverkehrs und verringert die Angriffsfläche. In dieser Anleitung erklären wir, wie Sie Dienste an eine IP-Adresse binden (bind service to IP address), und zwar für mehrere gängige Dienste – SSH, Nginx, Apache, MySQL/MariaDB – und wie Sie die Listen-Address-Konfiguration so optimieren, dass ausschließlich eine ausgewählte IP-Adresse verwendet wird.
Voraussetzungen
Stellen Sie vor dem Beginn sicher, dass die folgenden Bedingungen erfüllt sind:
- Betriebssystem: Ubuntu 20.04/22.04/24.04 LTS, Debian 11/12 oder CentOS/RHEL 8/9 (Wenn Sie das Service-Binding unter Ubuntu konfigurieren möchten: Die Schritte sind in allen Versionen nahezu identisch)
- Zugriff: sudo- oder root-Zugriff auf den Server
- Netzwerk: mindestens zwei auf dem Server konfigurierte IP-Adressen (Prüfung in Schritt 1)
- Erforderliche Kenntnisse: sicherer Umgang mit der Linux-Befehlszeile und grundlegende Textbearbeitung
Schritt 1: IP-Adressen ermitteln
Prüfen Sie, welche IP-Adressen dem Server zugewiesen sind:
ip -4 addr show
Erwartete Ausgabe (Beispiel):
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> ... inet 203.0.113.10/24 brd 203.0.113.255 scope global eth0 inet 198.51.100.5/24 brd 198.51.100.255 scope global eth0:1
In dieser Anleitung verwenden wir 203.0.113.10 als öffentliche IP-Adresse und 198.51.100.5 als sekundäre IP-Adresse. Ersetzen Sie sie durch Ihre tatsächlichen Adressen.
Wenn nur eine Adresse angezeigt wird, sind auf Ihrem Server noch keine mehreren IP-Adressen konfiguriert. Wenden Sie sich an Ihren Anbieter oder fügen Sie manuell eine Adresse hinzu, bevor Sie fortfahren.
Schritt 2: SSH an eine bestimmte IP-Adresse binden
Standardmäßig lauscht SSH auf 0.0.0.0 (alle Schnittstellen). So beschränken Sie den Dienst auf eine IP-Adresse und erreichen das Service-Binding unter Linux:
Sichern Sie die Konfiguration:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup
Öffnen Sie die SSH-Konfigurationsdatei:
sudo nano /etc/ssh/sshd_config
Suchen Sie die Direktive ListenAddress und legen Sie die Listen Address fest, um die Abhöradresse zu konfigurieren:
ListenAddress 203.0.113.10
Wenn ListenAddress auskommentiert ist oder fehlt, fügen Sie die Zeile an beliebiger Stelle in der Datei hinzu.
Überprüfen Sie die Konfiguration:
sudo sshd -t
Wenn keine Ausgabe erfolgt, ist die Konfiguration gültig.
Stellen Sie vor dem Neustart von SSH sicher, dass die angegebene IP-Adresse korrekt und erreichbar ist. Wenn Sie SSH an eine falsche IP-Adresse binden, sperren Sie sich selbst aus. Lassen Sie als Sicherheitsnetz eine zweite SSH-Sitzung geöffnet oder nutzen Sie den Konsolenzugriff Ihres Anbieters.
Starten Sie den Dienst neu:
sudo systemctl restart sshd
Auf manchen Systemen heißt der Dienst ssh statt sshd.
Prüfen Sie, dass SSH jetzt nur auf der angegebenen IP-Adresse lauscht:
ss -tlnp | grep sshd
Erwartete Ausgabe:
LISTEN 0 128 203.0.113.10:22 0.0.0.0:* users:(("sshd",pid=1234,fd=3))
Wenn 0.0.0.0:22 angezeigt wird, hat die Änderung nicht gegriffen. Prüfen Sie die Konfiguration auf Tippfehler oder widersprüchliche ListenAddress-Zeilen.
Schritt 3: Nginx an eine bestimmte IP-Adresse binden
Die Direktive listen legt fest, welche IP-Adresse und welchen Port Nginx verwendet. Um die Anwendung an eine IP-Adresse zu binden, müssen Sie die NGINX-Direktive listen konfigurieren.
Sichern Sie die Konfiguration:
sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.backup
Öffnen Sie Ihre Site-Konfiguration:
sudo nano /etc/nginx/sites-available/default
Unter CentOS/RHEL lautet der Standardpfad der Konfiguration /etc/nginx/conf.d/default.conf. Die Syntax ist dieselbe.
Ändern Sie die Listen-Direktive (listen) von:
listen 80; listen [::]:80;
auf:
listen 203.0.113.10:80;
Wenn Sie zusätzlich HTTPS verwenden:
listen 203.0.113.10:443 ssl;
Testen Sie die Konfiguration und laden Sie sie neu:
sudo nginx -t sudo systemctl reload nginx
Überprüfung:
ss -tlnp | grep nginx
Erwartete Ausgabe:
LISTEN 0 511 203.0.113.10:80 0.0.0.0:* users:(("nginx",pid=5678,fd=6))
Schritt 4: Apache an eine bestimmte IP-Adresse binden
Apache verwendet die Direktive Listen in der Hauptkonfiguration.
Debian/Ubuntu:
sudo cp /etc/apache2/ports.conf /etc/apache2/ports.conf.backup sudo nano /etc/apache2/ports.conf
CentOS/RHEL:
sudo cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.backup sudo nano /etc/httpd/conf/httpd.conf
Ändern Sie:
Listen 80
in:
Listen 203.0.113.10:80
Für HTTPS:
Listen 203.0.113.10:443
Passen Sie außerdem alle <VirtualHost *:80>-Blöcke an die IP-Adresse an:
<VirtualHost 203.0.113.10:80>
Testen und neu laden:
Debian/Ubuntu:
sudo apachectl configtest sudo systemctl reload apache2
CentOS/RHEL:
sudo apachectl configtest sudo systemctl reload httpd
Überprüfung:
ss -tlnp | grep -E 'apache|httpd'
Schritt 5: MySQL/MariaDB an eine bestimmte IP-Adresse binden
Standardmäßig lauscht MySQL/MariaDB auf 127.0.0.1 (nur localhost). Wenn der Dienst über eine bestimmte interne IP-Adresse erreichbar sein soll, ändern Sie bind-address, um die Anwendung an eine lokale IP-Adresse zu binden.
Debian/Ubuntu (MySQL 8.x / MariaDB 10.x):
sudo cp /etc/mysql/mysql.conf.d/mysqld.cnf /etc/mysql/mysql.conf.d/mysqld.cnf.backup sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
CentOS/RHEL (MariaDB):
sudo cp /etc/my.cnf.d/mariadb-server.cnf /etc/my.cnf.d/mariadb-server.cnf.backup sudo nano /etc/my.cnf.d/mariadb-server.cnf
Der genaue Pfad der Konfigurationsdatei variiert. Wenn die oben genannte Datei nicht existiert, suchen Sie den Abschnitt [mysqld] in /etc/my.cnf oder /etc/mysql/my.cnf.
Suchen Sie die Zeile bind-address und ändern Sie sie:
bind-address = 198.51.100.5
Starten Sie den Dienst neu:
sudo systemctl restart mysql # oder mysqld / mariadb
Überprüfung:
ss -tlnp | grep 3306
Erwartete Ausgabe:
LISTEN 0 80 198.51.100.5:3306 0.0.0.0:* users:(("mysqld",pid=9012,fd=22))
Wenn Sie bind-address von 127.0.0.1 auf eine routbare IP-Adresse ändern, stellen Sie sicher, dass eine Firewall-Regel Verbindungen nur von vertrauenswürdigen Quellen zulässt. Setzen Sie einen Datenbank-Port niemals ungeschützt dem öffentlichen Internet aus.
Überprüfung
Führen Sie nach der Konfiguration aller Dienste eine abschließende Prüfung durch:
ss -tlnp
Vergewissern Sie sich, dass jeder Dienst die vorgesehene IP-Adresse anzeigt – nicht 0.0.0.0 oder *.
ssh [email protected] # sollte funktionieren ssh [email protected] # sollte abgelehnt werden, wenn SSH an die andere IP-Adresse gebunden ist
Rollback
Um eine Änderung rückgängig zu machen, stellen Sie die gesicherte Konfiguration wieder her und starten Sie den Dienst neu.
Für SSH:
sudo cp /etc/ssh/sshd_config.backup /etc/ssh/sshd_config sudo systemctl restart sshd
Bei allen anderen Diensten machen Sie die Änderung an listen / bind-address in der jeweiligen Konfigurationsdatei rückgängig und starten den Dienst neu. Der ursprüngliche Wert ist fast immer 0.0.0.0, * oder 127.0.0.1.
Fazit
Das war's. Jeder Dienst lässt sich durch Ändern einer einzigen Direktive, einen Neustart und eine Überprüfung mit ss -tlnp einschränken.
Dokumentversion: 1.0
Zuletzt aktualisiert: April 2026
Verantwortlich: Team für technische Dokumentation