Protection des sites par Perishable Press


protection par firewall

Nous utilisons sur les sites que gère ASIP des règles de protection, issues du travail de nombreuses personnes, et compilées par « Perishable Press« . Le dernier ensemble de règles se nomme « 6G« . Il s’agit de directives destinées à Apache, donc en amont de l’accès à votre site. Une personne mal intentionnée pourra être refoulée via ces règles. Ces règles sont placées dans un fichier .htaccess à la racine de votre site.

 

 

Puisqu’on nous le demande parfois, voici en résumé, les actions couvertes par ces règles de filtrage. Voici l’ensemble des règles « 6G » en ce début mai:

# 6G FIREWALL/BLACKLIST
# @ https://perishablepress.com/6g/

# 6G:[QUERY STRINGS]
<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{QUERY_STRING} (eval\() [NC,OR]
  RewriteCond %{QUERY_STRING} (127\.0\.0\.1) [NC,OR]
  RewriteCond %{QUERY_STRING} ([a-z0-9]{2000}) [NC,OR]
  RewriteCond %{QUERY_STRING} (javascript:)(.*)(;) [NC,OR]
  RewriteCond %{QUERY_STRING} (base64_encode)(.*)(\() [NC,OR]
  RewriteCond %{QUERY_STRING} (GLOBALS|REQUEST)(=|\[|%) [NC,OR]
  RewriteCond %{QUERY_STRING} (<|%3C)(.*)script(.*)(>|%3) [NC,OR]
  RewriteCond %{QUERY_STRING} (\\|\.\.\.|\.\./|~|`|<|>|\|) [NC,OR]
  RewriteCond %{QUERY_STRING} (boot\.ini|etc/passwd|self/environ) [NC,OR]
  RewriteCond %{QUERY_STRING} (thumbs?(_editor|open)?|tim(thumb)?)\.php [NC,OR]
  RewriteCond %{QUERY_STRING} (\'|\")(.*)(drop|insert|md5|select|union) [NC]
  RewriteRule .* - [F]
</IfModule>

# 6G:[REQUEST METHOD]
<IfModule mod_rewrite.c>
  RewriteCond %{REQUEST_METHOD} ^(connect|debug|delete|move|put|trace|track) [NC]
  RewriteRule .* - [F]
</IfModule>

# 6G:[REFERRERS]
<IfModule mod_rewrite.c>
  RewriteCond %{HTTP_REFERER} ([a-z0-9]{2000}) [NC,OR]
  RewriteCond %{HTTP_REFERER} (semalt.com|todaperfeita) [NC]
  RewriteRule .* - [F]
</IfModule>

# 6G:[REQUEST STRINGS]
<IfModule mod_alias.c>
  RedirectMatch 403 (?i)([a-z0-9]{2000})
  RedirectMatch 403 (?i)(https?|ftp|php):/
  RedirectMatch 403 (?i)(base64_encode)(.*)(\()
  RedirectMatch 403 (?i)(=\\\'|=\\%27|/\\\'/?)\.
  RedirectMatch 403 (?i)/(\$(\&)?|\*|\"|\.|,|&|&amp;?)/?$
  RedirectMatch 403 (?i)(\{0\}|\(/\(|\.\.\.|\+\+\+|\\\"\\\")
  RedirectMatch 403 (?i)(~|`|<|>|:|;|,|%|\\|\s|\{|\}|\[|\]|\|)
  RedirectMatch 403 (?i)/(=|\$&|_mm|cgi-|etc/passwd|muieblack)
  RedirectMatch 403 (?i)(&pws=0|_vti_|\(null\)|\{\$itemURL\}|echo(.*)kae|etc/passwd|eval\(|self/environ)
  RedirectMatch 403 (?i)\.(aspx?|bash|bak?|cfg|cgi|dll|exe|git|hg|ini|jsp|log|mdb|out|sql|svn|swp|tar|rar|rdf)$
  RedirectMatch 403 (?i)/(^$|(wp-)?config|mobiquo|phpinfo|shell|sqlpatch|thumb|thumb_editor|thumbopen|timthumb|webshell)\.php
</IfModule>

# 6G:[USER AGENTS]
<IfModule mod_setenvif.c>
  SetEnvIfNoCase User-Agent ([a-z0-9]{2000}) bad_bot
  SetEnvIfNoCase User-Agent (archive.org|binlar|casper|checkpriv|choppy|clshttp|cmsworld|diavol|dotbot|extract|feedfinder|flicky|g00g1e|harvest|heritrix|httrack|kmccrew|loader|miner|nikto|nutch|planetwork|postrank|purebot|pycurl|python|seekerspider|siclab|skygrid|sqlmap|sucker|turnit|vikspider|winhttp|xxxyy|youda|zmeu|zune) bad_bot
  <limit GET POST PUT>
    Order Allow,Deny
    Allow from All
    Deny from env=bad_bot
  </limit>
</IfModule>

# 6G:[BAD IPS]
<Limit GET HEAD OPTIONS POST PUT>
  Order Allow,Deny
  Allow from All
  # uncomment/edit/repeat next line to block IPs
  # Deny from 123.456.789
</Limit>

Voici comment cela fonctionne pour le 1er groupe de protections « # 6G:[QUERY STRINGS] »
On réécrit les URLs à la volée, si elles contiennent certains termes en guise de paramètres, comme « eval », « javascript », « passwd », bref, des termes qui n’ont rien à faire dans une URL du type « http://www.mamaison.fr/?page=mongarage ». La plupart des termes bloqués concernent des tentatives d’exécuter du code sur le serveur lui-même. Le navigateur (ou le robot) qui testerai notre serveur, serait renvoyé vers … un refus (« RewriteRule .* – [F] « ).

Le second groupe, « # 6G:[REQUEST METHOD] » vérifie la façon dont vos visiteurs demandent les pages. Il existe différentes façon de demander une page WEB, votre navigateur Chrome, Firefox ou autre n’en utilisera que 2: GET pour lire une page, POST si vous envoyez un formulaire. Jamais il ne demandera de DEBUG, de CONNECT, de TRACE, etc.. Donc, on renvoi le demandeur de nouveau vers le vide sidéral si une méthode d’accès incorrecte est utilisée…

« # 6G:[REFERRERS]« : ici on bloque d’après l’origine de la requête. Certains sites ou certaines machines sont connues pour chercher la bagarre, on détecte ces spammeurs, on les bloque.

« # 6G:[REQUEST STRINGS]« : similaire aux « Query String », mais cette fois on ne cherche pas d’anomalie dans les paramètres, mais dans le lien lui même. Il s’agit souvent de robots qui recherches des failles connues dans certains fichiers. Le script bloque l’accès à ces fichiers et renvoi une erreur 403 (Accès refusé).

« # 6G:[USER AGENTS] »: Ici on bloque les robots qui n’ont rien a faire sur votre site. Il s’agit parfois de petits moteurs de recherches, mais la plupart du temps, il s’agit de robots collecteurs d’informations pour le compte de pirates.

« # 6G:[BAD IPS]« : cette section sert à bloquer des IP ou des plages d’IP. Vous pourriez subir une attaque depuis un opérateur en particulier, ou d’une personne précise. Il suffit d’inscrire ici son IP pour limiter l’accès au site. Cette protection est faible, car li suffit de changer son IP via un proxy pour la contourner, mais elle peut parfois servir.

Cet ensemble de règles constitue une petite partie de notre système de protection. L’un des derniers maillons. Nous utilisons également des scripts tels que Fail2ban et des certificats SSL de « Let’s encrypt ».
Si vous utlisez WordPress pour votre site, essayez l’excellent plugin « All In One Security and Firewall« . Il intègre déjà les règles 6G, et ajoute une bonne protection à votre site.