В Amazon Web Services у меня есть экземпляр EC2 с Apache и mod_remoteip. Экземпляр находится за виртуальным частным облаком (VPC), размещенным в Elastic Load Balancer (ELB).
В конфигурационном файле mod_remoteip у меня есть:
RemoteIPTrustedProxy 172.22.64.0/20
RemoteIPTrustedProxy 172.22.80.0/20
которые являются подсетями us-west-1a и us-west-1c, в которых может находиться ELB.
В Amazon Route 53 как для MyDomain.com, так и для www.MyDomain.com у меня есть записи псевдонима A-IPv4, указывающие на ELB (пример: dualstack.my-load-balancer-1-251757805.us-west-1. elb.amazonaws.com.) Для размещенной зоны нет записей AAAA-IPv6.
Эта настройка отлично работает, позволяя моему коду легко получить доступ к IP-адресу пользователя.
Однако очень редко mod_remoteip подставляет IPv6-адрес в качестве IP-адреса пользователя. Этот адрес IPv6 вызывает проблемы в моей настройке, поскольку некоторые внешние службы, с которыми я работаю, не принимают адрес IPv6. Я должен ограничить IP-адрес IPv4.
У меня создалось впечатление, что, поскольку у меня нет записей псевдонима AAAA-IPv6 для моего домена в размещенной зоне, и что поскольку ELB в VPC используют только адреса IPv4 (http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/elb-internet-facing-load-balancers.html), что mod_remoteip никогда не должен передавать моему коду адрес IPv6. Ясно, что это не всегда так.
Мой вопрос: с помощью стандартной инфраструктуры Amazon Web Services или конфигурации Apache / mod_remoteip, есть ли способ разрешить посетителям подключаться к ELB только с использованием IPv4?
dualstack.my-load-balancer-1-251757805.us-west-1.elb.amazonaws.com
Это гибридный рекорд, способный вернуть оба A
и AAAA
ответы, независимо от того, как вы предоставляете его в своей зоне хостинга но тестирование показывает, что он будет возвращать записи только для соответствующего псевдониму типа RR, если вы используете его как цель псевдонима. Как CNAME
, конечно, это приведет к возврату любого класса записи.
Ранее я предлагал удалить dualstack.
префикс, но, как вы отметили, с записями псевдонима вы не можете удалить его, но дальнейшее тестирование показывает, что он не причиняет никакого вреда.
С CNAME
, у вас есть возможность опустить его, или, если по какой-то причине вам нужен только ipv6, вы можете добавить ipv6.
префикс вместо dualstack.
. Однако я не стану предполагать, что это имеет значение, поскольку A
псевдоним ведет себя правильно при указании на dualstack.
вход, только возвращение A
и нет AAAA
, даже если вы спросите.
Если, как вы указали, и ваше доменное имя, которое указывает на этот ELB, не имеет AAAA
настроен псевдоним, и Route 53 не отвечает никакими записями для AAAA
запрос вашего имени хоста, то наиболее вероятно, что запросы, поступающие с IPv6 X-Forwarded-For:
должны приходить без уважительной причины - они пауки, боты и т. д. и могут быть заблокированы на этом основании.
Я обычно вижу входящие запросы с одним из IP-адресов моего ELB в Host:
заголовок (а не правильное имя хоста из одного из моих доменов) или с самим именем хоста ELB в заголовке хоста. Это незаконные запросы, и я блокирую их с помощью 503 Service Unavailable
(с правилами в HAProxy, которые я обычно использую за ELB для более детального управления маршрутизацией http).
Если у вас есть законный посетитель сайта, который обращается к вам по IPv6, это требует расследования и объяснения, но я подозреваю, что трафик, который вы видите, не является «настоящим» трафиком.
Я не нашел способа фактически заблокировать его "внутри" ELB.