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:
root@panel:~$ hostname panel root@panel:~$ 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.