Dienste an eine IP binden: Linux-Server mit mehreren IPs | INTROSERV
EUR
european

EUR

usa

USD

German De
Ex. VAT Ex. VAT 0%

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.

Info

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.

Warning

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

Info

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

Info

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

Info

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))

Warning

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 *.

Sie können auch von einem anderen Rechner aus testen:

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

VAT

  • Other

    Ex. VAT

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    22%
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • germany
  • Español
  • Italiano
  • Poland
  • Русский
  • Slovenski
  • Türkçe
  • ukraine
  • kingdom
  • French
  • Hrvatska
  • Other
  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden
  • USA