Le serveur parfait – Debian 10 (Nginx, BIND, Dovecot, ISPConfig 3.2)

Ce tutoriel montre comment préparer un serveur Debian 10 (avec Nginx, BIND, Dovecot) pour l’installation d’ISPConfig 3.2, et comment installer ISPConfig 3.2. ISPConfig 3 est un panneau de contrôle d’hébergement Web qui te permet de configurer les services suivants via un navigateur Web : Serveur web Apache ou nginx, serveur de messagerie Postfix, serveur IMAP/POP3 Courier ou Dovecot, MySQL, serveur de noms BIND ou MyDNS, PureFTPd, SpamAssassin, ClamAV, et bien d’autres encore. Cette configuration couvre le serveur web Nginx, BIND comme serveur DNS, et Dovecot comme serveur IMAP / POP3.

1 Remarque préliminaire

Dans ce tutoriel, j’utilise le nom d’hôte server1.example.com avec l’adresse IP 192.168.0.100 et la passerelle 192.168.0.1. Ces paramètres peuvent être différents pour toi, tu dois donc les remplacer le cas échéant.Avant de continuer, tu dois avoir une installation minimale de Debian 10. Ilpeut s’agir d’une image Debian minimale fournie par ton hébergeur ou tu peux utiliser le tutorielServeur Debian minimal pour configurer le système de base.

Toutes les commandes ci-dessous sont exécutées en tant qu’utilisateur root. Tu peux te connecter directement en tant qu’utilisateur root ou te connecter en tant qu’utilisateur normal puis utiliser la commande

su -

pour devenir l’utilisateur root sur ton serveur avant de continuer. IMPORTANT: Tu dois utiliser ‘su -‘ et pas seulement ‘su’, sinon ta variable PATH sera mal définie par Debian.

2 Installer le serveur SSH

Si tu n’as pas installé le serveur OpenSSH pendant l’installation du système, tu peux le faire maintenant :

apt-get -y install ssh openssh-server

À partir de maintenant, tu peux utiliser un client SSH tel que PuTTY et te connecter de ton poste de travail à ton serveur Debian 10 et suivre les autres étapes de ce tutoriel.

3 Installe un éditeur de texte shell (facultatif)

J’utiliserai l’éditeur denano Certains utilisateurs préfèrent l’éditeur classique vi, c’est pourquoi j’installerai les deux éditeurs ici. Le programme vi par défaut a un comportement étrange sur Debian et Ubuntu ; pour corriger cela, nous installons vim-nox:

apt-get -y install nano vim-nox

(Tu n’as pas besoin de faire cela si tu utilises un autre éditeur de texte tel que joe).

4 Configurer le nom d’hôte

Le nom d’hôte de ton serveur doit être un sous-domaine comme « server1.example.com ». N’utilise pas un nom de domaine sans partie sous-domaine comme « example.com » comme nom d’hôte car cela causera des problèmes plus tard avec ta configuration de messagerie. Tout d’abord, tu dois vérifier le nom d’hôte dans/etc/hosts et le modifier si nécessaire. La ligne doit être la suivante : « Adresse IP – espace – nom d’hôte complet y compris le domaine – espace – partie sous-domaine ». Modifie /etc/hosts. Fais en sorte qu’il ressemble à ça :

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

Puis édite le fichier /etc/hostname :

nano /etc/hostname

Il ne doit contenir que la partie sous-domaine, dans notre cas :

server1

Enfin, redémarre le serveur pour appliquer la modification :

reboot

Connecte-toi à nouveau et vérifie si le nom d’hôte est correct maintenant avec ces commandes :

hostname
hostname -f

Le résultat sera le suivant :

[email protected]:/tmp# hostname
server1
[email protected]:/tmp# hostname -f
server1.example.com

5 Mets à jour ton installation Debian

Assure-toi d’abord que ton /etc/apt/sources.list contient le dépôt buster/updates (cela t’assure de toujours recevoir les dernières mises à jour du scanner de virus ClamAV – ce projet publie des versions très souvent, et parfois les anciennes versions cessent de fonctionner), et que les dépôts contrib et non-free sont activés.

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

Exécute

apt-get update

pour mettre à jour la base de données des paquets apt et

apt-get upgrade

pour installer les dernières mises à jour (s’il y en a).

6 Change le Shell par défaut

/bin/sh est un lien symbolique vers /bin/dash, mais nous avons besoin de /bin/bash, pas de /bin/dash. C’est pourquoi nous faisons ceci :

dpkg-reconfigure dash

Utiliser dash comme shell système par défaut (/bin/sh) ? <– Non

Si tu ne fais pas cela, l’installation d’ISPConfig échouera.

7 Synchronise l’horloge du système

C’est une bonne idée de synchroniser l’horloge du système avec un serveur NTP(network time protocol) sur Internet. Il suffit d’exécuter

apt-get install ntp

et l’heure de ton système sera toujours synchronisée.

8 Installer Postfix, Dovecot, MySQL, rkhunter et binutils

Nous pouvons installer Postfix, Dovecot, MySQL, rkhunter et Binutils avec une seule commande :

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 curl

Les questions suivantes te seront posées :

Type général de configuration du courrier : <– Site Internet
Nom du système de messagerie : <– serveur1.exemple.com

Pour sécuriser l’installation MariaDB / MySQL et désactiver la base de données de test, exécute cette commande :

mysql_secure_installation

Nous n’avons pas besoin de modifier le mot de passe root MariaDB car nous venons d’en définir un nouveau pendant l’installation. Réponds aux questions suivantes :

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

Ensuite, ouvre les ports TLS/SSL et de soumission dans Postfix :

nano /etc/postfix/master.cf

Décommente le portsoumission et smtps comme suit et ajoute des lignes si nécessaire afin que cette section du fichier master.cf ressemble exactement à celle ci-dessous. IMPORTANT : Supprime le # devant les lignes qui commencent par smtps et submission aussi et pas seulement des lignes -o après ces lignes !

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

Redémarre ensuite Postfix :

service postfix restart

Nous voulons que MariaDB écoute sur toutes les interfaces, pas seulement sur localhost, donc nous éditons /etc/mysql/mariadb.conf.d/50-server.cnf et commentons la ligne bind-address = 127.0.0.1:

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

[...]

Sauvegarde le fichier. Définis ensuite la méthode d’authentification par mot de passe dans MariaDB sur native pour que nous puissions utiliser PHPMyAdmin plus tard pour nous connecter en tant qu’utilisateur root :

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

Modifie le fichier /etc/mysql/debian.cnf et définis-y le mot de passe root MySQL / MariaDB deux fois dans les lignes qui commencent par le mot password.

nano /etc/mysql/debian.cnf

Le mot de passe racine MySQL qui doit être ajouté est indiqué en rouge. Dans cet exemple, le mot de passe est « 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

Pour éviter l’erreur ‘Erreur dans l’acceptation : Trop de fichiers ouverts‘, nous allons maintenant définir des limites de fichiers ouverts plus élevées pour MariaDB.

Ouvre le fichier /etc/security/limits.conf avec un éditeur :

nano /etc/security/limits.conf

et ajoute ces lignes à la fin du fichier.

mysql soft nofile 65535
mysql hard nofile 65535

Ensuite, crée un nouveau répertoire /etc/systemd/system/mysql.service.d/ avec la commande mkdir.

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

et ajoute un nouveau fichier à l’intérieur :

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

Colle les lignes suivantes dans ce fichier :

[Service]
LimitNOFILE=infinity

Sauvegarde le fichier et ferme l’éditeur nano.

Ensuite, nous rechargeons systemd et redémarrons MariaDB :

systemctl daemon-reload
systemctl restart mariadb

Ignore l’avertissement :« Avertissement : Le fichier d’unité, le fichier de configuration source ou les drop-ins de mariadb.service ont changé sur le disque. Exécute ‘systemctl daemon-reload’ pour recharger les unités.« .

Installe le système dbconfig-common :

apt-get install dbconfig-common dbconfig-mysql

Il y a actuellement un problème avec le système Debian dbconfig-common qui empêche l’installation de RoundCube plus tard, répare-le en exécutant cette commande :

sed -i -r 's/_dbc_nodb="yes" dbc_mysql_exec/_dbc_nodb="yes"; dbc_mysql_exec/g' /usr/share/dbconfig-common/internal/mysql

Vérifie maintenant que le réseau est activé. Exécute

netstat -tap | grep mysql

La sortie devrait ressembler à ceci :

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

9 Installer Amavisd-new, SpamAssassin et ClamAV

Pour installer amavisd-new, SpamAssassin et ClamAV, nous exécutons :

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

La configuration d’ISPConfig 3 utilise amavisd qui charge la bibliothèque de filtres SpamAssassin en interne, nous pouvons donc arrêter SpamAssassin pour libérer de la RAM :

systemctl stop spamassassin
systemctl disable spamassassin

10 Installe Nginx, PHP (PHP-FPM) et Fcgiwrap

Nginx est disponible sous forme de paquet pour Debian que nous pouvons installer comme suit :

apt-get install nginx

Si Apache2 est déjà installé sur le système, arrête-le maintenant…

systemctl stop apache2

Le message« Impossible d’arrêter apache2.service : L’unité apache2.service n’est pas chargée. » est correct et n’indique pas d’erreur.

… et supprime les liens de démarrage système d’Apache :

systemctl disable apache2

Démarre ensuite nginx :

systemctl start nginx

(Si Apache2 et nginx sont tous deux installés, le programme d’installation d’ISPConfig 3 te demandera lequel tu veux utiliser – réponds nginx dans ce cas. Si un seul des deux est installé, ISPConfig fera la configuration nécessaire automatiquement).

Nous pouvons faire fonctionner PHP 7.3 dans nginx grâce à PHP-FPM (PHP-FPM (FastCGI Process Manager) est une implémentation alternative de PHP FastCGI avec quelques fonctionnalités supplémentaires utiles pour les sites de toute taille, en particulier les sites plus actifs) que nous installons comme suit :

apt-get install php7.3-fpm

PHP-FPM est un processus démon qui exécute un serveur FastCGI sur le socket /var/run/php/php7.3-fpm.sock.

Pour obtenir la prise en charge de MySQL dans PHP, nous pouvons installer le paquet php7.3-mysql. C’est une bonne idée d’installer aussi d’autres modules PHP car tu pourrais en avoir besoin pour tes applications. Tu peux rechercher les modules PHP disponibles comme ceci :

apt-cache search php7

Choisis ceux dont tu as besoin et installe-les comme ceci :

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

Ouvre ensuite /etc/php/7.3/fpm/php.ini….

nano /etc/php/7.3/fpm/php.ini

… et définis cgi.fix_pathinfo=0 et ton fuseau horaire :

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

(Tu peux trouver tous les fuseaux horaires disponibles dans le répertoire /usr/share/zoneinfo et ses sous-répertoires).

Recharge maintenant PHP-FPM :

systemctl restart php7.3-fpm

Pour obtenir le support CGI dans nginx, nous installons Fcgiwrap.

Fcgiwrap est un wrapper CGI qui devrait également fonctionner pour les scripts CGI complexes et peut être utilisé pour les environnements d’hébergement partagé car il permet à chaque hôte virtuel d’utiliser son propre répertoire cgi-bin.

Installe le paquet fcgiwrap:

apt-get install fcgiwrap

Après l’installation, le démon fcgiwrap devrait déjà être lancé ; son socket est /var/run/fcgiwrap.socket. S’il n’est pas lancé, tu peux utiliser le scriptfservice fcgiwrap pour le démarrer.

C’est tout ! Maintenant, lorsque tu créeras un serveur virtuel nginx, ISPConfig se chargera de la configuration correcte du serveur virtuel.

10.1 Installer phpMyAdmin

Depuis Debian 10, PHPMyAdmin n’est plus disponible sous forme de paquet .deb. Nous allons donc l’installer à partir des sources.

Crée des dossiers pour 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

Va dans le répertoire /tmp et télécharge les sources de PHPMyAdmin :

cd /tmp
wget https://files.phpmyadmin.net/phpMyAdmin/4.9.0.1/phpMyAdmin-4.9.0.1-all-languages.tar.gz

Décompresse le fichier d’archive téléchargé et déplace les fichiers dans le dossier /usr/share/phpmyadmin et nettoie le répertoire /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

Crée un nouveau fichier de configuration pour PHPMyAdmin en te basant sur le fichier d’exemple fourni :

cp /usr/share/phpmyadmin/config.sample.inc.php  /usr/share/phpmyadmin/config.inc.php

Ouvre le fichier de configuration avec l’éditeur nano :

nano /usr/share/phpmyadmin/config.inc.php

Définis un mot de passe sécurisé (secret blowfish) qui doit comporter 32 caractères :

$cfg['blowfish_secret'] = 'bD3e6wva9fnd93jVsb7SDgeiBCd452Dh'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */

N’utilise pas mon exemple de secret blowfish, définis ton propre secret !

Ajoute ensuite une ligne pour définir le répertoire que PHPMyAdmin doit utiliser pour stocker les fichiers temporaires :

$cfg['TempDir'] = '/var/lib/phpmyadmin/tmp';

À l’étape suivante, nous allons configurer le magasin de configuration de phpMyadmin (base de données).

Connecte-toi à MariaDB en tant qu’utilisateur root :

mysql -u root -p

Dans le shell MariaDB, crée une nouvelle base de données pour PHPMyAdmin :

MariaDB [(none)]> CREATE DATABASE phpmyadmin;

Puis crée un nouvel utilisateur :

MariaDB [(none)]> CREATE USER 'pma'@'localhost' IDENTIFIED BY 'mypassword';

Remplace le mot mypassword par un mot de passe sécurisé de ton choix dans les commandes ci-dessus et ci-dessous, utilise le même mot de passe les deux fois. Puis accorde à l’utilisateur l’accès à cette base de données et recharge les autorisations de la base de données.

MariaDB [(none)]> GRANT ALL PRIVILEGES ON phpmyadmin.* TO 'pma'@'localhost' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> EXIT

Enfin, charge les tables SQL dans la base de données :

mysql -u root -p phpmyadmin < /usr/share/phpmyadmin/sql/create_tables.sql

Saisis le mot de passe de la racine MariaDB sur demande.

Il ne nous reste plus qu’à définir les détails de l’utilisateur phpmyadmin dans le fichier de configuration. Ouvre à nouveau le fichier dans l’éditeur nano :

nano /usr/share/phpmyadmin/config.inc.php

Fais défiler vers le bas jusqu’à ce que tu voies les lignes ci-dessous et modifie-les :

/* 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';

J’ai marqué en rouge les lignes que j’ai éditées. Remplace mypassword par le mot de passe que tu as choisi pour l’utilisateur phpmyadmin. Note que les // devant les lignes ont également été supprimés !

Après avoir installé ISPConfig 3.2, tu peux accéder à phpMyAdmin comme suit :

Le serveur virtuel ISPConfig apps sur le port 8081 pour nginx est livré avec une configuration phpMyAdmin, tu peux donc utiliser http://server1.example.com:8081/phpmyadmin ou http://server1.example.com:8081/phpMyAdmin pour accéder à phpMyAdmin.

Si tu veux utiliser un alias /phpmyadmin ou /phpMyAdmin que tu peux utiliser depuis tes sites Web, c’est un peu plus compliqué que pour Apache car nginx n’a pas d’alias globaux (c’est-à-dire des alias qui peuvent être définis pour tous les vhosts). Tu dois donc définir ces alias pour chaque serveur virtuel à partir duquel tu veux accéder à phpMyAdmin.

Pour ce faire, colle ce qui suit dans le champ Directives nginx de l’onglet Options du site Web dans ISPConfig plus tard :

        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;
        }

Si tu utilises https au lieu de http pour ton vhost, tu dois ajouter la ligne fastcgi_param HTTPS on ; à ta configuration de phpMyAdmin comme ceci :

        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;
        }

Si tu utilises à la fois http et https pour ton serveur virtuel, tu peux utiliser la variable $https. Va à nouveau dans le champ Directives nginx, et au lieu de fastcgi_param HTTPS on ; tu ajoutes la ligne fastcgi_param HTTPS $https ; afin de pouvoir utiliser phpMyAdmin pour les requêtes http et https :

        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 Installe Let’s Encrypt

ISPConfig utilise maintenant acme.sh comme client Let’s Encrypt. Installe acme.sh en utilisant la commande suivante :

curl https://get.acme.sh | sh -s

12 Installer Mailman

ISPConfig te permet de gérer (créer/modifier/supprimer) les listes de diffusion Mailman. Si tu veux utiliser cette fonctionnalité, installe Mailman comme suit :

apt-get install mailman

Sélectionne au moins une langue, par exemple :

Langues à prendre en charge : <– en (anglais)
Liste des sites manquants <– Ok

Avant de pouvoir lancer Mailman, une première liste de diffusion appelée mailman doit être créée :

newlist mailman

[email protected]:~# newlist mailman
Saisis l’email de la personne qui gère la liste :
<– adresse email admin,par [email protected]
Mot de passe initial de mailman :<– mot de passe admin pour la liste mailman
Pour finir de créer ta liste de diffusion, tu dois modifierton fichier /etc/aliases (ou son équivalent
) en ajoutant les lignes suivantes, et éventuellement en exécutant le programme
`newaliases’ :

## mailman mailing list
mailman : « |/var/lib/mailman/mail/mailman post mailman »
mailman-admin : »|/var/lib/mailman/mailman admin mailman »
mailman-bounces : »|/var/lib/mailman/mailman bounces mailman »
mailman-confirm : »|/var/lib/mailman/mailman confirme mailman »
mailman-join : »|/var/lib/mailman/mailman join mailman »
mailman-leave : »|/var/lib/mailman/mailman leave mailman »
mailman-owner : »|/var/lib/mailman/mailman owner mailman »
mailman-request : »|/var/lib/mailman/mailman request mailman »
mailman-subscribe : »|/var/lib/mailman/mailman subscribe mailman »
mailman-unsubscribe : »|/var/lib/mailman/mail/mailman unsubscribe mailman »

Appuie sur entrée pour notifier le propriétaire de mailman….<– ENTREE

[email protected]:~#

Ouvre ensuite /etc/aliases

nano /etc/aliases

… et ajoute les lignes suivantes :

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

Exécute

newaliases

après et redémarre Postfix :

systemctl restart postfix

Puis démarre le démon Mailman :

systemctl restart mailman

Après avoir installé ISPConfig 3, tu peux accéder à Mailman comme suit :

Le serveur virtuel ISPConfig apps sur le port 8081 pour nginx est livré avec une configuration Mailman, tu peux donc utiliser http://server1.example.com:8081/cgi-bin/mailman/admin/<listname> ou http://server1.example.com:8081/cgi-bin/mailman/listinfo/<listname> pour accéder à Mailman.

Si tu veux utiliser Mailman depuis tes sites Web, c’est un peu plus compliqué que pour Apache car nginx n’a pas d’alias globaux (c’est-à-dire des alias qui peuvent être définis pour tous les vhosts). Tu dois donc définir ces alias pour chaque serveur virtuel à partir duquel tu veux accéder à Mailman.

Pour ce faire, colle ce qui suit dans le champ Directives nginx de l’onglet Options du site Web dans ISPConfig :

        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;
        }

Cela définit l’alias /cgi-bin/mailman/ pour ton serveur virtuel, ce qui signifie que tu peux accéder à l’interface d’administration de Mailman pour une liste à l’adresse http://<vhost>/cgi-bin/mailman/admin/<listname>, et que la page Web pour les utilisateurs d’une liste de diffusion se trouve à l’adresse http://<vhost>/cgi-bin/mailman/listinfo/<listname> .

Sous http://<vhost>/pipermail, tu trouveras les archives des listes de diffusion.

13 Installer PureFTPd et Quota

Tu peux installer PureFTPd et Quota à l’aide de la commande suivante :

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

Edite le fichier /etc/default/pure-ftpd-common….

nano /etc/default/pure-ftpd-common

… et assure-toi que le mode de démarrage est défini sur standalone et que VIRTUALCHROOT=true:

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

Maintenant, nous configurons PureFTPd pour autoriser les sessions FTP et TLS. FTP est un protocole très peu sûr car tous les mots de passe et toutes les données sont transférés en clair. En utilisant TLS, toute la communication peut être chiffrée, ce qui rend FTP beaucoup plus sûr.

Si tu veux autoriser les sessions FTP et TLS, exécute

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

Afin d’utiliser TLS, nous devons créer un certificat SSL. Je le crée dans /etc/ssl/private/, c’est pourquoi je crée ce répertoire en premier :

mkdir -p /etc/ssl/private/

Ensuite, nous pouvons générer le certificat SSL comme suit :

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

Nom du pays (code de 2 lettres) [AU] : <– Saisis le nom de ton pays (par exemple, « DE »).
Nom de l’État ou de la province (nom complet) [Some-State] :
<– Saisis le nom de ton État ou de ta province.
Nom de la localité (par exemple, la ville) [] :
<– Saisis ta ville.
Nom de l’organisation (ex : société) [Internet Widgits Pty Ltd] :
<– Saisis le nom de ton organisation (par exemple, le nom de ton entreprise).
Nom de l’unité organisationnelle (par exemple, la section) [] :
<– Saisis le nom de ton unité organisationnelle (par exemple, le « département informatique »).
Nom commun (par exemple, VOTRE nom) [] :
<– Saisis le nom de domaine entièrement qualifié du système (par exemple, « server1.example.com »).
Adresse e-mail [] :
<– Saisis ton adresse e-mail.

Change les permissions du certificat SSL :

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

Puis redémarre PureFTPd :

systemctl restart pure-ftpd-mysql

Modifie /etc/fstab. Le mien ressemble à ça (j’ai ajouté ,usrjquota=quota.user,grpjquota=quota.group,jqfmt=vfsv0 à la partition avec le point de montage /) :

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

Pour activer le quota, exécute ces commandes :

mount -o remount /
quotacheck -avugm
quotaon -avug

14 Installer le serveur DNS BIND

BIND peut être installé comme suit :

apt-get install bind9 dnsutils

Si ton serveur est une machine virtuelle, il est fortement recommandé d’installer le démon haveged pour obtenir une entropie plus élevée pour la signature DNSSEC. Tu peux aussi installer haveged sur des serveurs non virtuels, cela ne devrait pas faire de mal.

apt-get -y install haveged
systemctl enable haveged
systemctl start haveged

Tu trouveras une explication à ce sujet ici.

15 Installe Webalizer, AWStats et GoAccess

Webalizer et AWStats peuvent être installés comme suit :

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

Ouvre ensuite /etc/cron.d/awstats

nano /etc/cron.d/awstats

… et commente tout ce qui se trouve dans ce fichier :

#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

Installer la dernière version de GoAccess directement depuis le référentiel GoAccess :

echo "deb https://deb.goaccess.io/ $(lsb_release -cs) main" | sudo tee -a /etc/apt/sources.list.d/goaccess.list
wget -O - https://deb.goaccess.io/gnugpg.key | sudo apt-key --keyring /etc/apt/trusted.gpg.d/goaccess.gpg add -
apt-get update
apt-get install goaccess

16 Installer Jailkit

Jailkit est nécessaire uniquement si tu veux chrooter les utilisateurs SSH. Il peut être installé comme suit(important : Jailkit doit être installé avant ISPConfig – il ne peut pas être installé après !) :

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

Tu peux maintenant installer le paquet .deb de Jailkit comme suit :

cd ..
dpkg -i jailkit_2.20-1_*.deb
rm -rf jailkit-2.20*

17 Installer Fail2ban et UFW Firewall

C’est facultatif mais recommandé, car le moniteur ISPConfig essaie d’afficher le journal :

apt-get install fail2ban

Pour que fail2ban surveille PureFTPd et Dovecot, crée le fichier /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

Redémarre ensuite fail2ban :

systemctl restart fail2ban

Pour installer le pare-feu UFW, exécute cette commande apt :

apt-get install ufw

18 Installer RoundCube

Installe RoundCube avec cette commande :

apt-get install roundcube roundcube-core roundcube-mysql roundcube-plugins

L’installateur te posera les questions suivantes :

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.

Puis modifie le fichier RoundCube /etc/roundcube/config.inc.php et ajuste quelques paramètres :

nano /etc/roundcube/config.inc.php

Définis le default_host sur localhost et le smtp_server.

$config['default_host'] = 'localhost';
$config['smtp_server'] = 'localhost';
$config['smtp_port']  = 25;

ISPConfig a une certaine configuration dans le vhost des apps nginx pour squirrelmail qui fonctionne aussi pour roundcube. Nous l’activons avec :

ln -s /usr/share/roundcube /usr/share/squirrelmail

http://192.168.0.100:8081/webmail
http://server1.example.com:8081/webmail (après avoir installé ISPConfig, voir le chapitre suivant)

Roundcube sur Nginx

19 Installer ISPConfig 3

Avant de commencer l’installation d’ISPConfig, assure-toi qu’Apache est arrêté (s’il est installé – il est possible que certains de tes paquets installés aient installé Apache comme dépendance sans que tu le saches). Si Apache2 est déjà installé sur le système, arrête-le maintenant…

systemctl stop apache2

… et supprime les liens de démarrage système d’Apache :

update-rc.d -f apache2 remove

Assure-toi que nginx est en cours d’exécution :

systemctl start nginx

(Si tu as installé à la fois Apache et nginx, le programme d’installation te demande lequel tu veux utiliser : Apache et nginx détectés. Sélectionne le serveur à utiliser pour ISPConfig : (apache,nginx) [apache] :

Tape nginx. Si seuls Apache ou nginx sont installés, cela est automatiquement détecté par l’installateur et aucune question n’est posée).

Pour installer ISPConfig 3.2 à partir de la dernière version publiée, fais ceci :

cd /tmp
wget http://www.ispconfig.org/downloads/ISPConfig-3-stable.tar.gz
tar xfz ISPConfig-3-stable.tar.gz
cd ispconfig3_install/install/

L’étape suivante consiste à exécuter

php -q install.php

Cela lancera le programme d’installation d’ISPConfig 3. L’installateur configurera pour toi tous les services tels que Postfix, Nginx, Dovecot, etc.

# 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.

L’installateur configure automatiquement tous les services sous-jacents, aucune configuration manuelle n’est donc nécessaire.

Ensuite, tu peux accéder à ISPConfig 3 sous http(s)://server1.example.com:8080/ ou http(s)://192.168.1.100:8080/ ( http ou https dépend de ce que tu as choisi pendant l’installation). Connecte-toi avec le nom d’utilisateur admin et le mot de passe admin (tu dois changer le mot de passe par défaut après ta première connexion) :

Page de connexion d'ISPConfig

Tableau de bord d'ISPConfig sur Debian 10

Enfin, nous fixons certaines permissions de l’installation de RoundCube.

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

Le système est maintenant prêt à être utilisé.

Il existe quelques plugins pour intégrer RoundCube Webmail à ISPConfig, regarde ici pour les instructions d’installation du plugin RoundCube d’ISPConfig.

21 Téléchargement de l’image de la machine virtuelle de ce tutoriel

Ce tutoriel est disponible sous forme d’image de machine virtuelle prête à l’emploi au format ovf/ova qui est compatible avec VMWare et Virtualbox. L’image de la machine virtuelle utilise les identifiants de connexion suivants :

Connexion SSH / Shell

Nom d’utilisateur : administrator
Mot de passe : howtoforge

Nom d’utilisateur : root
Mot de passe : howtoforge

Connexion ISPConfig

Nom d’utilisateur : admin
Mot de passe : howtoforge

Connexion MySQL

Nom d’utilisateur : root
Mot de passe : howtoforge

L’IP de la VM est 192.168.0.100, elle peut être modifiée dans le fichier /etc/network/interfaces. Change tous les mots de passe ci-dessus pour sécuriser la machine virtuelle.

22 Liens

Vous aimerez aussi...