ISPConfig Perfect Multiserver setup op Ubuntu 20.04 en Debian 10

Deze handleiding leidt je door de installatie van je eigen ISPConfig 3 multiserver opstelling met eigen servers voor het paneel, web, DNS, mail, en webmail. Zowel de DNS als de mailserver krijgen een spiegelserver voor redundantie. Je kunt naderhand gemakkelijk meer servers van een bepaald type toevoegen.

De officiële auto-installer van ISPConfig wordt gebruikt om de servers in te stellen. Als besturingssysteem wordt Debian 10 gebruikt. De gids is ook getest met Ubuntu 20.04.2.

Je kunt hier meer lezen over de auto-installer.

1. Voorlopige Opmerking

Dit zullen de hosts zijn die we installeren:

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

We zullen voorbeeld hostnamen, IP adressen, en IP bereiken gebruiken. Zorg ervoor dat je ze dienovereenkomstig verandert in je commando’s/configuratie.

Alle servers staan op hetzelfde privé netwerk maar hebben hun eigen publieke IP. Als je servers geen gedeeld lokaal netwerk hebben, gebruik dan hun publieke IPv4 adressen.

Zet, voordat je de installatie van een server begint, een A en eventueel AAAA record op dat naar het openbare IP adres van je server wijst. Bijvoorbeeld, als de hostnaam panel.example.com is en het publieke IP is 11.22.33.44, dan moet je een A record instellen voor panel.example.com dat naar 11.22.33.44 wijst. Elke server moet zijn eigen publieke IP en hostname hebben.

2. Installeren van de hoofdserver

Log in als root of voer

su -

om de root gebruiker op je server te worden voor je verder gaat. BELANGRIJK: Je moet ‘su -‘ gebruiken en niet gewoon ‘su’, anders wordt je PATH variabele door Debian verkeerd ingesteld.

2.1 Stel de hostnaam en hosts in

De hostnaam van je server moet een subdomein zijn zoals “panel.example.com”. Gebruik geen domeinnaam zonder subdomeindeel zoals “example.com” als hostname, want dat geeft later problemen met je mail setup. Controleer eerst de hostname in /etc/hosts en verander hem indien nodig. De regel zou moeten zijn: “IP adres – spatie – volledige hostname incl. domein – spatie – subdomein deel”. Voor onze hostname panel.example.com moet het bestand er als volgt uitzien (sommige regels kunnen anders zijn, het kan per hosting provider verschillen):

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

Zoals je ziet voegden we ook de hostnamen van onze andere servers toe, zodat ze later over het interne netwerk kunnen communiceren.

Bewerk dan het bestand /etc/hostname:

nano /etc/hostname

Het bevat alleen het subdomein gedeelte, in ons geval:

panel

Herstart tenslotte de server om de verandering toe te passen:

systemctl reboot

Log opnieuw in en controleer of de hostname nu juist is met deze commando’s:

hostname
hostname -f

De uitvoer moet er zo uitzien:

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

Nu kunnen we de auto-installer uitvoeren om alle benodigde pakketten en ISPConfig te installeren:

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

Na enige tijd zie je:

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:

Antwoord “yes” en druk op enter. Het installatieprogramma start nu.

Als de installer klaar is toont hij je het ISPConfig admin en MySQL root wachtwoord als volgt:

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

Schrijf deze gegevens zeker op, samen met de server waarvoor ze zijn, want je zult ze later nodig hebben.

2.2 Stel de externe MySQL gebruikers in voor onze slaaf-servers

We zullen ons aanmelden bij MySQL om de andere servers tijdens de installatie in staat te stellen verbinding te maken met de ISPConfig database op deze node, door MySQL root gebruikersrecords toe te voegen in de master database voor elke hostnaam en IP adres van de slave server.

Op de terminal, voer

mysql -u root -p

Voer je MySQL wachtwoord in en voer dan de volgende commando’s uit:

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 ;

Vervang in de bovenstaande SQL commando’s de IP adressen(10.0.64.12 – 10.0.64.18) door de IP adressen van je servers, web01.example.com, mx1.example.com, mx2.example.com, ns1.example.com, ns2.example.com, en webmail.example.com door de hostnamen van je servers en myrootpassword door het gewenste root wachtwoord (het is een goed gebruik om voor elke host een ander wachtwoord te gebruiken. Schrijf ze op, want je zult ze later nodig hebben bij het installeren of bijwerken van je slaveservers).

Als dit gedaan is, kun je MySQL afsluiten met:

EXIT;

Je kunt nu inloggen in ISPConfig op https://panel.example.com:8080 met de gebruikersnaam admin en het wachtwoord dat het installatieprogramma je toonde.

2.3 Instellen van de firewall

Het laatste wat we moeten doen is onze firewall instellen.

Log in op het ISPConfig UI, en ga naar Systeem -> Firewall. Klik dan op “Nieuw firewall record toevoegen”.

Voor de paneelserver moeten we de volgende poorten openen:

TCP:

22,80,443,8080,8081

Via het UI hoeven geen UDP poorten geopend te worden.

We gaan ook poort 3306 openen, die gebruikt wordt voor MySQL, maar om veiligheidsredenen alleen vanaf ons lokale netwerk. Voer daartoe het volgende commando uit vanuit de CLI, nadat de verandering uit het ISPConfig paneel is doorgevoerd (als de rode stip weg is):

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

Je paneel is nu ingesteld en klaar voor gebruik.

In de volgende stap installeren we de webserver.