Création d’un hébergement sur VM dédiée

Mettre les configuration IP

nano /etc/network/interfaces

iface ens192 inet static
        address 185.123.72.112/31
        gateway 185.123.72.113

nano /etc/resolv.conf

nameserver 185.123.72.104
nameserver 185.123.72.106
nameserver 9.9.9.9
nameserver 8.8.8.8

Modifier le nom de la machine « hostname »

nano /etc/hostname

"nom d’hôte"

nano /etc/hosts

IP Publique  "nom hôte" "fqdn"

Mettre à jour la distri et installer les logiciels

Vérifier la sourcelist et mettre à jour

nano /etc/apt/sources.list
# https://wiki.debian.org/fr/SourcesList - pour Debian 9 :

deb http://deb.debian.org/debian stretch main
deb-src http://deb.debian.org/debian stretch main

deb http://deb.debian.org/debian stretch-updates main
deb-src http://deb.debian.org/debian stretch-updates main

deb http://security.debian.org/debian-security/ stretch/updates main
deb-src http://security.debian.org/debian-security/ stretch/updates main
Mise a jour du système
apt update && apt -y dist-upgrade

Installer les packages

apt install -y apache2 mariadb-server php7.0-fpm phpmyadmin proftpd postfix

Pour phpmyadmin choisir : apache2
Pour postfix choisir : Site Internet
Nom courrier : fqdn.delamachine
Configurer phpmyadmin : Oui et laisser vite pour générer automatiquement un mot de passe

Activer les modules apache :

a2enmod proxy_fcgi setenvif rewrite ssl
a2enconf php7.0-fpm

Ajouter dans la conf de base apache

nano /etc/apache2/apache2.conf
<Directory /home >
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
</Directory>
service apache2 reload

Configurer MariaDB

mysql_secure_installation

Enter current password for root (enter for none): taper enter
Set root password? [Y/n] Y – mettre le mot de passe
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y

mysql --user=root mysql

CREATE USER 'user'@'localhost' IDENTIFIED BY 'password...';
GRANT ALL PRIVILEGES ON *.* TO 'user'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
exit;

Vérifier que la page web par défaut s’affiche !

Vérifier que phpmyadmin fonctionne avec ce compte administrateur !

Réduire l’exposition de Apache :

nano /etc/apache2/conf-available/security.conf
# En une seul commande :
sed -i -e 's/ServerTokens OS/ServerTokens Prod/' -e 's/ServerSignature On/\#ServerSignature On/' -e 's/\#ServerSignature Off/ServerSignature Off/' /etc/apache2/conf-available/security.conf

# Ou par le fichier :
ServerSignature Off
#ServerSignature On

#ServerTokens OS
ServerTokensProd

Ajuster les protocoles SSL/TLS :

nano /etc/apache2/mods-available/ssl.conf
# En une commande
sed -i -e 's/SSLCipherSuite HIGH:!aNULL/SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4"/' -e 's/SSLProtocol all -SSLv3/SSLProtocol all -SSLv3 -TLSv1/' /etc/apache2/mods-available/ssl.conf

# Ou dans le fichier

#SSLProtocol all -SSLv3
SSLProtocol all -SSLv3 -TLSv1

#SSLCipherSuite HIGH:!aNULL
SSLCipherSuite "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS !RC4"
Rechercher apache pour les nouvelles configurations
service apache2 reload

Installer d’autres PHP si nécessaire : ICI

Facultatif : changer le PHP par défaut en ligne de commande (CLI) :

update-alternatives –config php

 

Sécuriser le UMASK de PHP

nano /lib/systemd/system/php5.6-fpm.service
[Service]
Type=notify
PIDFile=/run/php/php5.6-fpm.pid
ExecStart=/usr/sbin/php-fpm5.6 --nodaemonize --fpm-config /etc/php/5.6/fpm/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID
UMask=0007
nano /lib/systemd/system/php7.0-fpm.service
[Service]
Type=notify
PIDFile=/run/php/php7.0-fpm.pid
ExecStart=/usr/sbin/php-fpm7.0 --nodaemonize --fpm-config /etc/php/7.0/fpm/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID
UMask=0007

Préparer la configuration de PHPmyAdmin (pool par default www.conf)

sed -i '/;/d' /etc/php/7.0/fpm/pool.d/www.conf
sed -i '/;/d' /etc/php/5.6/fpm/pool.d/www.conf
php par default
nano /etc/php/7.0/fpm/pool.d/www.conf

ou

nano /etc/php/5.6/fpm/pool.d/www.conf


php_admin_value[memory_limit] = 1024M
php_admin_value[post_max_size] = 512M
php_admin_value[upload_max_filesize] = 512M
systemctl daemon-reload && service php5.6-fpm restart && service php7.0-fpm restart

 

Installer/activer le SSL

wget -O -  https://get.acme.sh | sh
. ~/.bashrc
acme.sh --install-cronjob
a2ensite default-ssl.conf

ip=$(wget http://checkip.dyndns.org -O - -o /dev/null | cut -d : -f 2 | cut -d \< -f 1) && echo ServerName $ip >> /etc/apache2/apache2.conf

apachectl -t (Si ok passer à la suite)
service apache2 restart
Générer les certificats SSL
acme.sh --issue -d fqdn -w /var/www/monsite

 

Modifier dans le vhost SSL par défaut les chemins du nouveau certificat :

sed -i '/#/d' /etc/apache2/sites-available/000-default.conf
sed -i '/#/d' /etc/apache2/sites-available/default-ssl.conf
nano /etc/apache2/sites-enabled/default-ssl.conf
SSLCertificateFile      /root/.acme.sh/fqdn/fqdn.cer
SSLCertificateKeyFile /root/.acme.sh/fqdn/fqdn.key
SSLCertificateChainFile /root/.acme.sh/fqdn/fullchain.cer
SSLCACertificateFile /root/.acme.sh/fqdn/ca.cer
Recharger apache
service apache2 reload

 

Configurer proftpd :

nano /etc/proftpd/proftpd.conf
# En une commande (attention de remplacer le fqdn)
sed -i -e 's/"Debian"/"fqdn"/' -e 's/"-l"/"-la"/' -e 's/# DefaultRoot/DefaultRoot/' -e 's/# RequireValidShell/RequireValidShell/' -e 's/022/007/g' -e 's/#SetEnv TZ/SetEnv TZ/' -e 's/#Include \/etc\/proftpd\/tls.conf/Include \/etc\/proftpd\/tls.conf/' /etc/proftpd/proftpd.conf

# En passant par le fichier
ServerName                      "fqdn"
ListOptions                     "-la"
DefaultRoot                     ~
RequireValidShell               off
Umask                           007  007
SetEnv TZ :/etc/localtime
Include /etc/proftpd/tls.conf
Nettoyage du fichier de proftp
sed -i '/#/d' /etc/proftpd/tls.conf
nano /etc/proftpd/tls.conf
<IfModule mod_tls.c>
TLSEngine						on
	TLSRSACertificateFile		/root/.acme.sh/fqdn/fqdn.cer
	TLSRSACertificateKeyFile	/root/.acme.sh/fqdn/fqdn.key
	TLSCACertificateFile		/root/.acme.sh/fqdn/ca.cer

TLSLog							/var/log/proftpd/tls.log
</IfModule>
Recherger PROFTPD
service proftpd restart

Créer le nouveau site :

Création compte utilisateur (utilisateur = hostname)

Création compte utilisateur_preprod (utilisateur_preprod = hostname_preprod)

Ajouter le nouvel utilisateur :

groupadd utilisateur
useradd -g utilisateur -s /bin/false -m utilisateur

Générer un mot de passe :

openssl rand -base64 12

echo "utilisateur:pass" | chpasswd

Ajouter au compte www-data, le groupe supplémentaire de l’utilisateur créé :

usermod -a -G utilisateur www-data

Attention Apache n’en tient pas compte tant que le process n’est pas rechargé (reload)

Vérifier dans quels groupes supplémentaires est www-data
id -Gn www-data

Configuration du nouveau pool PHP-FPM

nano /etc/php/5.6/fpm/pool.d/utilisateur.conf

ou/et

nano /etc/php/7.0/fpm/pool.d/utilisateur.conf
[utilisateur]

user = utilisateur
group = utilisateur

listen = /run/php/php"votre_version_de_php"-fpm-utilisateur.sock


listen.owner = www-data
listen.group = www-data

pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3

php_admin_value[memory_limit] = 512M
php_admin_value[error_log] = /home/utilisateur/domaine/logs/php_errors.log
php_admin_value[post_max_size] = 512M
php_admin_value[upload_max_filesize] = 512M

Puis (pensez à échapper les caractères « . » « _ » « – »)

sed -i 's/utilisateur/verslenomdelutilisateur/' /etc/php/5.6/fpm/pool.d/utilisateur.conf
sed -i 's/domaine/verslenomdudomaine/' /etc/php/5.6/fpm/pool.d/utilisateur.conf

ou/et

sed -i 's/utilisateur/verslenomdelutilisateur/' /etc/php/7.0/fpm/pool.d/utilisateur.conf
sed -i 's/domaine/verslenomdudomaine/' /etc/php/7.0/fpm/pool.d/utilisateur.conf
Redémarrer php-fpm
service php5.6-fpm reload && service php7.0-fpm reload

Vérifier les pointages FQDN et DNS

 

Créer le vhost :

nano /etc/apache2/sites-available/www.domaine.conf
<VirtualHost *:80>
	ServerName domaine
	ServerAlias alias_domaine

	DocumentRoot    /home/utilisateur/domaine/www

	<FilesMatch ".+\.ph(p[3457]?|t|tml)$">
		SetHandler "proxy:unix:/run/php/php5.6-fpm-utilisateur.sock|fcgi://localhost"
	</FilesMatch>
	
	ErrorLog        /home/utilisateur/domaine/logs/error.log
	CustomLog       /home/utilisateur/domaine/logs/access.log combined
</VirtualHost>

Et créer les répertoires du site

mkdir /home/utilisateur/domaine
mkdir /home/utilisateur/domaine/www
mkdir /home/utilisateur/domaine/logs
chown utilisateur:utilisateur -R /home/utilisateur/domaine
chmod 770 -R /home/utilisateur/domaine

Activer le vhost

a2ensite www.domaine.conf

service apache2 reload

Modifier les pointages, penser à adapter le SPF si le site envoie des mails

Quand le pointage est opérationnel, mettre le Letsencrypt en route

 

acme.sh --issue -d www.domaine -d domaine -w /home/utilisateur/domaine/www

Et mettre à jour dans le vhost créer plutôt :

<IfModule mod_ssl.c>
	<VirtualHost _default_:443>
		ServerName www.domaine
		ServerAlias domaine

		DocumentRoot    /home/utilisateur/domaine/www

		SSLEngine on
			SSLCertificateFile      /root/.acme.sh/domaine/domaine.cer
			SSLCertificateKeyFile   /root/.acme.sh/domaine/domaine.key
			SSLCertificateChainFile /root/.acme.sh/domaine/fullchain.cer
			SSLCACertificateFile    /root/.acme.sh/domaine/ca.cer

		<FilesMatch "\.(cgi|shtml|phtml|php)$">
			SSLOptions +StdEnvVars
		</FilesMatch>

		<Directory /usr/lib/cgi-bin>
			SSLOptions +StdEnvVars
		</Directory>

		<FilesMatch ".+\.ph(p[3457]?|t|tml)$">
			SetHandler "proxy:unix:/run/php/php5.6-fpm-utilisateur.sock|fcgi://localhost"
		</FilesMatch>

		ErrorLog        /home/utilisateur/domaine/logs/error_ssl.log
		CustomLog       /home/utilisateur/domaine/logs/access_ssl.log combined
	</VirtualHost>
</IfModule>
service apache2 reload

Créer la première page à la racine du site

nano /home/utilisateur/domaine/www/index.php
<!doctype html>
<title>Site Maintenance</title>
<style>
  body { text-align: center; padding: 150px; }
  h1 { font-size: 50px; }
  body { font: 20px Helvetica, sans-serif; color: #333; }
  article { display: block; text-align: left; width: 650px; margin: 0 auto; }
  a { color: #dc8100; text-decoration: none; }
  a:hover { color: #333; text-decoration: none; }
</style>

<article>
    <h1>Nous serons bientôt de retour !</h1>
    <div>
        <p>Nous pour toutes demandes, merci de contacter votre webmaster.</p>
        <p>— Votre équipe</p>
    </div>
</article>

Ajouter un php.info pour les testes :

nano /home/utilisateur/domaine/www/php.info
<?php phpinfo(); ?>

Laisser un commentaire