Der perfekte Server – Debian 10 (Nginx, BIND, Dovecot, ISPConfig 3.1)
Dieses Tutorial zeigt, wie man einen Debian-10-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 Web-Hosting-Control-Panel, das es Ihnen erlaubt, die folgenden Dienste über einen Web-Browser zu konfigurieren: Apache- oder nginx-Webserver, Postfix-Mailserver, Courier- oder Dovecot-IMAP/POP3-Server, MySQL, BIND- oder MyDNS-Nameserver, PureFTPd, SpamAssassin, ClamAV und viele mehr. Diese Einrichtung 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.0.100 und dem Gateway 192.168.0.1. Diese Einstellungen können sich für Sie unterscheiden, so dass Sie sie gegebenenfalls ersetzen müssen. Bevor Sie weitermachen, benötigen Sie eine minimale Installation von Debian 10. Dies könnte ein Debian-Minimal-Image von Ihrem Hosting-Provider sein, oder Sie verwenden das Minimal-Debian-Server-Tutorial, um das Basissystem einzurichten.
Alle folgenden Befehle werden als Root-Benutzer ausgeführt. Melden Sie sich entweder direkt als Root-Benutzer an oder melden Sie sich als Ihr normaler Benutzer an und verwenden Sie dann den Befehl
su -
um Root-Benutzer auf Ihrem Server zu werden, bevor Sie fortfahren. WICHTIG: Sie müssen ’su -‚ verwenden und nicht nur ’su‘, sonst wird Ihre PATH-Variable von Debian falsch gesetzt.
2 Installieren Sie den SSH-Server
Wenn Sie den OpenSSH-Server während der Systeminstallation nicht installiert haben, können Sie es 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-10-Server verbinden und die restlichen Schritte aus diesem Tutorial befolgen.
3 Installieren Sie einen Shell-Texteditor (optional)
Ich werde dienano Texteditor in diesem Tutorial. Einige Benutzer bevorzugen den klassischen vi-Editor, daher werde ich hier beide Editoren installieren. Das Standard-Vi-Programm hat ein seltsames Verhalten unter Debian und Ubuntu; um dies zu beheben, installieren wir vim-nox:
apt-get -y install nano vim-nox
(Sie müssen dies nicht tun, wenn Sie einen anderen Texteditor wie z.B. joe verwenden).
4 Konfigurieren Sie den Hostnamen
Der Hostname Ihres Servers sollte eine Subdomain wie „server1.example.com“ sein. Verwenden Sie keinen Domänennamen ohne Subdomänenteil wie „beispiel.com“ als Hostname, da dies später Probleme mit Ihrem Mail-Setup verursachen wird. Zuerst sollten Sie den Hostnamen in /etc/hosts überprüfen und bei Bedarf ändern. Die Zeile sollte lauten: „IP-Adresse – Leerzeichen – vollständiger Hostname inkl. Domain – Leerzeichen – Subdomain-Teil“. Bearbeiten Sie /etc/hosts. Lassen Sie es wie folgt aussehen: „/etc/hosts“:
nano /etc/hosts
127.0.0.1 localhost.localdomain localhost 192.168.0.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 Subdomänenteil:
server1
Starten Sie schließlich den Server neu, um die Änderung zu übernehmen:
reboot
Melden Sie sich erneut an und überprüfen Sie jetzt mit diesen Befehlen, ob der Hostname korrekt ist:
hostname hostname -f
Die Ausgabe soll wie folgt aussehen:
root@server1:/tmp# hostname server1 root@server1:/tmp# hostname -f server1.example.com
5 Aktualisieren Sie Ihre Debian-Installation
Stellen Sie zuerst sicher, dass Ihre /etc/apt/sources.list das Repository buster/updates enthält (dies stellt sicher, dass Sie immer die neuesten Updates für den ClamAV-Virenscanner erhalten – dieses Projekt veröffentlicht sehr oft Releases, und manchmal funktionieren alte Versionen nicht mehr), und dass die Contrib- und Non-Free-Repositorys aktiviert sind.
nano /etc/apt/sources.list
deb http://deb.debian.org/debian/ buster main contrib non-free deb-src http://deb.debian.org/debian/ buster main contrib non-free
deb http://security.debian.org/debian-security buster/updates main contrib non-free
deb-src http://security.debian.org/debian-security buster/updates main contrib non-free
Führen Sie aus.
apt-get update
um die Datenbank des apt-Pakets zu aktualisieren und
apt-get upgrade
um die neuesten Updates zu installieren (falls es welche gibt).
6 Ändern der Standard-Shell
/bin/sh ist ein Symlink zu /bin/dash, wir benötigen jedoch /bin/bash, nicht /bin/dash. Deshalb machen wir dies:
dpkg-reconfigure dash
Dash als Standard-System-Shell verwenden (/bin/sh)? <– Nein
Wenn Sie dies nicht tun, wird die Installation von ISPConfig fehlschlagen.
7 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 install ntp
und Ihre Systemzeit wird immer synchron sein. Ggf. können sie den NTP Server auch via NTP-Pool synchronisieren.
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
Es werden Ihnen die folgenden Fragen gestellt:
Allgemeine Art der Mail-Konfiguration: <– Internetseite
Name der System-Mail: <– server1.beispiel.com
Um die Installation von MariaDB / MySQL zu sichern und die Testdatenbank zu deaktivieren, führen Sie diesen Befehl aus:
mysql_secure_installation
Wir müssen das MariaDB-Root-Passwort nicht ändern, da wir während der Installation einfach ein neues Passwort gesetzt haben. Beantworten Sie die Fragen wie folgt:
Change the root password? [Y/n] <-- y New password: <-- Enter a new database root password Re-enter new password: <-- Repeat the database 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
Als nächstes öffnen Sie die TLS/SSL- und Submission-Ports in Postfix:
nano /etc/postfix/master.cf
Kommentieren Sie dieAnmeldung und smtps Abschnitte wie folgt und fügen Sie ggf. Zeilen hinzu, so dass dieser Abschnitt der Datei master.cf genau wie der folgende Abschnitt aussieht. WICHTIG: Entfernen Sie das # vor den Zeilen, die mit smtps und submission beginnen, auch und nicht nur von den -o Zeilen nach diesen Zeilen!
[...] 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 Schnittstellen lauscht, nicht nur auf localhost, deshalb editieren wir /etc/mysql/mariadb.conf.d/50-server.cnf und kommentieren die Zeile bind-address = 127.0.0.1 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
[…]
Sichern Sie die Datei. Dann setzen Sie die Passwort-Authentifizierungsmethode in MariaDB auf nativ, so dass 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
Bearbeiten Sie die Datei /etc/mysql/debian.cnf und setzen Sie das MYSQL / MariaDB Root-Passwort dort zweimal in den Zeilen, die mit dem Wort password beginnen.
nano /etc/mysql/debian.cnf
Das MySQL-Root-Passwort, das hinzugefügt werden muss, wird in rot angezeigt. In diesem Beispiel lautet 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 ‚Fehler bei accept: Zu viele offene Dateien‚ werden wir jetzt höhere Grenzwerte für offene Dateien für MariaDB festlegen.
Ö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
Als nächstes erstellen Sie ein neues Verzeichnis /etc/systemd/system/mysql.service.d/ mit dem Befehl mkdir.
mkdir -p /etc/systemd/system/mysql.service.d/
und fügen Sie darin 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 systemd neu und starten MariaDB neu:
systemctl daemon-reload systemctl restart mariadb
Ignorieren Sie die Warnung: „Warnung: Die Unit-Datei, Quell-Konfigurationsdatei oder Drop-Ins von mariadb.service wurden auf der Platte geändert. Führen Sie ’systemctl daemon-reload‘ aus, um Units neu zu laden. „.
Installieren Sie das dbconfig-common-System:
apt-get install dbconfig-common dbconfig-mysql
Es gibt zur Zeit ein Problem mit dem Debian dbconfig-common-System, das die spÃ?tere Installation von RoundCube verhindert, beheben Sie es, indem Sie diesen Befehl ausfÃ?hren:
sed -i -r 's/_dbc_nodb="yes" dbc_mysql_exec/_dbc_nodb="yes"; dbc_mysql_exec/g' /usr/share/dbconfig-common/internal/mysql
Überprüfen Sie nun, ob die Vernetzung aktiviert ist. Führen Sie aus.
netstat -tap | grep mysql
Die Ausgabe sollte wie folgt aussehen:
root@server1:~# netstat -tap | grep mysql tcp6 0 0 [::]:mysql [::]:* LISTEN 4027/mysqld root@server1:~#
9 Installieren Sie Amavisd-neu, SpamAssassin und ClamAV
Um amavisd-new, SpamAssassin und ClamAV zu installieren, führen wir aus:
apt-get install amavisd-new spamassassin clamav clamav-daemon unzip bzip2 arj nomarch lzop cabextract p7zip p7zip-full unrar lrzip 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 amavisd, das die SpamAssassin-Filterbibliothek intern lädt, so dass wir SpamAssassin stoppen können, um etwas RAM freizugeben:
systemctl stop spamassassin systemctl disable spamassassin
10 Nginx, PHP (PHP-FPM) und Fcgiwrap installieren
Nginx ist als Paket für Debian verfügbar, das wir wie folgt installieren können:
apt-get install nginx
Falls Apache2 bereits auf dem System installiert ist, stoppen Sie es jetzt…
systemctl stop apache2
Die Meldung „Failed to stop apache2.service: Einheit apache2.service nicht geladen. “ ist in Ordnung und zeigt keinen Fehler an.
… und entfernen Sie die Systemstart-Links von Apache:
systemctl disable apache2
Beginnen Sie danach mit nginx:
systemctl start nginx
(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 von beiden installiert ist, wird ISPConfig die notwendige Konfiguration automatisch vornehmen).
Wir können PHP 7.3 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 stark frequentierte Sites), die wir wie folgt installieren
apt-get install php7.3-fpm
PHP-FPM ist ein Daemon-Prozess, der einen FastCGI-Server auf dem Sockel /var/run/php/php7.3-fpm.sock ausführt.
Um MySQL-Unterstützung in PHP zu erhalten, können wir das Paket php7.3-mysql 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
Wählen Sie die Dienste aus, die Sie benötigen, und installieren Sie sie wie folgt:
apt-get install php7.3 php7.3-common php7.3-gd php7.3-mysql php7.3-imap php7.3-cli php7.3-cgi php-pear mcrypt imagemagick libruby php7.3-curl php7.3-intl php7.3-pspell php7.3-recode php7.3-sqlite3 php7.3-tidy php7.3-xmlrpc php7.3-xsl memcached php-memcache php-imagick php-gettext php7.3-zip php7.3-mbstring memcached php7.3-soap php7.3-fpm php7.3-opcache php-apcu
Als nächstes öffne ich /etc/php/7.3/fpm/php.ini…
nano /etc/php/7.3/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 jetzt PHP-FPM neu:
systemctl restart php7.3-fpm
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 Shared Hosting-Umgebungen verwendet werden kann, da er jedem vhost erlaubt, sein eigenes cgi-bin-Verzeichnis zu verwenden.
Installieren Sie das Paket fcgiwrap:
apt-get 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 fservice fcgiwrap-Skript 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.
10.1 phpMyAdmin installieren
Seit Debian 10 ist PHPMyAdmin nicht mehr als .deb-Paket verfügbar. Daher werden wir es aus den Quellen installieren.
Erstellen Sie Ordner für PHPMyAdmin:
mkdir /usr/share/phpmyadmin mkdir /etc/phpmyadmin mkdir -p /var/lib/phpmyadmin/tmp chown -R www-data:www-data /var/lib/phpmyadmin touch /etc/phpmyadmin/htpasswd.setup
Gehen Sie in das Verzeichnis /tmp und laden Sie die PHPMyAdmin-Quellen herunter:
cd /tmp wget https://files.phpmyadmin.net/phpMyAdmin/4.9.0.1/phpMyAdmin-4.9.0.1-all-languages.tar.gz
Entpacken Sie die heruntergeladene Archivdatei und verschieben Sie die Dateien in den Ordner /usr/share/phpmyadmin und bereinigen Sie das Verzeichnis /tmp.
tar xfz phpMyAdmin-4.9.0.1-all-languages.tar.gz mv phpMyAdmin-4.9.0.1-all-languages/* /usr/share/phpmyadmin/ rm phpMyAdmin-4.9.0.1-all-languages.tar.gz rm -rf phpMyAdmin-4.9.0.1-all-languages
Erstellen Sie eine neue Konfigurationsdatei für PHPMyaAdmin basierend auf der mitgelieferten Beispieldatei:
cp /usr/share/phpmyadmin/config.sample.inc.php /usr/share/phpmyadmin/config.inc.php
Öffnen Sie die Konfigurationsdatei mit dem Nano-Editor:
nano /usr/share/phpmyadmin/config.inc.php
Legen Sie ein sicheres Passwort (Blowfish-Geheimnis) fest, das 32 Zeichen lang sein muss:
$cfg['blowfish_secret'] = 'bD3e6wva9fnd93jVsb7SDgeiBCd452Dh'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
Verwenden Sie nicht mein Beispiel blowfish secret, sondern setzen Sie Ihr eigenes!
Fügen Sie dann eine Zeile hinzu, um das Verzeichnis festzulegen, das PHPMyAdmin zum Speichern temporärer Dateien verwenden soll:
$cfg['TempDir'] = '/var/lib/phpmyadmin/tmp';
Im nächsten Schritt werden wir den phpMyadmin-Konfigurationsspeicher (Datenbank) konfigurieren.
Melden Sie sich bei MariaDB als Root-Benutzer an:
mysql -u root -p
Erstellen Sie in der MariaDB-Shell eine neue Datenbank für PHPMyAdmin:
MariaDB [(none)]> CREATE DATABASE phpmyadmin;
Erstellen Sie dann einen neuen Benutzer:
MariaDB [(none)]> CREATE USER 'pma'@'localhost' IDENTIFIED BY 'mypassword';
Ersetzen Sie in den Befehlen oben und unten das Wort mypassword durch ein sicheres Passwort Ihrer Wahl, verwenden Sie beide Male dasselbe Passwort. Gewähren Sie dann dem Benutzer Zugang zu dieser Datenbank und laden Sie die Datenbankberechtigungen neu.
MariaDB [(none)]> GRANT ALL PRIVILEGES ON phpmyadmin.* TO 'pma'@'localhost' IDENTIFIED BY 'mypassword' WITH GRANT OPTION; MariaDB [(none)]> FLUSH PRIVILEGES; MariaDB [(none)]> EXIT
Laden Sie schließlich die SQL-Tabellen in die Datenbank:
mysql -u root -p phpmyadmin < /usr/share/phpmyadmin/sql/create_tables.sql
Geben Sie das MariaDB-Root-Passwort auf Anfrage ein.
Jetzt müssen wir nur noch die phpmyadmin-Benutzerdaten in der Konfigurationsdatei festlegen. Öffnen Sie die Datei erneut im nano editor:
nano /usr/share/phpmyadmin/config.inc.php
Scrollen Sie nach unten, bis Sie die untenstehenden Zeilen sehen, und bearbeiten Sie diese:
/* User used to manipulate with storage */ $cfg['Servers'][$i]['controlhost'] = 'localhost'; $cfg['Servers'][$i]['controlport'] = ''; $cfg['Servers'][$i]['controluser'] = 'pma'; $cfg['Servers'][$i]['controlpass'] = 'mypassword';
/* Storage database and tables */
$cfg[‚Servers‘][$i][‚pmadb‘] = ‚phpmyadmin‘;
$cfg[‚Servers‘][$i][‚bookmarktable‘] = ‚pma__bookmark‘;
$cfg[‚Servers‘][$i][‚relation‘] = ‚pma__relation‘;
$cfg[‚Servers‘][$i][‚table_info‘] = ‚pma__table_info‘;
$cfg[‚Servers‘][$i][‚table_coords‘] = ‚pma__table_coords‘;
$cfg[‚Servers‘][$i][‚pdf_pages‘] = ‚pma__pdf_pages‘;
$cfg[‚Servers‘][$i][‚column_info‘] = ‚pma__column_info‘;
$cfg[‚Servers‘][$i][‚history‘] = ‚pma__history‘;
$cfg[‚Servers‘][$i][‚table_uiprefs‘] = ‚pma__table_uiprefs‘;
$cfg[‚Servers‘][$i][‚tracking‘] = ‚pma__tracking‘;
$cfg[‚Servers‘][$i][‚userconfig‘] = ‚pma__userconfig‘;
$cfg[‚Servers‘][$i][‚recent‘] = ‚pma__recent‘;
$cfg[‚Servers‘][$i][‚favorite‘] = ‚pma__favorite‘;
$cfg[‚Servers‘][$i][‚users‘] = ‚pma__users‘;
$cfg[‚Servers‘][$i][‚usergroups‘] = ‚pma__usergroups‘;
$cfg[‚Servers‘][$i][’navigationhiding‘] = ‚pma__navigationhiding‘;
$cfg[‚Servers‘][$i][’savedsearches‘] = ‚pma__savedsearches‘;
$cfg[‚Servers‘][$i][‚central_columns‘] = ‚pma__central_columns‘;
$cfg[‚Servers‘][$i][‚designer_settings‘] = ‚pma__designer_settings‘;
$cfg[‚Servers‘][$i][‚export_templates‘] = ‚pma__export_templates‘;
Ich habe die Zeilen, die ich bearbeitet habe, rot markiert. Ersetzen Sie mypassword durch das Passwort, das Sie für den Benutzer phpmyadmin gewählt haben. Beachten Sie, dass das // vor den Zeilen ebenfalls entfernt wurde!
Nachdem Sie ISPConfig 3.1 installiert haben, können Sie wie folgt auf phpMyAdmin zugreifen:
Die ISPConfig-Anwendung vhost auf Port 8081 für nginx kommt mit einer phpMyAdmin-Konfiguration, so dass Sie http://server1.example.com:8081/phpmyadmin oder http://server1.example.com:8081/phpMyAdmin verwenden können, um auf phpMyAdmin zuzugreifen.
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 hat (d.h. Aliase, die für alle vhosts definiert werden können). Daher müssen Sie diese Aliase für jeden vhost definieren, von dem aus Sie auf phpMyAdmin 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 /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.3-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.3-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 für Ihren vhost sowohl http als auch https verwenden, können Sie die Variable $https verwenden. Gehen Sie wieder zum Feld nginx Directives, und statt fastcgi_param HTTPS on fügen Sie die Zeile fastcgi_param HTTPS $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.3-fpm.sock; fastcgi_param HTTPS $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; }
11 Installieren Lassen Sie uns verschlüsseln
ISPConfig 3.1 hat Unterstützung für die kostenlose SSL-Zertifizierungsstelle Let’s encrypt. Mit der Funktion „Let’s Encrypt“ können Sie aus ISPConfig heraus kostenlose SSL-Zertifikate für Ihre Website erstellen.
cd /usr/local/bin wget https://dl.eff.org/certbot-auto chmod a+x certbot-auto ./certbot-auto --install-only
12 Mailman installieren
Mit ISPConfig können Sie Mailman-Mailinglisten verwalten (erstellen/ändern/löschen). Wenn Sie von dieser Funktion Gebrauch machen wollen, installieren Sie Mailman wie folgt:
apt-get 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
root@server1:~# newlist mailman Geben Sie die
E-Mail-Adresse der Person ein, die die Liste betreibt: <– Admin-E-Mail-Adresse, z.B. listadmin@example.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 root@server1:~#
Öffnen Sie danach /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:
systemctl restart postfix
Starten Sie dann den Mailman-Dämon:
systemctl restart mailman
Nachdem Sie ISPConfig 3 installiert haben, können Sie Mailman wie folgt aufrufen: (Sie müssen dies nicht tun, wenn Sie einen anderen Texteditor wie joe verwenden:
Die ISPConfig-Anwendung vhost auf Port 8081 für nginx wird mit einer Mailman-Konfiguration ausgeliefert, so dass Sie über http://server1.example.com:8081/cgi-bin/mailman/admin/<listname> oder http://server1.example.com:8081/cgi-bin/mailman/listinfo/<listname> auf Mailman zugreifen können.
Wenn Sie Mailman von Ihren Webseiten aus verwenden wollen, ist dies etwas komplizierter als beim Apache, da nginx keine globalen Aliase hat (d.h. Aliase, die für alle vhosts definiert werden können). 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 in das Feld nginx-Direktiven auf der Registerkarte Optionen der Website in ISPConfig 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 das Archiv der Mailingliste.
13 PureFTPd und Quota installieren
PureFTPd und Quota können mit dem folgenden Befehl installiert werden:
apt-get 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 viel 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 dieses Verzeichnis zuerst an:
mkdir -p /etc/ssl/private/
Danach 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.
Name der Ortschaft (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. Abschnitt) []:<– 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 erneut:
systemctl restart pure-ftpd-mysql
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>
# / was on /dev/sda1 during installation
UUID=45576b38-39e8-4994-b8c1-ea4870e2e614 / ext4 errors=remount-ro,usrjquota=quota.user,grpjquota=quota.group,jqfmt=vfsv0 0 1
# swap was on /dev/sda5 during installation
UUID=8bea0d1e-ec37-4b20-9976-4b7daaa3eb69 none swap sw 0 0
/dev/sr0 /media/cdrom0 udf,iso9660 user,noauto 0 0
Um die Quote zu aktivieren, führen Sie diese Befehle aus:
mount -o remount /
quotacheck -avugm quotaon -avug
14 BIND DNS-Server installieren
BIND kann wie folgt installiert werden:
apt-get install bind9 dnsutils
Wenn Ihr Server eine virtuelle Maschine ist, dann wird dringend empfohlen, den haveged Daemon zu installieren, um eine höhere Entropie für die DNSSEC-Signierung zu erhalten. Sie können haveged auch auf nicht-virtuellen Servern installieren, es sollte nicht schaden.
apt-get -y install haveged systemctl enable haveged systemctl start haveged
Eine Erklärung zu diesem Thema finden Sie hier.
15 Webalizer und AWStats installieren
Webalizer und AWStats können wie folgt installiert werden:
apt-get install webalizer awstats geoip-database libtimedate-perl libclass-dbi-mysql-perl
Öffnen Sie anschließend /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
16 Jailkit installieren
Jailkit wird nur benötigt, wenn Sie SSH-Benutzer in das Chroot-System aufnehmen möchten. Es kann wie folgt installiert werden (wichtig: Jailkit muss vor ISPConfig installiert werden – es kann nicht nachträglich installiert werden! ):
apt-get install build-essential autoconf automake libtool flex bison debhelper binutils
cd /tmp wget http://olivier.sessink.nl/jailkit/jailkit-2.20.tar.gz tar xvfz jailkit-2.20.tar.gz cd jailkit-2.20 echo 5 > debian/compat ./debian/rules binary
Sie können nun das Jailkit .deb-Paket wie folgt installieren:
cd .. dpkg -i jailkit_2.20-1_*.deb rm -rf jailkit-2.20*
17 Fail2ban und UFW-Firewall installieren
Dies ist optional, wird aber empfohlen, da der ISPConfig-Monitor versucht, das Protokoll anzuzeigen:
apt-get 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 logpath = /var/log/mail.log maxretry = 5 [postfix-sasl] enabled = true port = smtp filter = postfix[mode=auth] logpath = /var/log/mail.log maxretry = 3
Starten Sie danach fail2ban erneut:
systemctl restart fail2ban
Um die UFW-Firewall zu installieren, führen Sie diesen apt-Befehl aus:
apt-get install ufw
18 RoundCube installieren
Installieren Sie RoundCube mit diesem Befehl:
apt-get install roundcube roundcube-core roundcube-mysql roundcube-plugins
Das Installationsprogramm wird Ihnen die folgenden Fragen stellen:
Configure database for roundcube with dbconfig.common? <-- yes MySQL application password for roundcube: <-- press enter Password of the databases administrative user: <-- enter the MySQL root password here.
Bearbeiten Sie dann die Datei RoundCube /etc/roundcube/config.inc.php und passen Sie einige Einstellungen an:
nano /etc/roundcube/config.inc.php
Setzen Sie default_host und smtp_server auf localhost.
$config['default_host'] = 'localhost'; $config['smtp_server'] = 'localhost';
ISPConfig hat einige Konfigurationen in der nginx apps vhost für squirrelmail, die auch für roundcube funktionieren. Wir aktivieren sie mit:
ln -s /usr/share/roundcube /usr/share/squirrelmail
http://192.168.0.100:8081/webmail
http://server1.example.com:8081/webmail (nachdem Sie ISPConfig installiert haben, siehe das nächste Kapitel)
19 ISPConfig 3 installieren
Bevor Sie mit der ISPConfig-Installation beginnen, stellen Sie sicher, dass Apache gestoppt ist (falls er installiert ist – es ist möglich, dass einige Ihrer installierten Pakete Apache als Abhängigkeit installiert haben, ohne dass Sie es wissen). Falls Apache2 bereits auf dem System installiert ist, stoppen Sie ihn jetzt…
systemctl stop apache2
… und entfernen Sie die Systemstart-Verknüpfungen des Apache:
update-rc.d -f apache2 remove
Stellen Sie sicher, dass nginx läuft:
systemctl start nginx
(Wenn Sie sowohl Apache als auch nginx installiert haben, fragt Sie das Installationsprogramm, welches Sie verwenden möchten: Apache und nginx wurden erkannt: (Wenn Sie sowohl Apache als auch nginx installiert haben, fragt Sie das Installationsprogramm, welchen Sie verwenden möchten. Wählen Sie den Server aus, den Sie für ISPConfig verwenden wollen: (Wenn Sie sowohl Apache als auch nginx installiert haben, fragt Sie das Installationsprogramm, welchen Sie verwenden wollen: Apache und nginx erkannt: (Apache,nginx) [Apache]:
Geben Sie nginx ein. Wenn nur Apache oder nginx installiert sind, wird dies vom Installationsprogramm automatisch erkannt, und es wird keine Frage gestellt): [apache]: [apache]: [nginx]: [apache]: [nginx]: [nginx].
Um ISPConfig 3.1 von der letzten veröffentlichten Version aus zu installieren, tun Sie dies:
cd /tmp wget http://www.ispconfig.org/downloads/ISPConfig-3-stable.tar.gz tar xfz ISPConfig-3-stable.tar.gz cd ispconfig3_install/install/
Der nächste Schritt ist die Ausführung von
php -q install.php
Dadurch wird das ISPConfig 3-Installationsprogramm gestartet. Das Installationsprogramm wird alle Dienste wie Postfix, Nginx, Dovecot, etc. für Sie konfigurieren.
# php -q install.php
-------------------------------------------------------------------------------- _____ ___________ _____ __ _ ____ |_ _/ ___| ___ \ / __ \ / _(_) /__ \ | | \ `--.| |_/ / | / \/ ___ _ __ | |_ _ __ _ _/ / | | `--. \ __/ | | / _ \| '_ \| _| |/ _` | |_ | _| |_/\__/ / | | \__/\ (_) | | | | | | | (_| | ___\ \ \___/\____/\_| \____/\___/|_| |_|_| |_|\__, | \____/ __/ | |___/ --------------------------------------------------------------------------------
>> Initial configuration
Operating System: Debian 10.0 (Buster) or compatible
Following will be a few questions for primary configuration so be careful. Default values are in [brackets] and can be accepted with <ENTER>. Tap in "quit" (without the quotes) to stop the installer.
Select language (en,de) [en]: <-- Hit Enter
Installation mode (standard,expert) [standard]: <-- Hit Enter
Full qualified hostname (FQDN) of the server, eg server1.domain.tld [server1.canomi.com]: <-- Hit Enter
MySQL server hostname [localhost]: <-- Hit Enter
MySQL server port [3306]: <-- Hit Enter
MySQL root username [root]: <-- Hit Enter
MySQL root password []: <-- Enter your MySQL root password
MySQL database to create [dbispconfig]: <-- Hit Enter
MySQL charset [utf8]: <-- Hit Enter
Apache and nginx detected. Select server to use for ISPConfig: (apache,nginx) [apache]: <-- nginx
Configuring Postgrey
Configuring Postfix
Generating a 4096 bit RSA private key
……………………………………………………………..++
……………………………………………………………………………………………………………………….++
writing new private key to ’smtpd.key‘
—–
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‚.‘, the field will be left blank.
—–
Country Name (2 letter code) [AU]: <– Enter 2 letter country code
State or Province Name (full name) [Some-State]: <– Enter the name of the state
Locality Name (eg, city) []: <– Enter your city
Organization Name (eg, company) [Internet Widgits Pty Ltd]: <– Enter company name or press enter
Organizational Unit Name (eg, section) []: <– Hit Enter
Common Name (e.g. server FQDN or YOUR name) []: <– Enter the server hostname, in my case: server1.example.com
Email Address []: <– Hit Enter
Configuring Mailman
Configuring Dovecot
Configuring Spamassassin
Configuring Amavisd
Configuring Getmail
Configuring BIND
Configuring Jailkit
Configuring Pureftpd
Configuring Nginx
Configuring vlogger
[INFO] service Metronome XMPP Server not detected
Configuring UFW Firewall Configuring Fail2ban [INFO] service OpenVZ not detected Configuring Apps vhost Installing ISPConfig ISPConfig Port [8080]:
Admin password [admin]: <-- Enter desired ISPConfig admin user password here
Do you want a secure (SSL) connection to the ISPConfig web interface (y,n) [y]: <-- Hit Enter
Generating RSA private key, 4096 bit long modulus .......................++ ................................................................................................................................++ e is 65537 (0x10001) You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]: <-- Enter 2 letter country code State or Province Name (full name) [Some-State]: <-- Enter the name of the state Locality Name (eg, city) []: <-- Enter your city Organization Name (eg, company) [Internet Widgits Pty Ltd]: <-- Enter company name or press enter Organizational Unit Name (eg, section) []: <-- Hit Enter Common Name (e.g. server FQDN or YOUR name) []: <-- Enter the server hostname, in my case: server1.example.com Email Address []: <-- Hit Enter
Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: <-- Hit Enter An optional company name []: <-- Hit Enter writing RSA key
Configuring DBServer Installing ISPConfig crontab no crontab for root no crontab for getmail Detect IP addresses Restarting services ... Installation completed.
Der Installer konfiguriert automatisch alle zugrundeliegenden Dienste, so dass keine manuelle Konfiguration erforderlich ist.
Danach können Sie auf ISPConfig 3 unter http(s)://server1.example.com:8080/ oder http(s)://192.168.1.100:8080/ zugreifen (http oder https hängt davon ab, was Sie während der Installation gewählt haben). Melden Sie sich mit dem Benutzernamen admin und dem Passwort admin an (Sie sollten das Standardpasswort nach der ersten Anmeldung ändern):
Zum Schluss korrigieren wir noch einige Berechtigungen der RoundCube-Installation.
chown root:ispapps /etc/roundcube/debian-db.php chmod 640 /etc/roundcube/debian-db.php chown root:ispapps /etc/roundcube/config.inc.php chmod 640 /etc/roundcube/config.inc.php chown -R ispapps:adm /var/log/roundcube chmod -R 750 /var/log/roundcube chown -R ispapps:ispapps /var/lib/roundcube/temp chmod -R 750 /var/lib/roundcube/temp
Das System ist nun einsatzbereit.
20 Links
- Debian: http://www.debian.org/
- ISPConfig: http://www.ispconfig.org/