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

  • ARTICLES
  • /
  • TRANSFORMER UN VPS EN SERVEUR D'HÉBERGEMENT MUTUALISÉ

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.