Aller au contenu | Aller au menu

grab our rss feed

Guest Blog

Ici on traite de tout ce qui concerne les systèmes et réseaux (linux,windows) mais principalement autour de Linux. Nous traitons de plusieurs sujets Nagios, Apache FTP, SSH, Sécurité du système et pleins d'autres choses.

ad

Securiser son serveur web avec mod_security

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.

  1. /*
  2. libapache-mod-security
  3. */

Passons maintenant à la configuration. Editons notre apache2.conf, puis ajoutons les lignes suivantes :

  1. /*
  2. <IfModule mod_security2.c>
  3.  
  4. # Turn ModSecurity On
  5. SecRuleEngine On
  6.  
  7. # Only record the interesting stuff
  8. #SecAuditEngine RelevantOnly
  9. SecAuditEngine Off
  10. SecAuditLogStorageDir /var/log/apache2
  11. SecAuditLog /var/log/apache2/audit_log.log
  12. SecAuditLogParts ABCFHZ
  13.  
  14. # You normally won't need debug logging
  15. SecDebugLog /var/log/apache2/modsec_debug_log.log
  16. # 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.
  17. SecDebugLogLevel 1
  18.  
  19. # Require Content-Length to be provided with
  20. # every POST request
  21. #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.
  22. #Include modsecurity/*.conf
  23. # Les rules utilisées
  24. Include modsecurity/modsecurity_crs_40_generic_attacks.conf
  25. Include modsecurity/modsecurity_crs_41_sql_injection_attacks.conf
  26. Include modsecurity/modsecurity_crs_35_bad_robots.conf
  27. </IfModule>
  28. */

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

  1. /*
  2. cd /etc/apache2/
  3. mkdir modsecurity
  4. cd modsecurity
  5. tar xzf modsecurity-crs_xxx.tar.gz
  6. mv modsecurity-crs_xxx/base_rules/* .
  7. */

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.

  1. /*
  2. Server Software: Apache/2.2.9
  3. Server Hostname: 192.168.10.52
  4. Server Port: 80
  5.  
  6. Document Path: /client1/phpinfo.php
  7. Document Length: 43471 bytes
  8.  
  9. Concurrency Level: 5
  10. Time taken for tests: 4.481 seconds
  11. Complete requests: 1000
  12. Failed requests: 0
  13. Write errors: 0
  14. Total transferred: 43740697 bytes
  15. HTML transferred: 43514471 bytes
  16. Requests per second: 223.16 [#/sec] (mean)
  17. Time per request: 22.405 [ms] (mean)
  18. Time per request: 4.481 [ms] (mean, across all concurrent requests)
  19. Transfer rate: 9532.53 [Kbytes/sec] received
  20.  
  21. Connection Times (ms)
  22. min mean[+/-sd] median max
  23. Connect: 0 7 4.7 7 80
  24. Processing: 4 14 12.0 13 307
  25. Waiting: 0 8 9.9 7 237
  26. Total: 15 22 12.4 21 329
  27.  
  28. Percentage of the requests served within a certain time (ms)
  29. 50% 21
  30. 66% 21
  31. 75% 22
  32. 80% 22
  33. 90% 23
  34. 95% 24
  35. 98% 33
  36. 99% 85
  37. 100% 329 (longest request)
  38. */

Stats avec l'activation de toutes les régles.

  1. /*
  2. Server Software: Apache/2.2.9
  3. Server Hostname: 192.168.10.52
  4. Server Port: 80
  5.  
  6. Document Path: /client1/phpinfo.php
  7. Document Length: 43466 bytes
  8.  
  9. Concurrency Level: 5
  10. Time taken for tests: 823.405 seconds
  11. Complete requests: 1000
  12. Failed requests: 988
  13. (Connect: 0, Receive: 0, Length: 988, Exceptions: 0)
  14. Write errors: 0
  15. Total transferred: 43696940 bytes
  16. HTML transferred: 43470940 bytes
  17. Requests per second: 1.21 [#/sec] (mean)
  18. Time per request: 4117.026 [ms] (mean)
  19. Time per request: 823.405 [ms] (mean, across all concurrent requests)
  20. Transfer rate: 51.82 [Kbytes/sec] received
  21.  
  22. Connection Times (ms)
  23. min mean[+/-sd] median max
  24. Connect: 0 1 5.8 0 117
  25. Processing: 2447 4114 756.3 3793 8151
  26. Waiting: 2428 4002 737.2 3689 7472
  27. Total: 2448 4115 756.4 3794 8151
  28.  
  29. Percentage of the requests served within a certain time (ms)
  30. 50% 3794
  31. 66% 3963
  32. 75% 4133
  33. 80% 4337
  34. 90% 5332
  35. 95% 5809
  36. 98% 6623
  37. 99% 6881
  38. 100% 8151 (longest request)
  39. */

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.

Limiter la bande passante dans apache2

Si vous en êtes la c'est que vous rencontrez certainement des problèmes liés aux aspirateurs de sites ou afin de brider le téléchargement de certaines données sur votre site. Avec apache il existe un module qui s'appelle mod_bw, bw pour Bandwidth. Nous allons voir comment le mettre en place sur notre serveur apache. Bien évidemment je tourne sur du debian.

On commence par installer notre paquet

  1. /*
  2. apt-get install libapache2-mod-bw
  3. */

Activation du module

  1. /*
  2. cd /etc/apache2/mods-enable
  3. ln -s ../mods-available/bw.load bw.load
  4. */

Pour mes tests je crée un fichier de type bloc de 20M

  1. /*
  2. dd if=/dev/zero of=/var/www/client1/fichier.tmp bs=20M count=1
  3. */

Passons maintenant à la configuration d'apache. On édite le vhost de son choix et on y ajoute ceci

  1. /*
  2. #Permet d'activer le module si Off alors aucunes directives ne sera prise en compte.
  3. BandwidthModule On
  4. #La limitation est appliquée à tous les utilisateurs
  5. ForceBandWidthModule On
  6.  
  7. #Ici nous limitons le téléchargement des fichiers .tmp(accepte toutes les extensions) de taille minimal 5M et le téléchargement est limité à 10ko/s
  8. LargeFileLimit .tmp 5 10000
  9. */

D'autres directives intéressantes comme :

  1. /*
  2. #Limite la bande passante en fonction de votre navigateur prends en compte également wget
  3. BandWidth u:[User-Agent] [bytes/s]
  4. #Limite la bande passante en fonction de votre provenance [ip,localhost etc]
  5. BandWidth [From] [bytes/s]
  6. */

Toutes les autres directives se trouvent à cette emplacement :

  1. /*
  2. /usr/share/doc/libapache2-mod-bw/mod_bw.txt
  3. */

Après mes tests il s'avérent que le vitesse de téléchargement durant les premiéres secondes ne soit pas celle qui a été configuré.

Shell restreint avec Lshell

Certains de vos utilisateurs ont besoins d'un accès limité au shell. Alors lshell est fait pour vous .

Commencer par récupérer les sources ici ou le .deb. Le .deb est disponible en squeeze ou en sid donc il vous faudra modifier votre source.list en consequence.

  1. /*
  2. deb http://ftp.fr.debian.org/debian/ sid main
  3. apt-get update
  4. apt-get install lshell
  5. */

En mode compilation

  1. /*
  2. tar xzf lshell-0.9.12.tar.gz
  3. cd lshell-0.9.12
  4. python setup.py install --no-compile
  5. */

On crée notre utilisateur

  1. /*
  2. adduser --shell /usr/bin/lshell --home /var/www/usertest/ usertest
  3. */

Maintenant on modifie la conf de lshell

  1. /*
  2. #On autorise une liste de commande
  3. allowed : ['ls','echo','cd','ll','mkdir','rmdir','liste_de_commande']
  4.  
  5. #L'utilisateur ne pourra utiliser des caractéres interdit plus de deux fois ensuite il sera kické
  6. warning_counter : 2
  7. */

Nous pouvons nous connecter avec notre user :

  1. /*
  2. ssh usertest@ip_address
  3. usertest@192.168.10.52's password:
  4. Linux debian-test 2.6.26-2-686 #1 SMP Thu Aug 19 03:44:10 UTC 2010 i686
  5.  
  6. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
  7. permitted by applicable law.
  8. You are in a limited shell.
  9. Type '?' or 'help' to get the list of allowed commands
  10. usertest:~$ ls
  11. usertest:~$ mkdir test
  12. usertest:~$ ls -l
  13. total 4
  14. drwxr-xr-x 2 usertest usertest 4096 aoû 31 13:07 test
  15. */

- page 1 de 32

ad

Liens annonces

Liens Partenaires