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
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>
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>
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(); ?>