5 votes

Comment utiliser le support ELB pour le protocole PROXY version 1 de manière sécurisée ?

Le Elastic Load Balancer d'Amazon prend en charge le protocole PROXY version 1. Cela permet au serveur derrière le répartiteur de charge de déterminer l'adresse IP source d'origine d'une connexion client.

Cependant, la spécification du protocole précise clairement dans les sections 2 et 5 que vous devez d'une manière ou d'une autre vous assurer que seuls les points de terminaison autorisés peuvent se connecter à un port prenant en charge ce protocole. Sinon, un utilisateur malveillant pourrait se connecter directement au serveur, contourner le proxy et envoyer un en-tête PROXY revendiquant n'importe quelle adresse IP source souhaitée.

Ma question est la suivante : comment faites-vous cela avec ELB ? Autant que je puisse en juger, il n'y a pas de liste fixe d'adresses IP source autorisées à se connecter à vos serveurs. Il n'y a pas moyen de restreindre un port pour que seul votre ELB puisse s'y connecter. Il semble que n'importe qui puisse créer une instance EC2 et se connecter directement à votre serveur sur le même port vers lequel le ELB effectue la mise en proxy, se faire passer pour le répartiteur de charge et prétendre se connecter depuis n'importe quelle adresse IP souhaitée.

Cela ne peut pas être correct. Qu'est-ce que j'ai manqué ?

4voto

path Points 41

Donc, vous essayez de n'autoriser les connexions à vos instances EC2 que depuis un ELB.

Vous pouvez le faire dans la console de gestion ou (comme la plupart des choses AWS) via les API. Je vais définir la méthode de la console de gestion.

Tout d'abord, nous devons déterminer le groupe de sécurité et le nom de votre ELB. Allez dans la console de gestion, sélectionnez EC2 et l'onglet Load Balancers. Choisissez votre équilibreur de charge dans la liste et allez dans l'onglet Security dans les préférences. Ici, vous verrez votre Groupe de sécurité source. Il sera probablement "amazon-elb/amazon-elb-sg" mais je vais garder cette instruction ici au cas où cela changerait à l'avenir ;-)

Ensuite, allez dans le menu Security Groups et sélectionnez le groupe que vous utilisez pour vos serveurs EC2. Ajoutez une nouvelle règle où "amazon-elb/amazon-elb-sg" (ou tout ce que votre groupe ELB était) est la Source. Assurez-vous de ne pas avoir d'autres règles entrantes pour ce port, bien que vous puissiez toujours autoriser l'accès direct à d'autres ports non couverts par l'ELB.

1voto

Willy Tarreau Points 3934

En utilisant la dernière version de haproxy, vous pouvez utiliser :

 tcp-request connection expect-proxy layer4 if *condition*

Cela activera le protocole proxy seulement pour les règles correspondant à condition. De cette façon, vous pouvez l'activer uniquement pour les nœuds ELB (à condition que vous connaissiez leurs adresses, bien sûr).

0 votes

Comment sauriez-vous leurs adresses ?

0voto

Vinnie Falco Points 101

L'interface réseau que votre serveur virtuel utilise pour communiquer autorise uniquement les connexions aux adresses IP privées (192.168.x, 172.16.x, 10.x) appartenant à d'autres serveurs virtuels gérés par le même client. Vous ne pouvez donc pas accéder arbitrairement au serveur virtuel d'un autre client en vous connectant à son adresse IP privée et port.

0 votes

Vous le pensez peut-être, mais j'ai testé avec un autre serveur dans la même zone de disponibilité mais créé sous un compte EC2 non lié. Le serveur pouvait atteindre l'adresse IP privée de l'autre serveur.

0 votes

Ce que Vinnie dit n'est vrai que si les serveurs sont situés dans un AWS VPC

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X