GNU/Linux >> Tutoriels Linux >  >> Debian

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 vous permet de configurer les services suivants via un navigateur Web :serveur Web Apache ou nginx, serveur de messagerie Postfix, serveur Courier ou Dovecot IMAP/POP3, serveur de noms MySQL, BIND ou MyDNS, PureFTPd, SpamAssassin, ClamAV, et bien d'autres. Cette configuration couvre le serveur Web Nginx, BIND en tant que serveur DNS et Dovecot en tant que 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 différer pour vous, vous devez donc les remplacer le cas échéant. Avant de poursuivre, vous devez disposer d'une installation minimale de Debian 10. Il peut s'agir d'une image minimale Debian de votre fournisseur d'hébergement ou vous utilisez le didacticiel Minimal Debian Server pour configurer le système de base.

Toutes les commandes ci-dessous sont exécutées en tant qu'utilisateur root. Connectez-vous directement en tant qu'utilisateur root ou connectez-vous en tant qu'utilisateur normal, puis utilisez la commande

su -

pour devenir un utilisateur root sur votre serveur avant de continuer. IMPORTANT :Vous devez utiliser 'su -' et pas seulement 'su', sinon votre variable PATH est mal définie par Debian.

2 Installer le serveur SSH

Si vous n'avez pas installé le serveur OpenSSH lors de l'installation du système, vous pouvez le faire maintenant :

apt-get -y install ssh openssh-server

À partir de maintenant, vous pouvez utiliser un client SSH tel que PuTTY et vous connecter depuis votre poste de travail à votre serveur Debian 10 et suivre les étapes restantes de ce tutoriel.

3 Installer un éditeur de texte shell (facultatif)

J'utiliserai le nano éditeur de texte dans ce tutoriel. Certains utilisateurs préfèrent l'éditeur vi classique, je vais donc installer les deux éditeurs ici. Le programme vi par défaut a un comportement étrange sur Debian et Ubuntu; pour résoudre ce problème, nous installons vim-nox :

apt-get -y install nano vim-nox

(Vous n'avez pas à le faire si vous utilisez un autre éditeur de texte tel que Joe.)

4 Configurer le nom d'hôte

Le nom d'hôte de votre serveur doit être un sous-domaine tel que "server1.example.com". N'utilisez pas un nom de domaine sans partie de sous-domaine comme "example.com" comme nom d'hôte car cela causera des problèmes plus tard avec votre configuration de messagerie. Tout d'abord, vous devez vérifier le nom d'hôte dans /etc/hosts et le modifier si nécessaire. La ligne doit être :"Adresse IP - espace - nom d'hôte complet, y compris domaine - espace - partie sous-domaine". Modifiez /etc/hosts. Faites en sorte qu'il ressemble à ceci :

nano /etc/hosts
127.0.0.1 localhost.localdomain localhost192.168.0.100 server1.example.com server1# Les lignes suivantes sont souhaitables pour les hôtes compatibles IPv6 ::1 localhost ip6-localhost ip6-loopbackff02 ::1 ip6-allnodesff02 ::2 ip6 -allrouters

Modifiez ensuite le fichier /etc/hostname :

nano /etc/hostname

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

serveur1

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

redémarrer

Connectez-vous à nouveau et vérifiez si le nom d'hôte est correct maintenant avec ces commandes :

nomhôte
nomhôte -f

La sortie doit ressembler à ceci :

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

5 Mettre à jour votre installation Debian

Assurez-vous d'abord que votre /etc/apt/sources.list contient le référentiel buster/updates (cela garantit que vous obtenez toujours les dernières mises à jour pour le scanner de virus ClamAV - ce projet publie très souvent des versions, 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 contribution principale non libre

Exécuter

apt-obtenir la mise à jour

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

apt-get upgrade

pour installer les dernières mises à jour (le cas échéant).

6 Modifier le shell par défaut

/bin/sh est un lien symbolique vers /bin/dash, cependant nous avons besoin de /bin/bash, pas de /bin/dash. C'est pourquoi nous procédons comme suit :

dpkg-reconfigure dash

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

Si vous ne le faites pas, l'installation d'ISPConfig échouera.

7 Synchroniser l'horloge système

C'est une bonne idée de synchroniser l'horloge système avec un NTP (n réseau t temps p rotocol) sur Internet. Exécutez simplement

apt-get install ntp

et l'heure de votre 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 vous seront posées :

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

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

mysql_secure_installation

Nous n'avons pas besoin de modifier le mot de passe racine de MariaDB, car nous venons d'en définir un nouveau lors de l'installation. Répondez aux questions comme suit :

Modifier le mot de passe root ? [O/n] <-- y
Nouveau mot de passe :<-- Saisissez un nouveau mot de passe racine de la base de données
Saisissez à nouveau le nouveau mot de passe :<-- Répétez le mot de passe racine de la base de données
Supprimer les utilisateurs anonymes ? [O/n] <-- o
Interdire la connexion root à distance ? [O/n] <-- o
Supprimer la base de données de test et y accéder ? [O/n] <-- o
Recharger les tables de privilèges maintenant ? [O/n] <-- o

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

nano /etc/postfix/master.cf

Décommentez les sections de soumission et smtps comme suit et ajoutez des lignes si nécessaire afin que cette section du fichier master.cf ressemble exactement à celle ci-dessous. IMPORTANT : Supprimez le # devant les lignes qui commencent par smtps et la soumission aussi et pas seulement des lignes -o après ces lignes !

[...]
soumission 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 s =$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_se nder_restrictions=$mua_sender_restrictions
# -o smtpd_recipient_restrictions=
# -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
# -o milter_macro_daemon_name=ORIGINATING
[...]

Redémarrez ensuite Postfix :

redémarrage postfixé du service

Nous voulons MariaDB pour écouter sur toutes les interfaces, pas seulement 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
[...]
# Au lieu de sauter la mise en réseau, la valeur par défaut est désormais d'écouter uniquement sur# localhost qui est plus compatible et n'est pas moins sécurisé.#bind-address =127.0.0.1

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

echo "mettre à jour mysql.user set plugin ='mysql_native_password' where user='root';" | mysql -u racine

Modifiez le fichier /etc/mysql/debian.cnf et définissez-y le mot de passe root MYSQL / MariaDB deux fois dans les lignes commençant par le mot password.

nano /etc/mysql/debian.cnf

Le mot de passe root MySQL qui doit être ajouté est affiché en rouge. Dans cet exemple, le mot de passe est "howtoforge".

# Généré automatiquement pour les scripts Debian. NE PAS TOUCHER !
[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 lors de l'acceptation :Trop de fichiers ouverts ' nous allons définir des limites de fichiers ouverts plus élevées pour MariaDB maintenant.

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

nano /etc/security/limits.conf

et ajoutez ces lignes à la fin du fichier.

mysql soft nofile 65535
mysql hard nofile 65535

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

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

et ajoutez un nouveau fichier à l'intérieur :

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

collez les lignes suivantes dans ce fichier :

[Service]
LimitNOFILE=infinity

Enregistrez le fichier et fermez l'éditeur nano.

Ensuite, nous rechargeons systemd et redémarrons MariaDB :

systemctl daemon-reload
systemctl restart mariadb

Ignorez 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écutez 'systemctl daemon-reload' pour recharger les unités. ".

Installez 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 ultérieurement, corrigez-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érifiez maintenant que la mise en réseau est activée. Exécuter

netstat -tap | grep mysql

Le résultat devrait ressembler à ceci :

[email protected] :~# netstat -tap | grep mysql
tcp6       0      0 [::]:mysql              [::]:*                  ÉCOUTER      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 noarch 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 Installer Nginx, PHP (PHP-FPM) et Fcgiwrap

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

apt-get install nginx

Si Apache2 est déjà installé sur le système, arrêtez-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 supprimer les liens de démarrage du système d'Apache :

systemctl désactiver apache2

Démarrez ensuite nginx :

systemctl démarrer nginx

(Si Apache2 et nginx sont installés, le programme d'installation d'ISPConfig 3 vous demandera lequel vous souhaitez utiliser - répondez nginx dans ce cas. Si un seul de ces deux éléments est installé, ISPConfig effectuera automatiquement la configuration nécessaire.)

Nous pouvons faire fonctionner PHP 7.3 dans nginx via 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 les plus fréquentés) 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 en PHP, nous pouvons installer le package php7.3-mysql. C'est une bonne idée d'installer d'autres modules PHP, car vous pourriez en avoir besoin pour vos applications. Vous pouvez rechercher les modules PHP disponibles comme ceci :

apt-cache recherche php7

Choisissez ceux dont vous avez besoin et installez-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

Ouvrez ensuite /etc/php/7.3/fpm/php.ini...

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

... et définissez cgi.fix_pathinfo=0 et votre fuseau horaire :

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

(Vous pouvez trouver tous les fuseaux horaires disponibles dans les répertoires /usr/share/zoneinfo et ses sous-répertoires.)

Rechargez maintenant PHP-FPM :

systemctl redémarre 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 vhost d'utiliser son propre répertoire cgi-bin.

Installez le package 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 en cours d'exécution, vous pouvez utiliser le script fservice fcgiwrap pour le démarrer.

C'est ça! Désormais, lorsque vous créez un vhost nginx, ISPConfig s'occupe de la configuration correcte du vhost.

10.1 Installer phpMyAdmin

Depuis Debian 10, PHPMyAdmin n'est plus disponible en tant que package .deb. Par conséquent, nous allons l'installer à partir de la source.

Créez 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
touchez /etc/phpmyadmin/htpasswd.setup

Allez dans le répertoire /tmp et téléchargez 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écompressez le fichier d'archive téléchargé et déplacez les fichiers dans le dossier /usr/share/phpmyadmin et nettoyez 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éez un nouveau fichier de configuration pour PHPMyaAdmin basé sur l'exemple de fichier fourni :

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

Ouvrez le fichier de configuration avec l'éditeur nano :

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

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

$cfg['blowfish_secret'] ='bD3e6wva9fnd93jVsb7SDgeiBCd452Dh'; /* VOUS DEVEZ LE REMPLIR POUR L'AUTHENTIFICATION DES COOKIES ! */

N'utilisez pas mon exemple de secret de poisson-globe, définissez le vôtre !

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

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

Dans l'étape suivante, nous configurerons le magasin de configuration de phpMyadmin (base de données).

Connectez-vous à MariaDB en tant qu'utilisateur racine :

mysql -u root -p

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

MariaDB [(aucun)]> CRÉER BASE DE DONNÉES phpmyadmin ;

Créez ensuite un nouvel utilisateur :

MariaDB [(none)]> CRÉER UN UTILISATEUR 'pma'@'localhost' IDENTIFIÉ PAR 'mypassword' ;

Remplacez le mot monmotdepasse avec un mot de passe sécurisé de votre choix dans les commandes ci-dessus et ci-dessous, utilisez le même mot de passe les deux fois. Accordez ensuite à l'utilisateur l'accès à cette base de données et rechargez les autorisations de base de données.

MariaDB [(aucun)]> ACCORDER TOUS LES PRIVILÈGES SUR phpmyadmin.* À 'pma'@'localhost' IDENTIFIÉ PAR 'mypassword' AVEC GRANT OPTION ;
MariaDB [(aucun)]> FLUSH PRIVILÈGES ;
MariaDB [(aucun)]> QUITTER

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

mysql -u root -p phpmyadmin  

Entrez le mot de passe root MariaDB sur demande.

Tout ce que nous avons à faire maintenant est de définir les détails de l'utilisateur phpmyadmin dans le fichier de configuration. Ouvrez à nouveau le fichier dans l'éditeur nano :

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

Faites défiler vers le bas jusqu'à ce que vous voyiez les lignes ci-dessous et modifiez-les :

/* Utilisateur utilisé pour manipuler avec le stockage */
$cfg['Servers'][$i]['controlhost'] ='localhost';
$cfg['Servers'][ $i]['controlport'] ='';
$cfg['Servers'][$i]['controluser'] ='pma';
$cfg['Servers'][$ i]['controlpass'] ='mypassword';

/* Base de données et tables de stockage */
$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é les lignes en rouge que j'ai éditées. Remplacez monmotdepasse avec le mot de passe que vous avez choisi pour l'utilisateur phpmyadmin. Notez que le // devant les lignes a également été supprimé !

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

Le vhost des applications ISPConfig sur le port 8081 pour nginx est livré avec une configuration phpMyAdmin, vous pouvez donc utiliser http://server1.example.com:8081/phpmyadmin ou http://server1.example.com:8081/phpMyAdmin pour accéder à phpMyAdmin.

Si vous souhaitez utiliser un alias /phpmyadmin ou /phpMyAdmin que vous pouvez utiliser depuis vos 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). Vous devez donc définir ces alias pour chacun vhost à partir duquel vous souhaitez accéder à phpMyAdmin.

Pour ce faire, collez ultérieurement ce qui suit dans le champ Directives nginx de l'onglet Options du site Web dans ISPConfig :

 emplacement /phpmyadmin { root /usr/share/ ; index index.php index.html index.htm; emplacement ~ ^/phpmyadmin/(.+\.php)$ { try_files $uri =404; racine /usr/partage/ ; fastcgi_pass unix:/var/run/php/php7.3-fpm.sock ; fastcgi_index index.php ; fastcgi_param SCRIPT_FILENAME $request_filename ; inclure /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 activé ; } emplacement ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { root /usr/share/; } } emplacement /phpMyAdmin { réécrire ^/* /phpmyadmin dernier ; } 

Si vous utilisez https au lieu de http pour votre vhost, vous devez ajouter la ligne fastcgi_param HTTPS on; à votre configuration phpMyAdmin comme ceci :

 emplacement /phpmyadmin { root /usr/share/ ; index index.php index.html index.htm; emplacement ~ ^/phpmyadmin/(.+\.php)$ { try_files $uri =404; racine /usr/partage/ ; fastcgi_pass unix:/var/run/php/php7.3-fpm.sock ; fastcgi_param HTTPS activé ; # <-- ajoutez cette ligne fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $request_filename ; inclure /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 activé ; } emplacement ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { root /usr/share/; } } emplacement /phpMyAdmin { réécrire ^/* /phpmyadmin dernier ; } 

Si vous utilisez à la fois http et https pour votre vhost, vous pouvez utiliser la variable $https. Accédez à nouveau au champ Directives nginx, et au lieu de fastcgi_param HTTPS on ; vous ajoutez la ligne fastcgi_param HTTPS $https; afin que vous puissiez utiliser phpMyAdmin pour les requêtes http et https :

 emplacement /phpmyadmin { root /usr/share/ ; index index.php index.html index.htm; emplacement ~ ^/phpmyadmin/(.+\.php)$ { try_files $uri =404; racine /usr/partage/ ; fastcgi_pass unix:/var/run/php/php7.3-fpm.sock ; fastcgi_param HTTPS $https; # <-- ajoutez cette ligne fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $request_filename ; inclure /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 activé ; } emplacement ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { root /usr/share/; } } emplacement /phpMyAdmin { réécrire ^/* /phpmyadmin dernier ; } 

11 Installer Let's Encrypt

ISPConfig utilise maintenant acme.sh comme client Let's Encrypt. Installez acme.sh à l'aide de la commande suivante :

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

12 Installer Mailman

ISPConfig vous permet de gérer (créer/modifier/supprimer) des listes de diffusion Mailman. Si vous souhaitez utiliser cette fonctionnalité, installez Mailman comme suit :

apt-get install mailman

Sélectionnez au moins une langue, par exemple :

Langues à prendre en charge :<-- fr (anglais)
Liste de sites manquante <-- Ok

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

nouvelle liste de facteur

[email protected] : # newlist mailman
Saisissez l'adresse e-mail de la personne qui gère la liste : <-- l'adresse e-mail de l'administrateur, par ex. [email protected]
Mot de passe initial mailman : <-- mot de passe admin pour la liste mailman 
Pour finir la création de votre liste d'envoi , vous de vaut modifier votre /etc/aliases (ou
équivalent) fichier en 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/mail/mailman admin mailman"
mailman-bounces :      "|/var/lib/mailman/mail/mailman rebondit mailman"
mailman-confirm :      "|/var/lib/mailman/mail/mailman confirm mailman"
mailman-join :         "|/var/lib/mailman/mail/mailman join mailman"
mailman- congé :        "|/var/lib/mailman/mail/mailman congé 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-unsub scribe :  "|/var/lib/mailman/mail/mailman unsubscribe mailman"

Appuyez sur Entrée pour notifier le propriétaire du mailman... <-- ENTER

[email protected] :~#

Ouvrez ensuite /etc/aliases...

nano /etc/aliases

... et ajoutez les lignes suivantes :

[...]## mailman mailing listmailman:"|/var/lib/mailman/mail/mailman post mailman"mailman-admin:"|/var/lib/mailman/mail/mailman admin mailman"mailman- rebondit :"|/var/lib/mailman/mail/mailman rebondit mailman"mailman-confirm :"|/var/lib/mailman/mail/mailman confirme mailman"mailman-join :"|/var/lib/mailman/mail /mailman rejoindre mailman"mailman-leave :"|/var/lib/mailman/mail/mailman quitter mailman"mailman-owner :"|/var/lib/mailman/mail/mailman propriétaire mailman"mailman-request :"|/ var/lib/mailman/mail/mailman demande mailman"mailman-subscribe:"|/var/lib/mailman/mail/mailman s'abonner mailman"mailman-unsubscribe:"|/var/lib/mailman/mail/mailman se désabonner mailman" 

Exécuter

nouveaux alias

ensuite et relancez Postfix :

systemctl restart postfix

Démarrez ensuite le démon Mailman :

systemctl redémarre mailman

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

Le vhost des applications ISPConfig sur le port 8081 pour nginx est livré avec une configuration Mailman, vous pouvez donc utiliser http://server1.example.com:8081/cgi-bin/mailman/admin/ ou http://server1.example .com:8081/cgi-bin/mailman/listinfo/ pour accéder à Mailman.

Si vous souhaitez utiliser Mailman à partir de vos 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). Vous devez donc définir ces alias pour chacun vhost à partir duquel vous souhaitez accéder à Mailman.

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

 emplacement /cgi-bin/mailman { root /usr/lib/ ; fastcgi_split_path_info (^/cgi-bin/mailman/[^/]*)(.*)$ ; inclure /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 activé ; fastcgi_pass unix:/var/run/fcgiwrap.socket; } emplacement /images/mailman { alias /usr/share/images/mailman; } emplacement /pipermail { alias /var/lib/mailman/archives/public ; indexation automatique activée ; } 

Cela définit l'alias /cgi-bin/mailman/ pour votre vhost, ce qui signifie que vous pouvez accéder à l'interface d'administration Mailman pour une liste à http:///cgi-bin/mailman/admin/, et le La page Web pour les utilisateurs d'une liste de diffusion peut être trouvée à http:///cgi-bin/mailman/listinfo/.

Sous http:///pipermail, vous trouverez les archives de la liste de diffusion.

13 Installer PureFTPd et Quota

PureFTPd et quota peuvent être installés avec la commande suivante :

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

Editez le fichier /etc/default/pure-ftpd-common...

nano /etc/default/pure-ftpd-common

... et assurez-vous que le mode de démarrage est défini sur autonome et définissez VIRTUALCHROOT=true :

[...]STANDALONE_OR_INETD=autonome[...]VIRTUALCHROOT=true[...]

Nous configurons maintenant 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 texte clair. En utilisant TLS, toute la communication peut être cryptée, ce qui rend le FTP beaucoup plus sécurisé.

Si vous souhaitez autoriser les sessions FTP et TLS, exécutez

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

Pour utiliser TLS, nous devons créer un certificat SSL. Je le crée dans /etc/ssl/private/, donc je crée d'abord ce répertoire :

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 à 2 lettres) [AU] :<-- Saisissez le nom de votre pays (par exemple, "DE").
Nom de l'État ou de la province (nom complet) [Some-State] :<-- Saisissez votre état ou Nom de la province.
Nom de la localité (par exemple, ville) [] :<-- Entrez votre ville.
Nom de l'organisation (par exemple, société) [Internet Widgits Pty Ltd] :<-- Entrez le nom de votre organisation (par exemple, le nom de votre entreprise).
Nom de l'unité organisationnelle (par exemple, section) [] :<-- Saisissez le nom de votre unité organisationnelle (par exemple, "Service informatique").
Nom commun (par exemple, VOTRE nom) [] :<-- Saisissez le nom de domaine complet du système (par exemple, "serveur1.exemple.com").
Adresse e-mail [] :<-- Saisissez votre adresse e-mail.

Modifiez les autorisations du certificat SSL :

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

Redémarrez ensuite PureFTPd :

systemctl redémarre pure-ftpd-mysql

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

nano /etc/fstab
# /etc/fstab :informations statiques sur le système de fichiers.
#
# Utilisez 'blkid' pour imprimer l'identifiant universel unique d'un
# périphérique ; cela peut être utilisé avec UUID=comme un moyen plus robuste de nommer les périphériques
# qui fonctionne même si des disques sont ajoutés et supprimés. Voir fstab(5).
#
#
# / était sur /dev/sda1 lors de l'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 lors de l'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écutez ces commandes :

monter -o remonter /
quotacheck -avugm
quotaon -avug

14 Installer le serveur DNS BIND

BIND peut être installé comme suit :

apt-get install bind9 dnsutils

Si votre 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. Vous pouvez également 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

Une explication sur ce sujet peut être trouvée ici.

15 Installer 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

Ouvrez ensuite /etc/cron.d/awstats...

nano /etc/cron.d/awstats

... et commentez 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# Générer des statiques rapports :#10 03 * * * www-data [ -x /usr/share/awstats/tools/buildstatic.sh ] &&/usr/share/awstats/tools/buildstatic.sh

Installation de la dernière version de GoAccess directement à partir du 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 n'est nécessaire que si vous souhaitez 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 binaire

Vous pouvez maintenant installer le package Jailkit .deb comme suit :

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

17 Installer Fail2ban et le pare-feu UFW

Ceci 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éez 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

[colombier]
enabled =true
filter =pigeonnier
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émarrez ensuite fail2ban :

redémarrage systemctl fail2ban

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

apt-get install ufw

18 Installer RoundCube

Installez RoundCube avec cette commande :

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

Le programme d'installation posera les questions suivantes :

Configurer la base de données pour roundcube avec dbconfig.common ? <-- yes
MySQL application password for roundcube:<-- press enter
Password of the databases administrative user:<-- enter the MySQL root password here.

Then edit the RoundCube /etc/roundcube/config.inc.php file and adjust a few settings:

nano /etc/roundcube/config.inc.php

Set the default_host to localhost and the smtp_server.

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

ISPConfig has some configuration in the nginx apps vhost for squirrelmail which works for roundcube as well. We activate it with:

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

http://192.168.0.100:8081/webmail
http://server1.example.com:8081/webmail (after you have installed ISPConfig, see the next chapter)

19 Install ISPConfig 3

Before you start the ISPConfig installation, make sure that Apache is stopped (if it is installed - it is possible that some of your installed packages have installed Apache as a dependency without you knowing). If Apache2 is already installed on the system, stop it now...

systemctl stop apache2

... and remove Apache's system startup links:

update-rc.d -f apache2 remove

Make sure that nginx is running:

systemctl start nginx

(If you have both Apache and nginx installed, the installer asks you which one you want to use:Apache and nginx detected. Select server to use for ISPConfig:(apache,nginx) [apache]:

Type nginx. If only Apache or nginx are installed, this is automatically detected by the installer, and no question is asked.)

To install ISPConfig 3.2 from the latest released version, do this:

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

The next step is to run

php -q install.php

This will start the ISPConfig 3 installer. The installer will configure all services like Postfix, Nginx, Dovecot, etc. for you.

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

The installer automatically configures all underlying services, so no manual configuration is needed.

Afterward you can access ISPConfig 3 under http(s)://server1.example.com:8080/ or http(s)://192.168.1.100:8080/ ( http or https depends on what you chose during installation). Log in with the username admin and the password admin (you should change the default password after your first login):

Finally, we fix some permissions of the RoundCube installation.

chown root:ispapps /etc/roundcube/debian-db.phpchmod 640 /etc/roundcube/debian-db.phpchown root:ispapps /etc/roundcube/config.inc.phpchmod 640 /etc/roundcube/config.inc.phpchown -R ispapps:adm /var/log/roundcubechmod -R 750 /var/log/roundcubechown -R ispapps:ispapps /var/lib/roundcube/tempchmod -R 750 /var/lib/roundcube/temp

The system is now ready to be used.

There exist some plugins to integrate RoundCube Webmail with ISPConfig, have a look here for the ISPConfig RoundCube plugin installation instructions.

20.1 ISPConfig 3 Manual

In order to learn how to use ISPConfig 3, I strongly recommend downloading the ISPConfig 3 Manual.

On more than 300 pages, it covers the concept behind ISPConfig (admin, resellers, clients), explains how to install and update ISPConfig 3, includes a reference for all forms and form fields in ISPConfig together with examples of valid inputs, and provides tutorials for the most common tasks in ISPConfig 3. It also lines out how to make your server more secure and comes with a troubleshooting section at the end.

21 Virtual machine image download of this tutorial

This tutorial is available as ready to use virtual machine image in ovf/ova format that is compatible with VMWare and Virtualbox. The virtual machine image uses the following login details:

SSH / Shell Login

Username:administrator
Password:howtoforge

Username: root
Password:howtoforge

ISPConfig Login

Username:admin
Password:howtoforge

MySQL Login

Username:root
Password:howtoforge

The IP of the VM is 192.168.0.100, it can be changed in the file /etc/network/interfaces. Please change all the above passwords to secure the virtual machine.

  • Debian :http://www.debian.org/
  • ISPConfig:http://www.ispconfig.org/

Debian
  1. Le serveur parfait - Ubuntu 14.10 (nginx, BIND, Dovecot, ISPConfig 3)

  2. Le serveur parfait - OpenSUSE 12.3 x86_64 (nginx, Dovecot, ISPConfig 3)

  3. Le serveur parfait - Ubuntu 15.04 (nginx, BIND, Dovecot et ISPConfig 3)

  4. Le serveur parfait - Ubuntu 12.04 LTS (nginx, BIND, Dovecot, ISPConfig 3)

  5. Le serveur parfait - Ubuntu 12.10 (nginx, BIND, Dovecot, ISPConfig 3)

Le serveur parfait - OpenSUSE 12.2 x86_64 (nginx, Dovecot, ISPConfig 3)

Le serveur parfait - CentOS 6.3 x86_64 (nginx, Dovecot, ISPConfig 3)

Le serveur parfait - Debian Wheezy (nginx, BIND, Dovecot, ISPConfig 3)

Le serveur parfait - Ubuntu 13.04 (Apache2, BIND, Dovecot, ISPConfig 3)

Le serveur parfait - CentOS 6.4 x86_64 (nginx, Dovecot, ISPConfig 3)

Le serveur parfait - Debian Wheezy (Apache2, BIND, Dovecot, ISPConfig 3)