.htaccess bloque l'accès lorsque HTTP_HOST est IP (sécurité)

May 31 2018

J'ai eu beaucoup d'attaques sur mon serveur. La plupart commencent par une analyse de vulnérabilité, suivie de vagues de requêtes POST.

Je vais bientôt implémenter Cloudflare (WAF et DDos). Cela signifie qu'une recherche DNS sur mon domaine affichera l'adresse IP de Cloudflare, plutôt que mon serveur. L'adresse IP de mon serveur sera donc masquée à cet égard.

Cependant, les attaques peuvent toujours arriver en passant une par une à travers toutes les adresses IP possibles dans le monde. Lorsque je regarde les journaux de mon serveur, je peux voir que cela se produit BEAUCOUP. (J'ai 3 adresses IP liées à mon serveur 1 et les mêmes attaques se produisent exactement sur XXX.XXX.XXX.XX1 puis XXX.XXX.XXX.XX2 puis XXX.XXX.XXX.XX3)

Mon .htaccess de niveau supérieur ressemble à ceci:

# deny all POST requests
<IfModule mod_rewrite.c>
    RewriteCond %{REQUEST_METHOD} POST
    RewriteRule .* - [F,L]
</IfModule>


# deny unused request types
<IfModule mod_rewrite.c>
    RewriteCond %{REQUEST_METHOD} ^(delete|head|trace|track) [NC]
    RewriteRule .* - [F,L]
</IfModule>


# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

Des questions:

  1. Que dois-je ajouter pour que [si HTTP_HOST = XXX.XXX.XXX.XX1 OU HTTP_HOST = XXX.XXX.XXX.XX2 OU HTTP_HOST = XXX.XXX.XXX.XX3] le trafic soit immédiatement bloqué?

  2. Puis-je mettre ce nouveau code en haut du .htaccess? Va-t-il casser ce qu'il y a actuellement?

Réponses

1 MrWhite May 31 2018 at 18:49

Vous n'avez pas besoin de vérifier l'en- Hosttête pour des adresses IP spécifiques, vérifiez simplement celles Hostqui commencent par un chiffre. Par exemple, en haut de votre .htaccessfichier:

RewriteCond %{HTTP_HOST} ^\d
RewriteRule .* - [F]

Vous n'avez pas besoin du Ldrapeau avec F- c'est implicite.

Vous n'avez pas non plus besoin des <IfModule mod_rewrite.c>emballages supplémentaires . Laissez simplement WordPress tel quel. (Bien que ce ne soit pas strictement obligatoire non plus.)

Cependant, ces types de blocages devraient idéalement être effectués au niveau du serveur / de l'hôte virtuel, pas dans .htaccess. Configurez une valeur par défaut <VirtualHost>qui intercepte ces demandes IP indésirables.

Par exemple, en supposant que vous n'utilisez que des VirtualHosts basés sur le nom, vous pouvez configurer un VirtualHost par défaut (qui doit se produire avant tous les autres VirtualHosts) de la forme:

# Catch all other requests for non-specific hosts. eg IP address access
<VirtualHost _default_>
  ServerName default.example.com
  <Location />
  Require all denied
  </Location>
</VirtualHost>

Cela intercepte toutes les demandes qui ne correspondent à aucun autre hôte virtuel «nommé». _default_est simplement un alias pour *. Comme indiqué ci-dessus, ce <VirtualHost>conteneur doit se produire avant tous les autres <VirtualHost>conteneurs de la configuration de votre serveur. Le fait qu'il soit défini en premier est ce qui en fait la "valeur par défaut".

La ServerNamedirective doit être définie comme autre chose qu'un nom de serveur réel sur votre système. Il peut être omis, mais le serveur tentera uniquement de le calculer, ce qui pourrait s'avérer peu fiable.

Cela évite à vos hôtes virtuels (qui desservent votre site Web) d'avoir à traiter ces autres demandes.


# deny all POST requests

Cela semble un peu extrême! Je suis surpris que votre site fonctionne toujours?