Le module web_security pour apache2 peut être assimilé à un firewall pour apache2, alors toutes les requetes web en direction de votre serveur seront d'abord traité par ce module.
A l'heure ou les pirates ou les robots font mumusent en essayant de se connecter un peu partout en espérant trouver d'éventuels failles il s'avérent évident qu'un peu de sécurité ne tue pas.
Nous verrons ici comment mettre tout ceci en place.
On change rien au bonne habitude. Attention ce packages n'est pas disponible en version stable mais en backports. Pour savoir comment configurer votre source.list en conséquence voir ici.
/* libapache-mod-security */
Passons maintenant à la configuration. Editons notre apache2.conf, puis ajoutons les lignes suivantes :
/* <IfModule mod_security2.c> # Turn ModSecurity On SecRuleEngine On SecRequestBodyAccess On # Only record the interesting stuff #SecAuditEngine RelevantOnly SecAuditEngine Off SecAuditLogStorageDir /var/log/apache2 SecAuditLog /var/log/apache2/audit_log.log SecAuditLogParts ABCFHZ # You normally won't need debug logging SecDebugLog /var/log/apache2/modsec_debug_log.log # Les logs ont une échelle de 1 à 9, 9 étant le niveau le plus bavard et quand je dis bavard c'est pire que la radio à utiliser uniquement pour le debug. SecDebugLogLevel 1 # Require Content-Length to be provided with # every POST request #Si vous utilisez ce paramétres toutes les connexions vont être analysées en fonctions de toutes ces régles le traitement peut être très long d'ou une augmentation de la charge CPU mais aussi un affichage des pages beaucoup plus long. #Include modsecurity/*.conf # Les rules utilisées Include modsecurity/modsecurity_crs_40_generic_attacks.conf Include modsecurity/modsecurity_crs_41_sql_injection_attacks.conf Include modsecurity/modsecurity_crs_35_bad_robots.conf </IfModule> */
- SecRuleEngine : Permet d'activer ou de désactiver le module
- SecRequestBodyAccess : Permet de traiter le contenu de la requête
La liste des directives est disponible ici.
Dans le fichier apache2.conf, nous avons définit des rules mais qui n'existent pas encore. Pour ceux qui ne sont pas très doués en sécurité le site owasp mets à disposition une liste de régle (attention très restrictif). Nous allons les récupérer et les mettre en place.
Récupérer les tar.gz ici
/* cd /etc/apache2/ mkdir modsecurity cd modsecurity tar xzf modsecurity-crs_xxx.tar.gz mv modsecurity-crs_xxx/base_rules/* . */
On peut maintenant redémarrer apache et voir comment celui ci se comporte. Vous pouvez également augmenter le niveau des logs afin de voir les traitements éffectués.
Comme dit un peu plus haut l'activation de toutes les régles ralenti considérablement, l'affichage des pages. On peut le constater en utilisant apache benchmach.
Stats sans de toutes les régles.
/* Server Software: Apache/2.2.9 Server Hostname: 192.168.10.52 Server Port: 80 Document Path: /client1/phpinfo.php Document Length: 43471 bytes Concurrency Level: 5 Time taken for tests: 4.481 seconds Complete requests: 1000 Failed requests: 0 Write errors: 0 Total transferred: 43740697 bytes HTML transferred: 43514471 bytes Requests per second: 223.16 [#/sec] (mean) Time per request: 22.405 [ms] (mean) Time per request: 4.481 [ms] (mean, across all concurrent requests) Transfer rate: 9532.53 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 7 4.7 7 80 Processing: 4 14 12.0 13 307 Waiting: 0 8 9.9 7 237 Total: 15 22 12.4 21 329 Percentage of the requests served within a certain time (ms) 50% 21 66% 21 75% 22 80% 22 90% 23 95% 24 98% 33 99% 85 100% 329 (longest request) */
Stats avec l'activation de toutes les régles.
/* Server Software: Apache/2.2.9 Server Hostname: 192.168.10.52 Server Port: 80 Document Path: /client1/phpinfo.php Document Length: 43466 bytes Concurrency Level: 5 Time taken for tests: 823.405 seconds Complete requests: 1000 Failed requests: 988 (Connect: 0, Receive: 0, Length: 988, Exceptions: 0) Write errors: 0 Total transferred: 43696940 bytes HTML transferred: 43470940 bytes Requests per second: 1.21 [#/sec] (mean) Time per request: 4117.026 [ms] (mean) Time per request: 823.405 [ms] (mean, across all concurrent requests) Transfer rate: 51.82 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 1 5.8 0 117 Processing: 2447 4114 756.3 3793 8151 Waiting: 2428 4002 737.2 3689 7472 Total: 2448 4115 756.4 3794 8151 Percentage of the requests served within a certain time (ms) 50% 3794 66% 3963 75% 4133 80% 4337 90% 5332 95% 5809 98% 6623 99% 6881 100% 8151 (longest request) */
Les tests parlent d'eux mêmes donc soyez vigilant en activant toutes les régles déjà pour des raisons de perf et aussi très restrictives.
PS : Les tests ont été fait sur une VM à 256Mo de RAM.

Derniers commentaires