ISPConfig Perfect Multiserver Einrichtung unter Ubuntu 20.04 und Debian 10

In diesem Tutorial erfahren Sie, wie Sie Ihr eigenes ISPConfig 3-Multiserver-Setup mit dedizierten Servern für das Panel, Web, DNS, Mail und Webmail installieren. Sowohl der DNS- als auch der Mail-Server werden einen Mirror-Server für Redundanz haben. Sie können nachträglich einfach weitere Server eines bestimmten Typs hinzufügen.

Zum Einrichten der Server wird der offizielle Auto-Installer von ISPConfig verwendet. Als Betriebssystem wird Debian 10 verwendet. Die Anleitung ist auch mit Ubuntu 20.04.2 getestet worden.

Mehr über den Auto-Installer können Sie hier nachlesen.

1. Vorbemerkung

Dies werden die Hosts sein, die wir installieren werden:

host       FQDN                   IP
panel      panel.example.com      10.0.64.12
web01      web01.example.com      10.0.64.13
mx1        mx1.example.com        10.0.64.14
mx2        mx2.example.com        10.0.64.15
ns1        ns1.example.com        10.0.64.16
ns2        ns2.example.com        10.0.64.17
webmail    webmail.example.com    10.0.64.18

Wir werden Beispiel-Hostnamen, IP-Adressen und IP-Bereiche verwenden. Stellen Sie sicher, dass Sie diese in Ihren Befehlen/Konfigurationen entsprechend ändern.

Alle Server befinden sich im selben privaten Netzwerk, haben aber ihre eigene öffentliche IP. Wenn Ihre Server nicht über ein gemeinsames lokales Netzwerk verfügen, verwenden Sie ihre öffentlichen IPv4-Adressen.

Bevor Sie mit der Installation eines Servers beginnen, richten Sie einen A- und ggf. einen AAAA-Eintrag ein, der auf die öffentliche IP-Adresse Ihres Servers verweist. Wenn der Hostname z. B. panel.example.com lautet und die öffentliche IP-Adresse 11.22.33.44 ist, sollten Sie einen A-Eintrag für panel.example.com einrichten, der auf 11.22.33.44 verweist. Jeder Server sollte seine eigene öffentliche IP und seinen eigenen Hostnamen haben.

2. Installieren des Master-Servers

Melden Sie sich als root an oder führen Sie

su -

aus, um der root-Benutzer auf Ihrem Server zu werden, bevor Sie fortfahren. WICHTIG: Sie müssen ’su -‚ und nicht nur ’su‘ verwenden, sonst wird Ihre PATH-Variable von Debian falsch gesetzt.

2.1 Konfigurieren Sie den Hostnamen und die Hosts

Der Hostname Ihres Servers sollte eine Subdomain wie „panel.example.com“ sein. Verwenden Sie keinen Domain-Namen ohne Subdomain-Teil wie „example.com“ als Hostname, da dies später zu Problemen bei der Mail-Einrichtung führen wird. Zunächst sollten Sie den Hostnamen in /etc/hosts überprüfen und gegebenenfalls ändern. Die Zeile sollte lauten: „IP-Adresse – Leerzeichen – vollständiger Hostname inkl. Domain – Leerzeichen – Subdomainteil“. Für unseren Hostnamen panel.example.com soll die Datei so aussehen (einige Zeilen können anders sein, das kann je nach Hosting-Anbieter unterschiedlich sein):

nano /etc/hosts
127.0.0.1 localhost.localdomain   localhost
# This line should be changed on every node to the correct servername:
127.0.1.1 panel.example.com panel
# These lines are the same on every node:
10.0.64.12 panel.example.com panel
10.0.64.13 web01.example.com web01
10.0.64.14 mx1.example.com mx1
10.0.64.15 mx2.example.com mx2
10.0.64.16 ns1.example.com ns1
10.0.64.17 ns2.example.com ns2
10.0.64.18 webmail.example.com webmail

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Wie Sie sehen können, haben wir auch die Hostnamen unserer anderen Server hinzugefügt, damit diese später über das interne Netzwerk kommunizieren können.

Bearbeiten Sie dann die Datei /etc/hostname:

nano /etc/hostname

Sie soll in unserem Fall nur den Teil mit der Subdomain enthalten:

panel

Starten Sie schließlich den Server neu, um die Änderung zu übernehmen:

systemctl reboot

Melden Sie sich erneut an und überprüfen Sie mit diesen Befehlen, ob der Hostname jetzt korrekt ist:

hostname
hostname -f

Die Ausgabe sollte wie folgt aussehen:

[email protected]:~$ hostname
panel
[email protected]:~$ hostname -f
panel.example.com

Jetzt können wir den Auto-Installer ausführen, um alle notwendigen Pakete und ISPConfig zu installieren:

wget -O - https://get.ispconfig.org | sh -s -- --no-mail --no-dns --use-php=system

Nach einiger Zeit werden Sie sehen:

WARNING! This script will reconfigure your complete server!
It should be run on a freshly installed server and all current configuration that you have done will most likely be lost!
Type 'yes' if you really want to continue:

Antworten Sie mit „Ja“ und drücken Sie Enter. Der Installer wird nun gestartet.

Wenn der Installer fertig ist, zeigt er Ihnen das ISPConfig-Admin- und MySQL-Root-Passwort so an:

[INFO] Your ISPConfig admin password is: 5GvfSSSYsdfdYC
[INFO] Your MySQL root password is: kkAkft82d!kafMwqxdtYs

Notieren Sie sich diese Informationen zusammen mit dem Server, für den sie bestimmt sind, da Sie sie später noch benötigen.

2.2 Einrichten der Remote-MySQL-Benutzer für unsere Slave-Server

Damit sich die anderen Server während der Installation mit der ISPConfig-Datenbank auf diesem Knoten verbinden können, melden wir uns bei MySQL an, indem wir für jeden Hostnamen und jede IP-Adresse der Slave-Server MySQL-Root-Benutzereinträge in der Master-Datenbank hinzufügen.

Führen Sie auf dem Terminal aus

mysql -u root -p

Geben Sie Ihr MySQL-Passwort ein und führen Sie dann die folgenden Befehle aus:

CREATE USER 'root'@'10.0.64.13' IDENTIFIED BY 'myrootpassword';
GRANT ALL PRIVILEGES ON * . * TO 'root'@'10.0.64.13' IDENTIFIED BY 'myrootpassword' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
CREATE USER 'root'@'10.0.64.14' IDENTIFIED BY 'myrootpassword';
GRANT ALL PRIVILEGES ON * . * TO 'root'@'10.0.64.14' IDENTIFIED BY 'myrootpassword' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
CREATE USER 'root'@'10.0.64.15' IDENTIFIED BY 'myrootpassword';
GRANT ALL PRIVILEGES ON * . * TO 'root'@'10.0.64.15' IDENTIFIED BY 'myrootpassword' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
CREATE USER 'root'@'10.0.64.16' IDENTIFIED BY 'myrootpassword';
GRANT ALL PRIVILEGES ON * . * TO 'root'@'10.0.64.16' IDENTIFIED BY 'myrootpassword' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
CREATE USER 'root'@'10.0.64.17' IDENTIFIED BY 'myrootpassword';
GRANT ALL PRIVILEGES ON * . * TO 'root'@'10.0.64.17' IDENTIFIED BY 'myrootpassword' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
CREATE USER 'root'@'10.0.64.18' IDENTIFIED BY 'myrootpassword';
GRANT ALL PRIVILEGES ON * . * TO 'root'@'10.0.64.18' IDENTIFIED BY 'myrootpassword' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
CREATE USER 'root'@'web01.example.com' IDENTIFIED BY 'myrootpassword';
GRANT ALL PRIVILEGES ON * . * TO 'root'@'web01.example.com' IDENTIFIED BY 'myrootpassword' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
CREATE USER 'root'@'mx1.example.com' IDENTIFIED BY 'myrootpassword';
GRANT ALL PRIVILEGES ON * . * TO 'root'@'mx1.example.com' IDENTIFIED BY 'myrootpassword' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
CREATE USER 'root'@'mx2.example.com' IDENTIFIED BY 'myrootpassword';
GRANT ALL PRIVILEGES ON * . * TO 'root'@'mx2.example.com' IDENTIFIED BY 'myrootpassword' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
CREATE USER 'root'@'ns1.example.com' IDENTIFIED BY 'myrootpassword';
GRANT ALL PRIVILEGES ON * . * TO 'root'@'ns1.example.com' IDENTIFIED BY 'myrootpassword' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
CREATE USER 'root'@'ns2.example.com' IDENTIFIED BY 'myrootpassword';
GRANT ALL PRIVILEGES ON * . * TO 'root'@'ns2.example.com' IDENTIFIED BY 'myrootpassword' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
CREATE USER 'root'@'webmail.example.com' IDENTIFIED BY 'myrootpassword';
GRANT ALL PRIVILEGES ON * . * TO 'root'@'webmail.example.com' IDENTIFIED BY 'myrootpassword' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;

Ersetzen Sie in den obigen SQL-Befehlen die IP-Adressen(10.0.64.12 – 10.0.64.18) durch die IP-Adressen Ihrer Server, web01.example.com, mx1.example.com, mx2.example.com, ns1.example.com, ns2.example.com und webmail.example.com durch die Hostnamen Ihrer Server und myrootpassword durch das gewünschte Root-Passwort (es ist eine gute Praxis, für jeden Host ein anderes Passwort zu verwenden. Schreiben Sie sie auf, da Sie sie später bei der Installation oder Aktualisierung Ihrer Slave-Server benötigen).

Wenn dies erledigt ist, können Sie MySQL mit beenden:

EXIT;

Sie können sich nun mit dem Benutzernamen admin und dem Passwort, das Ihnen das Installationsprogramm gezeigt hat, in ISPConfig auf https://panel.example.com:8080 einloggen.

2.3 Einrichten der Firewall

Als letztes müssen Sie unsere Firewall einrichten.

Melden Sie sich in der ISPConfig-Benutzeroberfläche an und gehen Sie zu System -> Firewall. Klicken Sie dann auf „Add new firewall record“.

Für den Panel-Server müssen wir die folgenden Ports öffnen:

TCP:

22,80,443,8080,8081

Es müssen keine UDP-Ports über die UI geöffnet werden.

Wir werden auch den Port 3306 öffnen, der für MySQL verwendet wird, aber aus Sicherheitsgründen nur von unserem lokalen Netzwerk aus. Führen Sie dazu den folgenden Befehl von der CLI aus, nachdem die Änderung vom ISPConfig-Panel propagiert wurde (wenn der rote Punkt verschwunden ist):

ufw allow from 10.0.64.0/24 to any port 3306 proto tcp

Ihr Panel ist nun eingerichtet und einsatzbereit.

Im nächsten Schritt werden wir den Webserver installieren.

Das könnte dich auch interessieren …