Comment filtrer des IPs chez Amazon Web Services (AWS)

Facebooktwittergoogle_plusredditpinterestlinkedin

Cet article explique comment mettre en place un filtrage d’IP chez AWS.

Drôle de surprise ce matin … Mon site ne répond plus. Chaque accès à une page ressort en erreur http 503 (le backend est surchargé). Après quelques minutes de recherche, je découvre des millions de logs du type :

POST /wordpress/wp-login.php

dans les access_log de mon site.

Mon site est-il devenu si populaire que tout le monde veut s’y connecter ? Non… la vérité est plus triste : je suis victime d’une attaque de type force brute sur mon CMS WordPress.

Quelqu’un est en train d’essayer tous les mots de passe du compte admin, root, …

Et après quelques minutes supplémentaires de recherche, cela fait plusieurs jours que cela dure, le hic c’est que tant que le site n’était pas par terre c’est passé inaperçu.

Je vais vous décrire comment je m’en suis sorti, car je suis certain de ne pas être le seul dans ce cas.


 

Sommaire

  1. Empêcher l’accès à l’URL attaquée
  2. Repérer les IP sources de l’attaque en activant les logs d’accès à l’ELB d’AWS
  3. Bloquer les IP sources de l’attaque en utilisant les ACLs du VPC
  4. Un dernier truc
  5. Résumé

 


 

Empêcher temporairement l’accès à l’URL attaquée

Le temps de mettre en place des contre mesures adaptées, j’ai désactivé temporaire l’accès à l’url de connexion de WordPress. Rien de plus simple, il suffit d’ajouter la ligne suivant dans le .htaccess :

RewriteRule ^/?wordpress/wp-login.php$ http://google.com [R=404,L]

Cette ligne indique que tous les accès à l’URL /wordpress/wp-login.php doivent retourné avec un code d’erreur 404 (R=404), de stopper l’analyse des règles suivantes (,L). Le http://google.com est juste là pour avoir une syntaxe correcte. Il ne sert à rien dans l’exemple.

Un accès par le navigateur sur cette URL m’indique « Page introuvable ». La redirection est donc efficace.

Mais …

Le mitraillage sur l’URL continue. Même si le danger immédiat est écarté, il reste que ces multiples accès (plusieurs fois par sec) font travailler inutilement les serveurs et les équipements réseaux.

Repérer les IP sources de l’attaque

Pour cela, mon site étant chez AWS et derrière un Elastic Load Balancer (ELB), je n’ai pas accès aux IPs sources dans les access_log de mes serveurs. En effet, derrrière un ELB, on ne voit que les IP de l’ELB.

La solution est ici d’activer les acces_log de l’ELB d’Amazon.

Pour activer les access_log de l’ELB AWS il faut :

1. créer une zone de stockage S3 (un « bucket »)

Dans la console AWS, cliquez sur S3, puis sur « Create Bucket ». Donnez lui un nom et vous voici avec un réceptacle de fichiers (un bucket) qui va stoker vos logs :

aws-s3

 

2. Activer les access_log de l’ELB

Pour ce faire, vous allez dans la console AWS / EC2 / ELB. Sélectionnez votre ELB et cliquez sur l’onglet « Description ».
Tout en base de la description, vous avez un lien vous permettant d’activer l’accès log. Cliquez dessus, cochez la case « Enable Access Logs », spécifiez votre « bucket S3 » et  sauvegardez.

La fenêtre doit ressembler à ça :

aws-elb-access-log

 

Toutes les 5 minutes vous aurez donc un nouveau fichier sur votre bucket S3 contenant les logs d’accès de votre ELB.

3. Téléchargez les fichiers de logs de l’ELB

Pour téléchargez les fichiers, il suffit de vous rendre dans la console AWS / S3 et d’ouvrir les différents répertoires.

Vous allez voir quelque-chose qui ressemble à ça :

aws-s3-elb-logs

 

Pour télécharger les fichiers vous cliquez droit dessus / download.

4. Repérer les IPs sources de l’attaque

Dans les fichiers de logs, recherchez l’URL attaquée (/wordpress/wp-login.php dans mon cas) et repérez l’IP en troisième colonne du fichier.

aws-elb-logs

 

Dans mon cas plusieurs IP sont à l’origine de l’attaque : 192.99.46.50 et 94.228.43.25

Il ne reste plus qu’à bloquer ces IP pour être tranquille un moment.

Bloquer les IPs par des ACLs

Le premier réflexe est d’aller dans les Security Group pour bloquer les IP. Seulement, les Security Group sont des white-lists (on liste ce qu’on laisse passer) et non pas des black-lists (on liste ce qu’on veut bloquer).

L’utilisation des Security Group n’est donc pas adapté pour notre cas d’usage.

Le deuxième réflexe est de bloquer les IPs dans le firewall de chaque machine. Les commandes pour faire cela sont du style :

iptables -I INPUT -s 103.6.196.24/32 -j DROP

Seulement, comme nos serveurs web sont derrière un load balanceur, le firewall ne voit que l’IP du load balanceur et non pas l’IP source de la requête. Et puis dans le cas où vous travaillez avec un cluster de serveur, vous devez faire ces manipulations sur tous vos membres du cluster.

La solution est d’utiliser un mécanisme connu sous le nom d’ACL (Access Control List). Ce mécanisme est présent au niveau de votre VPC.

Pour configurer les ACLs, vous ouvrez la console AWS / VPC / Network ACLs

Vous devez avoir un enregistrement présent par défaut qui laisse tout passer en entrée (Inbound rules)

100
ALL Traffic
ALL
ALL
0.0.0.0/0
ALLOW

et qui laisse tout passer aussi en sortie (Outbound rules).

Editez alors les rèlges Inbound jusqu’à obtenir ceci :

aws-acls

Le Rule # permet d’ordonner les règles. Dès qu’une règle s’applique, l’examen des règles suivantes est stoppé.

Appuyez sur « Save » et voici les IPs filtrées sur toutes les machines de votre VPC de façon instantané et sans aucune perte de sevice.

Vérifiez que vous n’avez plus d’accès sur l’URL attaquée dans les acces_log de l’ELB, ni dans les access_log de vos serveurs http.

Une dernière chose

Vos attaquants vous certainement changer d’IP rapidement. Dans ce cas, ils vont pouvoir repasser à travers les ACLs qui vous venez de mettre en place. Je vous conseille donc, dans le mesure du possible, d’activer la règle qui désactive l’URL attaquée (cf. ci-dessus) et de ne l’activer que lorsque l’on veut accéder à l’administration de WordPress.

 

Résumé

Dans cet article nous avons vu comment :

  1. activer les logs d’un Elastic Load Balancer d’AWS,
  2. filtrer certaines IP en utilisant les ACLs d’un VPC AWS

 

Categories: Technique, Tutoriels

Tags: ,

Comments

  • Stéphane
    22 septembre 2014 à 22 h 01 min Répondre

    Je te préviens, j’ai changé d’IP 😉

  • 27 septembre 2014 à 11 h 15 min Répondre

    M’en fout… Je m’adapte et je te suis 😉

Leave a Comment

Cet article vous a plu ? Partagez le sur les réseaux sociaux. Vous avez des remarques ou des compléments d'informations à apporter : laissez nous un commentaire !

Facebooktwittergoogle_plusredditpinterestlinkedin