Guest Blog

Aller au contenu | Aller au menu | Aller à la recherche

mercredi, décembre 14 2011

Mettre en cache le contenu statique

Comme beaucoup d'admin système qui bossent dans l'hébergement web. Nous avons déjà eu la remarque mais pourquoi mon site mets 3 secondes pour s'afficher . Avant de critiquer les développeurs comme d'habitude .
Nous allons mettre en cache le contenu statique comme les css,image,html,js bla bla et bla.
Le module apache qui permet la mise en cache est le mod_expires

  1. /*
  2. a2enmod expires
  3. ou
  4. ln -s ../mods-available/expires.load expires.load
  5. */

Dans votre vhost

  1. /*
  2. ExpiresActive On
  3.  
  4. <Directory /bla/>
  5.  
  6. ExpiresByType text/css "access plus 5 days"
  7. ExpiresByType image/gif "access plus 1 month"
  8. ExpiresByType image/jpeg "access plus 1 month"
  9. ExpiresByType image/png "access plus 1 month"
  10. </Directory>
  11.  
  12. */

Dans le cas actuel on cache les css 5 jours , les gifs , jpeg , png sont en cache 1 mois.

Vérifier que notre cache est bien fonctionnel :

  1. /*
  2. :/tmp# wget -S http://www.robertain.com/public/ncdu1.JPG
  3. --2011-12-14 23:33:06-- http://www.robertain.com/public/ncdu1.JPG
  4. Résolution de www.robertain.com... 88.191.127.248, 88.191.222.37
  5. Connexion vers www.robertain.com|88.191.127.248|:80...connecté.
  6. requête HTTP transmise, en attente de la réponse...
  7. HTTP/1.1 200 OK
  8. Date: Wed, 14 Dec 2011 22:33:06 GMT
  9. Server: Apache
  10. Last-Modified: Fri, 29 Apr 2011 17:38:52 GMT
  11. ETag: "3b446c-6792-4a21225ac4300"
  12. Accept-Ranges: bytes
  13. Content-Length: 26514
  14. Cache-Control: max-age=2592000
  15. Expires: Fri, 13 Jan 2012 22:33:06 GMT
  16. Keep-Alive: timeout=15, max=100
  17. Connection: Keep-Alive
  18. Content-Type: image/jpeg
  19. Longueur: 26514 (26K) [image/jpeg]
  20. Sauvegarde en : «ncdu1.JPG»
  21.  
  22. 100%[==================================================================================================================>] 26 514 --.-K/s ds 0,07s
  23.  
  24. 2011-12-14 23:33:06 (378 KB/s) - «ncdu1.JPG» sauvegardé [26514/26514]
  25. */

Avec lynx

  1. /*
  2. # lynx -head http://www.robertain.com/themes/Paris/style.css
  3. HTTP/1.1 200 OK
  4. Date: Wed, 14 Dec 2011 22:41:05 GMT
  5. Server: Apache
  6. Last-Modified: Fri, 28 Jan 2011 18:15:12 GMT
  7. ETag: "3b4595-2f98-49aec0c0d4c00"
  8. Accept-Ranges: bytes
  9. Cache-Control: max-age=432000
  10. Expires: Mon, 19 Dec 2011 22:41:05 GMT
  11. Vary: Accept-Encoding
  12. Content-Encoding: gzip
  13. Content-Length: 2981
  14. Connection: close
  15. Content-Type: text/css
  16.  
  17. */

Par rapport à une requête http classique nous avons 2 headers en plus

  • Cache-control : max-age : Temps en secondes pendant lequel le contenu sera en cache.
  • Expires : Date d'expiration du cache

Bien-sur je vous dis pas de redémarrer apache ... :)
Ce n'est qu'à ce moment que vous pouvez gueuler sur les développeurs. Ou après avoir mis du nginx (mais je maitrise pas encore la bête) .

mardi, mai 31 2011

Proteger son serveur apache des attaques DDOS

Les serveurs web sont souvents exposés à des attaques de type DDOS . Afin de protèger un minimum notre serveur web .
Apache nous propose un module nommé mod_evasive . Son but est de pouvoir stopper (blacklisté) une ip suspectée de faire du DDOS .

Installation du module

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

Configuration du module

  1. /*
  2. cat /etc/apache2/conf.d/evasive.conf
  3. <IfModule mod_evasive20.c>
  4.  
  5. DOSHashTableSize 3097
  6. DOSPageCount 2
  7. DOSPageInterval 1
  8. DOSSiteCount 150
  9. DOSSiteInterval 1
  10. DOSBlockingPeriod 10
  11. DOSLogDir "/var/log/mod_evasive"
  12. DOSWhitelist 127.0.0.1
  13. DOSWhitelist 5.5.5.1
  14. DOSEmailNotify "votre_adresse_mail"
  15. DOSSystemCommand "/sbin/iptables -I INPUT -s %s -j DROP" #Avant de mettre cette ligne vérifier bien que vous êtes dans la "DOSWhitelist" Ca vous évitera d'être dans la merde ;)
  16.  
  17. </IfModule>
  18.  
  19. */
  • DOSPageCount : Nombre de requête de la même page sur un intervalle définit par DOSPageInterval .
  • DOSSiteCount : Nombre de requête sur des pages différentes autorisés sur un intervalle définit par DOSSiteInterval.
  • DOSPageInterval : Iintervalle temps en secondes utilisé par DOSPageCount.
  • DOSSiteInterval : Intervalle temps en secondes utilisé par DOSSiteCount. Défaut : 1 seconde.
  • DOSBlockingPeriod : Laps de temps temps lequel l'utilisateur aura doit à un beau 403
  • DOSLogDir : Dossier qui contiendra l'ensemble de IP blacklistés
  • DOSEmailNotify : Envoi un mail à l'adresse définit par ce paramètre
  • DOSSystemCommand : Utilisation d'une commande externe lorsqu'une IP est blacklisté

Vérifier que le module est bien pris en compte

  1. /*
  2. # apache2ctl -t -D DUMP_MODULES
  3. */

Problème de connu . Vous ne recevez pas les mails quand une IP est Blacklistée . Ceci est du au fait que le module tente d'envoyer le mail avec le binaire qui se situe dans /bin/mail .
Cependant ce binaire se situe autre part . Pour recevoir ce fameux mail :

  1. /*
  2. cd /bin/
  3. ln -s /usr/bin/mail mail
  4. */

Voir aussi cet article qui parle de mod_security, peut être utilisé en complément du mod_evasive.

mercredi, février 16 2011

Phpinfo Local Value et Master Value

Beaucoup d'entre nous utilisent apache2 comme serveur web et pour l'affichage des pages php. Tout ca pour en venir à notre fichier php.ini . Ce fichier nous permet d'optimiser nos paramétres php.

Un autre fichier qui a son importance est notre bon vieux phpinfo. Ce fichier se présente sous la forme d'un coté la valeur "Local Value" et "Master Value" .

Dans la plupart des cas et lors d'une fresh install ces valeurs sont égales. Il se trouve qu'après modification de votre php.ini , les valeurs sont différentes.

La vous vous dites mais à quoi correspondent ces deux valeurs exactement.

  • La valeur présente dans le Master Value est la valeur inscrite dans votre php.ini .
  • La valeur présente dans le Local Value peut être la valeur qui est décrite dans votre .htaccess , apache2.conf ou

Maintenant vous savez à quoi correspondent ces deux valeurs ;)

- page 1 de 4