Transformer un VPS en serveur d'hébergement mutualisé

Linux

Vous avez un VPS mais vous voulez garder la simplicité des hébergements mutualisés ? Nous vous proposons d'installer ISPConfig pour gérer vos sites Internet.


Le plus grand hic des serveurs dédiés et VPS sont sur leur configuration. Heureusement, nous avons une solution pour vous. Installons ISPConfig, un panel d'hébergement 100% gratuit et open-source.

Le système d'exploitation de base

Pour commencer, il nous faut un système d'exploitation fraîchement installé. Dans ce tutoriel, nous allons utiliser la toute dernière version stable de Debian, à savoir Debian 9 Stretch. Notez que ISPConfig peut fonctionner sur d'autres versions et distributions de Linux et vous trouverez les documentations liées sur le site officiel.

Il est également très conseillé d'installer les mises à jours avant de procéder à l'installation. Pour ce faire :

apt-get update && apt-get upgrade && apt-get dist-upgrade

Installation des outils

Il faudra ensuite qu'on édite des fichiers en ligne de commande. Installons alors le fameux nano.

apt-get install nano

Configuration du nom d'hôte

Ensuite, il faut ajuster le nom d'hôte pour que le serveur puisse s'identifier et être identifié correctement sur le réseau local de la même manière qu'il est identifié sur Internet. Editons le fichiers /etc/hosts :

nano /etc/hosts

Si par exemple, votre adresse IP est 45.251.214.21, mettez à côté de celle-ci deux notations : FQDN et nom d'hôte unique :

45.251.214.21 server1.example.com server1

Ici, notre serveur s'appelle server1 et l'adresse IP est disponible sur Internet sous le nom server1.exemple.com. Ensuite, ajustez le fichier hostname :

nano /etc/hostname

Ici, il faut mettre uniquement le nom d'hôte (server1 dans notre cas). Il faut ensuite redémarrer pour pouvoir appliquer les changements.

reboot

Pour vérifier si tout s'est déroulé comme prévu, voici ce qu'il faut faire. Exécuter hostname devra uniquementafficher le nom d'hôte:

hostname

Cela retourne vers server1 dans notre cas. Et la commande suivante doit afficher server1.exemple.com:

hostname -f

Ensuite, il faut ajouter les dépôts non-free et contrib dans les mises à jours. Pour ce faire, éditons le fichier /etc/apt/sources.list.

nano /etc/apt/sources.list

A côté des main, on ajoute contrib et non-free. Voici ce qui devrait en résulter :

deb http://ftp.us.debian.org/debian/ stretch main contrib non-free
deb-src http://ftp.us.debian.org/debian/ stretch main contrib non-free

deb http://security.debian.org/debian-security stretch/updates main contrib non-free
deb-src http://security.debian.org/debian-security stretch/updates main contrib non-free

Ensuite, mettons de nouveau à jour notre système d'exploitation :

apt-get update && apt-get upgrade && apt-get dist-upgrade

Maintenant, c'est l'heure de basculer de dash en bash. Dash n'est pas supporté par ISPConfig, il faudra alors, utiliser bash comme shell par défaut.

dpkg-reconfigure dash

Use dash as the default system shell (/bin/sh)? Répondre "no".

Synchronisation de temps

C'est l'heure de se mettre à l'heure. Pour que vos applications soient parfaitement à l'heure, utilisons le protocole NTP pour synchroniser l'heure du serveur avec un serveur de temps international.

apt-get install ntp

Installation des services

Installons maintenant les services.

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

General type of mail configuration. Répondre "Internet Site".

System mail name. Répondre "server1.example.com" ou le nom de votre choix.

Configurons maintenant MariaDB.

mysql_secure_installation

Change the root password? Répondre oui.

New password. Saisissez votre nouveau mot de passe root MySQL.

Re-enter new password. Refaire la même chose pour confirmer.

Remove anonymous users? Répondre oui.

Disallow root login remotely? Répondre oui.

Remove test database and access to it? Répondre oui.

Reload privilege tables now? Répondre oui.

Voilà. Maintenant au tour du MTA (Mail Transfer Agent).

nano /etc/postfix/master.cf

Vous allez décommenter quelques lignes pour obtenir quelque chose comme ceci :

[...]
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=
# -o smtpd_relay_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=
# -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
# -o milter_macro_daemon_name=ORIGINATING
[...]

service postfix restart

Maintenant, ajoutez les interfaces d'écoute pour écouter tous les interfaces. Commenter la ligne contenant bind-address dans le fichier 50-server.cnf.

nano /etc/mysql/mariadb.conf.d/50-server.cnf

Ajuster la configuration MariaDB pour une authentification native :

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

Editons ensuite le fichier debian.cnf.

nano /etc/mysql/debian.cnf

# 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

service mysql restart

Place aux suivants.

apt-get install amavisd-new spamassassin clamav clamav-daemon zoo 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 libdbd-mysql-perl postgrey

service spamassassin stop
systemctl disable spamassassin

apt-get -y install apache2 apache2-doc apache2-utils libapache2-mod-php php7.0 php7.0-common php7.0-gd php7.0-mysql php7.0-imap phpmyadmin php7.0-cli php7.0-cgi libapache2-mod-fcgid apache2-suexec-pristine php-pear php7.0-mcrypt mcrypt  imagemagick libruby libapache2-mod-python php7.0-curl php7.0-intl php7.0-pspell php7.0-recode php7.0-sqlite3 php7.0-tidy php7.0-xmlrpc php7.0-xsl memcached php-memcache php-imagick php-gettext php7.0-zip php7.0-mbstring memcached libapache2-mod-passenger php7.0-soap certbot php7.0-fpm

Web server to reconfigure automatically. Répondre apache2

Configure database for phpmyadmin with dbconfig-common? Répondre oui.

Enter the phpmyadmin application password? Ne rien y mettre (l'application va générer un mot de passe aléatoire).

Enter the password of the administrative user? Votre mot de passe root MySQL.

a2enmod suexec rewrite ssl actions include dav_fs dav auth_digest cgi headers

Protection contre la vulnérabilité httpoxy.conf : 

nano /etc/apache2/conf-available/httpoxy.conf


    RequestHeader unset Proxy early

a2enconf httpoxy
service apache2 restart

Activation du PHP-FPM :

a2enmod actions proxy_fcgi alias 
service apache2 restart

Installation de Mailman : 

apt-get install mailman

Languages to support. Répondre en (English).

Créons maintenant une première liste :

newlist mailman

root@server1:~# newlist mailman
Enter the email of the person running the list: <-- admin email address, e.g. listadmin@example.com
Initial mailman password: <-- admin password for the mailman list
To finish creating your mailing list, you must edit your /etc/aliases (or
equivalent) file by adding the following lines, and possibly running the
`newaliases' program:

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

Hit enter to notify mailman owner... <-- ENTER

Ajoutons les alias qu'il demande :

nano /etc/aliases

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

Et appliquer les changements :

newaliases

service postfix restart

Intégrons maintenant Mailman à Apache :

ln -s /etc/mailman/apache.conf /etc/apache2/conf-enabled/mailman.conf

service apache2 restart

service mailman start

Maintenant, installons le FTP et les quotas :

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

nano /etc/default/pure-ftpd-common

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

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

Il faut ensuite créer un certificat TLS :

mkdir -p /etc/ssl/private/

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

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

service pure-ftpd-mysql restart

Voilà. Ensuite, dans le cas de figure où votre VPS est virtualisé sous OpenVZ, c'est l'heure d'activer le 2nd level quota. Vous allez voir cela avec votre fournisseur (ouvrir un ticket).

Une fois réalisé, on continue avec les services DNS et DNSSEC :

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

Editer le cron de awstats et tout désactiver en commentant out avec des dièses au début:

nano /etc/cron.d/awstats

Gestion de privilèges avancé sur les utilisateurs shell : Jailkit.

apt-get install build-essential autoconf automake libtool flex bison debhelper binutils

cd /tmp
wget http://olivier.sessink.nl/jailkit/jailkit-2.19.tar.gz
tar xvfz jailkit-2.19.tar.gz
cd jailkit-2.19
echo 5 > debian/compat
./debian/rules binary

cd ..
dpkg -i jailkit_2.19-1_*.deb
rm -rf jailkit-2.19*

Protection bruteforce : Fail2ban.

apt-get install fail2ban

nano /etc/fail2ban/jail.local

Et mettre tout ceci dedans (c'est un nouveau fichier) :

[pure-ftpd]
enabled = true
port = ftp
filter = pure-ftpd
logpath = /var/log/syslog
maxretry = 3

[dovecot]
enabled = true
filter = dovecot
logpath = /var/log/mail.log
maxretry = 5

[postfix-sasl]
enabled = true
port = smtp
filter = postfix-sasl
logpath = /var/log/mail.log
maxretry = 3

Et appliquer les changements :

service fail2ban restart

Installation de pare-feu :

apt-get install ufw

Installation de ISPConfig (enfin)

Tout est prêt. Installons maintenant le panel :

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

php -q install.php

Suivez les instructions et voilà, votre installation est prête. Si vous vous êtes perdu,  contactez un pro.

Actuellement sur Lean.fr


phpinfo : en savoir plus sur votre hébergeur web

Grâce à phpinfo, vous allez pouvoir vérifier en détail les fonctionnalités de votre plan d'hébergement web et en déduire sa compatibilité avec certains codes.

Mettre à jour PHP avec OVH release 3

S'il y a une chose qu'on connaît sur OVH release, c'est que son développement est très lent. Alors, pourquoi attendre si l'on peut nous-mêmes mettre à jour PHP?

Mettre à jour phpMyAdmin manuellement sur un VPS

Vous avez peut-être installé phpMyAdmin sans utiliser les dépôts. Maintenant, il est trop vieux et nécessite un coup de jeune. Voici alors le guide ultime.

Voir plus d'actualités