Der perfekte Server – Debian 9 (Nginx, BIND, Dovecot, ISPConfig 3.1)

Dieses Tutorial zeigt, wie man einen Debian 9-Server (mit Nginx, BIND, Dovecot) für die Installation von ISPConfig 3.1 vorbereitet und wie man ISPConfig 3.1 installiert. ISPConfig 3 ist ein Webhosting-Control Panel, mit dem Sie die folgenden Dienste über einen Webbrowser konfigurieren können: Apache oder nginx Webserver, Postfix Mailserver, Kurier- oder Dovecot IMAP/POP3-Server, MySQL, BIND oder MyDNS Nameserver, PureFTPd, SpamAssassin, ClamAV und viele mehr. Dieses Setup umfasst Nginx-Webserver, BIND als DNS-Server und Dovecot als IMAP-/POP3-Server.

1 Vorbemerkung

In diesem Tutorial verwende ich den Hostnamen server1.example.com mit der IP-Adresse 192.168.1.100 und dem Gateway 192.168.1.1.1. Diese Einstellungen können für Sie unterschiedlich sein, so dass Sie sie gegebenenfalls ersetzen müssen. Bevor Sie fortfahren können, benötigen Sie eine minimale Installation von Debian 9. Dies kann ein Debian-Minimalimage von Ihrem Hosting-Provider sein oder Sie verwenden das Tutorial Minimal Debian Server, um das Basissystem einzurichten.

2 Installieren des SSH-Servers

Wenn Sie den OpenSSH-Server während der Systeminstallation nicht installiert haben, können Sie dies jetzt tun:

apt-get -y install ssh openssh-server

Von nun an können Sie einen SSH-Client wie PuTTY verwenden und sich von Ihrer Workstation aus mit Ihrem Debian 9-Server verbinden und die restlichen Schritte dieses Tutorials ausführen.

3 Installieren Sie einen Shell-Texteditor (Optional).

Ich werde sie benutzen. Nano Texteditor in diesem Tutorial. Einige Benutzer bevorzugen den klassischen vi-Editor, daher werde ich hier beide Editoren installieren. Das Standardprogramm vi hat ein seltsames Verhalten unter Debian und Ubuntu; um dies zu beheben, installieren wir vim-nox:

apt-get -y install nano vim-nox

(Du musst das nicht tun, wenn du einen anderen Texteditor wie joe verwendest.)

4 Konfigurieren des Hostnamens

Der Hostname Ihres Servers sollte eine Subdomain wie „server1.example.com“ sein. Verwenden Sie keinen Domainnamen ohne Subdomainteil wie „example.com“ als Hostnamen, da dies später zu Problemen bei der Einrichtung Ihrer Mail führen wird. Zuerst solltest du den Hostnamen in /etc/hosts überprüfen und bei Bedarf ändern. Die Linie sollte so sein: „IP-Adresse – Space – voller Hostname inkl. Domain – Space – Subdomainteil“. Bearbeiten Sie /etc/hosts. Lass es so aussehen:

nano /etc/hosts
127.0.0.1       localhost.localdomain   localhost
192.168.1.100   server1.example.com     server1

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

Bearbeiten Sie dann die Datei /etc/hostname:

nano /etc/hostname

Sie enthält in unserem Fall nur den Teil der Subdomain:

server1

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

reboot

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

hostname
hostname -f

Die Ausgabe soll so erfolgen:

root@server1:/tmp# hostname
server1
root@server1:/tmp# hostname -f
server1.example.com

5 Aktualisieren Sie Ihre Debian-Installation

Stellen Sie zunächst sicher, dass Ihre /etc/apt/sources.list das stretch/updates-Repository enthält (so erhalten Sie immer die neuesten Updates für den ClamAV-Virenscanner – dieses Projekt veröffentlicht sehr oft Releases, und manchmal hören alte Versionen auf zu funktionieren), und dass die contrib- und non-free Repositories aktiviert sind.

nano /etc/apt/sources.list
deb http://ftp.us.debian.org/debian/ stretch main contrib non-free
deb-src http://ftp.us.debian.org/debian/ stretch main contrib non-free

deb http://security.debian.org/debian-security stretch/updates main contrib non-free
deb-src http://security.debian.org/debian-security stretch/updates main contrib non-free

WICHTIG: Fügen Sie das Debian Backports-Repository wie oben gezeigt hinzu.

Laufen

apt-get update

um die apt-Paketdatenbank zu aktualisieren und

apt-get upgrade

um die neuesten Updates zu installieren (falls vorhanden).

6 Ändern der Standardshell

/bin/sh ist ein Symlink zu /bin/dash, aber wir brauchen /bin/bash, nicht /bin/dash. Deshalb tun wir das:

dpkg-reconfigure dash

Dash als Standardsystem-Shell verwenden (/bin/sh)? <– Nein

Wenn Sie dies nicht tun, schlägt die Installation von ISPConfig fehl.

7 Synchronisieren der Systemuhr

Es ist eine gute Idee, die Systemuhr mit einem NTP-Server (Network Time Protocol) über das Internet zu synchronisieren. Einfach ausführen

apt-get install ntp

und Ihre Systemzeit wird immer synchron sein.

8 Postfix, Dovecot, MySQL, rkhunter und binutils installieren

Wir können Postfix, Dovecot, MySQL, rkhunter und Binutils mit einem einzigen Befehl installieren:

apt-get install postfix postfix-mysql postfix-doc mariadb-client mariadb-server openssl getmail4 rkhunter binutils dovecot-imapd dovecot-pop3d dovecot-mysql dovecot-sieve dovecot-lmtpd sudo

Die folgenden Fragen werden Ihnen gestellt:

Allgemeine Art der E-Mail-Konfiguration: <– Internet-Seite
Name der System-Mail: <– server1.example.com

Um die MariaDB / MySQL-Installation zu sichern und die Testdatenbank zu deaktivieren, führen Sie diesen Befehl aus:

mysql_secure_installation

Wir müssen das MySQL-Root-Passwort nicht ändern, da wir bei der Installation nur ein neues setzen. Beantworten Sie die Fragen wie folgt:

Change the root password? [Y/n] <-- y
New password: <-- Enter a new MySQL root password
Re-enter new password: <-- Repeat the MySQL root password
Remove anonymous users? [Y/n] <-- y
Disallow root login remotely? [Y/n] <-- y
Remove test database and access to it? [Y/n] <-- y
Reload privilege tables now? [Y/n] <-- y

Öffnen Sie anschließend die TLS/SSL- und Submission-Ports in Postfix:

nano /etc/postfix/master.cf

Entkommentiere die Abschnitte submission und smtps wie folgt (lass -o milter_macro_daemon_name=ORIGINATING, da wir es nicht benötigen):

[...]
submission inet n - y - - smtpd
 -o syslog_name=postfix/submission
 -o smtpd_tls_security_level=encrypt
 -o smtpd_sasl_auth_enable=yes
 -o smtpd_client_restrictions=permit_sasl_authenticated,reject
# -o smtpd_reject_unlisted_recipient=no
# -o smtpd_client_restrictions=$mua_client_restrictions
# -o smtpd_helo_restrictions=$mua_helo_restrictions
# -o smtpd_sender_restrictions=$mua_sender_restrictions
# -o smtpd_recipient_restrictions=
# -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
# -o milter_macro_daemon_name=ORIGINATING
smtps inet n - y - - smtpd
 -o syslog_name=postfix/smtps
 -o smtpd_tls_wrappermode=yes
 -o smtpd_sasl_auth_enable=yes
 -o smtpd_client_restrictions=permit_sasl_authenticated,reject
# -o smtpd_reject_unlisted_recipient=no
# -o smtpd_client_restrictions=$mua_client_restrictions
# -o smtpd_helo_restrictions=$mua_helo_restrictions
# -o smtpd_sender_restrictions=$mua_sender_restrictions
# -o smtpd_recipient_restrictions=
# -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
# -o milter_macro_daemon_name=ORIGINATING
[...]

Starten Sie Postfix anschließend neu:

service postfix restart

Wir wollen, dass MariaDB auf allen Interfaces lauscht, nicht nur auf localhost, deshalb bearbeiten wir /etc/mysql/mariadb.conf.d/50-server.cnf und kommentieren die Zeile bind-address = 127.0.0.0.1 aus und fügen die Zeile sql-mode=“NO_ENGINE_SUBSTITUTION hinzu:

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

sql-mode=“NO_ENGINE_SUBSTITUTION“

[…]

Stellen Sie die Methode zur Passwortauthentifizierung in MariaDB auf nativ, damit wir PHPMyAdmin später verwenden können, um uns als root-Benutzer zu verbinden:

echo "update mysql.user set plugin = 'mysql_native_password' where user='root';" | mysql -u root

Bearbeiten Sie die Datei /etc/mysql/debian.cnf und setzen Sie dort das MYSQL / MariaDB Root-Passwort zweimal in den Zeilen, die mit Passwort beginnen.

nano /etc/mysql/debian.cnf

Das MySQL-Root-Passwort, das hinzugefügt werden muss, ist rot dargestellt, in diesem Beispiel ist das Passwort „howtoforge“.

# Automatically generated for Debian scripts. DO NOT TOUCH!
[client]
host = localhost
user = root
password = howtoforge
socket = /var/run/mysqld/mysqld.sock
[mysql_upgrade]
host = localhost
user = root
password = howtoforge
socket = /var/run/mysqld/mysqld.sock
basedir = /usr

Um den Fehler zu vermeiden ‚Fehler bei der Annahme: Zu viele geöffnete Dateienwir werden jetzt für MariaDB höhere offene Dateigrenzen setzen.

Öffnen Sie die Datei /etc/security/limits.conf mit einem Editor:

nano /etc/security/limits.conf

und fügen Sie diese Zeilen am Ende der Datei hinzu.

mysql soft nofile 65535
mysql hard nofile 65535

Erstellen Sie anschließend ein neues Verzeichnis /etc/systemd/systemd/system/mysql.service.d/ mit dem Befehl mkdir.

mkdir -p /etc/systemd/system/mysql.service.d/

und fügen Sie eine neue Datei hinzu:

nano /etc/systemd/system/mysql.service.d/limits.conf

fügen Sie die folgenden Zeilen in diese Datei ein:

[Service]
LimitNOFILE=infinity

Speichern Sie die Datei und schließen Sie den Nano-Editor.

Dann laden wir das System neu und starten MariaDB neu:

systemctl daemon-reload
service mysql restart

Überprüfen Sie nun, ob das Netzwerk aktiviert ist. Laufen

netstat -tap | grep mysql

Die Ausgabe sollte so aussehen:

root@server1:~# netstat -tap | grep mysql
tcp6       0      0 [::]:mysql              [::]:*                  LISTEN      4027/mysqld
root@server1:~#

9 Amavisd-neu, SpamAssassin und ClamAV installieren

Um amavisd-neue, SpamAssassin und ClamAV zu installieren, führen wir aus:

apt-get install amavisd-new spamassassin clamav clamav-daemon zoo unzip bzip2 arj nomarch lzop cabextract apt-listchanges libnet-ldap-perl libauthen-sasl-perl clamav-docs daemon libio-string-perl libio-socket-ssl-perl libnet-ident-perl zip libnet-dns-perl libdbd-mysql-perl postgrey

Das ISPConfig 3-Setup verwendet eine Länderkennung, die die SpamAssassin-Filterbibliothek intern lädt, so dass wir SpamAssassin stoppen können, um etwas RAM freizugeben:

service spamassassin stop
systemctl disable spamassassin

9.1 Metronom XMPP Server installieren (optional)

In diesem Schritt wird der Metronom XMPP-Server installiert, der einen Chat-Server bereitstellt, der mit dem XMPP-Protokoll kompatibel ist. Dieser Schritt ist optional, wenn Sie keinen Chatserver benötigen, dann können Sie diesen Schritt überspringen. Keine weiteren ISPConfig-Funktionen sind von dieser Software abhängig.

Fügen Sie das Prosody-Paket-Repository in Debian hinzu.

echo "deb http://packages.prosody.im/debian stretch main" > /etc/apt/sources.list.d/metronome.list
wget http://prosody.im/files/prosody-debian-packages.key -O - | sudo apt-key add -

Aktualisieren Sie die Paketliste:

apt-get update

Installieren Sie die Programme, die für den Build-Prozess erforderlich sind.

apt-get install build-essential

und installieren Sie die Pakete mit apt.

apt-get install git lua5.1 liblua5.1-0-dev lua-filesystem libidn11-dev libssl-dev lua-zlib lua-expat lua-event lua-bitop lua-socket lua-sec luarocks luarocks
luarocks install lpc

Füge einen Shell-Benutzer für Metronom hinzu.

adduser --no-create-home --disabled-login --gecos 'Metronome' metronome

Laden Sie Metronom in das Verzeichnis /opt herunter und kompilieren Sie es.

cd /opt; git clone https://github.com/maranda/metronome.git metronome
cd ./metronome; ./configure --ostype=debian --prefix=/usr
make
make install

Das Metronom ist nun in /opt/metronome installiert.

Das könnte Dich auch interessieren …