mod_security apache

Installation et configuration de mod_security apache

 

modsecurity Mod_security est un un pare-feu applicatif qui se présente sous la forme d’un module pour  Apache. Son rôle est de détecter et de protéger le serveur contre des attaques en tout genre : injections SQL, cross-site scripting (XSS)… Voici comment l’installer et le configurer pour une utilisation basique.

 

Sous Centos

yum install mod_security

Ensuite toutes les règles se trouvent dans le dossier /etc/httpd/modsecurity.d/

 

ls /etc/httpd/modsecurity.d/
modsecurity_crs_10_config.conf
modsecurity_crs_20_protocol_violations.conf
modsecurity_crs_21_protocol_anomalies.conf
modsecurity_crs_23_request_limits.conf
modsecurity_crs_30_http_policy.conf
modsecurity_crs_35_bad_robots.conf
modsecurity_crs_40_generic_attacks.conf
modsecurity_crs_45_trojans.conf
modsecurity_crs_50_outbound.conf
modsecurity_localrules.conf
optional_rules

ls /etc/httpd/modsecurity.d/optional_rules/
modsecurity_crs_20_protocol_violations.conf
modsecurity_crs_21_protocol_anomalies.conf
modsecurity_crs_40_generic_attacks.conf
modsecurity_crs_42_comment_spam.conf
modsecurity_crs_42_tight_security.conf
modsecurity_crs_55_marketing.conf

Dans le fichier modsecurity_crs_10_config.conf, vérifier que SecRuleEngine est bien sur On

Commenter les directives suivantes:

#SecServerSignature “Apache/2.2.0 (Fedora)”
#SecComponentSignature “core ruleset/1.6.1″

Puisqu’Apache se charge deja de cacher tout ca.

Modifier la directive suivante de cette manière:
SecUploadKeepFiles RelevantOnly

Jeter un coup d’oeil dans les fichiers conf pour voir tout ce qui va être sécurisé!

Si jamais vous avez un domaine pour lequel vous ne souhaitez pas activer le mod_security (car il plante le site ou autre..). Ajouter la directive SecRuleEngine Off dans le virtualhost et redemarrer apache.

 

Installation et configuration de mod_evasive sous Apache

Le module mod_evasive va se charger de bloquer les attaques par force brut, par DOS et de flood de spam. Il peut même interagir avec iptables.

Mod_evasive bloque le trafic en provenance de la source pendant une période donnée en renvoyant vers une page 403

Sous centos/fedora:
[sh]yum install mod_evasive[/sh]

Editer le fichier de configuration /etc/httpd/conf.d/mod_evasive.conf et le configurer de la manière suivante:

Relancer httpd
/etc/init.d/httpd graceful

vi /etc/httpd/conf.d/mod_evasive.conf

DOSHashTableSize    3097
DOSPageCount        3
DOSSiteCount        50
DOSPageInterval     2
DOSSiteInterval     2
DOSBlockingPeriod   10
DOSEmailNotify      votreemail@votredomaine.com
#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”

DOSLogDir           “/var/log/mod_evasive/”

DOSWhitelist   127.0.0.1
#DOSWhitelist   192.168.0.*
DOSWhiteList 88.248.70.*

DOSPageCount : Nombre maximal de requêtes qu’une adresse IP source peut réaliser sur la même ressource (même URL) pendant une unité de temps sans être ajoutée à la liste noire.

DOSSiteCount : Nombre maximal de requêtes qu’une adresse IP source peut réaliser sur le même enfant pendant une unité de temps sans être ajoutée à la liste noire.

DOSPageInterval : Temps évoquée dans la directive DOSPageCount (en seconde).

DOSSiteInterval : Temps évoquée dans la directive DOSSiteCount (en secondes).

DOSBlockingPeriod : Durée pendant laquelle tous les accès des adresses IP en liste noire seront refusés et recevront une erreur 403. Pas besoin de mettre beaucoup puisque l’IP sera blacklisté temps qu’elle n’arrête pas de flooder

DOSEmailNotify : Adresse email à prévenir lorsqu’une IP est interceptée

DOSSystemCommand : Commande a exécuter. Par exemple bloquer pat Iptables, ajouter l’adresse IP dans la blackliste du routeur, loguer l’IP…

DOSWhiteList : Adresse IP a ne jamais blacklister.  Il est bon d’ajouter les adresses IP des GoogleBot.

 

Il faut ensuite créer le dossier des logs et mettre les droits pour qu’apache puisse ecrire dedans
mkdir /var/log/mod_evasive/
chown -R apache.apache /var/log/mod_evasive

Il n’est pas recommandé de bloquer les IP directement avec Iptables apr mod_evasive car dans ce cas la il faut autoriser l’utilisateur apache a utiliser Iptables. Et la ca devient très dangereux en terme de sécurité.

 

Mais bon pour ceux qui veulent le faire, editer le fichier /etc/sudoers et ajouter la ligne : apache ALL=NOPASSWD:/sbin/iptables (ce qui est gênant c’est justement le NOPASSWD……..)

Pour ma part, j’ai remarqué que dans les logs le message suivant revenait souvent :

Request Missing a Host Header
Request Missing an Accept Header
Request Missing a User Agent Header
...

Cela arrive quand le client qui se connecte au serveur utilise des headers mal configurés. Ce n’est pas vraiment un problème de sécurité en soit, à moins d’être paranoïaque. J’ai donc désactivé la couche qui vérifie les en-têtes comme ceci :

cd /etc/httpd/modsecurity.d/base_rules/
mv modsecurity_crs_21_protocol_anomalies.conf \
modsecurity_crs_21_protocol_anomalies.conf.disable

J’ai également désactivé les règles qui détectent les mauvais robots. Car celles-ci bloquent les requêtes faite sur le site avec wget ou curl, or beaucoup d’articles publiés préconisent d’utiliser ces commandes :

mv modsecurity_crs_35_bad_robots.conf \
modsecurity_crs_35_bad_robots.conf.disable

Désactivation de Mod_security pour un site web précis

L’utilisation de Mod_security a eu quelques effets de bord sur Tux-planet. En effet, j’ai eu pas mal de problèmes avec l’interface d’administration de WordPress. Le module avait tendance à bloquer certaines actions comme l’écriture d’articles ou la modifications d’options…

De nombreux sites donnent des règles d’exception à appliquer, pour moi, elles ne fonctionnaient pas. Comme je suis le seul à accéder à l’interface de gestion et que celle-ci est déjà protégée par un .htaccess, j’ai choisi de désactiver le module de sécurité pour cette partie du site.

Voici un exemple de configuration Apache à utiliser pour désactiver Mod_security sur un virtuahost :

# On desactive Mod_security pour l'admin de wordpress
<LocationMatch "/wp-admin">
  <IfModule mod_security2.c>
    SecRuleEngine Off
  </IfModule>
</LocationMatch>

 

Test de sécurité

Je déconseille fortement la mise en place de Mod_security sur un serveur en production, ne serait-ce parce que ce genre de firewall applicatif génère des faux-positifs. Voici quelques exemples de tests que l’on peut réaliser. Les actions suivantes doivent par exemple être bloquées :

  • saisir “OR 1=1” dans un champ de recherche
  • ajouter “<script>xss</script>” à la fin d’une url du site
  • ajouter “/../../etc/passwd” à la fin d’une url du site

 

 

 

 

 

 

 

 

 

 

 

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée.

* Copy This Password *

* Type Or Paste Password Here *