Pour bloquer l'accès à un site web pour une adresse spécifique, j'ai d'abord tout simplement pensé à /etc/hosts.deny, mais pour aller plus loin j'avais besoins d'une solution plus fine. Après quelques recherches j'ai donc trouvé un moyen de le faire efficacement grâce au mod_rewrite d'apache.

On rajoute déjà les règles dans le fichier de son vhost :


RewriteEngine On

RewriteMap hosts-deny txt:/etc/apache2/hosts.deny
RewriteCond ${hosts-deny:%{REMOTE_HOST}|NOT-FOUND} !=NOT-FOUND [OR]
RewriteCond ${hosts-deny:%{REMOTE_ADDR}|NOT-FOUND} !=NOT-FOUND
RewriteRule ^/.* - [F]

Cette règle lit dans le fichier /etc/apache2/hosts.deny afin de lister les adresses ip ou domaines à bloquer :


uneip -
unnomdedomaine -
 

Il ne manque plus qu'a redémarrer apache :


/etc/init.d/apache2 restart

Les visiteurs étant listés dans /etc/apache2/hosts.deny se verront ainsi renvoyer vers une page "Forbiden". On peut bien sur imaginer une redirection vers une page personnalisée genre (banni.html) :


<html>
<head>
<title>Vous avez été banni</title>
</head>
<h1>Vous n'êtes plus le bienvenu ici</h1>
</html>

On change simplement la ligne :


RewriteRule ^/.* - [F]

Par :


RewriteRule ^/.* /banni.html [L]

Source: http://httpd.apache.org/docs/2.0/mi...