Creation site internet pour les entreprises. Site vitrine, CMS, site e-commerce.
Administration de site internet et intégration d'applications Open Source.
Prestations de services informatiques et creation site web à Bordeaux.
Base de connaissance
  • default color
  • blue color
  • green color
  • red color
Base de Connaissance


Optimisation Apache (mod_deflate, mod_expires, mod_headers)

Envoyer Imprimer

Optimisation du temps de chargement des pages en utilisant un fichier .htaccess

Cette méthode nous permet de configurer chaque site individuellement, contrairement à la méthode utilisant le fichier de configuration du serveur Apache. Ici nous pouvons héberger plusieurs sites sans pour autant utiliser les modules Deflate, Expires et Headers pour tous.
Contenu du fichier .htaccess :
webuser@servername:~/www$ cat .htaccess
<IfModule mod_deflate.c> <IfModule mod_deflate.c>
    # MOD_DEFLATE COMPRESSION
    SetOutputFilter DEFLATE
    AddOutputFilterByType DEFLATE text/html text/css text/plain text/xml application/x-javascript application/javascript application/x-httpd-php
    #Pour les navigateurs incompatibles
    BrowserMatch ^Mozilla/4 gzip-only-text/html
    BrowserMatch ^Mozilla/4\.0[678] no-gzip
    BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
    BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
    #ne pas mettre en cache si ces fichiers le sont déjà
    SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip
    #les proxies doivent donner le bon contenu
    Header append Vary User-Agent env=!dont-vary
</IfModule>

<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresDefault "access plus 7 day"
    ExpiresByType application/javascript "access plus 1 month"
    ExpiresByType application/x-javascript "access plus 1 month"
    ExpiresByType text/javascript "access plus 1 month"
    ExpiresByType text/html "access plus 7 days"
    ExpiresByType text/xml "access plus 7 days"
    ExpiresByType text/css "access plus 1 month"
    ExpiresByType text/plain "access plus 1 month"
    ExpiresByType image/gif "access plus 1 month"
    ExpiresByType image/jpg "access plus 1 month"
    ExpiresByType image/jpeg "access plus 1 month"
    ExpiresByType image/png "access plus 1 month"
    ExpiresByType image/bmp "access plus 1 month"
    ExpiresByType image/ico "access plus 1 years"
    ExpiresByType image/icon "access plus 1 years"
    ExpiresByType image/x-icon "access plus 1 years"
    ExpiresByType application/x-shockwave-flash "access plus 1 month"
</IfModule>

<IfModule mod_headers.c>
    <FilesMatch "\\.(ico|jpe?g|png|gif|swf|gz|ttf)$">
        Header set Cache-Control "max-age=2592000, public"
    </FilesMatch>
    <FilesMatch "\\.(css)$">
        Header set Cache-Control "max-age=2592000, public"
    </FilesMatch>
    <FilesMatch "\\.(js)$">
        Header set Cache-Control "max-age=2592000, public"
    </FilesMatch>
    <filesMatch "\\.(html|htm)$">
        Header set Cache-Control "max-age=604800, public"
    </FilesMatch>
    # Disable caching for scripts and other dynamic files
    <FilesMatch "\.(pl|php|cgi|spl|scgi|fcgi)$">
        Header unset Cache-Control
    </FilesMatch>
</IfModule>


Mise à jour le Dimanche, 11 Juillet 2010 03:04
 

Mac OS X Snow Leopard 64 bits

Envoyer Imprimer

Introduction :

Par défaut et pour des raisons de compatibilité des applications de votre système, OS X 10.6 boot avec le noyau 32 bits.

Capacité et valeur par défaut selon les modèles :


model specifications
Seul Xserve démarre par défaut en 64 bits.

Etat actuel du système :

Ouvrez l'application 'Informations Système' et référez vous à la section 'Logiciel' pour connaitre le type de boot actuellement utilisé par défaut.

info système
Noyau et extensions 64 bits désactivés.

Démarrage exceptionnel en mode 64 bits :

Il suffit de maintenir les touches '6' et '4' enfoncées lors du boot pour activé le noyau 64 bits ; Cette méthode n'est pas définitive et ne permet donc pas de booter à chaque fois en 64 bits sans intervention de votre part (maintient des touches '6' et '4').

Connaitre la version de son BIOS :

Si votre mac dispose du 64-bit EFI alors vous pouvez booter en mode pleinement 64 bits. Notez que Apple désactive le noyau 64 bits des Macbooks même ceux avec le 64-bit EFI.
Ainsi pour vérifiez la version installé sur votre Mac, ouvrez l'application Terminal et tapez la commande suivante :
ioreg -l -p IODeviceTree | grep firmware-abi

terminal
La réponse sera soit "EFI32" soit "EFI64".

Démarrer en 64 bits par défaut :

Voici comment sélectionner de manière définitive le noyau à utiliser à chaque démarrage du système : Il suffit de modifier la valeur de la clé 'Kernel Flags' dans le fichier /Library/Preferences/SystemConfiguration/com.apple.Boot.plist

Recherchez les lignes suivant :
<key>Kernel Flags</key>
<string></string>
et remplacez les par :
<key>Kernel Flags</key>
<string>arch=x86_64</string>
xcode plist
Affichage du fichier com.apple.Boot.plist dans Xcode.

Conclusion :

Votre système bootera désormais à chaque fois en mode 64 bits.
Pour démarrer exceptionnellement en mode 32 bits, pressez les touches '3' et '2' au moment du boot.

mode 64bit
Noyau et extensions 64 bits activés.

Mise à jour le Mercredi, 19 Mai 2010 17:02
 

Erreur de démarrage Apache2

Envoyer Imprimer
Après un restart de la machine, le serveur web ne fonctionne pas.
La méthode qui suit va nous permettre de redémmarrer apache sans erreur cependant si après le reboot du serveur apache ne fonctionne plus, alors cela signifie qu'apache à rencontré un problème et n'a donc pas pu se lancer correctement. Cette article ne traite pas de la résolution du problème d'origine car les raisons peuvent être nombreuses. Consultez vos log pour connaitre l'origine du problème ; dans le cas de cet article, l'erreur était dut à l'utilisation d'un certificat ssl crypté, apache demandé la passphrase et ne la recevant pas il ne pouvait démarrer. L'utilisation d'une clef décrypté à alors résolu le problème.
Arrêt du serveur :
servername:~# /etc/init.d/apache2 stop
Au démarrage du serveur l'erreur suivante est retournée :
servername:~# /etc/init.d/apache2 start
* Restarting web server apache2
httpd (no pid file) not running
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs [fail]

Un processus semble déjà écouter sur le port 80 :
servername:~# netstat -tulpn | grep :80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 2335/apache2
Le processus existe bien, son PID est 2335, nous devons le supprimer afin de pouvoir démarrer apache sans erreur :
servername:~# kill -9 2335
servername:~# /etc/init.d/apache2 start
...
Apache devrait alors se lancer sans erreur.
Mise à jour le Dimanche, 11 Juillet 2010 02:23
 

Règle générique anti-w00tw00t

Envoyer Imprimer
Utilisons les modules Recent et TCP d'iptables pour bannir les IP à l'origine de scan de vulnérabilités comme w00tw00t.at.ISC.SANS.DFind:
Nous allons établir une règle qui ne va filtrer que le paquet qui nous intéresse, en l'occurence le premier contenant la requête HTTP (GET, POST...). Tous les autres paquets de la connexion seront ignorés.
Rappel concernant l'établissement d'une connexion TCP :
  • le client se connecte au serveur en envoyant un paquet SYN (Synchronize).
  • le serveur répond en envoyant un paquet SYN+ACK (Synchronize + Acknowledgement).
  • le client répond avec un paquet ACK (Acknowledgement).
  • la communication est dès lors établie, le client peut envoyer les données PSH+ACK (Push + Acknowledgement), le serveur va y répondre et ainsi de suite jusqu'à la fermeture de la connexion.

Concept :

  • recherche élargie :
    certain script-kiddies modifient la chaîne "GET /w00tw00t.at.ISC.SANS." avec un éditeur hexadécimal (ex : "GET /test.w00t:)"). Pour contrer cette limitation, le filtrage doit aussi porter sur le fait que la requête n'est pas conforme au protocole HTTP v1.1 et se baser sur la séquence "HTTP/1.1" + 2 retours à la ligne (CR/LF/CR/LF) qui sera convertie en hexadécimale avec le paramètre --hex-string.
  • blacklist de l'IP :
    à chaque fois que DFind sera détecté, il sera blacklisté pendant 6 heures grâce au module ipt_recent d'iptables. Si l'attaquant revient avant la fin l'expiration de la période de bannissement, 6 heures seront à nouveau ajoutées à cette période (paramètres --update).
  • reset de la connexion :
    le paquet est rejeté et la connexion immédiatement terminée (-p tcp -j REJECT --reject-with tcp-reset). Ici, l'utilisation de DROP n'est pas très intéressante car le blocage intervient après la séquence d'établissement de la connexion et de ce fait, le scanner sait qu'il y a un serveur HTTP connecté. Il est donc inutile de vouloir lui faire croire le contraire, ni même de perdre du temps.

Contenu du script anti-w00tw00t_rules.sh :

#!/bin/bash

# cette partie est à mettre au tout début de vos règles :

# accepte loopback
iptables -A INPUT -i lo -j ACCEPT

# vérifie si l'IP est déjà présente dans la liste w00tlist.
# Si c'est la cas, on la rejette immédiatement, met à jour la liste et
# l'attaquant est de nouveau blacklisté pour 6h :

iptables -A INPUT -p tcp -m recent --name w00tlist --update --seconds 21600 -j DROP

# création de la chaine w00tchain qui rajoute l'IP
# à la liste w00tlist et reset la connexion (ne pas oublier le paramètre
# '-p tcp' indispensable pour l'utilisation de '--reject-with tcp-reset') :

iptables -N w00tchain
iptables -A w00tchain -m recent --set --name w00tlist -p tcp \
-j REJECT --reject-with tcp-reset

# création de notre chaîne w00t :
iptables -N w00t

# redirige les paquets TCP sur notre chaîne :
iptables -A INPUT -p tcp -j w00t

#####################################################
# mettez ici vos propres règles iptables :
# accepte les connexions établies, etc :

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
...
...
...
#####################################################
# chaîne w00t :
# recherche du premier SYN et création de la liste :

iptables -A w00t -m recent -p tcp --syn --dport 80 --set

# recherche du paquet SYN,ACK et mise à jour la liste :
iptables -A w00t -m recent -p tcp --tcp-flags PSH,SYN,ACK SYN,ACK --sport 80 --update

# recherche du paquet ACK et mise à jour la liste :
iptables -A w00t -m recent -p tcp --tcp-flags PSH,SYN,ACK ACK --dport 80 --update

# recherche de la signature hexadécimale dans le prenier PSH+ACK.
# Si elle est présente, on renvoie sur w00tchain pour blacklister et
# terminer la connexion.
# On supprime la liste pour ne pas filtrer les paquets suivants :

iptables -A w00t -m recent -p tcp --tcp-flags PSH,ACK PSH,ACK --dport 80 --remove \
-m string --to 80 --algo bm --hex-string '|485454502f312e310d0a0d0a|' -j w00tchain
iptables -A w00t -m recent -p tcp --tcp-flags PSH,ACK PSH,ACK --dport 80 --remove \
-m string --to 80 --algo bm --string "w00tw00t.at.ISC.SANS." -j w00tchain

Vérifications :

Une fois les règles en place il est possible d'avoir un apperçu des paquets et nombres d'octets rejetés avec iptables :
servername:~# iptables -L w00t -nvx
Voir les IP blacklistées (deux dernières règles) :
servername:~# cat /proc/net/ipt_recent/w00tlist

Source :
Utiliser iptables pour bloquer les chaines de caractères (1ere partie)
Utiliser iptables pour bloquer les chaines de caractères (2eme partie)
# man iptables
# iptables [PARAMETRE] --help
Mise à jour le Lundi, 17 Mai 2010 14:07
 

Script w00t IP list

Envoyer Imprimer
Pour ceux qui auraient encore dans leurs logs apache des lignes comme celle-ci :
213.211.134.23 [date] "GET /w00tw00t.at.ISC.SANS.DFind:) HTTP/1.1" 400
Ce script permet de lister dans un fichier texte les ip présentes dans les log apache et ayant envoyé des requêtes de scanne de vulnérabilités :
#!/bin/bash
#Block DFind

cd /home/user/scripts/

echo '' >  w00t_report.txt
echo '' >  w00t_ip.txt

echo '' >> w00t_report.txt
echo '-------------------------------------------------' >>  w00t_report.txt
echo '-    File : /var/log/error.log                  -' >>  w00t_report.txt
echo '-------------------------------------------------' >>  w00t_report.txt
echo '' >> w00t_report.txt

countwoot=0
countoff=0

for ip in `cat /var/log/apache2/error.log | grep w00tw00t | awk '{print $8}' | sed 's/]//g' | sort -t. -n -k1,1 -k2,2 -k3,3 -k4,4 -u` ; do
countoff=$[$countoff+1]
countwoot=$[$countwoot+1]
echo IP $countwoot : $ip >> w00t_report.txt
echo $ip >> w00t_ip.txt
done

echo $countwoot / $countoff >> w00t_report.txt

echo '' >> w00t_report.txt
echo '-------------------------------------------------' >>  w00t_report.txt
echo '-    File : /var/log/access.log                 -' >>  w00t_report.txt
echo '-------------------------------------------------' >>  w00t_report.txt
echo '' >> w00t_report.txt

countwoot=0
countoff=0

for ip in `cat /var/log/apache2/access.log | grep w00tw00t | awk '{print $1}' | sort -t. -n -k1,1 -k2,2 -k3,3 -k4,4 -u` ; do
countoff=$[$countoff+1]
countwoot=$[$countwoot+1]
echo IP $countwoot : $ip >> w00t_report.txt
echo $ip >> w00t_ip.txt
done

echo $countwoot / $countoff >> w00t_report.txt

echo '' >> w00t_report.txt
echo '-------------------------------------------------' >>  w00t_report.txt
echo '-    File : /var/log/other_vhosts_access.log    -' >>  w00t_report.txt
echo '-------------------------------------------------' >>  w00t_report.txt
echo '' >> w00t_report.txt

countwoot=0
countoff=0

for ip in `cat /var/log/apache2/other_vhosts_access.log | grep w00tw00t | awk '{print $2}' | sort -t. -n -k1,1 -k2,2 -k3,3 -k4,4 -u` ; do
countoff=$[$countoff+1]
countwoot=$[$countwoot+1]
echo IP $countwoot : $ip >> w00t_report.txt
echo $ip >> w00t_ip.txt
done

echo $countwoot / $countoff >> w00t_report.txt

echo '' >> w00t_report.txt
echo '-------------------------------------------------' >>  w00t_report.txt
echo '-    w00T IP Summary for All Apache Log Files   -' >>  w00t_report.txt
echo '-------------------------------------------------' >>  w00t_report.txt
echo '' >> w00t_report.txt

countwoot=0
countoff=0

for ip in `cat /home/user/scripts/w00t_ip.txt | awk '{print $1}' | sort -t. -n -k1,1 -k2,2 -k3,3 -k4,4 -u` ; do
countoff=$[$countoff+1]
countwoot=$[$countwoot+1]
echo IP $countwoot : $ip >> w00t_report.txt
echo $ip >> w00t_ip.txt
iptables -I INPUT -s $ip -j DROP
iptables -I OUTPUT -s $ip -j DROP
done

echo $countwoot / $countoff >> w00t_report.txt

cat w00t_report.txt

exit 0
Mise à jour le Dimanche, 16 Mai 2010 18:46
 
  • «
  •  Début 
  •  Précédent 
  •  1 
  •  2 
  •  Suivant 
  •  Fin 
  • »


Page 1 sur 2

Membres

Utilisateurs

Nous avons 24 invités en ligne
Add to Google