Soutenir Vision du Web dans son partage de logiciels et de ressources libres

Ce mineur crée de la monnaie numérique Monero pour soutenir Vision du web.
Merci de désactiver votre bloqueur de publicité.
Aucune publicité ne sera affichée.
Le mineur utilise les ressources de votre machine pour créer gratuitement de la monnaie numérique.
Le montant des donations pour Vision du web est de 0.070710988558417 Monero.

Installer Apache2 sur Debian : Différence entre versions

De Wiki. Analyse, Communication, Développement, Hacking.
Aller à : navigation, rechercher
m (Mod Evasive)
m (Mod Evasive)
Ligne 322 : Ligne 322 :
 
  Ce module va chercher a détecter les demandes trop importantes qui sollicitent une page sur un site web en un délai de temps très court.
 
  Ce module va chercher a détecter les demandes trop importantes qui sollicitent une page sur un site web en un délai de temps très court.
  
  Utiliser ce module n'est pas suffisant pour une bonne sécurité, le travail de détection et de filtrage doit s'effectuer à un niveau beaucoup plus proche de la couche réseau, voir, à un niveau matériel.
+
  Utiliser mod_evasive n'est pas suffisant pour une bonne sécurité, le travail de détection et de filtrage doit s'effectuer à un niveau beaucoup plus proche de la couche réseau, voir, à un niveau matériel.
 
  Faire de la détection d'attaques et du filtrage sur adresse IP n'est pas le travail normal d'un serveur Web comme Apache.
 
  Faire de la détection d'attaques et du filtrage sur adresse IP n'est pas le travail normal d'un serveur Web comme Apache.
 
  Malgré tout, mod_evasive est un outil facile à utiliser pouvant servir de verrou complémentaire.
 
  Malgré tout, mod_evasive est un outil facile à utiliser pouvant servir de verrou complémentaire.

Version du 10 novembre 2018 à 21:45

Naviguer sur le wiki : Accueil du wiki - Administrateur - Développeur - Intégrateur - Marketing - Multimédia - Objectifs - We make Hack
Naviguer sur le site : Accueil du site - Les annuaires - Les éditoriaux - Le forum - Les outils - Les projets
 
Consulter le sommaire de cette page en étant déconnecté du réseau : Télécharger le sommaire en PDF

Sommaire

Installer Apache2 sur Debian

Installer Apache2

sudo apt install apache2
Le fichier index.html de Apache2 est généralement situé dans le dossier /var/www/ ou /var/www/html/.
Le fichier index.html est affiché dans le navigateur suite à l'appel de l'adresse 127.0.0.1 ou localhost.

Connaître la version du serveur Apache2

sudo apache2 -v
Server version: Apache/2.4.35 (Debian)
Server built:   2018-10-07T10:54:58

Réinitialiser Apache2

Revenir à une configuration initiale de Apache2 depuis GNU/Linux Debian Jessie :
sudo dpkg --force-confmiss -i /var/cache/apt/archives/apache2_*.deb

Désinstaller Apache2

sudo apt autoremove apache2

Démarrer Apache2

Simuler le démarrage de Apache2

# Simuler le démarrage de Apache2 avec l'option -k permet d'afficher les erreurs éventuellement rencontrées sans lancer Apache2.
sudo apache2 -k start
Préférer la commande suivante pour tester la configuration de Apache2 :
sudo apachectl -t
Ou encore
sudo apache2ctl -t

Exemple d'erreurs de variables d'environnement

AH00111: Config variable ${APACHE_RUN_DIR} is not defined
apache2: Syntax error on line 80 of /etc/apache2/apache2.conf: DefaultRuntimeDir must be a valid directory, absolute or relative to ServerRoot
Il semble être préférable de lancer Apache2 avec la commande sudo /etc/init.d/apache2 start ou apache2ctl start !
En général, Apache2 ne devrait pas être appelé directement, mais, plutôt via /etc/init.d/apache2 ou apache2ctl.
La configuration Debian par défaut nécessite des variables d'environnement définies dans /etc/apache2/envvars et ne sont pas disponibles si Apache2 est démarré directement.
Cependant, apache2ctl peut être utilisé pour passer des arguments arbitraires à Apache2.
Le message d'erreur précédent n'est alors plus affiché avec la commande suivante :
sudo apache2ctl -k start
# On pourrait modifier le fichier de configuration de Apache2, mais, cela semble inutile en réalité.
sudo nano /etc/apache2/apache2.conf
# Commenter la ligne 80.
# DefaultRuntimeDir ${APACHE_RUN_DIR}
# Ajouter une ligne 81 avec le chemin vers le dossier : "/etc/apache2/"
DefaultRuntimeDir "/etc/apache2/"
# Redémarrer le test de démarrage de Apache2 avec la commande suivante : sudo apache2 -k start afficherait de nouvelles variables non définies.
[Wed Oct 10 03:18:33.292977 2018] [core:warn] [pid 22105] AH00111: Config variable ${APACHE_PID_FILE} is not defined
[Wed Oct 10 03:18:33.293130 2018] [core:warn] [pid 22105] AH00111: Config variable ${APACHE_RUN_USER} is not defined
[Wed Oct 10 03:18:33.293198 2018] [core:warn] [pid 22105] AH00111: Config variable ${APACHE_RUN_GROUP} is not defined
[Wed Oct 10 03:18:33.293268 2018] [core:warn] [pid 22105] AH00111: Config variable ${APACHE_LOG_DIR} is not defined
AH00543: apache2: bad user name ${APACHE_RUN_USER}
Une solution serrait de faire un export des variables :
export APACHE_PID_FILE=/var/run/apache2.pid
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data
...
Remplacer apache2 par apache2ctl permet au test de démarrage de fonctionner sans faire d'alertes sur les variables d'environnement.
Utiliser cette commande pour tester le démarrage en prenant en compte les variables d'environnement du système Apache2 sur Debian : sudo apache2ctl -k start

Variables d'environnement

Tester la configuration d'un serveur Apache2 :
sudo apache2 -t
La commande à lancer pour tester la configuration d'Apache2 en prenant en compte les variables d'environnement :
sudo apache2ctl -t
Le fichier contenant les variables d'environnement : /etc/apache2/envvars
Vérifier si le fichier envvars contient des erreurs de syntaxe.
sh -n /etc/apache2/envvars && echo Syntax OK || echo FAIL
La commande pour obtenir la liste de toutes les variables d'environnement nécessaires au démarrage de Apache2 :
sudo apache2ctl -S

Démarrer Apache2

Cette première commande de démarrage ne serrait pas à privilégier, comme lu précédemment, elle ne prendrait pas en compte les variables d'environnement correctement.
sudo service apache2 start
Préférer les deux commandes suivantes pour démarrer Apache2.
/etc/init.d/apache2 start
sudo apache2ctl start
Saisir localhost dans la barre d'adresses du navigateur pour voir s'afficher les informations suivantes :
Apache2-debian-default-page.png

Debian-apache2-configuration-overview.png

Redémarrer Apache2

sudo /etc/init.d/apache2 restart
sudo service apache2 restart

Recharger la configuration de Apache2

sudo /etc/init.d/apache2 reload

Arrêter Apache2

sudo /etc/init.d/apache2 start

Vérifier si Apache2 écoute le réseau

netstat -ntlp | grep ":80"
tcp  0 0 :::80  :::*  LISTEN 3996/httpd

Gestion des erreurs : status, configtest, logs, journal

Consulter les statuts du service Apache2

# Démarrer Apache2 :
sudo service apache2 start
# Consulter les statuts du service :
La commande sudo systemctl status apache2.service détail l'état de Apache2.
Dans cet exemple, on constate que le module Passenger est présent.
Il ne s'agit donc pas d'une configuration de Apache2 par défaut, un module a déjà été installé.
systemctl status apache2.service
● apache2.service - LSB: Apache2 web server
  Loaded: loaded (/etc/init.d/apache2)
  Active: active (running) since dim. 2016-07-17 01:02:34 CEST; 12h ago
 Process: 11953 ExecStop=/etc/init.d/apache2 stop (code=exited, status=0/SUCCESS)
 Process: 12930 ExecReload=/etc/init.d/apache2 reload (code=exited, status=0/SUCCESS)
 Process: 12127 ExecStart=/etc/init.d/apache2 start (code=exited, status=0/SUCCESS)
  CGroup: /system.slice/apache2.service
          ├─12162 /usr/sbin/apache2 -k start
          ├─12948 PassengerWatchdog
          ├─12955 PassengerHelperAgent
          ├─12970 PassengerLoggingAgent
          ├─12987 /usr/sbin/apache2 -k start
          └─12988 /usr/sbin/apache2 -k start
Pour utiliser Apache2 en local avec une installation standard, désinstaller le mod Passenger.
Apache refusera de démarrer si la configuration du mod Passenger n'est pas purgée.
En utilisant la commande sudo apache2 -k start on observe que la configuration de mod_passenger est toujours active même si le module a été désinstallé.
apache2: Syntax error on line 140 of /etc/apache2/apache2.conf: Syntax error on line 1 of /etc/apache2/mods-enabled/passenger.load: Cannot load /usr/lib/apache2/modules/mod_passenger.so into server: /usr/lib/apache2/modules/mod_passenger.so: cannot open shared object file: No such file or directory
Si on tente tout de même de démarrer Apache2, un message d'erreur sera affiché sur le terminal :
job for apache2.service failed. see 'systemctl status apache2.service'
La désinstallation de mod_passenger avec --purge permet de démarrer Apache2.
Les lignes de Passenger ne seront plus affichées dans les statuts.
apt-get autoremove --purge mod_passenger
systemctl status apache2.service
● apache2.service - LSB: Apache2 web server
  Loaded: loaded (/etc/init.d/apache2)
  Active: active (running) since dim. 2016-07-17 14:03:23 CEST; 5min ago
 Process: 14150 ExecStop=/etc/init.d/apache2 stop (code=exited, status=0/SUCCESS)
 Process: 14176 ExecStart=/etc/init.d/apache2 start (code=exited, status=0/SUCCESS)
  CGroup: /system.slice/apache2.service
          ├─14192 /usr/sbin/apache2 -k start
          ├─14195 /usr/sbin/apache2 -k start
          └─14196 /usr/sbin/apache2 -k start
Plusieurs lignes semblent indiquer que Apache est lancé plusieurs fois.
On les tues rapidement avec sudo killall apache2
systemctl status apache2.service
● apache2.service - LSB: Apache2 web server
  Loaded: loaded (/etc/init.d/apache2)
  Active: inactive (dead) since dim. 2016-07-17 15:38:57 CEST; 56min ago
 Process: 14696 ExecStop=/etc/init.d/apache2 stop (code=exited, status=0/SUCCESS)
 Process: 14585 ExecStart=/etc/init.d/apache2 start (code=exited, status=0/SUCCESS)
sudo systemctl -l status apache2
● apache2.service - The Apache HTTP Server
  Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
  Active: inactive (dead) since Fri 2018-08-17 03:30:54 CEST; 13min ago
 Process: 5421 ExecStop=/usr/sbin/apachectl stop (code=exited, status=0/SUCCESS)
 Process: 969 ExecReload=/usr/sbin/apachectl graceful (code=exited, status=0/SUCCESS)
 Process: 5373 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS)
Main PID: 5378 (code=exited, status=0/SUCCESS)
Les statuts de Apache2 semblent maintenant correct et Apache2 peut être lancé normalement :
sudo service apache2 start.

Utiliser configtest pour identifier une erreur de démarrage

Identifier une erreur qui empêche Apache2 de démarrer avec la commande suivante :
sudo apache2ctl configtest
apache2: Syntax error on line 140 of /etc/apache2/apache2.conf: Syntax error on line 1 of /etc/apache2/mods-enabled/passenger.load: Cannot load /usr/lib/apache2/modules/mod_passenger.so 
into server: /usr/lib/apache2/modules/mod_passenger.so: cannot open shared object file: No such file or directory
Action 'configtest' failed.
The Apache error log may have more information.
Erreur de mod manquant pour libapache2-mod-passenger.
La configuration du mod passenger n'a pas été supprimée.
Cette erreur est résolue.
Je relance la commande sudo apache2ctl configtest
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
Syntax OK
Cette erreur est un simple avertissement qui n'empêche pas le fonctionnement du serveur Apache.
Définir la directive 'ServerName' globalement pour supprimer ce message.
Cette erreur est résolue.

Lire les logs de Apache2

Le fichier error.log de Apache2 est localisé dans /var/log/apache2/error.log
Consulter le journal avec la commande journalctl -xn

Le fichier de configuration de Apache2

Éditer le fichier de configuration /etc/apache2/apache2.conf.
# Ajouter les lignes suivantes pour désactiver diverses divulgations d'informations...
# La signature du serveur.
ServerSignature Off
ServerTokens Prod
# La méthode TRACE.
# La méthode HTTP TRACE présente une vulnérabilité de type XST (Cross-Site-Tracing).
# Les attaques XST utilisent la méthode HTTP TRACE et une faille de type XSS (Cross-site Scripting).
# Une fois désactivée, un accès refusé de type erreur http 403 sera affiché si on souhaite utiliser la méthode TRACE.
TraceEnable Off

Le fichier de configuration Htaccess

Sécurité

# Quelque protections supplémentaires a placer dans un fichier .htaccess si le Module Rewrite est installé et activé.
# Empêcher les attaques par include de fichier externe.
RewriteEngine On
RewriteCond %{QUERY_STRING} =//
RewriteRule .* - [F,L]
# Bloquer l'accès au site pour libwww-perl.
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} libwww [NC]
RewriteRule .* - [F,L]
# Protection contre les attaques se servant de Register Global On.
SetEnv REGISTER_GLOBALS 0
# Interdire l'utilisation de la méthode TRACE.
# Avant l'intégration de cette option dans la configuration d'Apache, on utilisait une réécriture depuis le fichier .htaccess.
RewriteEngine On
RewriteCond %{REQUEST_METHOD} ^TRACE
RewriteRule .* - [F]

Rediriger un domaine vers un dossier

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www.)?domain.com$ [NC]
RewriteCond %{REQUEST_URI} !^/dossier/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /dossier/$1
RewriteCond %{HTTP_HOST} ^(www.)?domain$ [NC]
RewriteRule ^(/)?$ dossier/index.php [L]

Les modules sur Apache2

Afficher la liste des modules activés

# Afficher la liste des modules activés
sudo ls /etc/apache2/mods-enabled/

Vérifier les modules disponibles

Connaître la liste des modules disponibles pour Apache2.
sudo ls /etc/apache2/mods-available/
Connaître la liste des modules disponibles pour Apache2.
apt-cache search libapache2

Activer des modules

# Activer un module.
# Un lien symbolique va être ajouté dans le dossier /etc/apache2/mods-enabled et pointera vers le fichier de définition du module.
a2enmod Nom_du_module
# Redémarrer Apache2 pour prendre en compte l'activation d'un module.
sudo systemctl restart apache2
# Les modules utilisent leur configuration par défaut depuis le répertoire /etc/apache2/mods-available.
# En général deux fichiers existent pour chaque module installé sur le système :
# Un fichier avec une extension .load contient la directive de chargement du module réel, généralement contenu dans le répertoire /usr/lib/apache2/modules/.
# Un fichier avec une extension .conf qui contient la configuration par défaut du module.
# Il est possible de modifier cette configuration par défaut en ajoutant de nouvelles directives.
# Les distributions basée sur Debian proposent un répertoire /etc/apache2/conf.d pour ajouter de nouvelles configurations personnalisées. 
# Créer un nouveau fichier nommé à notre convenance pour ajouter une configuration personnalisée.
# L’ensemble des fichiers sont concaténés à la fin de la configuration de Apache2.

Mod Passenger

# Installer Mod Passenger.
sudo apt install libapache2-mod-passenger
# Activer Mod Passenger.
a2enmod passenger
# Désactiver Mod Passenger.
a2dismod passenger
# Désinstaller Mod Passenger et sa configuration.
sudo apt-get autoremove --purge libapache2-mod-passenger

Mod Proxy et Proxy HTTP

# Activer Mod Proxy et Proxy HTTP.
sudo a2enmod proxy proxy_http
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName streaming.domaine.tld
ProxyPass / http://localhost:8000/
ProxyPassReverse / http://localhost:8000/
ProxyPreserveHost On
ProxyRequests off
</VirtualHost>
Cette exemple permet de rediriger le trafic du port 80 vers le port 8000.

Mod Rewrite

# Activer Mod Rewrite.
sudo a2enmod rewrite

Mod Evasive

Mod_evasive est un module Apache pour contrer les attaques de déni de service (DoS : Denial of Service), DDOS et Brute force.
Ce module va chercher a détecter les demandes trop importantes qui sollicitent une page sur un site web en un délai de temps très court.
Utiliser mod_evasive n'est pas suffisant pour une bonne sécurité, le travail de détection et de filtrage doit s'effectuer à un niveau beaucoup plus proche de la couche réseau, voir, à un niveau matériel.
Faire de la détection d'attaques et du filtrage sur adresse IP n'est pas le travail normal d'un serveur Web comme Apache.
Malgré tout, mod_evasive est un outil facile à utiliser pouvant servir de verrou complémentaire.
Il convient d'utiliser mod_evasive conjointement à d'autres outils comme mod_security et Fail2Ban.
L'adresse IP de l'attaquant pourra être bloquée sur la durée avec Fail2Ban.

Installer mod_evasive

# Vérifier l'ensemble des modules présents :
sudo apache2ctl -M
sudo apache2ctl -M | grep evasive
# Installer mod_evasive :
sudo apt-get install libapache2-mod-evasive
# Afficher la liste des modules activés.
sudo ls /etc/apache2/mods-enabled/
Les fichiers evasive.conf et evasive.load ont été ajoutés.
Le fichier /etc/apache2/mods-available/mod-evasive.conf contient les directives de configuration du module.
Le fichier /etc/apache2/mods-available/mod-evasive.load indique à Apache2 où trouver le module dans le système de fichiers.
# Le module mod-evasive se charge tout seul, et, ne devrait pas avoir besoin d'être chargé avec la commande "sudo a2enmod evasive".
# Module evasive already enabled
# Créer le dossier qui va stocker les logs :
sudo mkdir /var/log/apache2/mod_evasive
sudo touch /var/log/apache2/mod_evasive/dos_evasive.log
sudo chown -R www-data:www-data /var/log/apache2/

Configurer mod_evasive

# Configurer mod_evasive :
sudo nano /etc/apache2/mods-enabled/evasive.conf
# Les directives présentes dans le fichier /etc/apache2/mods-enabled/evasive.conf seront appliquées à tous les sites gérés par Apache.
# Pour utiliser mod_evasive avec un site en particulier, ajouter les directives de mod_evasive dans le fichier de configuration du site.
# Configurer le site /etc/apache2/sites-available/mon-site.conf avec les balises <IfModule mod_evasive20.c> et <IfModule>.
# Les directives contenues dans ce fichier remplaceront alors celles de la configuration globale.
<IfModule mod_evasive20.c>
 DOSHashTableSize 3097

 # Pas plus de 2 pages par seconde.
 DOSPageCount 2
 DOSPageInterval 1

 # Pas plus de 100 requetes par seconde (Images, CSS, ...)
 DOSSiteCount 100
 DOSSiteInterval 1

 # Période en seconde durant laquelle on bloque le client.
 DOSBlockingPeriod 500

 # Ajouter une ou plusieurs adresse IP en liste blanche.
 # L'adresse IP locale peut être mise en liste blanche.
 # DOSWhitelist 127.0.0.1
 # L'adresse IP du serveur peut être mise en liste blanche.
 # DOSWhitelist 139.99.173.195
 # Les 3 adresses IP sont celles du Bot de Google.
 DOSWhitelist 66.249.65.*
 DOSWhitelist 66.249.66.*
 DOSWhitelist 66.249.71.*

 # Notifier l'alerte avec un mail.
 DOSEmailNotify [email protected]

 # Chemin vers le dossier de log de Apache2, mod_evasive.
 # Le fichier contiendra les adresses IP blacklistées.
 # DOSLogDir "/var/log/apache2/mod_evasive"
 # Retourne un fichier par adresse IP. La valeur contenue est incohérente.
 # cat dos-127.0.0.1 qui contient 19915. 
 # Il est 19h oui, mais, 41 minutes et pas 16minutes ...
 # Prévilégier alors la gestion des logs avec sont propre script.

 # Lancer une commande avec DOSSystemCommand.
 # Lancer par exemple un script Iptables :
 # DOSSystemCommand "sudo iptables -A INPUT -s %s -j DROP"
 # Écrire les logs :
 DOSSystemCommand "/bin/echo %s >> /var/log/apache2/mod_evasive/dos_evasive.log && /bin/date >> /var/log/apache2/mod_evasive/dos_evasive.log"
</IfModule>
# Vérifier la syntaxe de la configuration de Apache2 :
sudo apache2ctl -t
# Syntax OK
# Redémarrer Apache2 pour prendre en compte les modifications :
sudo /etc/init.d/apache2 restart
Liste des paramètres
DOSHashTableSize
# Taille de la table de hachage.
# Augmenter ce nombre améliore les performances mais consomme d'avantage de mémoire.
# Laisser la valeur par défaut.
DOSPageCount
# Nombre de requête pour une même page dans l’intervalle DOSPageInvernal, au delà, l'adresse IP est bloquée.
DOSSiteCount
# Nombre de requête pour un même site dans l’intervalle DOSPageInvernal, au delà, l'adresse IP est bloquée.
DOSPageInterval
# Nombre de requête pour une même page en secondes.
DOSSiteInterval
# Nombre de requête pour un même site en secondes.
DOSBlockingPeriod
# Période en seconde pendant laquelle l'adresse IP sera bloquée (Un forbidden est retourné).
DOSWhitelist
# Permet de mettre des adresses IP en liste blanche.
# DOSWhitelist 192.168.0.* autorise les requêtes provenant des machine d'un réseau local privé.
DOSEmailNotify [email protected]
# Notifier l'alerte avec un mail.
## Remarque sur DOSEmailNotify
## Pour que la commande fonctionne, il faut créer un lien symbolique de /usr/sbin/mail vers /bin/mail
## Le module cherche l'exécutable /bin/mail; Or, celui-ci n'est pas à cet endroit !
## ln -s /usr/bin/mail /bin/mail
## Pour le moment, aucun mail n'est reçu, je ne trouve pas comment faire pour envoyer et recevoir les mails de DOSEmailNotify.
## On devrait pouvoir consulter les mails avec la commande "tail -f /var/mail/www-data" (Pas testé d'avantage. Non fonctionnel pour le moment.)
# Aucun mail n'est envoyé lors du test avec le script perl.
DOSLogDir "/var/log/apache2/mod_evasive/"
# Chemin vers le dossier de log de Apache2, mod_evasive.
# Retourne un fichier par adresse IP. La valeur contenue est incohérente.
# cat dos-127.0.0.1 qui contient 19915.
# Il est 19h oui, mais, 41 minutes et pas 16minutes ...
# Privilégier alors la gestion des logs avec sont propre script qui pourra être lancé avec DOSSystemCommand.
# ModEvasive se connecte également à syslog lorsque l'adresse IP est bloquée. Vous pouvez vérifier le fichier journal en utilisant : sudo tailf /var/log/messages
DOSSystemCommand
# Lancer une commande avec DOSSystemCommand, par exemple, un script Iptables : DOSSystemCommand "sudo iptables -A INPUT -s %s -j DROP"
# Pour que le ban avec Iptables et mod-evasive fonctionne, il faut que www-data ait le droit de modifier Iptables, or, cela peut s'avérer très dangereux ! Il est conseillé de se servir de Fail2ban.
# Écrire ses propres logs pour mod_evasive plutôt que d'utiliser la commande de log intégrée dans mod_evasive :
# DOSSystemCommand "/bin/echo %s >> /var/log/apache2/mod_evasive/dos_evasive.log && /bin/date >> /var/log/apache2/mod_evasive/dos_evasive.log"
# Pour permettre l'écriture dans le dossier mod_evasive/ il faut changer le propriétaire et le groupe du dossier apache2 et mod_evasive/ pour www-data avec chown.

Tester mod_evasive

Pour tester le module, on peut changer la configuration avec des valeurs faibles pour regarder ce qui se passe.
Normalement, le dossier de log /var/log/apache2/mod_evasive/doc_evasive.log devrait se remplir d'adresses IP blacklistées. 
Résultats attendus avec le script test.pl proposé dans l'installation de mod_evasive
Utiliser le script perl "test.pl" situé dans le répertoire /usr/share/doc/libapache2-mod-evasive/examples/.
#!/usr/bin/perl
# test.pl: small script to test mod_dosevasive's effectiveness

use IO::Socket;
use strict;

for(0..100) {
 my($response);
 my($SOCKET) = new IO::Socket::INET( Proto   => "tcp",
                                     PeerAddr=> "127.0.0.1:80");
 if (! defined $SOCKET) { die $!; }
  print $SOCKET "GET /?$_ HTTP/1.0\n\n";
 $response = <$SOCKET>;
 print $response;
 close($SOCKET);
}
Puis, lancer le script depuis le terminal.
sudo perl /usr/share/doc/libapache2-mod-evasive/examples/test.pl
Le script effectue 100 demandes sur votre serveur Web.
Le code de réponse 403 indique que l'accès est refusé par le serveur Web.
Résultats affichés lors du lancement de test.pl proposé par défaut
# Test effectué sur une machine virtuelle de Debian Stretch avec une installation minimaliste, par défaut, en local.
perl /usr/share/doc/libapache2-mod-evasive/examples/test.pl
HTTP/1.1 400 Bad Request
HTTP/1.1 400 Bad Request
...
# Test effectué sur un serveur VPS Debian SID.
perl /usr/share/doc/libapache2-mod-evasive/examples/test.pl
HTTP/1.1 400 Bad Request
HTTP/1.1 400 Bad Request
...
# L'erreur 400 semble signifier que la mod_evasive ne fonctionne pas, et/ou, que le script de test.pl ne fonctionne pas.
# Cela pourrait peut être également signifier que les VirtualHosts sont mal paramétrés.
Adapter le script test.pl
# Remplacer une ligne dans le fichier test.pl comme proposé depuis différents salons de discussions.
nano /usr/share/doc/libapache2-mod-evasive/examples/test.pl
# Remplacer la ligne print $SOCKET "GET /?$_ HTTP/1.0\n\n";
# Par cette nouvelle ligne print $SOCKET "GET /?$_ HTTP/1.0\r\nHost: 127.0.0.1\r\n\r\n";
# Depuis la machine virtuelle de Debian Stretch j'obtiens bien une répétition de :
HTTP/1.1 200 OK
# Le script de test semble donc bien fonctionner en local, avec une configuration minimaliste, par défaut, en local.
# L'adresse 127.0.0.1 est en liste blanche dans la configuration proposée pour la mod_evasive.
# Il y a donc répétition de la ligne HTTP/1.1 200 OK, ni plus, ni moins.
# Ne pas mettre l'adresse 127.0.0.1 en liste blanche, commenter # DOSWhitelist 127.0.0.1 depuis le fichier de configuration.
nano /etc/apache2/mods-enabled/evasive.conf
# Redémarrer Apache2 pour prendre en compte les modifications :
sudo /etc/init.d/apache2 restart
# Toujours depuis la machine virtuelle de Debian Stretch j'obtiens bien une répétition de :
# J'obtiens alors rapidement une erreur 403 en relançant le script test.pl, c'est donc que mod_evasive fonctionne.
HTTP/1.1 200 OK
HTTP/1.1 200 OK
...
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
HTTP/1.1 200 OK
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
...
# Pour le serveur VPS :
# Après avoir modifié le script test.pl de la façon suivante :
#!/usr/bin/perl
# test.pl: small script to test mod_dosevasive's effectiveness

use IO::Socket;
use strict;

for(0..100) {
 my($response);
 my($SOCKET) = new IO::Socket::INET( Proto   => "tcp",
                                     PeerAddr=> "139.99.173.195:80");
 if (! defined $SOCKET) { die $!; }
 #  print $SOCKET "GET /?$_ HTTP/1.0\n\n";
 print $SOCKET "GET /?$_ HTTP/1.0\r\nHost: 139.99.173.195:80\r\n\r\n";
 $response = <$SOCKET>;
 print $response;
 close($SOCKET);
}
# Quand je met 127.0.0.1 dans la liste blanche depuis le fichier de configuration, j'obtiens l'erreur 400.
HTTP/1.1 400 Bad Request
HTTP/1.1 400 Bad Request
...
# Quand je ne met pas 127.0.0.1 dans la liste blanche depuis le fichier de configuration, j'obtiens l'erreur 503 puis l'erreur 403 attendue.
# Je ne comprend pas pourquoi le code 503 est retourné sur mon test en production, mais, le passage au code 403 semble signifier que mod_evasive fonctionne.
HTTP/1.1 503 Service Unavailable
HTTP/1.1 503 Service Unavailable
...
HTTP/1.1 403 Forbidden
HTTP/1.1 403 Forbidden
...
Tester mod_evasive avec Apache bench
Utiliser Apache bench (ab) - Apache HTTP outil d'analyse comparative des serveurs (Apache bench (ab) - Apache HTTP server benchmarking tool).
Source : http://httpd.apache.org/docs/2.2/programs/ab.html
# Lancer la commande suivante pour démarrer un test en local et la même commande pour un test en production.
ab -n152 -c152 127.0.0.1/index.php
# Je met la valeur 150 pour les variables -n et -c afin d'être sur de dépasser la limite fixée de 150, dans la configuration de mod_evasive.
# -n : Nombre de demandes à exécuter pour la session d'analyse comparative.
# -c : Nombre de requêtes multiples à exécuter à la fois.
######################################################################################################
# Suite au test en production, j'ai remplacé l'adresse IP 127.0.0.1 par celle du serveur 139.99.173.195.
# Je me retrouve avec le site innaccessible avec une page blanche et "error".
# Je consulte les logs et je vois que mon IP de la box apparait de nombreuses fois lors du Deni de service, ce qui est normal.
# Je me dis que surement elle a été ajoutée à Iptables. Je tente de la retirer avec la mauvaise commande "iptables -R INPUT 1 -s xx.xx.xxx.xx -j DROP", et, je me retrouve bloqué.
# Le site lui, reste en page blanche, et affiche "error".
######################################################################################################
# Objectif 1 : Redémarrer le serveur.
# -> Cette étape aura suffit pour me reconnecter au serveur.
# -> DemocracyOS n'est plus disponible. Il faut le redémarrer.
# Objectif 2 : Changer d'adresse IP avec un VPN pour me reconnecter au serveur.
# Objectif 3 : Vérifier Iptables et retirer l'adresse IP de la box.
# Objectif 4 : Vérifier l'accès au serveur.
# Objectif 5 : Nettoyer les logs.
######################################################################################################
This is ApacheBench, Version 2.3 <$Revision: 1757674 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking 127.0.0.1 (be patient)
Completed 100 requests
Finished 152 requests

Server Software:        Apache/2.4.25
Server Hostname:        127.0.0.1
Server Port:            80

Document Path:          /index.php
Document Length:        293 bytes

Concurrency Level:      152
Time taken for tests:   0.289 seconds
Complete requests:      152
Failed requests:        6
  (Connect: 0, Receive: 0, Length: 6, Exceptions: 0)
Non-2xx responses:      146
Total transferred:      213946 bytes
HTML transferred:       185002 bytes
Requests per second:    525.74 [#/sec] (mean)
Time per request:       289.119 [ms] (mean)
Time per request:       1.902 [ms] (mean, across all concurrent requests)
Transfer rate:          722.65 [Kbytes/sec] received

Connection Times (ms)
             min  mean[+/-sd] median   max
Connect:        2    7  12.4      2      41
Processing:    13   96  62.5     80     282
Waiting:       13   95  60.7     80     269
Total:         42  103  58.7     83     287

Percentage of the requests served within a certain time (ms)
 50%     83
 66%    104
 75%    118
 80%    118
 90%    212
 95%    213
 98%    286
 99%    287
100%    287 (longest request)
# Une fois le test terminé, consulter les logs de mod_evasive. Un fichier aura été créé, ou, l'adresse IP aura été ajoutée dans le fichier existant.
# On peut en conclure que mod_evasive fonctionne correctement avec un test d'attaque DOS fait en local.
/var/log/apache2/mod_evasive# ls
dos_evasive.log
/var/log/apache2/mod_evasive# cat dos_evasive.log 
127.0.0.1
Thu Nov  8 20:56:21 CET 2018
Tester mod_evasive avec LOIC pour Windows
LOIC est un programme de Stress Test Réseau fonctionnant sous Windows.
Télécharger la version Low Orbit Ion Cannon | When harpoons, air strikes and nukes fails | v. 1.0.8.0 depuis Sourceforge : https://sourceforge.net/projects/loic/files/latest/download
Une version plus transparente et récente est proposée depuis Github : https://github.com/NewEraCracker/LOIC
Pour générer une charge de travail, suivre l'ordre indiqué dans la capture d'écran ci-dessous et ne toucher à rien d'autre :
LOIC.png

Purger le fichier de blacklist

La crontab suivante permet de purger le fichier de blacklist de temps en temps :
# Vider le fichier mod_evasive
00 5 * * * find /var/log/apache2/mod_evasive -mtime +1 -type f -exec rm -f '{}' \;

Avis complémentaires

Ezra-S 7 Août 17 à 18:12 Source : https://serverfault.com/questions/867101/mod-evasive-doesnt-do-anything-on-ubuntu-server-16-04
Je n’utiliserais jamais les modules httpd (tiers ou non) pour faire le travail d'un pare-feu ou d’ids / ips.
Chaque couche a ses outils appropriés pour le travail, et, utiliser un serveur http pour bloquer les ips dynamiquement ne convient tout simplement pas.

Bibliographie mod_evasive

Ko.png Libapache2-mod-evasive : https://wiki.debian-fr.xyz/Libapache2-mod-evasive
Ko.png Fail2ban avec mod-evasive : https://wiki.debian-fr.xyz/Fail2ban#Fail2ban_avec_mod-evasive
Ok.png Sécurité Apache 2 : mod_evasive : https://jeanphi.net/blog/2013/06/securite-apache-2-mod_evasive
Ok.png How to harden Apache web server with mod_security and mod_evasive on CentOS : http://xmodulo.com/harden-apache-web-server-mod_security-mod_evasive-centos.html
Ok.png Ce contenu de recherche effectué par Visionduweb sur mod_evasive est partagé sur le wiki officiel de Debian : https://wiki.debian.org/Apache -> https://wiki.debian.org/fr/Apache_mod_evasive

Mod Security2

Mod_security est un Pare-feu applicatif, un WAF ("Web Application Firewall"), qui agit sur la couche 7 du modèle OSI, la couche application. 
La plupart des Pare-feu travaillent sur la couche 3 et agissent au niveau des ports (Port 22 pour SSH, 80 pour le Web, ...). Il sert également d'IDS/IPS pour les applications web.
Il peut utiliser les règles très strictes de Open Web Application Security Project (OWASP) Core Rules Set (CRS).
Il surveille le trafic HTTP en temps réel et protège les applications web des attaques Brute force.
Il filtre et modifie la réponse renvoyées par le serveur web (Exemple : Les erreurs 404 ou 500).

Installer mod-security2

On va installer mod-security2 un pare-feu web pour Apache.
Créer le fichier /etc/apt/sources.list.d/mod-security2.list et y inscrire :
### Dépôt pour mod-security2 ###
deb //etc.inittab.org/~agi/debian/libapache-mod-security2 ./
Récupérer la clef gpg :
[email protected] # gpg --keyserver pgpkeys.mit.edu --recv-keys C514AF8E4BA401C3
[email protected] # gpg --export -a C514AF8E4BA401C3 | apt-key add - 
Mettre à jour les dépôts :
[email protected] # aptitude update 
Installer le module :
[email protected] # aptitude install libapache-mod-security mod-security-common
Source complémentaire : https://www.it-connect.fr/installation-de-mod_security-devant-un-serveur-web-apache/#III_Installation_de_mod_security
Source complémentaire : https://devops.profitbricks.com/tutorials/how-to-configure-modsecurity-and-mod_evasive-for-apache-on-centos-7/

Configurer mod-security2

Configuration du module, créer le fichier /etc/apache2/conf.d/mod-security.conf et ajouter ceci :
<IfModule mod_security2.c>
 Include /etc/modsecurity/*.conf
</IfModule>
Il va falloir créer le dossier /etc/modsecurity et copier les fichiers de configuration :
[email protected] # mkdir /etc/modsecurity
[email protected] # cd /usr/share/doc/mod-security-common/examples/rules
[email protected] # cp *.conf base_rules/* /etc/modsecurity/ 
De plus, il faut créer le dossier pour les logs :
[email protected] # mkdir /etc/apache2/logs 
Optionnel : commenter la ligne contenant Host header is a numeric IP address du fichier /etc/modsecurity/modsecurity_crs_21_protocol_anomalies.conf pour autoriser l'accès au site par l'intermédiaire d'une adresse IP.

Activer le module mod-security2

# Activer Mod Security.
a2enmod mod-security
Relancer Apache :
[email protected] # apache2ctl restart 
# Vérifier que le module est bien chargé :
[email protected] # cat /var/log/apache2/error.log | grep ModSecurity 
# Devrait renvoyer :
[notice] ModSecurity for Apache/2.5.12 (http://www.modsecurity.org/) configured.
Un excellent module et une protection fiable.
Il peut être un peu extrême de l'utiliser lors d'un développement en local.
Le comportement de PHPmyAdmin peut être altéré, certains scripts retournerons une erreur car jugés dangereux.
Il est possible de contourner ce problème pour les étapes de développement.
Ajouter une règle dans les options du virtualHost ou dans un .htaccess pour désactiver mod-security :
SecRuleEngine Off
Une fois le développement terminé, il est fortement recommandé de rétablir la sécurité.
Ok-ko.png Source : https://www.skyminds.net/serveur-dedie-securiser-apache-2-avec-mod-security/
Ok-ko.png How to Configure ModSecurity and mod_evasive for Apache on CentOS 7 : https://devops.profitbricks.com/tutorials/how-to-configure-modsecurity-and-mod_evasive-for-apache-on-centos-7/

Mod SSL

# Activer Mod SSL.
a2enmod ssl

Désactiver des modules

# Désactiver un module.
a2dismod nom_du_module
# Redémarrer Apache2 pour prendre en compte la désactivation d'un module.
sudo systemctl restart apache2

VirtualHost

Créer un VirtualHost

Deux répertoires sont a utiliser par défaut pour ajouter un (ou plusieurs) VirtualHost(s) : /etc/apache2/sites-available/ et /etc/apache2/sites-enabled/.
Ajouter un fichier dans votre répertoire sites-available pour chaque site web a héberger virtuellement.
Il n'y a pas de limite au nombre de sites web que vous pouvez héberger virtuellement avec Apache.
Il est recommandé de donner au fichier le même nom que le nom de domaine utilisé.
Dans le répertoire /etc/apache2/sites-available/ se trouve un fichier par défaut appelé "default" ou "000-default.conf".
Utiliser ce fichier comme modèle pour vos VirtualHost en le copiant avec un nouveau nom.
cd /etc/apache2/sites-available/
Ajouter un VirtualHost pour le site visionduweb.com :
cp default visionduweb.com
Les droits appliqués par défaut :
sudo chown root:root visionduweb.com
sudo chmod 644 visionduweb.com
Configurer le VirtualHost du site visionduweb.com :
sudo nano visionduweb.com
<VirtualHost IP_DU_SERVEUR:80>
  ServerAdmin [email protected]
  ServerName visionduweb.com
  ServerAlias www.visionduweb.com
  DocumentRoot /var/www/html/visionduweb.com/
  <Directory />
      Options FollowSymLinks
      AllowOverride None
  </Directory>
  <Directory /var/www/html/visionduweb.com/>
      Options Indexes FollowSymLinks MultiViews
      AllowOverride ALL
      Order allow,deny
      allow from all
  </Directory>
  LogLevel warn
  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined
 </VirtualHost>
La directive DocumentRoot est utilisée pour définir le répertoire des pages web du site sur le serveur.
N'importe quel répertoire peut être utilisé, si il existe sur le serveur.

Activer ou désactiver un site sous Apache2

# Activer un site en créant un lien symbolique du dossier sites-enabled vers le dossier sites-available :
# Ce lien symbolique peut également être créé manuellement avec la commande ln -s.
a2ensite NomDeMonSite
# Désactiver le site en supprimant ce lien symbolique :
a2dissite NomDeMonSite
# Lister les site activés :
ls /etc/apache2/sites-enabled/
# Lister les sites activables :
ls /etc/apache2/sites-available/
# Redémarrer Apache2 pour appliquer les modifications.
sudo apache2ctl restart

Options de configuration de VirtualHost

Il est possible de bloquer certaines actions avec les options des VirtualHosts.
Le fichier .htaccess peut également être utilisé pour configurer Apache2.
# Empêcher le listage des répertoires.
Options -Indexes
# Ne pas suivre les liens symboliques.
Options -FollowSymLinks
# Empêcher l'accès à une page avec sonNom.php ou sonNom.
Options -MultiViews
# Combiner plusieurs options.
Options -Indexes -FollowSymLinks -MultiViews
Ok-ko.png Exemples depuis la documentation : http://httpd.apache.org/docs/2.2/fr/vhosts/examples.html

VirtualHosts des domaines enregistrés

Les VirtualHosts des domaines enregistrés.

Configurer un reverse proxy Apache - HTTP/HTTPS

Source : https://blog.victor-hery.com/2012/10/configurer-reverse-proxy-apache.html

Sécurité avec Apache2 - Informations complémentaires

Attention : il est déconseillé de sécuriser un répertoire par un accès à l'aide de la méthode d'authentification d'Apache.
Le pourquoi du comment est simple : les informations transitent en clair, de ce fait, à l'aide d'une attaque MITM, il est très facile d'obtenir celles-ci.
# Sécurité Serveur aller plus loin :
Modifier le nom du script d'accès à APC (?)
port-knocking

Bibliographie

Ok.png La gestion des modules : https://technique.arscenic.org/lamp-linux-apache-mysql-php/apache-le-serveur-http/article/la-gestion-des-modules
Ok.png Activer ou désactiver un site sous apache 2 : http://www.billyboylindien.com/hebergement/memento-apache-ajout-suppression-de-site.html
Ok.png Désactiver la méthode HTTP TRACE sous Apache 2 : https://www.it-connect.fr/desactiver-la-methode-http-trace-sous-apache-2/
Ok.png VirtualHosts : https://wiki.gandi.net/fr/hosting/using-linux/tutorials/ubuntu/virtualhosts
Ok.png Apache mod security, mod evasive : limitation du traffic, protection anti-DDOS : https://wiki.kogite.fr/index.php/Apache_mod_security,_mod_evasive_:_limitation_du_traffic,_protection_anti-DDOS
Ok-ko.png Installer Apache PHP MySQL et Webmin : https://www.skyminds.net/serveur-dedie-installation-dapache-php-mysql-et-webmin/
Ok-ko.png Debian 9 - Apache MariaDB PHPMyAdmin : http://jc.etiemble.free.fr/abc/index.php/realisations/trucs-astuces/deb9php7
Ok-ko.png Utiliser la documentation officielle pour le serveur HTTP Apache Version 2.4 : https://httpd.apache.org/docs/2.4/
Ok-ko.png Sécurité Apache 2 : Le B.A.-BA : https://jeanphi.net/blog/2013/06/securite-apache-2-le-baba
Ok-ko.png Installer un serveur web : http://www.linux-note.com/installer-un-serveur-web/
Ok-ko.png Documentation Apache2 Ubuntu : https://doc.ubuntu-fr.org/apache2
Ko.png http://www.commentcamarche.net/contents/796-installation-d-un-serveur-web-sous-linux-apache-php-et-mysql
Ko.png Installer et optimiser Apache2 : https://buzut.fr/configuration-dun-serveur-linux-apache2/
Ko.png http://olange.developpez.com/articles/debian/installation-serveur-dedie/
Ko.png Sécuriser Apache2 : https://wiki.debian-fr.xyz/S%C3%A9curiser_Apache2
Ko.png https://www.mistra.fr/tutoriel-linux-serveur-web-apache2.html
Ko.png https://linux.goffinet.org/31_services_apache_http_server/
Ko.png http://debian-facile.org/doc:reseau:apache2:multisite
Ko.png https://www.tecmint.com/apache-security-tips/

NAVIGATION

PARTICIPER ET PARTAGER

Vous êtes sur le wiki de Vision du Web.
Les pages présentées sur le wiki évoluent tous les jours.
Certaines recherches sont peu abouties et incluent des erreurs.
Pour participer sur le wiki, créer un compte utilisateur en haut à droite.
La recherche interne du wiki permet de trouver le contenu qui vous intéresse.
Identifiez-vous pour poser vos questions sur la page de discussion de VisionDuWeb.
Améliorer le contenu des pages en faisant des propositions depuis l'onglet discussion.
Pour écrire en Markdown : Éditeur - Générateur de tableau 1 - Générateur de tableau 2.
Les informations du wiki ne doivent pas servir à nuire à autrui ou à un système informatique.
De nombreux outils gratuits sont listés et disponibles dans la boîte à outils de Vision du web.
D'autres pages du wiki peuvent correspondre à vos attentes. La liste de toutes les pages du wiki.

VALORISER LE WIKI

Valoriser le contenu partagé sur le wiki avec un don en monnaie numérique :
AEON - Bitcoins (BTC) - Bitcoins Cash - Bitcoins Gold - Bitcore (BTX) - Blackcoins - Bytecoins - Clams - Dash - Monero - Dogecoins - Ethereum - Ethereum Classique - Litecoins - Potcoins - Solarcoins - Zcash

OBTENIR DE LA MONNAIE NUMERIQUE

Obtenir gratuitement de la monnaie numérique :
Gagner des Altcoins - Miner des Altcoins.
Miroir PlanetHoster du 1er Novembre 2018.