Der perfekte Server – Ubuntu 18.04 (Nginx, MySQL, PHP, Postfix, BIND, Dovecot, Pure-FTPD und ISPConfig 3.1)

Dieses Tutorial zeigt die Schritte zur Installation eines Ubuntu 18.04 (Bionic Beaver) Servers mit Nginx, PHP, MariaDB, Postfix, pure-ftpd, BIND, Dovecot und ISPConfig 3.1. ISPConfig ist ein Webhosting-Control Panel, mit dem Sie die installierten Dienste über einen Webbrowser konfigurieren können. Diese Einrichtung bietet einen vollständigen Hosting-Server mit Web-, E-Mail- (inkl. Spam- und Antivirenfilter), Datenbank-, FTP- und DNS-Diensten.

1. Vorbemerkung

In diesem Tutorial werde ich den Hostnamen server1.example.com mit der IP-Adresse 192.168.1.100 und den Gateway 192.168.1.1 für die Netzwerkkonfiguration verwenden. Diese Einstellungen können sich für Sie unterscheiden, so dass Sie sie gegebenenfalls ersetzen müssen. Bevor Sie weitermachen, benötigen Sie eine grundlegende Minimalinstallation von Ubuntu 18.04, wie in diesem Tutorial erklärt wird.

Die Schritte in diesem Tutorial müssen als root-Benutzer ausgeführt werden, daher werde ich den Befehlen nicht „sudo“ voranstellen. Entweder melden Sie sich als Root-Benutzer auf Ihrem Server an, bevor Sie fortfahren, oder Sie starten:

sudo -s

um root zu werden, wenn Sie als ein anderer Benutzer auf der Shell angemeldet sind.

Die Befehle zum Bearbeiten von Dateien verwenden den Editor „nano“, Sie können ihn durch einen Editor Ihrer Wahl ersetzen. Nano ist ein einfach zu benutzender Datei-Editor für die Shell. Wenn Sie nano verwenden möchten und ihn noch nicht installiert haben, führen Sie ihn aus:

apt-get install nano

2. Aktualisieren Sie Ihre Linux-Installation

Bearbeiten Sie /etc/apt/sources.list. Kommentieren Sie die Installations-CD aus oder entfernen Sie sie aus der Datei und stellen Sie sicher, dass das Universum und die Multiverse-Repositories aktiviert sind. Es sollte wie folgt aussehen:

nano /etc/apt/sources.list
#
# deb cdrom:[Ubuntu-Server 18.04 LTS _Bionic Beaver_ - Release amd64 (20180425.1)]/ bionic main restricted

#deb cdrom:[Ubuntu-Server 18.04 LTS _Bionic Beaver_ - Release amd64 (20180425.1)]/ bionic main restricted

# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
# newer versions of the distribution.
deb http://de.archive.ubuntu.com/ubuntu/ bionic main restricted
# deb-src http://de.archive.ubuntu.com/ubuntu/ bionic main restricted

## Major bug fix updates produced after the final release of the
## distribution.
deb http://de.archive.ubuntu.com/ubuntu/ bionic-updates main restricted
# deb-src http://de.archive.ubuntu.com/ubuntu/ bionic-updates main restricted

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team. Also, please note that software in universe WILL NOT receive any
## review or updates from the Ubuntu security team.
deb http://de.archive.ubuntu.com/ubuntu/ bionic universe
# deb-src http://de.archive.ubuntu.com/ubuntu/ bionic universe
deb http://de.archive.ubuntu.com/ubuntu/ bionic-updates universe
# deb-src http://de.archive.ubuntu.com/ubuntu/ bionic-updates universe

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
## team, and may not be under a free licence. Please satisfy yourself as to
## your rights to use the software. Also, please note that software in
## multiverse WILL NOT receive any review or updates from the Ubuntu
## security team.
deb http://de.archive.ubuntu.com/ubuntu/ bionic multiverse
# deb-src http://de.archive.ubuntu.com/ubuntu/ bionic multiverse
deb http://de.archive.ubuntu.com/ubuntu/ bionic-updates multiverse
# deb-src http://de.archive.ubuntu.com/ubuntu/ bionic-updates multiverse

## N.B. software from this repository may not have been tested as
## extensively as that contained in the main release, although it includes
## newer versions of some applications which may provide useful features.
## Also, please note that software in backports WILL NOT receive any review
## or updates from the Ubuntu security team.
deb http://de.archive.ubuntu.com/ubuntu/ bionic-backports main restricted universe multiverse
# deb-src http://de.archive.ubuntu.com/ubuntu/ bionic-backports main restricted universe multiverse

## Uncomment the following two lines to add software from Canonical's
## 'partner' repository.
## This software is not part of Ubuntu, but is offered by Canonical and the
## respective vendors as a service to Ubuntu users.
# deb http://archive.canonical.com/ubuntu bionic partner
# deb-src http://archive.canonical.com/ubuntu bionic partner

deb http://security.ubuntu.com/ubuntu bionic-security main restricted
# deb-src http://security.ubuntu.com/ubuntu bionic-security main restricted
deb http://security.ubuntu.com/ubuntu bionic-security universe
# deb-src http://security.ubuntu.com/ubuntu bionic-security universe
deb http://security.ubuntu.com/ubuntu bionic-security multiverse
# deb-src http://security.ubuntu.com/ubuntu bionic-security multiverse

Dann ausführen:

apt-get update

Um die Datenbank des apt-Pakets zu aktualisieren und dann

apt-get upgrade

um die neuesten Updates zu installieren (falls es welche gibt). Wenn Sie sehen, dass ein neuer Kernel als Teil der Aktualisierungen installiert wird, sollten Sie das System danach neu starten:

reboot

3. Ändern Sie die Standard-Shell

/bin/sh ist ein Symlink zu /bin/dash, wir benötigen jedoch /bin/bash, nicht /bin/dash. Deshalb tun wir dies:

dpkg-reconfigure dash

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

Wenn Sie dies nicht tun, wird die Installation von ISPConfig fehlschlagen.

4. AppArmor deaktivieren

AppArmor ist eine Sicherheitserweiterung (ähnlich wie SELinux), die erweiterte Sicherheit bieten soll. Wir werden überprüfen, ob sie installiert ist, und sie gegebenenfalls entfernen. Meiner Meinung nach brauchen Sie es nicht, um ein sicheres System zu konfigurieren, und es verursacht normalerweise mehr Probleme als Vorteile (denken Sie daran, nachdem Sie eine Woche lang Fehler behoben haben, weil irgendein Dienst nicht wie erwartet funktioniert hat, und dann stellen Sie fest, dass alles in Ordnung war, nur AppArmor hat das Problem verursacht). Daher deaktiviere ich es (dies ist ein Muss, wenn Sie ISPConfig später installieren wollen).

Wir können es so deaktivieren:

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

5. Synchronisieren der Systemuhr

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

apt-get -y install ntp ntpdate

und Ihre Systemzeit wird immer synchronisiert sein.

6. Postfix, Taubenschlag, MariaDB, phpMyAdmin, rkhunter, Binutils installieren

Um Postfix zu installieren, müssen wir sicherstellen, dass sendmail nicht installiert ist und läuft. Um sendmail zu stoppen und zu entfernen, führen Sie diesen Befehl aus:

service sendmail stop; update-rc.d -f sendmail remove

Die Fehlermeldung:

Failed to stop sendmail.service: Unit sendmail.service not loaded.

Ist ok, es bedeutet nur, dass sendmail nicht installiert wurde, also gab es nichts zu entfernen.

Wir können Postfix, Dovecot, MariaDB (als MySQL-Ersatz), rkhunter und binutils mit einem einzigen Befehl installieren:

apt-get -y 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

MariaDB ist eine Abspaltung des MySQL-Datenbankservers, der vom ursprünglichen MySQL-Entwickler Monty Widenius entwickelt wurde. Laut Tests, die im Internet gefunden wurden, ist MariaDB schneller als MySQL und seine Entwicklung geht mit mehr Tempo voran, daher ersetzten die meisten Linux-Distributionen MySQL durch MariaDB als standardmäßigen „MySQL-ähnlichen“ Datenbankserver. Für den Fall, dass Sie MySQL gegenüber MariaDB bevorzugen, ersetzen Sie „mariadb-client mariadb-server“ im obigen Befehl durch „mysql-client mysql-server“.

Es werden Ihnen die folgenden Fragen gestellt:

General type of mail configuration: <-- Internet Site
System mail name: <-- server1.example.com

Als nächstes öffnen Sie die TLS/SSL- und Submission-Ports in Postfix:

nano /etc/postfix/master.cf

Kommentieren Sie die Abschnitte submission und smtps wie folgt auf – fügen Sie die Zeile -o smtpd_client_restrictions=permit_sasl_authenticated hinzu, lehnen Sie beide Abschnitte ab und lassen Sie alles danach kommentiert:

[...]
submission inet n       -       -       -       -       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=permit_sasl_authenticated,reject
#  -o milter_macro_daemon_name=ORIGINATING
smtps     inet  n       -       -       -       -       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=permit_sasl_authenticated,reject
#  -o milter_macro_daemon_name=ORIGINATING
[...]

HINWEIS: Die Whitespaces vor dem „-o …. “ Zeilen sind wichtig!

Starten Sie Postfix danach neu:

service postfix restart

Wir wollen, dass MariaDB/MySQL auf allen Schnittstellen lauscht, nicht nur auf localhost. Deshalb editieren wir /etc/mysql/mariadb.conf.d/50-server.cnf (für MariaDB oder /etc/mysql/my.cnf (für MySQL) und kommentieren die Zeile bind-address = 127.0.0.1 aus:

MariaDB

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
[...]

Nun setzen wir ein root-Passwort in MariaDB. Ausführen:

mysql_secure_installation

Diese Fragen werden Ihnen gestellt:

Enter current password for root (enter for none): <-- press enter
Set root password? [Y/n] <-- y
New password: <-- Enter the new MariaDB root password here
Re-enter new password: <-- Repeat the password
Remove anonymous users? [Y/n] <-- y
Disallow root login remotely? [Y/n] <-- y
Reload privilege tables now? [Y/n] <-- y

Setzen Sie die Passwort-Authentifizierungsmethode in MariaDB auf nativ, damit wir später PHPMyAdmin 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

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

nano /etc/mysql/debian.cnf

Das MySQL-Root-Passwort, das hinzugefügt werden muss, wird in read angezeigt, 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

Dann starten wir MariaDB neu:

service mysql restart

Der Name des Systemdienstes für MariaDB und MySQL ist „mysql“, so dass der Neustart-Befehl für beide Datenbankserver derselbe ist.

MySQL

nano /etc/mysql/my.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
[...]

Dann starten wir MySQL neu:

service mysql restart

Der Name des Systemdienstes für MariaDB und MySQL ist „mysql“, so dass der Neustartbefehl für beide Datenbankserver gleich ist.

Für MySQL und MariaDB:

Überprüfen Sie nun, ob das Netzwerk aktiviert ist. Ausführen:

netstat -tap | grep mysql

Die Ausgabe sollte wie folgt aussehen:

[email protected]:~# netstat -tap | grep mysql
tcp6 0 0 [::]:mysql [::]:* LISTEN 12210/mysqld

7. Installieren Sie Amavisd-neu, SpamAssassin und ClamAV

Um amavisd-new, SpamAssassin und ClamAV zu installieren, führen wir

apt-get -y install amavisd-new spamassassin clamav clamav-daemon 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 postgrey libdbd-mysql-perl

Das ISPConfig 3-Setup verwendet amavisd-new, das die SpamAssassin-Filterbibliothek intern lädt, so dass wir SpamAssassin stoppen können, um RAM freizugeben:

service spamassassin stop
update-rc.d -f spamassassin remove

So aktualisieren Sie die ClamAV-Antiviren-Signaturen und starten den Clamd-Dienst. Der Aktualisierungsprozess kann einige Zeit dauern, unterbrechen Sie ihn nicht.

freshclam
service clamav-daemon start

Der folgende Fehler kann bei der ersten Ausführung von freshclam ignoriert werden.

ERROR: /var/log/clamav/freshclam.log is locked by another process
ERROR: Problem with internal logger (UpdateLogFile = /var/log/clamav/freshclam.log).

Das amavisd-neue Programm hat derzeit einen Fehler in Ubuntu 18.04, der verhindert, dass E-Mails korrekt mit Dkim signiert werden. Führen Sie die folgenden Befehle aus, um amavisd-new zu patchen.

cd /tmp
wget https://git.ispconfig.org/ispconfig/ispconfig3/raw/stable-3.1/helper_scripts/ubuntu-amavisd-new-2.11.patch
cd /usr/sbin
cp -pf amavisd-new amavisd-new_bak
patch < /tmp/ubuntu-amavisd-new-2.11.patch

Falls Sie einen Fehler für den letzten ‚patch‘-Befehl erhalten, dann hat Ubuntu das Problem wahrscheinlich in der Zwischenzeit behoben, so dass es sicher sein sollte, diesen Fehler dann zu ignorieren.

7.1 Metronom-XMPP-Server installieren (optional)

Der Metronome XMPP-Server stellt einen XMPP-Chat-Server zur Verfügung. Dieser Schritt ist optional, wenn Sie keinen Chatserver benötigen, dann können Sie diesen Schritt überspringen. Keine anderen ISPConfig-Funktionen sind von dieser Software abhängig.

Installieren Sie die folgenden Pakete mit apt.

apt-get -y 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ügen Sie einen Shell-Benutzer für Metronome hinzu.

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

Laden Sie Metronome 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

Metronom ist jetzt auf /opt/metronome installiert.

8. Installieren Sie Nginx, PHP 7.2 (PHP-FPM) und Fcgiwrap

Nginx ist als Paket für Ubuntu verfügbar, das wir mit dem folgenden Befehl installieren können:

apt-get install nginx

Wenn Apache2 bereits auf dem System installiert ist, stoppen Sie ihn jetzt…

service apache2 stop

… und entfernen Sie die Systemstart-Verknüpfungen des Apache:

update-rc.d -f apache2 remove

Starten Sie danach nginx:

service nginx start

(Wenn sowohl Apache2 als auch nginx installiert sind, fragt Sie das ISPConfig 3-Installationsprogramm, welches Sie verwenden möchten – antworten Sie in diesem Fall nginx. Wenn nur eines dieser beiden installiert ist, wird ISPConfig die notwendige Konfiguration automatisch vornehmen).

Wir können PHP 7 in nginx durch PHP-FPM zum Laufen bringen (PHP-FPM (FastCGI Process Manager) ist eine alternative PHP FastCGI-Implementierung mit einigen zusätzlichen Funktionen, die für Sites jeder Größe nützlich sind, insbesondere für geschäftigere Sites), die wir wie folgt installieren

apt-get -y install php7.2-fpm

PHP-FPM ist ein Daemon-Prozess, der einen FastCGI-Server auf dem Sockel /var/run/php/php7.2-fpm.sock ausführt.

Um MySQL-Unterstützung in PHP zu erhalten, können wir das php7.2-mysql-Paket installieren. Es ist eine gute Idee, auch einige andere PHP-Module zu installieren, da Sie diese für Ihre Anwendungen benötigen könnten. So können Sie nach verfügbaren PHP-Modulen suchen:

apt-cache search php7.2

Wählen Sie die, die Sie benötigen, und installieren Sie sie wie folgt:

apt-get -y install php7.2 php7.2-common php7.2-gd php7.2-mysql php7.2-imap php7.2-cli php7.2-cgi php-pear mcrypt imagemagick libruby php7.2-curl php7.2-intl php7.2-pspell php7.2-recode php7.2-sqlite3 php7.2-tidy php7.2-xmlrpc php7.2-xsl memcached php-memcache php-imagick php-gettext php7.2-zip php7.2-mbstring php-soap php7.2-soap

Als nächstes öffne ich /etc/php/7.2/fpm/php.ini

nano /etc/php/7.2/fpm/php.ini

… und setzen Sie cgi.fix_pathinfo=0 und Ihre Zeitzone:

[...]
cgi.fix_pathinfo=0
[...]
date.timezone="Europe/Berlin"
[...]

(Sie finden alle verfügbaren Zeitzonen in den Verzeichnissen /usr/share/zoneinfo und seinen Unterverzeichnissen).

Laden Sie nun PHP-FPM neu:

service php7.2-fpm reload

Um CGI-Unterstützung in nginx zu erhalten, installieren wir Fcgiwrap.

Fcgiwrap ist ein CGI-Wrapper, der auch für komplexe CGI-Skripte funktionieren sollte und für gemeinsam genutzte Hosting-Umgebungen verwendet werden kann, da er jedem vhost erlaubt, sein eigenes cgi-bin-Verzeichnis zu verwenden.

Installieren Sie das fcgiwrap-Paket:

apt-get -y install fcgiwrap

Nach der Installation sollte der fcgiwrap-Daemon bereits gestartet sein; sein Socket ist /var/run/fcgiwrap.socket. Wenn er nicht läuft, können Sie das Skript /etc/init.d/fcgiwrap verwenden, um ihn zu starten.

Das war’s schon! Wenn Sie nun einen nginx vhost erstellen, kümmert sich ISPConfig um die korrekte vhost-Konfiguration.

8.1 phpMyAdmin installieren

Installieren Sie phpMyAdmin wie folgt:

apt-get -y install phpmyadmin php-mbstring php-gettext

Sie werden die folgenden Fragen sehen:

Web-Server automatisch rekonfigurieren: <– keine auswählen (da nur apache2 und lighttpd als Optionen verfügbar sind)
MySQL-Anwendungskennwort für phpmyadmin:
<– Drücken Sie Enter

Sie finden phpMyAdmin jetzt im Verzeichnis /usr/share/phpmyadmin/.

Nachdem Sie ISPConfig 3 installiert haben, können Sie wie folgt auf phpMyAdmin zugreifen:

Die ISPConfig apps vhost auf Port 8081 für nginx wird mit einer phpMyAdmin-Konfiguration geliefert, so dass Sie über http://server1.example.com:8081/phpmyadmin oder http://server1.example.com:8081/phpMyAdmin auf phpMyAdmin zugreifen können.

Wenn Sie einen /phpmyadmin- oder /phpMyAdmin-Alias verwenden wollen, den Sie von Ihren Websites aus verwenden können, ist dies etwas komplizierter als bei Apache, da nginx keine globalen Aliase (d.h. Aliase, die für alle vhosts definiert werden können) hat. Daher müssen Sie diese Aliase für jeden vhost definieren, von dem aus Sie auf phpMyAdmin zugreifen möchten.

Dazu fügen Sie das Folgende später in ISPConfig auf der Registerkarte Optionen der Website in das Feld nginx Directives ein:

        location /phpmyadmin {
               root /usr/share/;
               index index.php index.html index.htm;
               location ~ ^/phpmyadmin/(.+\.php)$ {
                       try_files $uri =404;
                       root /usr/share/;
                       fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
                       fastcgi_index index.php;
                       fastcgi_param SCRIPT_FILENAME $request_filename;
                       include /etc/nginx/fastcgi_params;
                       fastcgi_param PATH_INFO $fastcgi_script_name;
                       fastcgi_buffer_size 128k;
                       fastcgi_buffers 256 4k;
                       fastcgi_busy_buffers_size 256k;
                       fastcgi_temp_file_write_size 256k;
                       fastcgi_intercept_errors on;
               }
               location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {
                       root /usr/share/;
               }
        }
        location /phpMyAdmin {
               rewrite ^/* /phpmyadmin last;
        }

Wenn Sie https anstelle von http für Ihren vhost verwenden, sollten Sie die Zeile fastcgi_param HTTPS on; zu Ihrer phpMyAdmin-Konfiguration wie folgt hinzufügen:

        location /phpmyadmin {
               root /usr/share/;
               index index.php index.html index.htm;
               location ~ ^/phpmyadmin/(.+\.php)$ {
                       try_files $uri =404;
                       root /usr/share/;
                       fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
                       fastcgi_param HTTPS on; # <-- add this line
                       fastcgi_index index.php;
                       fastcgi_param SCRIPT_FILENAME $request_filename;
                       include /etc/nginx/fastcgi_params;
                       fastcgi_param PATH_INFO $fastcgi_script_name;
                       fastcgi_buffer_size 128k;
                       fastcgi_buffers 256 4k;
                       fastcgi_busy_buffers_size 256k;
                       fastcgi_temp_file_write_size 256k;
                       fastcgi_intercept_errors on;
               }
               location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {
                       root /usr/share/;
               }
        }
        location /phpMyAdmin {
               rewrite ^/* /phpmyadmin last;
        }

Wenn Sie sowohl http als auch https für Ihren vhost verwenden, müssen Sie den folgenden Abschnitt zum Abschnitt http {} in /etc/nginx/nginx.conf (vor allen Include-Zeilen) hinzufügen, der bestimmt, ob der Besucher http oder https verwendet und die Variable $fastcgi_https (die wir in unserer phpMyAdmin-Konfiguration verwenden werden) entsprechend setzt:

nano /etc/nginx/nginx.conf
[...]
http {
[...]
        ## Detect when HTTPS is used
        map $scheme $fastcgi_https {
          default off;
          https on;

        }
[...]
}
[...]

Vergessen Sie nicht, nginx danach neu zu laden:

service nginx reload

Dann gehen Sie wieder zum Feld nginx Directives, und statt fastcgi_param HTTPS on; fügen Sie die Zeile fastcgi_param HTTPS $fastcgi_https hinzu; so dass Sie phpMyAdmin sowohl für HTTP- als auch für HTTPS-Anfragen verwenden können:

        location /phpmyadmin {
               root /usr/share/;
               index index.php index.html index.htm;
               location ~ ^/phpmyadmin/(.+\.php)$ {
                       try_files $uri =404;
                       root /usr/share/;
                       fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
                       fastcgi_param HTTPS $fastcgi_https; # <-- add this line
                       fastcgi_index index.php;
                       fastcgi_param SCRIPT_FILENAME $request_filename;
                       include /etc/nginx/fastcgi_params;
                       fastcgi_param PATH_INFO $fastcgi_script_name;
                       fastcgi_buffer_size 128k;
                       fastcgi_buffers 256 4k;
                       fastcgi_busy_buffers_size 256k;
                       fastcgi_temp_file_write_size 256k;
                       fastcgi_intercept_errors on;
               }
               location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {
                       root /usr/share/;
               }
        }
        location /phpMyAdmin {
               rewrite ^/* /phpmyadmin last;
        }

8.2 HHVM (HipHop Virtuelle Maschine) installieren

In diesem Schritt werden wir HHVM mit apt installieren. HHVM ist eine schnelle PHP-Engine, die von Facebook entwickelt wurde.

apt-get -y install hhvm

8.4. Installieren Let’s Encrypt

ISPConfig 3.1 hat eine eingebaute Unterstützung für die kostenlose SSL-Zertifizierungsstelle Let’s encrypt. Die Funktion „Let’s Encrypt“ ermöglicht es Ihnen, kostenlose SSL-Zertifikate für Ihre Website in ISPConfig zu erstellen.

Nun werden wir Unterstützung für Let’s encrypt hinzufügen.

apt-get -y install certbot

Registrieren Sie sich für ein Konto für Let’s encrypt wie dieses:

certbot register

und folgen Sie den Anweisungen auf dem Bildschirm.

9. Mailman installieren

Mit ISPConfig können Sie auch Mailman-Mailinglisten verwalten (erstellen/ändern/löschen). Wenn Sie von dieser Funktion Gebrauch machen wollen, installieren Sie Mailman wie folgt:

apt-get -y install mailman

Wählen Sie mindestens eine Sprache, z.B:

Zu unterstützende Sprachen: <– en (Englisch)
Fehlende Site-Liste <– Ok

Bevor wir mit dem Mailman beginnen können, muss eine erste Mailingliste namens mailman erstellt werden:

newlist mailman

[email protected]:~# newlist mailman Geben Sie die
E-Mail-Adresse der Person ein, die die Liste betreibt: <– Admin-E-Mail-Adresse, z.B. [email protected]
com
Ursprüngliches Briefträger-Passwort:<– Admin-Passwort für die Mailman-Liste Um die Erstellung Ihrer Mailingliste abzuschließen,
müssen SieIhre Datei /etc/aliases (oder gleichwertig
), indem Sie die folgenden Zeilen hinzufügen und möglicherweise das Programm `newaliases‘ ausführen:

## mailman mailing list mailman: “
|/var/lib/mailman/mail/mail/mailman post mailman“ mailman-admin:“|/var/lib/mailman/mail/mailman admin mailman“ mailman-bounces: „|/var/lib/mailman/mailman/mail/mailman admin mailman“ mailman-bounces:“|/var/lib/mailman/mail/mail/mailman bounces mailman“ mailman-confirm: „|/var/lib/mailman/mail/mail/mailman
confirm mailman“ mailman-join:“|/var/lib/mailman/mail/mailman join mailman“ mailman-leeave:“|/var/lib/mailman/mail/mail/mailman leave mailman“ Briefträger-Betreiber:“|/var/lib/mailman/mail/mailman/mailman owner mailman“ Briefträger-Antrag: „|/var/lib/mailman/mailman/mail/mailman owner mailman“|/var/lib/mailman/mail/mail/mailman request mailman“ mailman-subscribe: „|/var/lib/mailman/mail/mail/mailman
subscribe mailman“ mailman-abbestellen:“|/var/lib/mailman/mail/mailman unsubscribe mailman“ Drücken Sie Enter, um den Eigentümer des Postboten zu benachrichtigen

…. <– ENTER [email protected]:~#

Öffnen Sie anschließend /etc/aliases

nano /etc/aliases

… und fügen Sie die folgenden Zeilen hinzu:

[...]
## mailman mailing list
mailman:              "|/var/lib/mailman/mail/mailman post mailman"
mailman-admin:        "|/var/lib/mailman/mail/mailman admin mailman"
mailman-bounces:      "|/var/lib/mailman/mail/mailman bounces mailman"
mailman-confirm:      "|/var/lib/mailman/mail/mailman confirm mailman"
mailman-join:         "|/var/lib/mailman/mail/mailman join mailman"
mailman-leave:        "|/var/lib/mailman/mail/mailman leave mailman"
mailman-owner:        "|/var/lib/mailman/mail/mailman owner mailman"
mailman-request:      "|/var/lib/mailman/mail/mailman request mailman"
mailman-subscribe:    "|/var/lib/mailman/mail/mailman subscribe mailman"
mailman-unsubscribe:  "|/var/lib/mailman/mail/mailman unsubscribe mailman"

Führen Sie aus.

newaliases

danach und starten Sie Postfix neu:

service postfix restart

Starten Sie dann den Mailman-Daemon:

service mailman start

Nachdem Sie ISPConfig 3 installiert haben, können Sie wie folgt auf Mailman zugreifen:

Die ISPConfig-Anwendung vhost auf Port 8081 für nginx kommt mit einer Mailman-Konfiguration, so dass Sie http://server1.example.com:8081/cgi-bin/mailman/admin/<listname> oder http://server1.example.com:8081/cgi-bin/mailman/listinfo/<listname> verwenden können, um auf Mailman zuzugreifen.

Wenn Sie Mailman von Ihren Websites aus verwenden wollen, ist dies etwas komplizierter als beim Apache, da Nginx keine globalen Aliase (d.h. Aliase, die für alle Vhosts definiert werden können) hat. Daher müssen Sie diese Aliase für jeden vhost definieren, von dem aus Sie auf Mailman zugreifen möchten.

Dazu fügen Sie Folgendes später in ISPConfig auf der Registerkarte Optionen der Website in das Feld nginx-Direktiven ein:

        location /cgi-bin/mailman {
               root /usr/lib/;
               fastcgi_split_path_info (^/cgi-bin/mailman/[^/]*)(.*)$;
               include /etc/nginx/fastcgi_params;
               fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
               fastcgi_param PATH_INFO $fastcgi_path_info;
               fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
               fastcgi_intercept_errors on;
               fastcgi_pass unix:/var/run/fcgiwrap.socket;
        }

        location /images/mailman {
               alias /usr/share/images/mailman;
        }

        location /pipermail {
               alias /var/lib/mailman/archives/public;
               autoindex on;
        }

Dies definiert den Alias /cgi-bin/mailman/ für Ihren vhost, was bedeutet, dass Sie auf die Mailman-Administrationsschnittstelle für eine Liste unter http://<vhost>/cgi-bin/mailman/admin/<listname> zugreifen können. Die Webseite für Benutzer einer Mailingliste finden Sie unter http://<vhost>/cgi-bin/mailman/listinfo/<listname>.

Unter http://<vhost>/pipermail finden Sie die Archive der Mailingliste.

10. PureFTPd und Quota installieren

PureFTPd und Quota können mit dem folgenden Befehl installiert werden:

apt-get -y install pure-ftpd-common pure-ftpd-mysql quota quotatool

Bearbeiten Sie die Datei /etc/default/pure-ftpd-common

nano /etc/default/pure-ftpd-common

… und stellen Sie sicher, dass der Startmodus auf Standalone gesetzt ist und setzen Sie VIRTUALCHROOT=true:

[...]
STANDALONE_OR_INETD=standalone
[...]
VIRTUALCHROOT=true
[...]

Nun konfigurieren wir PureFTPd, um FTP- und TLS-Sitzungen zuzulassen. FTP ist ein sehr unsicheres Protokoll, da alle Passwörter und alle Daten im Klartext übertragen werden. Durch die Verwendung von TLS kann die gesamte Kommunikation verschlüsselt werden, wodurch FTP wesentlich sicherer wird.

Wenn Sie FTP- und TLS-Sitzungen erlauben möchten, führen Sie

echo 1 > /etc/pure-ftpd/conf/TLS

Um TLS verwenden zu können, müssen wir ein SSL-Zertifikat erstellen. Ich erstelle es in /etc/ssl/private/, daher lege ich zuerst dieses Verzeichnis an:

mkdir -p /etc/ssl/private/

Anschliessend können wir das SSL-Zertifikat wie folgt generieren:

openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem

Name des Landes (2-Buchstaben-Code) [AU]: <– Geben Sie Ihren Ländernamen ein (z.B. „DE“).
Name des Staates oder der Provinz (vollständiger Name) [Some-State]:
<– Geben Sie den Namen Ihres Bundesstaates oder Ihrer Provinz ein.
Ortsname (z.B. Stadt) []:
<– Geben Sie Ihre Stadt ein.
Name der Organisation (z.B. Firma) [Internet Widgits Pty Ltd]:
<– Geben Sie den Namen Ihrer Organisation ein (z.B. den Namen Ihrer Firma).
Name der Organisationseinheit (z.B. die Sektion) []:
<– Geben Sie den Namen Ihrer Organisationseinheit ein (z.B. „IT-Abteilung“).
Allgemeiner Name (z.B. IHR Name) []:
<– Geben Sie den vollqualifizierten Domänennamen des Systems ein (z.B. „server1.example.com“).
E-Mail-Adresse []:
<– Geben Sie Ihre E-Mail-Adresse ein.

Ändern Sie die Berechtigungen des SSL-Zertifikats:

chmod 600 /etc/ssl/private/pure-ftpd.pem

Starten Sie dann PureFTPd neu:

service pure-ftpd-mysql restart

Bearbeiten Sie /etc/fstab. Meine sieht wie folgt aus (ich habe ,usrjquota=quota.user,grpjquota=quota.group,jqfmt=vfsv0 zur Partition mit dem Mount-Punkt / hinzugefügt):

nano /etc/fstab
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
/dev/mapper/server1--vg-root / ext4 errors=remount-ro,usrjquota=quota.user,grpjquota=quota.group,jqfmt=vfsv0 0 1
# /boot was on /dev/sda1 during installation
UUID=39762f15-3a49-4982-add3-139d5040b48a /boot ext2 defaults 0 2
/dev/mapper/server1--vg-swap_1 none swap sw 0 0
/dev/fd0 /media/floppy0 auto rw,user,noauto,exec,utf8 0 0

Um Quota zu aktivieren, führen Sie diese Befehle aus:

mount -o remount /
quotacheck -avugm
quotaon -avug

Die folgenden Fehlermeldungen sind für den Befehl normal und können ignoriert werden:

quotacheck: Scanning /dev/mapper/server1--vg-root [/] done
quotacheck: Cannot stat old user quota file //quota.user: No such file or directory. Usage will not be subtracted.
quotacheck: Cannot stat old group quota file //quota.group: No such file or directory. Usage will not be subtracted.
quotacheck: Cannot stat old user quota file //quota.user: No such file or directory. Usage will not be subtracted.
quotacheck: Cannot stat old group quota file //quota.group: No such file or directory. Usage will not be subtracted.
quotacheck: Checked 18566 directories and 110119 files
quotacheck: Old file not found.
quotacheck: Old file not found.

11. BIND DNS-Server installieren

BIND wird wie folgt installiert:

apt-get -y install bind9 dnsutils haveged

Aktivieren Sie und starten Sie haveged.

systemctl enable haveged
service haveged start

12. Installieren von Vlogger, Webalizer und AWStats

Vlogger, Webalizer und AWStats können wie folgt installiert werden:

apt-get -y install vlogger webalizer awstats geoip-database libclass-dbi-mysql-perl

Öffnen Sie danach /etc/cron.d/awstats

nano /etc/cron.d/awstats

… und kommentieren Sie alles in dieser Datei aus:

#MAILTO=root

#*/10 * * * * www-data [ -x /usr/share/awstats/tools/update.sh ] && /usr/share/awstats/tools/update.sh

# Generate static reports:
#10 03 * * * www-data [ -x /usr/share/awstats/tools/buildstatic.sh ] && /usr/share/awstats/tools/buildstatic.sh

13. Jailkit installieren

Es kann wie folgt installiert werden:

apt-get -y install build-essential autoconf automake1.11 libtool flex bison debhelper binutils
cd /tmp 
wget http://olivier.sessink.nl/jailkit/jailkit-2.19.tar.gz
tar xvfz jailkit-2.19.tar.gz
cd jailkit-2.19
echo 5 > debian/compat

Dann bauen Sie das Jailkit-Paket durch Ausführen dieses Befehls:

./debian/rules binary

Sie können nun das Jailkit-Paket .deb wie folgt installieren:

cd ..
dpkg -i jailkit_2.19-1_*.deb
rm -rf jailkit-2.19*

14. Installieren Sie Fail2Ban und UFW

Dies ist optional, wird aber empfohlen, da der ISPConfig-Monitor versucht, das Protokoll anzuzeigen:

apt-get -y install fail2ban

Damit der fail2ban-Monitor PureFTPd und Dovecot überwacht, erstellen Sie die Datei /etc/fail2ban/jail.local:

nano /etc/fail2ban/jail.local
[pure-ftpd]
enabled  = true
port     = ftp
filter   = pure-ftpd
logpath  = /var/log/syslog
maxretry = 3

[dovecot]
enabled = true
filter = dovecot
action = iptables-multiport[name=dovecot-pop3imap, port="pop3,pop3s,imap,imaps", protocol=tcp]
logpath = /var/log/mail.log
maxretry = 5

[postfix]
enabled  = true
port     = smtp
filter   = postfix
logpath  = /var/log/mail.log
maxretry = 3

Starten Sie danach fail2ban erneut:

service fail2ban restart

Um die UFW-Firewall zu installieren, führen Sie diesen apt-Befehl aus:

apt-get install ufw

Das könnte dich auch interessieren …