# 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 :

```shell
ipcs -s
```

Pour les libérer :

```shell
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 :

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

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 :

<p class="callout info">kernel.sem = 500 512000 64 2048</p>

puis

```shell
sysctl -p
```

# Exemple robots.txt

Exemple de fichier robots.txt

[http://www.arnold-soft.de/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 (<a class="external free" href="http://ahrefs.com/robot/" rel="nofollow">http://ahrefs.com/robot/</a>)
#  IP 5.10.83.36
#  "Mozilla/5.0 (compatible; AhrefsBot/5.0; +<a class="external free" href="http://ahrefs.com/robot/" rel="nofollow">http://ahrefs.com/robot/</a>)"
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; +<a class="external free" href="http://yandex.com/bots" rel="nofollow">http://yandex.com/bots</a>)"
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; <a class="external free" href="http://www.nutch.de/" rel="nofollow">http://www.Nutch.de/</a>)"
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 (+<a class="external free" href="http://www.alexa.com/site/help/webmasters" rel="nofollow">http://www.alexa.com/site/help/webmasters</a>; crawler@alexa.com)"
User-agent: alexa
Disallow: /

# Unknown
# IP 108.59.8.70
# "Mozilla/5.0 (compatible; MJ12bot/v1.4.4; <a class="external free" href="http://www.majestic12.co.uk/bot.php?+" rel="nofollow">http://www.majestic12.co.uk/bot.php?+</a>)"
User-agent: MJ12bot
Disallow: /

# <a class="external free" href="http://go.mail.ru/help/robots" rel="nofollow">http://go.mail.ru/help/robots</a>
# IP 217.69.133.253
# "Mozilla/5.0 (compatible; Linux x86_64; Mail.RU_Bot/2.0; +<a class="external free" href="http://go.mail.ru/help/robots" rel="nofollow">http://go.mail.ru/help/robots</a>)"
User-agent: Mail.RU_Bot
Disallow: /

# macinroy.com
# IP 85.25.137.24
# "MacInroy Privacy Auditors. See jarnold.org's privacy violation report: <a class="external free" href="http://jarnold.org.macinroy.com/jarnold.org" rel="nofollow">http://jarnold.org.macinroy.com/jarnold.org</a>"
User-agent: MacInroy
Disallow: /

# www.semrush.com/bot.html
# IP 46.229.164.102
# "Mozilla/5.0 (compatible; SemrushBot/0.97; +<a class="external free" href="http://www.semrush.com/bot.html" rel="nofollow">http://www.semrush.com/bot.html</a>)"
User-agent: SemrushBot
Disallow: /

# <a class="external free" href="http://www.icjobs.de/" rel="nofollow">http://www.icjobs.de</a>
# IP 85.25.71.40
# "Mozilla/5.0 (X11; U; Linux i686; de; rv:1.9.0.1; compatible; iCjobs Stellenangebote Jobs; <a class="external free" href="http://www.icjobs.de/" rel="nofollow">http://www.icjobs.de</a>) Gecko/20100401 iCjobs/3.2.3"
User-agent: iCjobs
Disallow: /

# <a class="external free" href="http://fulltext.sblog.cz/" rel="nofollow">http://fulltext.sblog.cz</a>
# IP 77.75.77.32
# "SeznamBot/3.0 (+<a class="external free" href="http://fulltext.sblog.cz/" rel="nofollow">http://fulltext.sblog.cz/</a>)"
User-agent: SeznamBot
Disallow: /

# <a class="external free" href="http://webmeup-crawler.com/" rel="nofollow">http://webmeup-crawler.com</a>
# IP 108.178.53.146
# "Mozilla/5.0 (compatible; BLEXBot/1.0; +<a class="external free" href="http://webmeup-crawler.com/" rel="nofollow">http://webmeup-crawler.com/</a>)"
User-agent: BLEXBot
Disallow: /

# <a class="external free" href="http://siteexplorer.info/" rel="nofollow">http://siteexplorer.info</a>
# IP 208.43.225.84
# "Mozilla/5.0 (compatible; SiteExplorer/1.0b; +<a class="external free" href="http://siteexplorer.info/" rel="nofollow">http://siteexplorer.info/</a>)"
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; +<a class="external free" href="http://www.linkdex.com/about/bots/" rel="nofollow">http://www.linkdex.com/about/bots/</a>)"
User-agent: linkdexbot
Disallow: /

# www.wotbox.com/bot
# IP 81.144.138.34
# "Wotbox/2.01 (+<a class="external free" href="http://www.wotbox.com/bot/" rel="nofollow">http://www.wotbox.com/bot/</a>)"
User-agent: Wotbox
Disallow: /

# <a class="external free" href="http://www.domaintuno.com/" rel="nofollow">http://www.domaintuno.com</a>
# IP 192.96.204.42
# "<a class="external free" href="http://www.domaintuno.com/whois/jarnold.org" rel="nofollow">http://www.domaintuno.com/whois/jarnold.org</a>" "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)"
User-agent: domaintuno
Disallow: /

# unknown addressendeutschland.de
# IP 86.109.249.174
# "<a class="external free" href="http://arnold-soft.de/" rel="nofollow">http://arnold-soft.de/</a>" "dubaiindex (addressendeutschland.de)"
User-agent: dubaiindex
Disallow: /

# www.pagesinvenotry.com
# IP 130.185.109.243
# "PagesInventory (robot <a class="external free" href="http://www.pagesinvenotry.com/" rel="nofollow">http://www.pagesinvenotry.com</a>)"
User-agent: PagesInventory
Disallow: /

# www.abonti.com
# IP 77.233.225.115
# "Mozilla/5.0 (compatible; Abonti/0.91 - <a class="external free" href="http://www.abonti.com/" rel="nofollow">http://www.abonti.com</a>)"
User-agent: Abonti
Disallow: /

# www.backlinktest.com/crawler.html
# IP 46.4.100.231
# "BacklinkCrawler (<a class="external free" href="http://www.backlinktest.com/crawler.html" rel="nofollow">http://www.backlinktest.com/crawler.html</a>)"
User-agent: BacklinkCrawler
Disallow: /

# <a class="external free" href="http://netcomber.com/" rel="nofollow">http://netcomber.com</a>
# IP 54.227.175.17
# "NCBot <a class="external free" href="http://netcomber.com/?st=ba2Tool" rel="nofollow">http://netcomber.com?st=ba2Tool</a> 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; +<a class="external free" href="http://www.grapeshot.co.uk/crawler.php" rel="nofollow">http://www.grapeshot.co.uk/crawler.php</a>)"
User-agent: GrapeshotCrawler
Disallow: /

# www.80legs.com/webcrawler.html
# IP 64.125.222.16
# "Mozilla/5.0 (compatible; 008/0.83; <a class="external free" href="http://www.80legs.com/webcrawler.html" rel="nofollow">http://www.80legs.com/webcrawler.html</a>;) 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: /

# <a class="external free" href="http://crawler.sistrix.net/" rel="nofollow">http://crawler.sistrix.net</a>
# IP 176.9.148.197, IP 176.9.155.226, 5.9.112.66
# "Mozilla/5.0 (compatible; SISTRIX Crawler; <a class="external free" href="http://crawler.sistrix.net/" rel="nofollow">http://crawler.sistrix.net/</a>)"
User-agent: SISTRIX
Disallow: /

# www.picsearch.com/bot.html
# IP 217.212.224.183
# "psbot/0.1 (+<a class="external free" href="http://www.picsearch.com/bot.html" rel="nofollow">http://www.picsearch.com/bot.html</a>)"
User-agent: psbot
Disallow: /

# worio.com
# IP 107.22.250.59
# "Mozilla/5.0 (compatible; woriobot +<a class="external free" href="http://worio.com/" rel="nofollow">http://worio.com</a>)"
User-agent: woriobot
Disallow: /

# semantissimo.de
# IP 88.198.24.173
# "ssearch_bot (sSearch Crawler; <a class="external free" href="http://www.semantissimo.de/" rel="nofollow">http://www.semantissimo.de</a>)"
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; +<a class="external free" href="http://archive.org/details/archive.org_bot" rel="nofollow">http://archive.org/details/archive.org_bot</a>)"
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 (+<a class="external free" href="http://www.website-datenbank.de/" rel="nofollow">http://www.website-datenbank.de/</a>)"
User-agent: netEstate
Disallow: /

# www.compspy.com/spider.html
# IP 68.47.129.55
# "Mozilla/5.0 (compatible; CompSpyBot/1.0; +<a class="external free" href="http://www.compspy.com/spider.html" rel="nofollow">http://www.compspy.com/spider.html</a>)"
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; +<a class="external free" href="http://openlinkprofiler.org/bot" rel="nofollow">http://OpenLinkProfiler.org/bot</a> )"
User-agent: spbot
Disallow: /

# <a class="external free" href="http://filterdb.iss.net/crawler/" rel="nofollow">http://filterdb.iss.net/crawler/</a>
# IP 206.253.226.18
# "Mozilla/5.0 (compatible; oBot/2.3.1; <a class="external free" href="http://filterdb.iss.net/crawler/" rel="nofollow">http://filterdb.iss.net/crawler/</a>)"
User-agent: oBot
Disallow: /

# <a class="external free" href="http://www.baidu.com/" rel="nofollow">http://www.baidu.com</a>
# 183.60.243.187
# "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0"
User-agent: baidu
Disallow: /

# <a class="external free" href="http://www.exabot.com/go/robot" rel="nofollow">http://www.exabot.com/go/robot</a>
# IP 178.255.215.69
# "Mozilla/5.0 (compatible; Exabot/3.0; +<a class="external free" href="http://www.exabot.com/go/robot" rel="nofollow">http://www.exabot.com/go/robot</a>)"
User-agent: Exabot
Disallow: /

# www.tiscali.it
# IP 217.73.208.103
# "Mozilla/5.0 (compatible; IstellaBot/1.18.81 +<a class="external free" href="http://www.tiscali.it/" rel="nofollow">http://www.tiscali.it/</a>)"
User-agent: IstellaBot
Disallow: /

# www.netseer.com/crawler.html
# IP 75.98.9.250
# "Mozilla/5.0 (compatible; NetSeer crawler/2.0; +<a class="external free" href="http://www.netseer.com/crawler.html" rel="nofollow">http://www.netseer.com/crawler.html</a>; crawler@netseer.com)"
User-agent: NetSeer
Disallow: /

# <a class="external free" href="http://www.opensiteexplorer.org/dotbot" rel="nofollow">http://www.opensiteexplorer.org/dotbot</a>, help@moz.com
# IP 208.115.113.92
# "Mozilla/5.0 (compatible; DotBot/1.1; <a class="external free" href="http://www.opensiteexplorer.org/dotbot" rel="nofollow">http://www.opensiteexplorer.org/dotbot</a>, help@moz.com)"
User-agent: DotBot
Disallow: /

# <a class="external free" href="http://www.proximic.com/info/spider.php" rel="nofollow">http://www.proximic.com/info/spider.php#</a> IP 54.211.1.18
# "Mozilla/5.0 (compatible; proximic; +<a class="external free" href="http://www.proximic.com/info/spider.php" rel="nofollow">http://www.proximic.com/info/spider.php</a>)"
User-agent: proximic
Disallow: /

# <a class="external free" href="http://commoncrawl.org/faq/" rel="nofollow">http://commoncrawl.org/faq/</a>
# IP 54.227.12.4
# "CCBot/2.0 (<a class="external free" href="http://commoncrawl.org/faq/" rel="nofollow">http://commoncrawl.org/faq/</a>)"
User-agent: CCBot
Disallow: /

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

# <a class="external free" href="http://semalt.semalt.com/crawler.php" rel="nofollow">http://semalt.semalt.com/crawler.php</a>
# 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

<div class="mw-body-content" id="bkmrk-sommaire"><div class="mw-body-content"><div class="mw-content-ltr" dir="ltr" lang="fr"><div class="mw-parser-output"><div class="toc"></div></div></div></div></div>Charger le module Rewrite dans httpd.conf :

<div class="mw-body-content" id="bkmrk-%C2%A0%5Bmasquer%5D%C2%A0-1%C2%A0rediri"><div class="mw-body-content"><div class="mw-content-ltr" dir="ltr" lang="fr"><div class="mw-parser-output"><div class="toc" id="bkmrk-%C2%A0%5Bmasquer%5D%C2%A0-1%C2%A0rediri-0"></div></div></div></div></div>```
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
```

# <span class="mw-headline" id="bkmrk-rediriger-le-traffic-0">Rediriger le traffic HTTP vers HTTPS</span>

A l'intérieur du bloc &lt;VirtualHost xx.xx.xx.xx:80&gt; ajouter :

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

Signifie :

<div class="mw-body-content" id="bkmrk-condition-%3D-tout-ce-"><div class="mw-body-content"><div class="mw-content-ltr" dir="ltr" lang="fr"><div class="mw-parser-output">- Condition = tout ce qui n'est pas à destination du port 443
- Règle = est redirigé vers https://&lt;'''URL du site HTTPS'''&gt;, et ce qui suit le "/" (^/(.\*)) après le nom de virtualhost est copié tel quel dans la redirection ($1)

</div></div></div></div># <span class="mw-headline" id="bkmrk-r%C3%A9%C3%A9crire-le-nom-des--0">Réécrire le nom des pages</span>

```
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&amp;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&amp;id=1 sur le serveur

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

# <span class="mw-headline" id="bkmrk-flags-0">Flags</span>

Quelques notes sur les flags :

<div class="mw-body-content" id="bkmrk-%5Bnc%5D-indique-%22no-cas"><div class="mw-body-content"><div class="mw-body-content"><div class="mw-content-ltr" dir="ltr" lang="fr"><div class="mw-parser-output">- \[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 :

</div></div></div></div></div>```
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.

<div class="mw-body-content" id="bkmrk-%5Br%5D-ou-%5Br%3Dcode%5D-sign"><div class="mw-content-ltr" dir="ltr" id="bkmrk-%5Br%5D-ou-%5Br%3Dcode%5D-sign-0" lang="fr"><div class="mw-parser-output">- \[R\] ou \[R=code\] signifie "Redirect", redirection **externe**. Sans ce flag, mod\_rewrite **supprime** le "http://&lt;nom du vhost&gt;" 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\].

</div></div></div>

# 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](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.

#### <span class="mw-headline" id="bkmrk-debian-0">Debian</span>

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 <a class="external free" href="http://servername/server-status" rel="nofollow">http://servername/server-status</a>
   # 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
```

#### <span class="mw-headline" id="bkmrk-centos-0">CentOS</span>

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 :

```
yum install links
```

Recharger Apache.

```
/etc/init.d/httpd reload
```

#### <span class="mw-headline" id="bkmrk-tester-0">Tester</span>

Test local avec lynx :

```
lynx localhost/server-status
```

### Explication server-status Apache

<div class="mw-body-content" id="bkmrk-"><div class="mw-body-content"><div id="bkmrk--0"></div><div class="mw-content-ltr" dir="ltr" lang="fr"><div class="mw-parser-output">  
</div></div></div></div>Informations affichées sur la page server-status d'Apache

#### <span class="mw-headline" id="bkmrk-%C3%89tat-g%C3%A9n%C3%A9ral-du-serv-0">État général du serveur</span>

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

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.

#### <span class="mw-headline" id="bkmrk-les-slots%C2%A0%3A-0">Les slots :</span>

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.......................................<br></br>
................................................................<br></br>
................................................................<br></br>
................................................................<br></br>
................................................................<br></br>
```

Chaque symbole represente un état du slot Apache :

```
. : Aucune activité (n'occupe rien en mémoire).<br></br>
_: le Slot est en attente de connexion.<br></br>
S : le Slot est en cours de démarrage.<br></br>
R : le Slot lit la requête du client.<br></br>
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).<br></br>
K : le Slot a terminé son travail, mais reste actif en cas de requête du même client pour répondre rapidement (KeepAlive).<br></br>
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).<br></br>
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).<br></br>
G : état rarement visible, c'est uniquement quand le Slot meurt car devenu inutile.<br></br>
```

#### <span class="mw-headline" id="bkmrk-tache-effectu%C3%A9-par-l-0">Tache effectué par les Slots</span>

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).<br></br>
M : status (Mode) du Slot (la signification est celle décrite précédemment).<br></br>
CPU : nombre de secondes réel d'utilisation du CPU pour traiter la requête.<br></br>
SS : nombre de secondes depuis la dernière action du Slot (Temps d'inactivité).<br></br>
Req : nombre de millisecondes pour traiter la dernière requête.<br></br>
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.<br></br>
Host : l'adresse IP ou le nom de machine du visiteur.<br></br>
VHost : le Site demandé par le visiteur.<br></br>
Request : la requête effectuée (généralement : GET /repertoire/fichier.php HTTP/1.1 par exemple).<br></br>
```

# Redirection pour maintenance, vers un autre serveur ou localement

### <span class="mw-headline" id="bkmrk-redirection-vers-un--0">redirection vers un autre site</span>

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 ( ?&gt; ) pour éviter les messages "Header already sent".

### <span class="mw-headline" id="bkmrk-redirection-pour-mai-0">Redirection pour maintenance</span>

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 :) ).

# <span class="mw-headline" id="bkmrk-installation-0">Installation</span>

Sur CentOS/BlueOnyx : Déclarer le dépôt EPEL ([Dépôts\_complémentaires](https://wiki.kogite.fr/index.php/D%C3%A9p%C3%B4ts_compl%C3%A9mentaires "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.*

# <span class="mw-headline" id="bkmrk-configuration-basiqu-0">Configuration basique</span>

## <span class="mw-headline" id="bkmrk-mod_security-0">mod\_security</span>

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)](http://wiki.kogite.fr/index.php/LMD_:_Linux_Malware_Detect) qui les scannera.

Modifier /etc/httpd/conf.d/mod\_security.conf :

1\. S'assurer que le module est activé

```
<strong>SecRuleEngine On</strong>
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.
<strong>SecUploadDir /var/lib/mod_security/</strong>
SecUploadKeepFiles On
SecUploadFileLimit 10
```

Et on ajoute en-dessous :

```
SecRule FILES_TMPNAMES "@inspectFile <strong>/usr/local/maldetect/modsec.sh</strong>" \
        "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>
```

## <span class="mw-headline" id="bkmrk-mod_evasive-0">mod\_evasive</span>

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
  <strong>DOSSiteCount 150</strong>
  DOSSiteInterval 1
  # Periode en seconde pendant laquelle on bloque le client
  <strong>DOSBlockingPeriod 600</strong>
  # 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
```

# <span class="mw-headline" id="bkmrk-tips-0">TIPS</span>

## <span class="mw-headline" id="bkmrk-tests-0">Tests</span>

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.

## <span class="mw-headline" id="bkmrk-param%C3%A8tres-0">Paramètres</span>

<div class="mw-body-content" id="bkmrk-doshashtablesize%C2%A0%3A-t"><div class="mw-body-content"><div class="mw-content-ltr" dir="ltr" lang="fr"><div class="mw-parser-output">- 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

</div></div></div></div>(exemple : DOSSystemCommand "sudo iptables -A INPUT -s %s -j DROP")