Le serveur parfait CentOS 8 avec Apache, PHP, Postfix, Dovecot, Pure-FTPD, BIND et ISPConfig 3.2

Ce tutoriel montre l’installation d’ISPConfig 3.2 sur un serveur CentOS 8 (64Bit). ISPConfig 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, PHP, serveur de messagerie Postfix, MySQL, serveur de noms BIND, PureFTPd, SpamAssassin, ClamAV, Mailman, et bien d’autres encore.

1 Exigences

Pour installer un tel système, tu auras besoin des éléments suivants :

  • Un système de serveur minimal Centos 8. Il peut s’agir d’un serveur installé à partir de zéro comme décrit dans notre tutoriel sur le serveur minimal Centos 8 ou d’un serveur virtuel ou d’un serveur racine d’une société d’hébergement qui a une configuration minimale Centos 8 installée.
  • Une connexion Internet rapide.

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

3 Prépare le serveur

Définis la disposition du clavier

Si la disposition du clavier du serveur ne correspond pas à ton clavier, tu peux passer au bon clavier (dans mon cas « de » pour une disposition de clavier allemande, avec la commande localectl :

localectl set-keymap de

Pour obtenir une liste de tous les keymaps disponibles, exécute :

localectl list-keymaps

Je veux installer ISPConfig à la fin de ce tutoriel, ISPConfig est livré avec le script de pare-feu Bastille que j’utiliserai comme pare-feu, c’est pourquoi je désactive maintenant le pare-feu CentOS par défaut. Bien sûr, tu es libre de laisser le pare-feu CentOS activé et de le configurer selon tes besoins (mais tu ne devrais pas utiliser un autre pare-feu par la suite car il interférera très probablement avec le pare-feu CentOS).

Exécuter…

dnf -y install net-tools wget rsyslog curl
systemctl stop firewalld.service
systemctl disable firewalld.service

pour arrêter et désactiver le pare-feu CentOS. Ce n’est pas grave si tu obtiens des erreurs ici, cela indique simplement que le pare-feu n’a pas été installé.

Tu dois ensuite vérifier que le pare-feu a vraiment été désactivé. Pour ce faire, exécute la commande :

iptables -L

Le résultat devrait ressembler à ceci :

[[email protected] ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination

Ou utilise la commande firewall-cmd :

firewall-cmd --state
[[email protected] ~]# firewall-cmd --state
not running
[[email protected] ~]#

Je vais maintenant installer l’éditeur de configuration réseau et l’éditeur basé sur le shell « nano » que j’utiliserai dans les prochaines étapes pour modifier les fichiers de configuration :

dnf -y install nano wget NetworkManager-tui yum-utils

Si tu n’as pas configuré ta carte réseau pendant l’installation, tu peux le faire maintenant. Exécute…

nmtui

… et va dans Modifier une connexion:

Sélectionne ton interface réseau :

Renseigne ensuite les détails de ton réseau – désactive DHCP et renseigne une adresse IP statique, un masque de réseau, ta passerelle et un ou deux serveurs de noms, puis clique sur Ok:

Ensuite, sélectionne OK pour confirmer les changements que tu as faits dans les paramètres du réseau

et Quitter pour fermer l’outil de configuration réseau nmtui.

Quit nmtui

Tu devrais exécuter

ifconfig

maintenant pour vérifier si l’installateur a bien obtenu ton adresse IP :

[[email protected] ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.100  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::20c:29ff:feee:b665  prefixlen 64  scopeid 0x20<link>
        inet6 2003:e1:bf22:1b00:20c:29ff:feee:b665  prefixlen 64  scopeid 0x0<global>
        ether 00:0c:29:ee:b6:65  txqueuelen 1000  (Ethernet)
        RX packets 2874  bytes 1369892 (1.3 MiB)
        RX errors 0  dropped 546  overruns 0  frame 0
        TX packets 968  bytes 160901 (157.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Si ta carte réseau n’y apparaît pas, alors elle n’est pas activée au démarrage. Dans ce cas, ouvre le fichier /etc/sysconfig/network-scripts/ifcfg-eth0

nano /etc/sysconfig/network-scripts/ifcfg-ens33

et règle ONBOOT sur oui :

[...]
ONBOOT=yes
[...]

et redémarre le serveur.

Vérifie dans ton /etc/resolv.conf s’il répertorie tous les serveurs de noms que tu as précédemment configurés :

cat /etc/resolv.conf

S’il manque des serveurs de noms, exécute

nmtui

et ajoute à nouveau les serveurs de noms manquants.

Maintenant, passons à la configuration…

Modification de /etc/hosts et /etc/hostname

Ensuite, nous allons modifier /etc/hosts. Fais en sorte qu’il ressemble à ceci :

nano /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
192.168.0.100 server1.example.com server1

::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

Définis le nom d’hôte dans le fichier /etc/hostname. Le fichier doit contenir le nom de domaine entièrement qualifié (par exemple, server1.example.com dans mon cas) et pas seulement le nom court comme « server1 ». Ouvre le fichier avec l’éditeur nano :

nano /etc/hostname

Et définis le nom d’hôte dans le fichier.

server1.example.com

Enregistre le fichier et quitte nano.

Configure SELinux sur permissif

SELinux est une extension de sécurité de CentOS qui devrait fournir une sécurité étendue. ISPConfig n’est pas livré avec un jeu de règles SELinux, c’est pourquoi je l’ai réglé sur permissif (c’est indispensable si tu veux installer ISPConfig plus tard).

Modifie /etc/selinux/config et règle SELINUX=permissive:

nano /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=permissive
# SELINUXTYPE= can take one of these two values:
#     targeted - Targeted processes are protected,
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted

Ensuite, nous devons redémarrer le système :

reboot

4 Activer des dépôts supplémentaires et installer quelques logiciels

Tout d’abord, nous importons les clés GPG pour les paquets logiciels :

rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY*

Ensuite, nous activons le dépôt EPEL sur notre système CentOS car de nombreux paquets que nous allons installer au cours de ce tutoriel ne sont pas disponibles dans le dépôt officiel de CentOS 8 :

dnf -y install epel-release

Active les Power Tools :

dnf config-manager --set-enabled powertools

Puis nous mettons à jour nos paquets existants sur le système :

dnf -y update

Nous installons maintenant certains paquets logiciels qui seront nécessaires par la suite :

dnf -y groupinstall 'Development Tools'

5 Quota

(Si tu as choisi un schéma de partitionnement différent du mien, tu dois adapter ce chapitre pour que quota s’applique aux partitions où tu en as besoin).

Pour installer quota, nous exécutons cette commande :

dnf -y install quota

Maintenant, nous vérifions si le quota est déjà activé pour le système de fichiers où sont stockées les données du site Web (/var/www) et de Maildir (var/vmail). Dans cet exemple de configuration, j’ai une seule grande partition racine, je cherche donc ‘ / ‘ :

mount | grep ' / '
[[email protected] ~]# mount | grep ' / '
/dev/mapper/centos-root on / type xfs (rw,relatime,attr2,inode64,noquota)
[[email protected] ~]#

Si tu as une partition /var séparée, alors utilise :

mount | grep ' /var '

à la place. Si la ligne contient le mot« noquota« , alors procède aux étapes suivantes pour activer le quota.

Activer les quotas sur la partition / (racine)

Normalement, tu devrais activer le quota dans le fichier /etc/fstab, mais si le système de fichiers est le système de fichiers racine « / », le quota doit être activé par un paramètre de démarrage du noyau Linux.

Modifie le fichier de configuration de grub :

nano /etc/default/grub

Cherche la ligne qui commence par GRUB_CMDLINE_LINUX et ajoute rootflags=uquota,gquota aux paramètres de la ligne de commande pour que la ligne résultante ressemble à ceci :

GRUB_CMDLINE_LINUX="crashkernel=auto resume=/dev/mapper/cl-swap rd.lvm.lv=cl/root rd.lvm.lv=cl/swap rootflags=uquota,gquota"

et applique les modifications en exécutant la commande suivante.

cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg_bak
grub2-mkconfig -o /boot/grub2/grub.cfg

et redémarre le serveur.

reboot

Vérifie maintenant si le quota est activé :

mount | grep ' / '
[[email protected] ~]# mount | grep ' / '
/dev/mapper/centos-root on / type xfs (rw,relatime,attr2,inode64,usrquota,grpquota)
[[email protected] ~]#

Lorsque le quota est activé, nous pouvons voir« usrquota,grpquota » dans la liste des options de montage.

Activer le quota sur une partition /var séparée

Si tu as une partition /var séparée, alors édite /etc/fstab et ajoute ,uquota,gquota à la partition /(/dev/mapper/centos-var) :

nano /etc/fstab

#
# /etc/fstab
# Created by anaconda on Sun Sep 21 16:33:45 2014
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 1 1
/dev/mapper/centos-var /var xfs defaults,uquota,gquota 1 2
UUID=9ac06939-7e43-4efd-957a-486775edd7b4 /boot xfs defaults 1 3
/dev/mapper/centos-swap swap swap defaults 0 0

Puis exécute

mount -o remount /var
quotacheck -avugm
quotaon -avug

pour activer le quota. Si tu reçois une erreur indiquant qu’il n’y a pas de partition avec quota activé, redémarre le serveur avant de continuer.

6 Installe Apache, PHP, MySQL et phpMyAdmin

Active le référentiel Remi pour obtenir les nouvelles versions de PHP (actuellement PHP 7.4) :

dnf install http://rpms.remirepo.net/enterprise/remi-release-8.rpm
dnf -y install yum-utils
dnf -y module reset php
dnf -y module install php:remi-7.4
dnf update

Nous pouvons installer les paquets nécessaires avec une seule commande :

dnf -y install httpd mod_ssl mariadb-server php php-mysqlnd php-mbstring

Pour que le serveur ne puisse pas être attaqué par la vulnérabilité HTTPOXY, nous allons désactiver l’en-tête HTTP_PROXY dans apache de manière globale.

Ajoute la règle d’en-tête apache à la fin du fichier httpd.conf :

echo "RequestHeader unset Proxy early" >> /etc/httpd/conf/httpd.conf

Et redémarre httpd pour appliquer le changement de configuration.

service httpd restart

Installe phpMyAdmin :

cd /tmp
wget https://files.phpmyadmin.net/phpMyAdmin/5.0.2/phpMyAdmin-5.0.2-all-languages.tar.gz
tar xzvf phpMyAdmin-5.0.2-all-languages.tar.gz
mkdir /usr/share/phpmyadmin
mv phpMyAdmin-5.0.2-all-languages/* /usr/share/phpmyadmin/
mkdir /usr/share/phpmyadmin/tmp
chown -R apache:apache /usr/share/phpmyadmin
chmod 777 /usr/share/phpmyadmin/tmp

Facultatif : Change le module Apache MPM

CentOS 8 utilise le module Apache MPM Event par défaut, ce qui est une bonne chose d’un côté, car cela te permet d’utiliser le protocole HTTP/2. D’un autre côté, cela ne te permet pas d’utiliser le module apache mod_php. En général, il faut utiliser PHP-FPM par défaut aujourd’hui et ISPConfig le prend en charge. Si tu as besoin de l’ancien mode mod_php pour des raisons de compatibilité, tu peux changer le MPM Apache comme suit :

nano /etc/httpd/conf.modules.d/00-mpm.conf

Ajoute un # devant la ligne d’événement MPM pour qu’elle ressemble à ceci :

# LoadModule mpm_event_module modules/mod_mpm_event.so

Puis supprime le # devant la ligne MPM Prefork, pour que cela ressemble à ceci :

LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

Puis redémarre httpd pour appliquer le changement de configuration.

service httpd restart

7 Installer Dovecot

Tu peux installer Dovecot comme suit :

dnf -y install dovecot dovecot-mysql dovecot-pigeonhole

Crée un fichier vide dovecot-sql.conf et crée des liens symboliques :

touch /etc/dovecot/dovecot-sql.conf
ln -s /etc/dovecot/dovecot-sql.conf /etc/dovecot-sql.conf
ln -s /etc/dovecot/dovecot.conf /etc/dovecot.conf

Crée ensuite les liens de démarrage du système et démarre Dovecot :

systemctl enable dovecot
systemctl start dovecot

8 Installer Postfix

Postfix peut être installé comme suit :

dnf -y install postfix postfix-mysql

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

nano /etc/postfix/master.cf

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

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

Désactive ensuite Sendmail et démarre Postfix et MariaDB (MySQL) :

systemctl enable mariadb.service
systemctl start mariadb.service
systemctl enable postfix.service
systemctl restart postfix.service

Nous désactivons Sendmail pour nous assurer qu’il ne sera pas lancé au cas où il serait installé sur ton serveur. Alors le message d’erreur « Failed to issue method call : Unit sendmail.service not loaded. » peut être ignoré.

9 Installer Getmail

Getmail peut être installé comme suit :

dnf install python2
cd /tmp
wget http://pyropus.ca/software/getmail/old-versions/getmail-5.14.tar.gz
tar xvfz getmail-5.14.tar.gz
cd getmail-5.14
python2 setup.py build
python2 setup.py install

10 Définir les mots de passe MySQL et configurer phpMyAdmin

Définis les mots de passe pour le compte racine MySQL :

mysql_secure_installation
[[email protected] tmp]# mysql_secure_installation


NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none):
OK, successfully used password, moving on...
Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

Set root password? [Y/n]
 <-- ENTER
New password: <-- yourrootsqlpassword
Re-enter new password: <-- yourrootsqlpassword
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n]
 <-- ENTER
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n]
 <-- ENTER
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n]
 <-- ENTER
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n]
 <-- ENTER
 ... Success!

Cleaning up...



All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

[[email protected] tmp]#

Nous allons maintenant configurer phpMyAdmin. Crée ce fichier de configuration de phpMyAdmin :

nano /etc/httpd/conf.d/phpmyadmin.conf

Ajoute ce contenu au fichier :

# phpMyAdmin - Web based MySQL browser written in php
#
# Allows only localhost by default
#
# But allowing phpMyAdmin to anyone other than localhost should be considered
# dangerous unless properly secured by SSL

Alias /phpMyAdmin /usr/share/phpmyadmin
Alias /phpmyadmin /usr/share/phpmyadmin

<Directory /usr/share/phpmyadmin/>
   <IfModule mod_authz_core.c>
     # Apache 2.4
  #  <RequireAny>
     #  Require ip 127.0.0.1
     #  Require ip ::1
  #  </RequireAny>
   </IfModule>
   <IfModule !mod_authz_core.c>
     # Apache 2.2
     Order Deny,Allow
     Deny from All
     Allow from 127.0.0.1
     Allow from ::1
   </IfModule>
</Directory>
            

Ensuite, nous changeons l’authentification dans phpMyAdmin de cookie à http:

cp -pf /usr/share/phpmyadmin/config.sample.inc.php /usr/share/phpmyadmin/config.inc.php
nano /usr/share/phpmyadmin/config.inc.php
[...]
/* Authentication type */
$cfg['Servers'][$i]['auth_type'] = 'http';
[...]

Ensuite, nous créons les liens de démarrage du système pour Apache et nous le démarrons :

systemctl enable httpd
systemctl restart httpd

Tu peux maintenant diriger ton navigateur vers http://server1.example.com/phpmyadmin/ ou http://192.168.0.100/phpmyadmin/ et te connecter avec le nom d’utilisateur root et ton nouveau mot de passe MySQL root.

11 Installer Amavisd-new, SpamAssassin, ClamAV et Postgrey

Pour installer amavisd-new, SpamAssassin et ClamAV, exécute la commande suivante :

dnf -y install amavisd-new spamassassin clamav-server clamav-data clamav-update clamav-filesystem clamav clamav-scanner-systemd clamav-devel clamav-lib clamav-server-systemd unzip bzip2 perl-DBD-mysql postgrey re2c

Ensuite, nous démarrons freshclam, amavisd, et clamd.amavisd :

sa-update
freshclam
systemctl enable amavisd.service
systemctl start amavisd.service
systemctl start [email protected]
systemctl enable postgrey.service
systemctl start postgrey.service

À l’étape suivante, nous configurons postgrey. Ouvre le fichier /etc/sysconfig/postgrey dans un éditeur :

nano /etc/sysconfig/postgrey

et modifie la ligne

POSTGREY_TYPE="--unix=/var/spool/postfix/postgrey/socket"

en

POSTGREY_TYPE="--inet=10023"

Enregistre le fichier et redémarre postgrey :

service postgrey restart

Pour configurer amavisd, édite le fichier /etc/clamd.d/amavisd.conf :

nano /etc/clamd.d/amavisd.conf

et modifie la ligne : à

LocalSocket /run/clamd.amavisd/clamd.sock

en

LocalSocket /var/spool/amavisd/clamd.sock

Enregistre le fichier de configuration modifié et redémarre ClamAV :

systemctl restart [email protected]

12 Installer Apache avec mod_php, mod_fcgi/PHP, PHP-FPM

ISPConfig 3 te permet d’utiliser mod_php, mod_fcgi/PHP, cgi/PHP et PHP-FPM pour chaque site Web.

Nous pouvons installer Apache2 avec mod_php, mod_fcgid et PHP comme suit :

dnf -y install php php-devel php-gd php-imap php-ldap php-mysql php-odbc php-pear php-xml php-xmlrpc php-pecl-apc php-mbstring php-mcrypt php-snmp php-soap php-tidy curl curl-devel perl-libwww-perl ImageMagick libxml2 libxml2-devel mod_fcgid php-cli httpd-devel php-fpm php-intl php-imagick php-pspell wget

Ensuite, nous ouvrons /etc/php.ini

nano /etc/php.ini

… et modifions le rapport d’erreurs (pour que les avis ne soient plus affichés), définissons le fuseau horaire et décommentons cgi.fix_pathinfo=1:

[...]
;error_reporting = E_ALL & ~E_DEPRECATED
error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT
[...]
; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI.  PHP's
; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok
; what PATH_INFO is.  For more information on PAppp.tldTH_INFO, see the cgi specs.  Setting
; this to 1 will cause PHP CGI to fix its paths to conform to the spec.  A setting
; of zero causes PHP to behave as before.  Default is 1.  You should fix your scripts
; to use SCRIPT_FILENAME rather than PATH_TRANSLATED.
; http://www.php.net/manual/en/ini.core.php#ini.cgi.fix-pathinfo
cgi.fix_pathinfo=1
[...]
date.timezone = 'Europe/Berlin' [...]

Autorise httpd et PHP-FPM à se lancer au démarrage et démarre le service PHP-FPM.

systemctl start php-fpm.service
systemctl enable php-fpm.service
systemctl enable httpd.service

Enfin, nous redémarrons Apache :

systemctl restart httpd.service

Nous allons maintenant ajouter le support pour Let’s encrypt. ISPConfig utilise maintenant acme.sh comme client Let’s Encrypt. Installe acme.sh à l’aide de la commande suivante :

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

13 Installation de mod_python

Le module Apache mod_python n’est pas disponible en tant que paquet RPM, nous allons donc le compiler à partir des sources. La première étape consiste à installer les fichiers de développement python et à télécharger la version actuelle de mod_python sous forme de fichier .tar.gz.

dnf -y install python3-devel
cd /usr/local/src/
wget http://dist.modpython.org/dist/mod_python-3.5.0.tgz
tar xfz mod_python-3.5.0.tgz
cd mod_python-3.5.0

puis configurer et compiler le module.

./configure --with-python=/usr/bin/python3
make

Il y a une erreur dans le module compilé qui fera échouer l’installation avec l’erreur« version = « fatal : Not a git repository (or any of the parent directories) : .git« . Pour corriger cela, exécute cette commande sed (la commande ne fait qu’une ligne !).

sed -e 's/(git describe --always)/(git describe --always 2>\/dev\/null)/g' -e 's/`git describe --always`/`git describe --always 2>\/dev\/null`/g' -i $( find . -type f -name Makefile\* -o -name version.sh )

Puis installe le module avec cette commande.

make install

et active le module dans Apache :

echo 'LoadModule python_module modules/mod_python.so' > /etc/httpd/conf.modules.d/10-python.conf
systemctl restart httpd.service

14 Installer PureFTPd

Tu peux installer PureFTPd avec la commande suivante :

dnf -y install pure-ftpd

Puis crée les liens de démarrage du système et démarre PureFTPd :

systemctl enable pure-ftpd.service
systemctl start pure-ftpd.service

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.

OpenSSL est nécessaire pour TLS ; pour installer OpenSSL, il suffit d’exécuter :

dnf install openssl

Ouvrir /etc/pure-ftpd/pure-ftpd.conf

nano /etc/pure-ftpd/pure-ftpd.conf

Si tu veux autoriser les sessions FTP et TLS, règle TLS sur 1 en supprimant le # devant la ligne TLS. Il est fortement recommandé d’activer TLS.

[...]
# This option can accept three values :
# 0 : disable SSL/TLS encryption layer (default).
# 1 : accept both traditional and encrypted sessions.
# 2 : refuse connections that don't use SSL/TLS security mechanisms,
#     including anonymous sessions.
# Do _not_ uncomment this blindly. Be sure that :
# 1) Your server has been compiled with SSL/TLS support (--with-tls),
# 2) A valid certificate is in place,
# 3) Only compatible clients will log in.

TLS                      1
[...]

Afin d’utiliser TLS, nous devons créer un certificat SSL. Je le crée dans /etc/ssl/private/, donc 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) [XX] : <– Saisis le nom de ton pays (par exemple, « DE »).
Nom de l’État ou de la province (nom complet) [] :
<– Saisis le nom de ton État ou de ta province.
Nom de la localité (par exemple, la ville) [Ville par défaut] :
<– Saisis ta ville.
Nom de l’organisation (par ex., société) [Société par défaut] :
<– 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, « Département informatique »).
Nom commun (par exemple, ton nom ou le nom d’hôte de ton serveur) [] :
<– 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

Crée un fichier DHParam :

openssl dhparam -out /etc/ssl/private/pure-ftpd-dhparams.pem 2048

Enfin, redémarre PureFTPd :

systemctl restart pure-ftpd.service

C’est tout. Tu peux maintenant essayer de te connecter en utilisant ton client FTP ; cependant, tu dois configurer ton client FTP pour qu’il utilise TLS.

15 Installer BIND

Nous pouvons installer BIND comme suit :

dnf -y install bind bind-utils haveged

Fais une sauvegarde du fichier /etc/named. conf existant et crée un nouveau fichier comme suit :

cp /etc/named.conf /etc/named.conf_bak
cat /dev/null > /etc/named.conf
nano /etc/named.conf
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
options {
        listen-on port 53 { any; };
        listen-on-v6 port 53 { any; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        allow-query     { any; };
				allow-recursion {"none";};
        recursion no;
};
logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};
zone "." IN {
        type hint;
        file "named.ca";
};
include "/etc/named.conf.local";

Crée le fichier /etc/named.conf.local qui est inclus à la fin de /etc/named.conf(/etc/named.conf.local sera plus tard peuplé par ISPConfig si tu crées des zones DNS dans ISPConfig) :

touch /etc/named.conf.local

Ensuite, nous créons les liens de démarrage et lançons BIND :

systemctl enable named.service
systemctl start named.service
systemctl enable haveged.service
systemctl start haveged.service

16 Installer AWStats

AWStats peut être installé comme suit :

dnf -y install awstats perl-DateTime-Format-HTTP perl-DateTime-Format-Builder

L’application alternative de statistiques Web ‘webalizer’ n’est plus disponible pour CentOS 8, tu ne pourras donc utiliser que AWStats.

17 Installe Jailkit

Jailkit est utilisé pour chrooter les utilisateurs SSH et les cronjobs. Tu peux l’installer comme suit :

ln -s /usr/bin/python2 /usr/bin/python
cd /tmp
wget http://olivier.sessink.nl/jailkit/jailkit-2.21.tar.gz
tar xvfz jailkit-2.21.tar.gz
cd jailkit-2.21
./configure
make
make install
cd ..
rm -rf jailkit-2.21*

18 Installer Fail2Ban

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

dnf -y install iptables-services fail2ban fail2ban-systemd
systemctl stop firewalld.service
systemctl mask firewalld.service
systemctl disable firewalld.service

Ensuite, nous créons le fichier /etc/fail2ban/jail.local et activons la surveillance pour le service ssh, email et ftp.

nano /etc/fail2ban/jail.local

Ajoute le contenu suivant au fichier jail.local :

[sshd]
enabled = true
action = iptables[name=sshd, port=ssh, protocol=tcp]

[pure-ftpd]
enabled = true
action = iptables[name=FTP, port=ftp, protocol=tcp]
maxretry = 3

[dovecot]
enabled = true
action = iptables-multiport[name=dovecot, port="pop3,pop3s,imap,imaps", protocol=tcp]
maxretry = 5

[postfix-sasl]
enabled = true
action = iptables-multiport[name=postfix-sasl, port="smtp,smtps,submission", protocol=tcp]
maxretry = 3

Crée ensuite les liens de démarrage du système pour fail2ban et démarre-le :

systemctl enable fail2ban.service
systemctl start fail2ban.service

19 Installer rkhunter

rkhunter peut être installé comme suit :

dnf -y install rkhunter

20 Installer Mailman

Si tu aimes gérer les listes de diffusion avec Mailman sur ton serveur, alors installe Mailman maintenant. Mailman est pris en charge par ISPConfig, tu pourras donc créer de nouvelles listes de diffusion via ISPConfig plus tard.

dnf -y install mailman

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

touch /var/lib/mailman/data/aliases
postmap /var/lib/mailman/data/aliases
/usr/lib/mailman/bin/newlist mailman
ln -s /usr/lib/mailman/mail/mailman /usr/bin/mailman

[[email protected] tmp]# /usr/lib/mailman/bin/newlist mailman
Entre l’email de la personne qui gère la liste :
<– adresse email de l’administrateur,par [email protected]
Mot de passe initial de mailman :<– mot de passe admin pour la liste mailman
Pour terminer la création de ta liste de diffusion, tu dois modifier ton fichier/etc/aliases (ou son équivalent
) en ajoutant les lignes suivantes, et éventuellement en exécutant le programme
`newaliases’ :

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

Appuie sur la touche Entrée pour informer le propriétaire de mailman….<– ENTRÉE

[[email protected] tmp]#

Ouvre ensuite /etc/aliases

nano /etc/aliases

… et ajoute les lignes suivantes :

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

Exécute

newaliases

après et redémarre Postfix :

systemctl restart postfix.service

Ouvre maintenant le fichier de configuration Apache Mailman /etc/httpd/conf.d/mailman.conf

nano /etc/httpd/conf.d/mailman.conf

… et ajoute la ligne ScriptAlias /cgi-bin/mailman/ /usr/lib/mailman/cgi-bin/. Commente l’Alias /pipermail/ /var/lib/mailman/archives/public/ et ajoute la ligne Alias /pipermail /var/lib/mailman/archives/public/:

#
#  httpd configuration settings for use with mailman.
#

ScriptAlias /mailman/ /usr/lib/mailman/cgi-bin/
ScriptAlias /cgi-bin/mailman/ /usr/lib/mailman/cgi-bin/
<Directory /usr/lib/mailman/cgi-bin/>
    AllowOverride None
    Options ExecCGI
    Order allow,deny
    Allow from all
</Directory>


#Alias /pipermail/ /var/lib/mailman/archives/public/
Alias /pipermail /var/lib/mailman/archives/public/
<Directory /var/lib/mailman/archives/public>
    Options Indexes MultiViews FollowSymLinks
    AllowOverride None
    Order allow,deny
    Allow from all
    AddDefaultCharset Off
</Directory>

# Uncomment the following line, to redirect queries to /mailman to the
# listinfo page (recommended).

# RedirectMatch ^/mailman[/]*$ /mailman/listinfo

Redémarre Apache :

systemctl restart httpd.service

Crée les liens de démarrage du système pour Mailman et démarre-le :

systemctl enable mailman.service
systemctl start mailman.service

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

Tu peux utiliser l’alias /cgi-bin/mailman pour tous les vhosts Apache (note que suExec et CGI doivent être désactivés pour tous les vhosts à partir desquels tu veux accéder à Mailman !), ce qui signifie que tu peux accéder à l’interface d’administration Mailman pour une liste à l’adresse http://<vhost>/cgi-bin/mailman/admin/<listname>, et que la page Web des utilisateurs d’une liste de diffusion se trouve à l’adresse http://<vhost>/cgi-bin/mailman/listinfo/<listname>.

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

21 Installer le webmail Roundcube

Pour installer le client webmail RoundCube, télécharge la dernière version avec wget dans le dossier /tmp :

cd /tmp
wget https://github.com/roundcube/roundcubemail/releases/download/1.4.3/roundcubemail-1.4.3-complete.tar.gz

Décompresse l’archive tar.gz et déplace la source RoundCube dans /usr/share/roundcubemail

tar xfz roundcubemail-1.4.3-complete.tar.gz
mkdir /usr/share/roundcubemail
mv /tmp/roundcubemail-1.4.3/* /usr/share/roundcubemail/
chown -R root:root /usr/share/roundcubemail
chown apache /usr/share/roundcubemail/temp
chown apache /usr/share/roundcubemail/logs

Crée un fichier de configuration roundcubemail.conf avec l’éditeur nano :

nano /etc/httpd/conf.d/roundcubemail.conf

Et ajoute le contenu suivant à ce fichier :

#
# Round Cube Webmail is a browser-based multilingual IMAP client
#

Alias /roundcubemail /usr/share/roundcubemail
Alias /webmail /usr/share/roundcubemail # Define who can access the Webmail # You can enlarge permissions once configured <Directory /usr/share/roundcubemail/> Options none AllowOverride Limit Require all granted </Directory> # Define who can access the installer # keep this secured once configured <Directory /usr/share/roundcubemail/installer> Options none AllowOverride Limit Require all granted </Directory> # Those directories should not be viewed by Web clients. <Directory /usr/share/roundcubemail/bin/> Order Allow,Deny Deny from all </Directory> <Directory /usr/share/roundcubemail/plugins/enigma/home/> Order Allow,Deny Deny from all </Directory>

Redémarre Apache :

systemctl restart httpd.service

Nous avons maintenant besoin d’une base de données pour le courrier RoundCube, nous allons l’initialiser comme suit :

mysql -u root -p

À l’invite de MariaDB, utilise :

CREATE DATABASE roundcubedb;
CREATE USER [email protected] IDENTIFIED BY 'roundcubepassword';
GRANT ALL PRIVILEGES on roundcubedb.* to [email protected] ;
FLUSH PRIVILEGES;
exit

J’utilise les détails de la base de données RoundCube à titre d’exemple, remplace les valeurs selon ton choix pour des raisons de sécurité.

Maintenant, nous allons installer RoundCube dans le navigateur à l’adresse http://192.168.0.100/roundcubemail/installer.

Crée maintenant le fichier config.inc.php :

nano /usr/share/roundcubemail/config/config.inc.php
<?php

/* Local configuration for Roundcube Webmail */

// ----------------------------------
// SQL DATABASE
// ----------------------------------
// Database connection string (DSN) for read+write operations
// Format (compatible with PEAR MDB2): db_provider://user:[email protected]/database
// Currently supported db_providers: mysql, pgsql, sqlite, mssql, sqlsrv, oracle
// For examples see http://pear.php.net/manual/en/package.database.mdb2.intro-dsn.php
// NOTE: for SQLite use absolute path (Linux): 'sqlite:////full/path/to/sqlite.db?mode=0646'
// or (Windows): 'sqlite:///C:/full/path/to/sqlite.db'
$config['db_dsnw'] = 'mysql://roundcubeuser:[email protected]/roundcubedb';

// ----------------------------------
// IMAP
// ----------------------------------
// The IMAP host chosen to perform the log-in.
// Leave blank to show a textbox at login, give a list of hosts
// to display a pulldown menu or set one host as string.
// To use SSL/TLS connection, enter hostname with prefix ssl:// or tls://
// Supported replacement variables:
// %n - hostname ($_SERVER['SERVER_NAME'])
// %t - hostname without the first part
// %d - domain (http hostname $_SERVER['HTTP_HOST'] without the first part)
// %s - domain name after the '@' from e-mail address provided at login screen
// For example %n = mail.domain.tld, %t = domain.tld
// WARNING: After hostname change update of mail_host column in users table is
// required to match old user data records with the new host.
$config['default_host'] = 'localhost';
$config['smtp_server'] = 'localhost';
$config['smtp_port'] = 25;

// provide an URL where a user can get support for this Roundcube installation
// PLEASE DO NOT LINK TO THE ROUNDCUBE.NET WEBSITE HERE!
$config['support_url'] = '';

// This key is used for encrypting purposes, like storing of imap password
// in the session. For historical reasons it's called DES_key, but it's used
// with any configured cipher_method (see below).
$config['des_key'] = 'pb0UucO0eqjgvhrqYlFTBVjE';

// ----------------------------------
// PLUGINS
// ----------------------------------
// List of active plugins (in plugins/ directory)
$config['plugins'] = array();

// Set the spell checking engine. Possible values:
// - 'googie' - the default (also used for connecting to Nox Spell Server, see 'spellcheck_uri' setting)
// - 'pspell' - requires the PHP Pspell module and aspell installed
// - 'enchant' - requires the PHP Enchant module
// - 'atd' - install your own After the Deadline server or check with the people at http://www.afterthedeadline.com before using their API
// Since Google shut down their public spell checking service, the default settings
// connect to http://spell.roundcube.net which is a hosted service provided by Roundcube.
// You can connect to any other googie-compliant service by setting 'spellcheck_uri' accordingly.
$config['spellcheck_engine'] = 'pspell';
$config['enable_installer'] = true;

Puis appuie sur « continuer » dans l’installateur web. Sur la page suivante, appuie sur le bouton « Initialiser la base de données ».

Enfin, désactive l’installateur Roundecubemail. Change le fichier de configuration RoundCube config.inc.php

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

et change la ligne :

$config['enable_installer'] = true;

à :

$config['enable_installer'] = false;

Roundcube est maintenant disponible sous les alias /webmail et /roundcubemail sur ton serveur :

http://192.168.0.100/webmail

L’identifiant RoundCube est l’adresse email et le mot de passe d’un compte email que tu créeras plus tard dans ISPConfig.

22 Installer ISPConfig 3.2

L’installateur d’ISPConfig configurera pour toi tous les services comme Postfix, Dovecot, etc.

Tu as maintenant aussi la possibilité de laisser l’installateur créer un serveur virtuel SSL pour le panneau de configuration d’ISPConfig afin que l’on puisse accéder à ISPConfig en utilisant https:// au lieu de http://. Pour cela, appuie simplement sur ENTRÉE lorsque tu vois cette question : Veux-tu une connexion sécurisée (SSL) à l’interface web d’ISPConfig (y,n) [y] :.

Pour installer ISPConfig 3.2 nightly build, fais ceci :

cd /tmp 
wget -O ispconfig.tar.gz https://www.ispconfig.org/downloads/ISPConfig-3-stable.tar.gz
tar xfz ispconfig.tar.gz
cd ispconfig3*/install/

L’étape suivante consiste à exécuter :

php -q install.php

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

[[email protected] install]# php install.php

--------------------------------------------------------------------------------
_____ ___________ _____ __ _ ____
|_ _/ ___| ___ \ / __ \ / _(_) /__ \
| | \ `--.| |_/ / | / \/ ___ _ __ | |_ _ __ _ _/ /
| | `--. \ __/ | | / _ \| '_ \| _| |/ _` | |_ |
_| |_/\__/ / | | \__/\ (_) | | | | | | | (_| | ___\ \
\___/\____/\_| \____/\___/|_| |_|_| |_|\__, | \____/
__/ |
|___/
--------------------------------------------------------------------------------

>> Initial configuration
Operating System: CentOS 8.2
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.example.com]: <-- Hit Enter
MySQL server hostname [localhost]: <-- Hit Enter
MySQL server port [3306]: <-- Hit Enter
MySQL root username [root]: <-- Hit Enter
MySQL root password []: <-- Ente the MySQL root password here
MySQL database to create [dbispconfig]: <-- Hit Enter
MySQL charset [utf8]: <-- Hit Enter
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) [XX]: <-- Enter 2 Letter country code, e.g. US
State or Province Name (full name) []: <-- Enter anme of State or Province
Locality Name (eg, city) [Default City]: <-- Name of city
Organization Name (eg, company) [Default Company Ltd]: <-- Company name
Organizational Unit Name (eg, section) []: <-- Hit Enter
Common Name (eg, your name or your server's hostname) []: <-- Enter server hostname here, in my case: server1.example.com
Email Address []: <-- Enter Email address
Configuring mailman
Configuring Dovecot
Configuring Spamassassin
Configuring Amavisd
Configuring Getmail
Configuring Jailkit
Configuring Pureftpd
Configuring BIND
Configuring Apache
Configuring vlogger
[INFO] service OpenVZ not detected
Configuring Bastille Firewall
[INFO] service Metronome XMPP Server not detected
Configuring Fail2ban
Configuring Apps vhost
Installing ISPConfig
ISPConfig Port [8080]: <-- Hit Enter
Admin password [fad579a6]: <-- Enter new password for ISPConfig admin user
Re-enter admin password []: <-- Repeat the password
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) [XX]: <-- Enter 2 Letter country code, e.g. US
State or Province Name (full name) []: <-- Enter anme of State or Province
Locality Name (eg, city) [Default City]: <-- Name of city
Organization Name (eg, company) [Default Company Ltd]: <-- Company name
Organizational Unit Name (eg, section) []: <-- Hit Enter
Common Name (eg, your name or your server's hostname) []: <-- Enter server hostname here, in my case: server1.example.com
Email Address []: <-- Enter Email address
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
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, il n’y a donc pas besoin de configuration manuelle.

23 Première connexion à ISPConfig

Tu peux ensuite accéder à ISPConfig 3 sous http(s)://server1.example.com:8080/ ou http(s)://192.168.0.100:8080/(http ou httpsdé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) :

La connexion ISPConfig

25 Liens

Vous aimerez aussi...