Apache2, Pure-FTPd, VSFTPd, LDAP, Samba, Active Directory

 Charge moyenne sur 1mn : 0.44 Charge moyenne sur 5mn : 0.71 Charge moyenne sur 15mn : 0.71




Blocs utilisateurs du site : Infos du compte / droits utilisateurs / récapitulatif

Identify yourself

Authenticate with your ZW3B account and take advantage of member services.

Username :
Password :
  
  

Howto Apache2 - Module evasive

  • Howto Apache2 - Module evasive
Le module mod_evasive permet de détecter les floods et les tentatives de déni de service ou Deny of Service (DOS).

Informations :

Dates
  • Publish : : Tuesday 31 january 2012
  • Modification : Sunday 12 february 2012

Share :

Le serveur Apache peut être configuré pour limiter les impacts d'une attaque DoS. Le module mod_evasive existe pour cela. Il crée une table dynamique des IP clients et des URL demandées. Par défaut, il blacklist et renvoie une erreur 403 si l'IP :

  • fait plus de X requêtes par seconde sur une uri
  • fait plus de X requêtes par seconde sur un process Apache
  • continue de faire des requêtes alors qu'il est blacklisté

Il est éventuellement possible de configurer mod_evasive pour qu'il communique avec un firewall.

Installer le module Apache dédié à la prévention des attaques DoS

apt-get install libapache2-mod-evasive
a2enmod mod-evasive

Configurer vi /etc/apache2/httpd.conf

# taille de la table de surveillance, a augmenter pour les DDoS
DOSHashTableSize    3097
# Nb maximum de refresh d'une uri par periode
DOSPageCount        5
# Nb maximum de requete sur le site par periode
DOSSiteCount        150
# Duree de la periode pour la uri
DOSPageInterval     1
# Duree de la periode pour le site
DOSSiteInterval     1
# Duree du blacklistage de l'IP reconduite si retentative
DOSBlockingPeriod   10
# envoie de mail quant une IP est bloquee
DOSEmailNotify "xxx@xxxxx.xxx"
# repertoire des logs
DOSLogDir "/var/log/mod_evasive/"
# Execute une action quand une IP est bloquee
DOSSystemCommand "/sbin/iptables -I INPUT -s %s -j DROP"
DOSSystemCommand "/bin/echo %s >> /var/log/mod_evasive/dos_evasive.log && /bin/date >> /var/log/mod_evasive/dos_evasive.log"
# Whitelist non surveillee
DOSWhiteList 127.0.0.1
DOSWhiteList 192.168.1.*

DOSHashTableSize est la taille de la table de hachage. Plus cette valeur sera grande, moins il faudra d'itérations pour identifier un enregistrement. En revanche, la consommation de mémoire sera plus importante. Sur des serveurs Web à forte charge il est recommandé d'augmenter cette valeur.
DOSPageCount définie le nombre de fois qu'une page peut être appelée par la même adresse IP avant que celle-ci ne soit bloquée.
DOSSiteCount définie le nombre de fois qu'un site peut être demandé par la même adresse IP avant que celle-ci ne soit bloquée.
DOSPageInterval détermine un intervalle en seconde qui autorise l'affichage d'une même page avant blocage.
DOSSiteInterval détermine un intervalle en seconde qui autorise l'affichage d'un même site avant blocage.
DOSBlockingPeriod détermine la durée du blocage.
DOSEmailNotify permet l'envoi d'un email à chaque blocage d'adresse IP.
DOSSystemCommand permet de définir une commande bien précise en cas d'attaque (bannissement de l'adresse IP dans IPTables par exemple).
DOSLogDir détermine le chemin ou seront stockés les logs d'attaques.
DOSWhiteList définie une liste blanche d'adresses IP.

Tester le module evasive

Avec ApacheBench

Vous pouvez maintenant tester le résultat. Tout d'abord un test depuis le réseau local dans la whitelist, il ne doit y avoir aucune erreur :

ab -n 1000 -c 100 http://localhost/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking www.webstrat.fr (be patient).....done
Server Software:        Apache/2.2.11
Server Hostname:        localhost
Server Port:            80
Document Path:          /
Document Length:        27229 bytes
Concurrency Level:      100
Time taken for tests:   0.146 seconds
Complete requests:      1000
Failed requests:        0
# ab -n 1000 -c 100 http://mon-ip-publique/
This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking www.webstrat.fr (be patient).....done
Server Software:        Apache/2.2.11
Server Hostname:        mon-ip-publique
Server Port:            80
Document Path:          /
Document Length:        27229 bytes
Concurrency Level:      100
Time taken for tests:   4.614 seconds
Complete requests:      1000
Failed requests:        832
Avec un script perl

On va maintenant tester la configuration à l'aide d'un petit script perl livré avec le module mais il faut avant tout commenter temporairement la ligne DOSWhiteList 127.0.0.1 et redémarrer apache pour prendre en compte la configuration du module.

On crée un fichier vi test.pl

#!/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.0nn";
  $response = <$SOCKET>;
  print $response;
  close($SOCKET);
}

Pour vérifier si vous êtes victime d'une attaque DoS, utilisez l'outil netstat

netstat -an | grep SYN

Firewall contre les attaques DoS

Contre les attaques DoS de haut niveau, l'usage d'un firewall est le plus efficace.
iptables permet de limiter le nombre de connexions simultanées provenant d'une adresse IP ou d'un réseau, le nombre de connexions depuis une source, le tout sur une période donnée. Les règles suivantes permettent de limiter le nombre de connexion depuis une source à 50 hits pendant 10 secondes sur le port 80, paramètre à ajuster en fonction de vos besoins :

iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW -m recent --set --name WEB
iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW -m recent --update --seconds 10 --hitcount 50 --rttl --name WEB -j DROP

Cela évite les attaques DoS simples mais reste peu efficace face aux attaques massivement distribuées. On parle alors d'attaque par déni de service distribuée ou de Distributed Denial of Service attacks ou DDoS.
Des centaines voir des milliers d'ordinateurs, souvent infectés par un virus, sont alors utilisés pour envoyer simultanément des requêtes à votre serveur. Dans ce cas, la capacité du hardware de votre infrastructure, routeur et serveur, à traiter les requêtes est prédominante.

Sportivement... :/

Sources :





Translate this page with Google

Author of the page

O.Romain.Jaillet-ramey

O.Romain.Jaillet-ramey

  • Firstname : Olivier Romain Luc
  • Lastname : : Jaillet-ramey
  • Arrived on tuesday 19 october 1976 (1976/10/19 00:00)
    44 years activity !

Firefox Nighlty

Our friends from Framasoft are interested in Mozilla and asked them questions about Nightly: Firefox Night-club, free entry !






Valid XHTML 1.0 Strict CSS Valide !

ipv6 ready