Apache

"no space left on device"

Si apache ne redémarre pas avec cette erreur dans l'error_log :

[core:emerg] [pid 27864] (28)No space left on device: AH00023: Couldn't create the ssl-cache mutex
AH00016: Configuration Failed

c'est que des semaphores sont restés coincés et que le système atteint son max. Voir les sémaphores :

ipcs -s

Pour les libérer :

for i in `ipcs -s | awk '/apache/ {print $2}'`; do (ipcrm -s $i); done

La raison peut être que systemctl fait un kill pour stopper apache et ce n'est pas propre. Apachectl fait ça mieux apparemment, mais pour régler le problème de systemd/systemctl s'il devient récurrent, on peut ajouter la commande ipcrm au script /etc/systemd/system/multi-user.target.wants/httpd.service :

ExecStartPre=/bin/sh -c "for i in `ipcs -s | awk '/apache/ {print $2}'`; do (ipcrm -s $i); done"

Si nécessaire (système très chargé qui a besoin de beaucoup de processus apache) on peut étendre la limite aussi dans /etc/systcl.conf en doublant les chiffres :

kernel.sem = 500 512000 64 2048

puis

sysctl -p

Exemple robots.txt

Exemple de fichier robots.txt

http://www.arnold-soft.de/robots.txt

# BotDoku: de.wetena.com/bot
# Doku:    www.robotstxt.org

# erlaubte robots
# google.com Googlebot
# bing.com bingbot
# msn.com
# MSIE
# info@netcraft.com

# Hier ein Liste der unerwuenschten robots
# Yandex
# www.infohelfer.de
# warebay.com
# thunderstone.com
# pixray.com
# aihit.com
# ips-agent
# MALC

# metadatalabs.com
User-agent: MLBot
Disallow: /

#  Ahrefs.com (http://ahrefs.com/robot/)
#  IP 5.10.83.36
#  "Mozilla/5.0 (compatible; AhrefsBot/5.0; +http://ahrefs.com/robot/)"
user-agent: AhrefsBot
disallow: /

# ezooms.bot
User-agent: Ezooms
Disallow: /

# domaintools.com
User-agent: SurveyBot
Disallow: /

# www.infohelfer.de
User-agent: Infohelfer
Disallow: /

# www.pixray.com
User-agent: Pixray*
Disallow: /

# warebay.com
User-agent: WBSearchBot
Disallow: /

# aihit.com
User-agent: aiHitBot
Disallow: /

# yandex.com  YandexBot YandexImages
# IP 141.8.147.17
# "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)"
User-agent: YandexBot
Disallow: /
User-agent: YandexImages
Disallow: /

# U 
User-agent: U
Disallow: /

# unister.de
User-agent: UnisterBot
Disallow: /

# www.Nutch.de
# IP 62.146.2.234, 117.78.13.18
# "Domnutch-Bot/Nutch-1.0 (Domnutch; http://www.Nutch.de/)"
User-agent: nutch-1.4
Disallow: /

User-agent: discobot
Disallow: /

# SEO Spider  spider@spiderlytics.com 
# IP 5.199.136.130
# "Mozilla/5.0 (compatible; Spiderlytics/1.0; +spider@spiderlytics.com)"
User-agent: Spiderlytics
Disallow: /

# Unknown
# IP 207.241.226.239
# "ia_archiver(OS-Wayback)"
User-agent: ia_archiver
Disallow: /

# crawler@alexa.com
# IP 204.236.235.245
# "ia_archiver (+http://www.alexa.com/site/help/webmasters; crawler@alexa.com)"
User-agent: alexa
Disallow: /

# Unknown
# IP 108.59.8.70
# "Mozilla/5.0 (compatible; MJ12bot/v1.4.4; http://www.majestic12.co.uk/bot.php?+)"
User-agent: MJ12bot
Disallow: /

# http://go.mail.ru/help/robots
# IP 217.69.133.253
# "Mozilla/5.0 (compatible; Linux x86_64; Mail.RU_Bot/2.0; +http://go.mail.ru/help/robots)"
User-agent: Mail.RU_Bot
Disallow: /

# macinroy.com
# IP 85.25.137.24
# "MacInroy Privacy Auditors. See jarnold.org's privacy violation report: http://jarnold.org.macinroy.com/jarnold.org"
User-agent: MacInroy
Disallow: /

# www.semrush.com/bot.html
# IP 46.229.164.102
# "Mozilla/5.0 (compatible; SemrushBot/0.97; +http://www.semrush.com/bot.html)"
User-agent: SemrushBot
Disallow: /

# http://www.icjobs.de
# IP 85.25.71.40
# "Mozilla/5.0 (X11; U; Linux i686; de; rv:1.9.0.1; compatible; iCjobs Stellenangebote Jobs; http://www.icjobs.de) Gecko/20100401 iCjobs/3.2.3"
User-agent: iCjobs
Disallow: /

# http://fulltext.sblog.cz
# IP 77.75.77.32
# "SeznamBot/3.0 (+http://fulltext.sblog.cz/)"
User-agent: SeznamBot
Disallow: /

# http://webmeup-crawler.com
# IP 108.178.53.146
# "Mozilla/5.0 (compatible; BLEXBot/1.0; +http://webmeup-crawler.com/)"
User-agent: BLEXBot
Disallow: /

# http://siteexplorer.info
# IP 208.43.225.84
# "Mozilla/5.0 (compatible; SiteExplorer/1.0b; +http://siteexplorer.info/)"
User-agent: SiteExplorer
Disallow: /

# www.linkdex.com/about/bots
# IP 54.242.123.170, 23.22.229.75, 54.225.52.217 23.20.126.233
# "Mozilla/5.0 (compatible; linkdexbot/2.0; +http://www.linkdex.com/about/bots/)"
User-agent: linkdexbot
Disallow: /

# www.wotbox.com/bot
# IP 81.144.138.34
# "Wotbox/2.01 (+http://www.wotbox.com/bot/)"
User-agent: Wotbox
Disallow: /

# http://www.domaintuno.com
# IP 192.96.204.42
# "http://www.domaintuno.com/whois/jarnold.org" "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)"
User-agent: domaintuno
Disallow: /

# unknown addressendeutschland.de
# IP 86.109.249.174
# "http://arnold-soft.de/" "dubaiindex (addressendeutschland.de)"
User-agent: dubaiindex
Disallow: /

# www.pagesinvenotry.com
# IP 130.185.109.243
# "PagesInventory (robot http://www.pagesinvenotry.com)"
User-agent: PagesInventory
Disallow: /

# www.abonti.com
# IP 77.233.225.115
# "Mozilla/5.0 (compatible; Abonti/0.91 - http://www.abonti.com)"
User-agent: Abonti
Disallow: /

# www.backlinktest.com/crawler.html
# IP 46.4.100.231
# "BacklinkCrawler (http://www.backlinktest.com/crawler.html)"
User-agent: BacklinkCrawler
Disallow: /

# http://netcomber.com
# IP 54.227.175.17
# "NCBot http://netcomber.com?st=ba2Tool for finding all their domain names."
User-agent: NCBot
Disallow: /

# Unknown
# IP 69.58.178.58
# "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:14.0; ips-agent) Gecko/20100101 Firefox/14.0.1"
User-agent: ips-agent
Disallow: /

# www.grapeshot.co.uk/crawler.php
# IP 89.145.95.2
# "Mozilla/5.0 (compatible; GrapeshotCrawler/2.0; +http://www.grapeshot.co.uk/crawler.php)"
User-agent: GrapeshotCrawler
Disallow: /

# www.80legs.com/webcrawler.html
# IP 64.125.222.16
# "Mozilla/5.0 (compatible; 008/0.83; http://www.80legs.com/webcrawler.html;) Gecko/2008032620"
User-agent: 008/0.83
Disallow: /
User-agent: 008/0.85
Disallow: /

# it2media.de
# IP 86.109.249.169
# "it2media-domain-crawler/1.0 on crawler-prod.it2media.de"
User-agent: it2media-domain-crawler
Disallow: /

# http://crawler.sistrix.net
# IP 176.9.148.197, IP 176.9.155.226, 5.9.112.66
# "Mozilla/5.0 (compatible; SISTRIX Crawler; http://crawler.sistrix.net/)"
User-agent: SISTRIX
Disallow: /

# www.picsearch.com/bot.html
# IP 217.212.224.183
# "psbot/0.1 (+http://www.picsearch.com/bot.html)"
User-agent: psbot
Disallow: /

# worio.com
# IP 107.22.250.59
# "Mozilla/5.0 (compatible; woriobot +http://worio.com)"
User-agent: woriobot
Disallow: /

# semantissimo.de
# IP 88.198.24.173
# "ssearch_bot (sSearch Crawler; http://www.semantissimo.de)"
User-agent: sSearch
Disallow: /

# www.archive.org/details/archive.org_bot
# IP 207.241.237.102  + .103 (abwechselnd!) + 207.241.226.234
# Mozilla/5.0 (compatible; archive.org_bot; Wayback Machine Live Record; +http://archive.org/details/archive.org_bot)"
User-agent: archive.org_bot
Disallow: /

# +spider@waybackarchive.org
# IP 5.199.136.130
# "Mozilla/5.0 (compatible; waybackarchive.org/1.0; +spider@waybackarchive.org)"
User-agent: waybackarchive.org
Disallow: /

# www.website-datenbank.de
# IP 81.209.177.145
# "netEstate NE Crawler (+http://www.website-datenbank.de/)"
User-agent: netEstate
Disallow: /

# www.compspy.com/spider.html
# IP 68.47.129.55
# "Mozilla/5.0 (compatible; CompSpyBot/1.0; +http://www.compspy.com/spider.html)"
User-agent: CompSpyBot
Disallow: /

# www.seoprofiler.com/bot
# IP 198.199.89.149, 162.243.203.202
# "Mozilla/5.0 (compatible; spbot/4.1.0; +http://OpenLinkProfiler.org/bot )"
User-agent: spbot
Disallow: /

# http://filterdb.iss.net/crawler/
# IP 206.253.226.18
# "Mozilla/5.0 (compatible; oBot/2.3.1; http://filterdb.iss.net/crawler/)"
User-agent: oBot
Disallow: /

# http://www.baidu.com
# 183.60.243.187
# "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0"
User-agent: baidu
Disallow: /

# http://www.exabot.com/go/robot
# IP 178.255.215.69
# "Mozilla/5.0 (compatible; Exabot/3.0; +http://www.exabot.com/go/robot)"
User-agent: Exabot
Disallow: /

# www.tiscali.it
# IP 217.73.208.103
# "Mozilla/5.0 (compatible; IstellaBot/1.18.81 +http://www.tiscali.it/)"
User-agent: IstellaBot
Disallow: /

# www.netseer.com/crawler.html
# IP 75.98.9.250
# "Mozilla/5.0 (compatible; NetSeer crawler/2.0; +http://www.netseer.com/crawler.html; crawler@netseer.com)"
User-agent: NetSeer
Disallow: /

# http://www.opensiteexplorer.org/dotbot, help@moz.com
# IP 208.115.113.92
# "Mozilla/5.0 (compatible; DotBot/1.1; http://www.opensiteexplorer.org/dotbot, help@moz.com)"
User-agent: DotBot
Disallow: /

# http://www.proximic.com/info/spider.php# IP 54.211.1.18
# "Mozilla/5.0 (compatible; proximic; +http://www.proximic.com/info/spider.php)"
User-agent: proximic
Disallow: /

# http://commoncrawl.org/faq/
# IP 54.227.12.4
# "CCBot/2.0 (http://commoncrawl.org/faq/)"
User-agent: CCBot
Disallow: /

# 
# IP 130.211.186.147, 146.148.35.52
# "GET / HTTP/1.0" 200 10064 "-" "NerdyBot"
User-agent: NerdyBot
Disallow: /

# http://semalt.semalt.com/crawler.php
# IP 187.79.214.121
# "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36"
#User-agent: xxx
#Disallow: /

#
# IP 69.84.207.246
# "LSSRocketCrawler/1.0 LightspeedSystems"
User-agent: LSSRocketCrawler
Disallow: /

# ???
# 50.17.21.141
# "Cliqzbot"
User-agent: Cliqzbot
Disallow: /

User-agent: Mediapartners-Google*
Disallow: /

# standard Einstellungen
User-agent: *
Disallow: /atd/
Disallow: /backup/
Disallow: /files/
Disallow: /log/
Disallow: /phptmp/
Disallow: /restore/
Disallow: /html/_media/
Disallow: /html/media/images/
Disallow: /html/media/Scripting/
Disallow: /html/cgi-bin/
Disallow: /html/mediawiki/

# Allow: /html/
# Allow: /html/media/files/

Exemples de règles Rewrite

Charger le module Rewrite dans httpd.conf :

LoadModule rewrite_module modules/mod_rewrite.so
AddModule mod_rewrite.c 

Dans chaque VirtualHost qui doit avoir des règles de réécriture, activer le rewriting par

 RewriteEngine on

Rediriger le traffic HTTP vers HTTPS

A l'intérieur du bloc <VirtualHost xx.xx.xx.xx:80> ajouter :

 RewriteCond %{SERVER_PORT}                !^443$
 RewriteRule ^/(.*)                      https://<'''URL du site HTTPS'''>/$1 [L,R]
 RewriteOptions inherit

Signifie :

  • Condition = tout ce qui n'est pas à destination du port 443
  • Règle = est redirigé vers https://<'''URL du site HTTPS'''>, et ce qui suit le "/" (^/(.*)) après le nom de virtualhost est copié tel quel dans la redirection ($1)

Réécrire le nom des pages

RewriteRule ^test\.html$ /test.php [L]

Transforme par exemple le nom test.html (le nom commence par test ("^test"), puis un point (échappé grâce à l'anti-slash pour qu'il soit interprété comme le caractère "." et pas autre chose), et finit par html (html$)) en /test.php.

RewriteRule ([a-z]+)/([a-z]+)\.php$ /frames.php?page=$1&view=$2 

http://votresite.com/index/source.php tapé dans le navigateur deviendra http://votresite.com/frames.php?page=index&view=source sur le serveur

RewriteRule ([0-9]+)/([0-9]+)$ /photo.php?album=$1&id=$2 

http://votresite.com/photo/12/1 dans le navigateur deviendra http://votresite.com/photo.php?album=12&id=1 sur le serveur

Le format des expressions ("[a-z]", "[0-9]"...) correspond aux expressions régulières (ou "regex").

Flags

Quelques notes sur les flags :

  • [NC] indique "No Case" dans les condition : majuscules/minusciles non prises en compte
  • [L] signifie "Last rule" : la réécriture s'arrête là, pour éviter qu'une autre règle qui suit n'altère celle-ci. Exemple :
RewriteCond  %{HTTP_USER_AGENT}  ^Mozilla
RewriteRule  ^/$                 /homepage.max.html  [L]
RewriteCond  %{HTTP_USER_AGENT}  ^IE
RewriteRule  ^/$                 /homepage.min.html  [L]

RewriteRule  ^/$                 /homepage.std.html  [L]

si le navigateur est Mozilla, affiche /homepage.max.html, et ne va pas plus loin. Si c'est IE, affiche /homepage.min.html et ne va pas plus loin (donc : n'affiche pas /homepage.std.html qui suit !). Si ce n'est aucun des 2, affiche /homepage.std.html.

  • [R] ou [R=code] signifie "Redirect", redirection externe. Sans ce flag, mod_rewrite supprime le "http://<nom du vhost>" dans la redirection et ne garde que la fin. Pour rediriger vers un site externe, ou un autre site interne (autre virtualhost) ou de http à https, ajouter [R] pour qu'il laisse l'URL complète. Le code par défaut retourné au navigateur est 302 (Moved temporarily), on peut forcer un autre code avec [R=code].

Activation et explication de server-status

Permet d'avoir le statut du serveur et de ses modules

Utile aussi pour plugins munin apache_*

Le status est accessible via http://127.0.0.1/server-status, ou server-status?auto. Le localhost est suffisant pour l'accès local du plugin munin, pas besoin de l'ouvrir au monde.

Debian

Activer le module status (activé par défaut dur Debian 6 Squeeze)

a2enmod status

Munin-node a besoin de libwww-perl pour accéder au server-status:

apt-get install libwww-perl

Autoriser l'accès : modifier /etc/apache2/apache2.conf, décommenter :

<IfModule mod_status.c>
   #
   # Allow server status reports generated by mod_status,
   # with the URL of http://servername/server-status
   # Change the ".example.com" to match your domain to enable.
   #
<Location /server-status>
    SetHandler server-status
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1 ::1
#    Allow from 192.0.2.0/24
</Location>

Et :

# Keep track of extended status information for each request
ExtendedStatus On

Recharger Apache

/etc/init.d/apache2 reload

CentOS

Le module mod_status est chargé par défaut.

Modifier /etc/httpd/conf/httpd.conf comme ci-dessus. Ajouter l'option

Allow from 127.0.0.1

à la place de "Allow from .example.com".

Un paquet est requis par mod_status :

Recharger Apache.

/etc/init.d/httpd reload

Tester

Test local avec lynx :

lynx localhost/server-status

Explication server-status Apache


Informations affichées sur la page server-status d'Apache

État général du serveur

__Current Time: Monday, 06-Oct-2003 15:40:29 CEST
Restart Time: Monday, 06-Oct-2003 15:20:48 CEST
Parent Server Generation: 0
Server uptime: 19 minutes 41 seconds
Total accesses: 758 - Total Traffic: 4.0 MB
CPU Usage: u.79 s.41 cu.14 cs.14 - .125% CPU load
.642 requests/sec - 3595 B/second - 5.5 kB/request
5 requests currently being processed, 20 idle servers__

Ici, on peut savoir que le serveur Apache est lancé depuis 19 minutes (donc il a été redemarré récemment), que le CPU est très peu utilisé (moins de 1%), qu'en moyenne, il y a 0.642 web requêtes par seconde, que le trafic généré est de 3595 octets par seconde (faible) et qu'en moyenne les requêtes font 5.5Ko, et qu'actuellement, il y a 5 requêtes en cours de traitement et 20 slots libres pour les futures connexions.

Les slots :

Apparaît ensuite un tableau de caractères représentant chacun un slot (ou plutôt son état). Un "slot" Apache représente un des processus serveur dont la tâche est de répondre aux requêtes des navigateurs :

_KWK__K_K.......................................
................................................................
................................................................
................................................................
................................................................

Chaque symbole represente un état du slot Apache :

. : Aucune activité (n'occupe rien en mémoire).
_: le Slot est en attente de connexion.
S : le Slot est en cours de démarrage.
R : le Slot lit la requête du client.
W : le Slot envoie le contenu/résultat demandé au client (cet état peut-être long et donc gêner le serveur si vous mettez des fichiers à télécharger par le web au lieu de FTP).
K : le Slot a terminé son travail, mais reste actif en cas de requête du même client pour répondre rapidement (KeepAlive).
D : le Slot fait un requête DNS pour trouver le host du client (peut être gênant en cas de serveur DNS lent... peut-être désactivé avec : Hostname Lookups off dans la config apache).
L : le Slot est en train d'écrire dans le fichier de log. Si cette opération dure trop longtemps ou qu'il y a beaucoup de Slot dans cet état, il y a peut-être un problème avec les logs (un logs excédant les 2Go par exemple).
G : état rarement visible, c'est uniquement quand le Slot meurt car devenu inutile.

Tache effectué par les Slots

Le serveur-status se termine avec un tableau plus ou moins grand suivant le nombre de Slots actifs.

Vous pouvez y voir ces colonnes (pour les plus importantes) :

PID : le PID système du slot en question (qui correspond au numéro de processus Apache).
M : status (Mode) du Slot (la signification est celle décrite précédemment).
CPU : nombre de secondes réel d'utilisation du CPU pour traiter la requête.
SS : nombre de secondes depuis la dernière action du Slot (Temps d'inactivité).
Req : nombre de millisecondes pour traiter la dernière requête.
Slot : nombre de Ko transféré par ce slot... intéressant pour voir un script tournant en boucle et envoyant des Mo inutilement... ou pour détecter l'utilisation du serveur Web pour faire des téléchargements qui auraient plus leur place sur un FTP anonyme.
Host : l'adresse IP ou le nom de machine du visiteur.
VHost : le Site demandé par le visiteur.
Request : la requête effectuée (généralement : GET /repertoire/fichier.php HTTP/1.1 par exemple).

Redirection pour maintenance, vers un autre serveur ou localement

redirection vers un autre site

Remplacer le contenu de l'index.php par :

<? header("Location: http://www.example.com");

La casse est importante !

Par définition, NE PAS FERMER LA BALISE PHP ( ?> ) pour éviter les messages "Header already sent".

Redirection pour maintenance

Créer une page maintenance.html à la racine du site. Puis mettre dans le vhost ou un .htaccess :

RewriteEngine on
RewriteCond %{REQUEST_URI} !/maintenance.html$
RewriteCond %{REMOTE_HOST} !^117\.201\.1\.154
RewriteRule $ /maintenance.html [R=302,L]

La condition "!^117\.201\.1\.154" permet d'y mettre une adresse IP qui ne sera pas concernée par la page de maintenance : on pourra donc tester le site via cette IP.

Apache mod security, mod evasive : limitation du traffic, protection anti-DDOS

Mod_security est un "web application firewall" (WAF) et un IDS/IPS pour les applications web. Il surveille le traffic HTTP en temps réel et protège les applications web des attaques "brute force". Il peut utiliser les règles Open Web Application Security Project (OWASP) Core Rules Set (CRS), mais celles-ci sont vraiment strictes. Il filtre et modifie la réponse renvoyé par le serveur web (exemple, erreur 404 ou 500).

Mod_evasive est un module Apache pour contrer les attaques DoS (Denial of Service). Il est par exemple capable de détecter lorsqu'un utilisateur demande un trop grand nombre de pages sur un site web, sur un délai de temps très court, et de bloquer son IP par iptables, par exemple (et par défaut, d'ailleurs :) ).

Installation

Sur CentOS/BlueOnyx : Déclarer le dépôt EPEL (Dépôts_complémentaires), puis

yum install --enablerepo=epel mod_evasive mod_security

Note : mod_security_crs mod_security_crs-extras (règles CRS) sont beaucoup trop restrictifs et occasionnent trop de faux-positifs.

Configuration basique

mod_security

La configuration mod_security se trouve dans /etc/httpd/conf.d/mod_security.conf, et éventuellement dans modsecurity.d/*.conf et modsecurity.d/activated_rules/*.conf pour des règles additionnelles.

Ici on va juste le configurer pour intercepter les fichiers uploadés et les envoyer à Linux Malware Detect (maldet) qui les scannera.

Modifier /etc/httpd/conf.d/mod_security.conf :

1. S'assurer que le module est activé

SecRuleEngine On
SecRequestBodyAccess On
SecResponseBodyAccess Off

2. Mettre en place la surveillance des uploads par HTTP :

# Handling of file uploads
# TODO Choose a folder private to Apache.
SecUploadDir /var/lib/mod_security/
SecUploadKeepFiles On
SecUploadFileLimit 10

Et on ajoute en-dessous :

SecRule FILES_TMPNAMES "@inspectFile /usr/local/maldetect/modsec.sh" \
        "log,auditlog,deny,severity:2,phase:2,t:none,msg:'Malicous File Attachment Identified.'"
# Maximum request body size we will accept for buffering

3. Augmenter la mémoire allouée à mod_security :

SecRequestBodyLimit 1124288 
# Store up to 1MB in memory
SecRequestBodyInMemoryLimit 1124288
# Buffer response bodies of up to
SecResponseBodyLimit 1124288 

Et commenter :

# Did we see anything that might be a boundary?
#SecRule MULTIPART_UNMATCHED_BOUNDARY "!@eq 0" \
#"phase:2,t:none,log,deny,msg:'Multipart parser detected a possible unmatched boundary.'"

car la plupart des sites la déclenche inopinément !


Si un site pose vraiment problème (exemple : MediaWiki n'aime pas du tout mod_security, et c'est réciproque), ajouter dans la configuration du vhost (sur blueonyx, dans siteXX.include):

<IfModule mod_security2.c>
  SecRuleEngine Off
</IfModule>

mod_evasive

La configuration de Mod_evasive se trouve dans le fichier /etc/httpd/conf.d/mod_evasive.conf. Exemple de configuration :

<IfModule mod_evasive20.c>
  DOSHashTableSize 3097
  # Pas plus de 2 pages par seconde, 150 requêtes (images, css, ...) par site
  DOSPageCount 2
  DOSPageInterval 1
  DOSSiteCount 150
  DOSSiteInterval 1
  # Periode en seconde pendant laquelle on bloque le client
  DOSBlockingPeriod 600
  # Et par exemple :
  DOSWhitelist 66.249.65.*
  DOSWhitelist 66.249.66.*
  DOSWhitelist 66.249.71.*
</IfModule>

On relance le serveur Apache pour prendre en compte les modifications :

/etc/init.d/httpd restart

TIPS

Tests

Pour tester le module, on peut mettre des valeurs assez faibles et regarder ce qui se passe. Normalement, toutes les images des sites visités ne s'afficheront pas et le dossier /tmp devrait se remplir d'IP blacklistées.

Paramètres

  • DOSHashTableSize : Taille de la table hash, plus grande est la valeur, plus de mémoire sera necessaire pour parcourir la table, plus la valeur sera petite, plus le parcourt de la table sera rapide. Laissez la valeur par défaut.
  • DOSPageCount Nombre de requête pour une même page dans l'intervale DOSPageInvernal, au delà, l'IP est bloquée.
  • DOSSiteCount Pareil qu'au dessus mais pour un site au lieu d'une page.
  • DOSPageInterval Intervalle du nombre de pages en secondes.
  • DOSSiteInterval Intervalle du nombre de sites par secondes.
  • DOSBlockingPeriod Période en seconde pendant laquelle l'IP sera bloquée (vous recevrez un forbidden).
  • DOSWhitelist Permet de mettre des IP en liste blanche, dans notre exemple ci-dessus, ce sont des IP du bot Google.
  • DOSSystemCommand Permet d'exécuter une commande, ici on peut lancer un script iptables

(exemple : DOSSystemCommand "sudo iptables -A INPUT -s %s -j DROP")