J'ai un ensemble de serveurs Nginx derrière un équilibreur de charge Amazon ELB. J'utilise set_real_ip (du HttpRealIpModule ) afin de pouvoir accéder à l'adresse IP du client d'origine sur ces serveurs (pour passer à php-fpm et pour l'utiliser dans le HttpGeoIPModule ).
Il semble que set_real_ip_from
dans la configuration nginx ne peut accepter qu'une adresse IP. Cependant, en ce qui concerne les machines ELB, Amazon dit:
Remarque: Étant donné que l'ensemble des adresses IP associées à un LoadBalancer peut changer au fil du temps, vous ne devez jamais créer un enregistrement "A" avec une adresse IP spécifique. Si vous souhaitez utiliser un nom DNS convivial pour votre LoadBalancer au lieu du nom généré par le service Elastic Load Balancing, vous devez créer un enregistrement CNAME pour le nom DNS LoadBalancer, ou utiliser Amazon Route 53 pour créer une zone hébergée. Pour plus d'informations, consultez Utilisation des noms de domaine avec l'équilibrage de charge élastique
Mais si je dois entrer une adresse IP, je ne peux pas utiliser un CNAME (amazon ou le mien). Y at-il une solution à ce problème?
10.0.0.1/8
cela fonctionnerait bien qu'il puisse y avoir quelque chose de plus spécifique)La meilleure pratique actuelle consiste à utiliser le VPC, vous connaîtrez donc le CIDR exact pour votre ELB. Ensuite, vous pouvez ajouter quelque chose comme ceci à votre fichier de configuration Nginx:
la source
Utilisez le VPC CIDR pour
set_real_ip_from
Vous pouvez le trouver dans la console Amazon sous VPC => Votre VPC (remplacez-<your VPC CIDR here>
le):la source
La définition de la plage de confiance sur 0.0.0.0/0 sur Amazon ELB va certainement vous causer des ennuis. Vous pouvez garantir que les demandes proviennent de l'ELB si vous pouvez configurer le groupe de sécurité pour votre serveur nginx, mais la demande d' origine proviendra de n'importe quelle source possible (les Amazon ELB sont des interfaces publiques).
Un test simple révélera ceci:
Les journaux de votre serveur nginx afficheront alors 1.2.3.4 comme la véritable IP, qui est une adresse usurpée. Voir Plage IP pour IP privée interne d'Amazon ELB pour de meilleures réponses.
la source
Le realip_module indique qu'en cas de X-Forwarded-For, ce module utilise la dernière adresse IP dans l'en-tête X-Forwarded-For pour le remplacement. Ce module ne fonctionnera pas uniquement
real_ip_header
etset_real_ip_form
est défini. En effet, ce module utilisera une adresse IP proxy au lieu d'une adresse IP client. Pour résoudre cettereal_ip_recursive
directive doit être activée.De plus, si vous avez des certificats SSL qui sont déployés et renouvelés sur l'instance (comme par exemple les certificats letsencrypt ou certbot). Ces autorités de certification peuvent essayer de valider ces certificats via IPV6.
Il est donc important d'avoir également IPV6. Le fichier de configuration Nginx doit donc également contenir l'adresse IPV6 set_real_ip_from.
si des restrictions de sécurité supplémentaires s'appliquent, nous pouvons également avoir besoin d'inclure
set_real_ip_from
VPC CIDR (IPV4 et IPV6) pour les sous-réseaux cloudfront / elb / ec2.la source