Teil 1 – Einleitung & Vorbereitung – Der perfekte ISPConfig Multi-Server mit Web-, Mail-, Datenbank-, NS1- und NS2- Server

Die perfekte ISPConfig Multi-Server Anleitung auf Ubuntu 16.04 mit Dediziertem Web-, Mail-, NS1-, NS2-, Datenbank-Server

Auf dieser Seite befindet sich die Einleitung mit ersten Schritten die Ihr auf allen Servern schon mal installieren / vorbereiten könnt. Die Anleitung ist nach bestem Wissen erstellt. Jedoch übernehme ich keinerlei Haftung. Die Digital Ocean Server habe ich alle selber aus eigener Tasche bezahlt. Alle erwähnten Marken-Name dienen hier nur der Veranschaulichung. Solltet Ihr einen der Digital Ocean Links in dieser Anleitung klicken, und da was bestellen, erhalte ich eine Gutschrift auf Basis deren Affiliate Programmes. Diese Anleitung kann auf Ubuntu 16.04 Servern anderer Anbieter genau so übernommen werden.

  1. Einleitung & Vorbereitung der ISPConfig Multi Server
  2. ISPConfig Web Server installieren
  3. ISPConfig NS1 DNS Server installieren
  4. ISPConfig NS2 DNS Server installieren
  5. ISPConfig MariaDB Datenbank Server installieren
  6. ISPConfig Mail Server installieren

Auf dieser Seite wird behandelt:

Prologue / Einleitung

In dieser Anleitung will ich euch zeigen, wie Ihr mit ISPConfig ein Multi Server Cluster mit dedizierten Ubuntu 16.04 Servern für Web- und File- Server, Datenbank Server, Mail Server, primären (NS1) und sekundärem (NS2) DNS Servern installiert. Natürlich kann man alle Dienste auch direkt in einem einzigen Server unterbringen (bis auf NS2), jedoch hat ein Multi Server Setup den Vorteil, dass man Ressourcen sehr viel dynamischer anpassen kann. Sollte eine der Maschinen vor Überlastung fast kochen, so kann man bei Digital Ocean (und anderen VPS Anbietern auch) genau diesem Server etwas mehr Ram & CPU Power dazu schalten. Sollten etwas weniger Ressourcen benötigt werden, so kann man auch wieder etwas runter regulieren. Ganz dynamisch halt.

In dieser Anleitung werde ich fünf unterschiedliche Digital Ocean Server mit externen und internen (Private Networking) IP Adressen konfigurieren. Die Server sollen und werden dabei untereinander nur über die Internen IP Adressen kommunizieren. Die Kommunikation der Server untereinander erfolgt dabei nur intern im selben Netzwerk und vermeidet unnötige Kommunikation nach außen. Dies bedeutet ebenfalls einen enormen Performance Vorteil weil das interne Netzwerk in der Regel wesentlich höhere Bandbreiten bereit hält und die Latenzzeiten wesentlich geringer sind. Dienste wie phpMyAdmin, Roundcube, Mail Server (Postfix & Dovecot), Apache2 Web Server und PureFTPD Server bleiben weiterhin auch von außen erreichbar.

Hier einmal eine Übersicht der Server die Ich dazu erstellt habe. Bitte beachtet, dass die Auswahl der Server im Bezug auf RAM / CPU nicht geeignet ist um darauf Kunden zu hosten. Die Server, insbesondere der Mail Server, wird bei den ersten E-Mails ganz sicher schon in die Knie gehen. Aber für den Anfang, zum “spielen & probieren” reicht es aus.

Roundcube und phpMyAdmin werden, mit gültigem Let‘s Encrypt Zertifikat per https, auf dem Master Server ausgeliefert und agieren nur als Web-Clients, welche sich dann nur auf dem Datenbank Server, bzw. Mail Server anmelden und Daten abrufen, bzw. abspeichern. Damit Postfix und Dovecot ein gültiges SSL Zertifikat zur Transportverschlüsselung ausliefert, wird auf dem Mail Server ebenfalls Let‘s Encrypt installiert und konfiguriert.

Um einen Überblick über die Passwörter und IP Adressen zu behalten, habe ich mir Hilfsweise eine Tabelle erstellt, welche auch direkt verrät in welcher Reihenfolge die Server installiert werden. Bitte denkt daran, dass ich in dieser Anleitung meine eigene Domain und die von Digital Ocean erhaltenen IP Adressen verwenden werde. Ich denke nicht erwähnen zu müssen, dass Ihr die IP‘s und Domains & Subdomains an euren Bedarf anpassen solltet. IP EXT steht hierbei für die externe IP, IP INT ist die interne IP Adresse der Server. Pro Server werde zwei Passwörter benötigt. Eins für den Root login und eins für den MySQL Root user. Ich hoffe ich kann Zusammenhänge leichter erkennbar machen, indem ich in dieser Anleitung echte Daten, echte Domains und echte IP Adressen verwende.

## Master ##
HOST: host.ispconfig-server.space
IP EXT:165.227.152.75
IP INT: 10.135.53.63
Root:69XallowXFACTORSXhappenX35
DB Root:33XthingXHEALTHXcakeX42
## NS1 ##
HOST: ns1.ispconfig-server.space
IP EXT: 138.68.100.36
IP INT: 10.135.50.182
Root:41XcauseXALWAYSXlaborX33
DB Root:20XduringXPLAINSXwindowX52
## NS2 ##
HOST: ns2.ispconfig-server.space
IP EXT: 46.101.150.61
IP INT: 10.135.14.243
Root:96XenergyXEXERCISEXstrongX71
DB Root:92XkeptXQUITEXcontrolX01
## DB Server ##
HOST: db.ispconfig-server.space
IP EXT: 46.101.142.124
IP INT: 10.135.49.117
Root:46XlendXMAJORXfromX81
DB Root:90XbookXFORESTXpaidX86
## Mail Server ##
HOST: mx.ispconfig-server.space
IP EXT: 46.101.132.69
IP INT: 10.135.1.181
Root:50XmakeXBLOWXtrainX86
DB Root:15XfullXROOTXplayX71

Diese Anleitung umfasst neben der Installation der Server, auch die Konfiguration einzelner Dienste (Postfix, Fail2Ban, Apache,etc). Zudem wird Apache mit Mod Pagespeed, Header, Expires und so weiter ausgestattet, damit Webseiten direkt eine sehr gute Performance haben. Ihr solltet von beginn an, direkt alle 5 Server parat haben, um zu wissen welcher Server welche interne und externe IP Adresse hat. Die IP Adressen müssen auf jedem Server in die Hosts Datei eingetragen sein, damit Abfragen der Server selbst, nur über das Interne Netzwerk erfolgen. Ebenfalls solltet Ihr euch ein paar Tassen Kaffee bereit stellen damit ihr gut versorgt seit.

Diese Anleitung habe ich mit Hilfe der Anleitung für Debian Squeeze ( Multiserver Setup With Dedicated Web, Email, DNS & MySQL Database Servers On Debian Squeeze With ISPConfig 3 ) von Till Brehm erstellt, der auch einer der Haupt-Entwickler und Gründer von ISPConfig ist. Damit es zwischen drin nicht zu Verzögerungen kommt, würde ich empfehlen, die entsprechenden DNS A Eintrage in eurem DNS zu erstellen, sobald Ihr die externen IP Adressen habt.

Beginn und Vorbereitung.

(Die folgenden Schritte, könnt ihr so direkt auf allen fünf Servern ausführen.)

Sobald die Server erreichbar sind, könnt ihr, auf allen Boxen die IP Adressen und die Domains / Subdomains für die jeweiligen anderen Server in der Hosts Datei hinterlegen. Als kurzes Beispiel, auf dem Master Server werden nur die internen IP‘s von: ns1.ispconfig-server.space, ns2.ispconfig-server.space, db.ispconfig-server.space, mx.ispconfig-server.space eingetragen. Auf NS1 nur: host.ispconfig-server.space, ns2.ispconfig-server.space, db.ispconfig-server.space, mx.ispconfig-server.space, und so weiter und so fort. Die Hosts Datei öffne ich mit:

nano /etc/hosts

Bei allen Servern trage ich also folgendes in die Hosts Datei ein. Jedoch kommentiere ich den Eintrag des jeweiligen Servers aus, weil jeder Server an sich die IP 127.0.0.1 hat.

10.135.53.63 host.ispconfig-server.space
10.135.50.182 ns1.ispconfig-server.space
10.135.14.243 ns2.ispconfig-server.space
10.135.49.117 db.ispconfig-server.space
10.135.1.181 mx.ispconfig-server.space

Damit ISPConfig ordentlich arbeiten kann, muss die dash einmal nach bash umgestellt werden. Das machen wir mit:

dpkg-reconfigure dash
Use dash as the default system shell (/bin/sh)? <== No

Anschließend werde ich die Locales mithilfe von:

dpkg-reconfigure locales

rekonfigurieren, diese Fehlermeldung zu beseitigen.

perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
	LANGUAGE = (unset),
	LC_ALL = (unset),
	LC_PAPER = "de_DE.UTF-8",
	LC_ADDRESS = "de_DE.UTF-8",
	LC_MONETARY = "de_DE.UTF-8",
	LC_NUMERIC = "de_DE.UTF-8",
	LC_TELEPHONE = "de_DE.UTF-8",
	LC_IDENTIFICATION = "de_DE.UTF-8",
	LC_MEASUREMENT = "de_DE.UTF-8",
	LC_TIME = "de_DE.UTF-8",
	LC_NAME = "de_DE.UTF-8",
	LANG = "en_US.UTF-8"
are supported and installed on your system.
perl: warning: Falling back to a fallback locale ("en_US.UTF-8").
locale: Cannot set LC_ALL to default locale: No such file or directory
/usr/bin/locale: Cannot set LC_ALL to default locale: No such file or directory

Die Abfragen beantworte ich folgendermaßen:

Locales to be generated: <== All locales
Default locale for the system enviroment: <== en_US.UTF-8

Das dauert einen Moment. Zeit für Kaffee.

Anschließend installiere ich die letzten Updates mit:

apt update && apt upgrade -y

Damit der Server selber weiß in welcher Zeitzone er sich befindet, konfiguriere ich diese einmal neu mit:

dpkg-reconfigure tzdata
Geographic area: <== Europe
Time zone: <== Berlin

In Digital Ocean habe ich als Datacenter „Frankfurt“ für alle Server ausgewählt, damit befinden sich die Server in der deutschen Zeitzone; Berlin. Damit die Uhrzeit immer synchron gehalten, und weil auf allen Servern Fail2Ban und die Ubuntu Firewall UFW gebraucht wird, installieren wir auf allen Servern einmal:

apt install ntp ntpdate fail2ban ufw -y

ISPConfig kann nicht so sehr gut mit AppArmor und deshalb stelle ich es wie folgt ab:

service apparmor stop
update-rc.d -f apparmor remove
apt remove apparmor apparmor-utils

Dann starte ich alle Maschinen einmal neu um ggf. die letzten Kernel Updates zu aktivieren.

reboot

Nach dem die Server wieder erreichbar sind, entferne ich unnötige Pakete mit:

apt autoremove -y

Auf allen Servern werde ich MariaDB als client und als Server benötigen. Deswegen installiere ich MariaDB schonmal auf allen Maschinen mit:

apt install mariadb-client mariadb-server

Um sicher zu stellen, dass ein Zugriff von Außen möglich ist, kommentiere ich „bind-address = 127.0.0.1“ in der MariaDB Konfiguration auf allen Maschinen aus.

nano /etc/mysql/mariadb.conf.d/50-server.cnf
[…]
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
# bind-address           = 127.0.0.1
[…]

Um MariaDB zu konfigurieren, führe ich ein:

mysql_secure_installation

aus, und mache folgende Angaben:

Enter current password for root (enter for none): <== Enter
Set root password? [Y/n] <== Enter
New password: <== Passwort für den DB Root des jeweiligen Servers eintragen
Re-enter new password: <== Passwort für den DB Root des jeweiligen Servers wiederholen
Remove anonymous users? [Y/n] <== Enter
Disallow root login remotely? [Y/n] <== Enter
Remove test database and access to it? <== Enter
Reload privilege tables now? [Y/n] <== Enter

Und starte MySQL einmal neu mit:

service mysql stop && service mysql start

Damit ist die Vorbereitung der Server abgeschlossen. Holt euch jetzt eine Tasse Kaffee. Weiter geht es mit dem ISPConfig Web Server installieren

Leave a Reply

Your email address will not be published. Required fields are marked *

*