Le serveur parfait – Ubuntu 18.04 (Nginx, MySQL, PHP, Postfix, BIND, Dovecot, Pure-FTPD et ISPConfig 3.1)

Ce tutoriel montre les étapes à suivre pour installer un serveur Ubuntu 18.04 (Bionic Beaver) avec Nginx, PHP, MariaDB, Postfix, pure-ftpd, BIND, Dovecot et ISPConfig 3.1. ISPConfig est un panneau de contrôle d’hébergement Web qui te permet de configurer les services installés via un navigateur Web. Cette configuration fournit un serveur d’hébergement complet avec des services Web, de messagerie (avec filtre anti-spam et antivirus), de base de données, FTP et DNS.

1. Remarque préliminaire

Dans ce tutoriel, j’utiliserai le nom d’hôte server1.example.com avec l’adresse IP 192. 168.1.100 et la passerelle 192. 168.1.1 pour la configuration du réseau. Ces paramètres peuvent être différents pour toi, tu dois donc les remplacer le cas échéant. Avant de poursuivre, tu dois avoir une installation minimale de base d’Ubuntu 18.04 comme expliqué dans ce tutoriel.

Les étapes de ce tutoriel doivent être exécutées en tant qu’utilisateur root, je ne ferai donc pas précéder les commandes de « sudo ». Soit tu te connectes en tant qu’utilisateur root sur ton serveur avant de poursuivre, soit tu exécutes :

sudo -s

pour devenir root lorsque tu es connecté en tant qu’utilisateur différent sur le shell.

Les commandes pour modifier les fichiers utiliseront l’éditeur « nano », tu peux le remplacer par un éditeur de ton choix. Nano est un éditeur de fichiers facile à utiliser pour le shell. Si tu aimes utiliser nano et que tu ne l’as pas encore installé, exécute :

apt-get install nano

2. Mets à jour ton installation Linux

Modifie /etc/apt/sources.list. Commente ou supprime le CD d’installation du fichier et assure-toi que les dépôts universe et multiverse sont activés. Cela devrait ressembler à ceci :

nano /etc/apt/sources.list
#

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

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

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

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

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

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

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

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

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

Puis exécute :

apt-get update

pour mettre à jour la base de données des paquets apt, puis :

apt-get upgrade

pour installer les dernières mises à jour (s’il y en a). Si tu vois qu’un nouveau noyau est installé dans le cadre des mises à jour, tu dois redémarrer le système par la suite :

reboot

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

4. Désactive AppArmor

AppArmor est une extension de sécurité (similaire à SELinux) qui devrait fournir une sécurité étendue. Nous vérifierons s’il est installé et le supprimerons si nécessaire. À mon avis, tu n’en as pas besoin pour configurer un système sécurisé, et il cause généralement plus de problèmes que d’avantages (pense à cela après avoir fait une semaine de dépannage parce qu’un service ne fonctionnait pas comme prévu, puis tu découvres que tout allait bien, que seul AppArmor causait le problème). Par conséquent, je le désactive (c’est indispensable si tu veux installer ISPConfig plus tard).

Nous pouvons le désactiver comme suit :

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

5. 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 -y install ntp ntpdate

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

6. Installer Postfix, Dovecot, MariaDB, phpMyAdmin, rkhunter, Binutils

Pour installer postfix, nous devons nous assurer que sendmail n’est pas installé et en cours d’exécution. Pour arrêter et supprimer sendmail, exécute cette commande :

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

Le message d’erreur :

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

Est correct, cela signifie simplement que sendmail n’était pas installé, il n’y avait donc rien à supprimer.

Nous pouvons installer Postfix, Dovecot, MariaDB (en remplacement de MySQL), rkhunter et binutils avec une seule commande :

apt-get -y install postfix postfix-mysql postfix-doc mariadb-client mariadb-server openssl getmail4 rkhunter binutils dovecot-imapd dovecot-pop3d dovecot-mysql dovecot-sieve dovecot-lmtpd  sudo

MariaDB est un fork du serveur de base de données MySQL, développé par le développeur original de MySQL, Monty Widenius. Selon des tests trouvés sur Internet, MariaDB est plus rapide que MySQL et son développement se poursuit à un rythme plus soutenu, c’est pourquoi la plupart des distributions Linux ont remplacé MySQL par MariaDB comme serveur de base de données « similaire à MySQL » par défaut. Si tu préfères MySQL à MariaDB, remplace « mariadb-client mariadb-server » dans la commande ci-dessus par « mysql-client mysql-server ».

Les questions suivantes te seront posées :

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

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

nano /etc/postfix/master.cf

Décommente les sections submission et smtps comme suit – ajoute la ligne -o smtpd_client_restrictions=permit_sasl_authenticated,reject aux deux sections et laisse tout le reste commenté :

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

NOTE : Les espaces blancs devant les lignes « -o …. « sont importants !

Redémarre ensuite Postfix :

service postfix restart

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

MariaDB

nano /etc/mysql/mariadb.conf.d/50-server.cnf
[...]
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
#bind-address           = 127.0.0.1
[...]

Maintenant, nous allons définir un mot de passe root dans MariaDB. Exécute :

mysql_secure_installation

Les questions suivantes te seront posées :

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

Définis la méthode d’authentification du 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 password.

nano /etc/mysql/debian.cnf

Le mot de passe root MySQL qui doit être ajouté est indiqué en lecture, 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

Ensuite, nous redémarrons MariaDB :

service mysql restart

Le nom du service systemd pour MariaDB et MySQL est « mysql« , donc la commande de redémarrage est la même pour les deux serveurs de base de données.

MySQL

nano /etc/mysql/my.cnf
[...]
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
#bind-address           = 127.0.0.1
[...]

Puis nous redémarrons MySQL :

service mysql restart

Le nom du service systemd pour MariaDB et MySQL est « mysql », donc la commande de redémarrage est la même pour les deux serveurs de bases de données.

Pour MySQL et MariaDB :

Vérifie maintenant que la mise en réseau est activée. Exécute :

netstat -tap | grep mysql

Le résultat doit ressembler à ceci :

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

7. Installer Amavisd-new, SpamAssassin, et ClamAV

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

apt-get -y install amavisd-new spamassassin clamav clamav-daemon unzip bzip2 arj nomarch lzop cabextract apt-listchanges libnet-ldap-perl libauthen-sasl-perl clamav-docs daemon libio-string-perl libio-socket-ssl-perl libnet-ident-perl zip libnet-dns-perl postgrey libdbd-mysql-perl

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

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

Pour mettre à jour les signatures antivirus de ClamAV et démarrer le service Clamd. Le processus de mise à jour peut prendre un certain temps, ne l’interromps pas.

freshclam
service clamav-daemon start

L’erreur suivante peut être ignorée lors de la première exécution de freshclam.

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

Le programme amavisd-new a actuellement un bug dans Ubuntu 18.04 qui empêche que les emails soient signés avec Dkim correctement. Exécute les commandes suivantes pour corriger amavisd-new.

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

Si tu obtiens une erreur pour la dernière commande ‘patch’, Ubuntu a probablement corrigé le problème entre-temps, tu peux donc ignorer cette erreur.

7.1 Installer le serveur Metronome XMPP (facultatif)

Le serveur XMPP de Metronome fournit un serveur de chat XMPP. Cette étape est facultative, si tu n’as pas besoin d’un serveur de chat, alors tu peux sauter cette étape. Aucune autre fonction d’ISPConfig ne dépend de ce logiciel.

Installe les paquets suivants avec apt.

apt-get -y install git lua5.1 liblua5.1-0-dev lua-filesystem libidn11-dev libssl-dev lua-zlib lua-expat lua-event lua-bitop lua-socket lua-sec luarocks luarocks
luarocks install lpc

Ajoute un utilisateur shell pour Metronome.

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

Télécharge Metronome dans le répertoire /opt et compile-le.

cd /opt; git clone https://github.com/maranda/metronome.git metronome
cd ./metronome; ./configure --ostype=debian --prefix=/usr
make
make install

Metronome est maintenant installé dans /opt/metronome.

Vous aimerez aussi...