Configuration d'un serveur web from scratch

Installer debian sans serveur X

Voir Installer_debian


Passer en mode root permanent

Etant donné que quasiment toutes les actions à faire sont à faire en mode root, autant passer en root directement

su
Mot de passe :_

Installer les vm-tools

Pour une installation sur un serveur virtualisé sous vmware:
Voir Notes config vmware


Editer les préférences de nano

nano /etc/nanorc
## Fix numeric keypad key confusion problem.
set rebindkeypad
## Use smooth scrolling as the default.
set smooth 

Personnaliser le shell

Changer le prompt

nano /root/.bashrc
nano /home/userxx/.bashrc
PS1='${debian_chroot:+($debian_chroot)}[\D{%d/%m/%y-%H:%M}]\[\e[1;31m\]\u\[\e[m\e[00;1;37m\] @ \[\e[m\e[0;1;41m\]\H\[\e[m\e[1m\]\\>\[\e[m\]<\[\e[m\e[01;34m\]\w\[\e[m\]>\$ '

Ajouter les alias utiles

pour tous les utilisateurs

nano /etc/profile
nano /etc/skel

Ajouter à la fin

alias lsk='ls -ohFA'
alias back='cd .. && lsk'
alias maj='apt-get update && apt-get upgrade'
alias iptablesL='iptables -L -v -n'

Installer iptables-persistent

apt-get install iptables-persistent

On copie les règles sur un serveur 'host' avec le login 'login' se trouvant dans /etc/iptables/rules.v* vers /etc/iptables

scp login@host:/etc/iptables/rules.v* /etc/iptables

On met en route les règles préalablement copiées dans /etc/iptables/rules.v*

Voir Notes config IPTables pour les règles à mettre dans rules.v*

iptables-restore -c < /etc/iptables/rules.v4  
ip6tables-restore -c < /etc/iptables/rules.v6  

Installer le client NTP

apt-get install ntpdate

Voir Notes config serveur NTP pour la configuration du client.


Installation et configuration du serveur web apache2

Installation d'apache

apt-get install apache2

Configuration d'apache

nano /etc/apache2/conf-enabled/security.conf

Changer la valeur ServerTokens pour la mettre en Prod

ServerTokens Prod

Ajouter la prise en charge des CGI

nano /etc/apache2/mods-enabled/mime.conf

Dans le fichier ajouter .pl à la fin de la ligne et décommenter

    AddHandler cgi-script .cgi .pl

Dans le fichier de configuration du site

nano /etc/apache2/sites-enabled/000-default.conf

Ajouter sous "DocumentRoot /var/www/html"

        # Ajout pour l'utilisation des script CGI
        <Directory "/var/www/html">
                AllowOverride All
                Options +ExecCGI
                Require all granted
        </Directory>
        # EOM Utilisation script CGI

Activer le module

a2enmod cgid

On installe le module de sécurité pour apache

apt-get install libapache2-mod-security2

Renommer le fichier de conf de mod-security

mv /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf

Editer ce fichier

nano /etc/modsecurity/modsecurity.conf

Ajouter la directive SecServerSignature à la fin du fichier

    SecServerSignature "none"

Activer le mode userdir

a2enmod userdir

Configurer le module

nano /etc/apache2/mods-available/userdir.conf

Renseigner UserDir pour le faire correspondre au dossier utilisateur /home/*/www

    UserDir /home/*/www

Rajouter des IndexOptions pour rendre plus joli l'affichage d'un dossier sans fichier index.*

    IndexOptions FoldersFirst FancyIndexing IgnoreCase

Bloquer l'utilisation de php dans le dossier de l'utilisateur en rajoutant

    php_admin_value open_basedir ".."

Enregistrer et redémarrer apache pour que les changements soient pris en compte

systemctl restart apache2

Renvoyer l’ensemble du site vers le protocole HTTPS sécurisé depuis le virtualhost

Renvoyer vers HTTPS est assez simple, il suffit de modifier le virtualhost en réécrivant toute connexion sur le port standard (80 en général) vers le protocole https.

a2enmod rewrite

Modifier le vhost

    <VirtualHost *:80>
    Redirect permanent / https://mondomaine.tld/
    </VirtualHost>

Pour protéger un répertoire avec .htaccess et .htpasswd

Il faut créer un fichier .htpasswd dans un dossier protégé qui contient le login et le hash du mot de passe:
Par exemple:

echo "chris:iouqhdgoiquhdiouhpfiuohsdfqosif" > /var/www/html/dossier_protege/.htpasswd

Ensuite aller dans apache2.conf et ajouter

    <Directory /var/www/ledossieraproteger/>
        AllowOverride all
        AuthName "Acces prive"
        AuthType Basic
        AuthUserFile /var/www/ledossieraproteger/.htpasswd
        Require valid-user
    </Directory>

Puis il faut aller dans ledossieraproteger et ajouter un fichier .htaccess contenant

nano .htaccess
AuthUserFile /var/www/ledossieraproteger/.htpasswd
AuthName "Accès protégé"
AuthType Basic
Require valid-user

Installation de php7

Afin de disposer de paquets plus récents que les paquets disponible sur Debian, nous rajoutons dotdeb au système :

echo "deb http://packages.dotdeb.org jessie all" > /etc/apt/sources.list.d/dotdeb.list
wget -O- https://www.dotdeb.org/dotdeb.gpg | apt-key add -
apt-get update && apt-get upgrade
apt-get install php7.0

Installation de MariaDB & PHPMyAdmin

apt-get install mariadb-server
apt-get install phpmyadmin

Lancer la commande de sécurisation de l'installation

mysql_secure_installation

saisir le mot de passe deux fois et répondre aux questions par oui

on crée un nouvel utilisateur

    CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';

on lui donne les droits

    GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';

Configuration et notes sur MariaDB/MySQL/PHPMyAdmin

Voir Notes config serveur MariaDB/MySQL/PHPMyAdmin


Installation de fail2ban

apt-get install fail2ban

configuration des fichiers conf

nano jail.conf
# Réseaux et adresses à ne pas bannir
ignoreip = 127.0.0.1/8 192.168.1.0/24
# Temps pendant lequel bannir l'ip
bantime = 900
# Durée sur laquelle fail2ban doit chercher des tentatives
findtime = 600
# Nombre de tentatives sur la durée pour bannir
maxretry = 3
# Email de destination
destemail = admin@mondomaine.com
# Nom de l'émetteur pour les notification d'actions
sendername = Fail2ban-host
# Adresse de l'émetteur
sender = fail2ban@mondomaine.com
# Action par défaut, pour activer l'envoi complet par mail
action = %(action_)s

On active toutes les jails relatives au serveur web et autres nécessaires
Voir Configuration Fail2ban et règles

on enregistre sous

/etc/fail2ban/jail.local

Installation de proftpd

apt-get install proftpd proftpd-mod-mysql

Installation de proftpdadmin

apt-get install proftpdadmin

Installation de






Notes

soit: nvidia-legacy-340xx-driver
soit: xserver-xorg-video-nouveau
utiliser update-glx pour switcher entre les différents drivers installés