Получение сетевых IP-адресов Amazon, а не реальных IP-адресов клиентов за ALB (Xforward proto)

Привет, участники сообщества,

Я использую ALB (балансировщик нагрузки приложения) для своего сайта электронной коммерции. за балансировщиком нагрузки есть два экземпляра ec2-linux, которые получают клиентский трафик через ALB (на обоих экземплярах ec2 есть веб-сервер tomcat7).

Я использую заголовок X-Forwarded-For, чтобы получить фактический IP-адрес клиента на моих экземплярах ec2, который отлично работает с точки зрения получения IP-адреса клиента. Мои 70% клиентских IP-адресов являются фактическими клиентскими IP-адресами, которые обращаются к платежной странице моего веб-сайта (я получаю информацию о продаже продукции на моем веб-сайте электронной коммерции).

30% IP-адресов - это IP-адреса операций сети AWS, как показано ниже. Ip IP-адреса Ec2-сети 'также доступны на странице оплаты моего веб-сайта (но я не получаю распродажи с этих сетевых IP-адресов Amazon).

https://www.whois.com/whois/54.175.230.41
https://www.whois.com/whois/34.234.97.242
https://www.whois.com/whois/52.91.159.209
https://www.whois.com/whois/34.224.173.149

Пожалуйста, проверьте выше 4 примера URL-адресов здесь OrgName: Amazon Technologies Inc.

OrgTechName: сетевые операции Amazon EC2


Поэтому я не понимаю, почему я получаю IP-адреса сети Amazon (являются ли эти amazon ec2-network IP-адреса маршрутизаторами между реальным клиентом и amazon ALB ИЛИ эти IP-адреса являются IP-адресами балансировщика нагрузки вместо клиентских IP-адресов: ниже приведен мой java-код для получения IP-адреса клиента) Должен ли я заблокировать их с помощью aws waf на amazon ALB или нет. Если я заблокирую их, я потеряю фактический клиентский трафик?

ИЛИ Почему я не получаю реальный IP-адрес клиента для 30% всего трафика, когда я использую заголовок x-forward-for? Мой код Java:

public static String getClientIpAddr(HttpServletRequest request) {
    String ip = request.getHeader("X-Forwarded-For");
    if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
        ip = request.getHeader("Proxy-Client-IP");
    }
    if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
        ip = request.getHeader("WL-Proxy-Client-IP");
    }
    if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
        ip = request.getHeader("HTTP_CLIENT_IP");
    }
    if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
        ip = request.getHeader("HTTP_X_FORWARDED_FOR");
    }
    if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
        ip = request.getRemoteAddr();
    }
    return ip;
}

Я только хочу сохранить реальный IP-адрес клиента (используя заголовок x-forward), который фактически обращается к моему веб-сайту. Предоставляет ли заголовок X-Forward нулевые значения?

С уважением, Югдип

1 ответ

Решение

Эти 4 IP-адреса принадлежат Amazon. Я вижу две возможности здесь:

  1. Они не твои ELB. Я полагаю, что если они были вашим ELB, вы должны увидеть IP-адрес из своего блока CIDR VPC (посмотрите, что показывает IP-адрес для запросов проверки работоспособности, например). Вы можете проверить текущий IP-адрес ваших ELB в EC2 > Сетевые интерфейсы на консоли. Здесь вы найдете сетевые интерфейсы для всего, включая балансировщики нагрузки. Будут показаны их публичные и частные IP-адреса. Убедитесь, что эти IP-адреса не отображаются нигде в этом списке, чтобы подтвердить, что они не принадлежат вам.
  2. Если они являются вашими IP-адресами ELB, то, возможно, ваш код получает общедоступный IP-адрес ваших проверок здоровья ELB, дважды проверьте, на какую страницу попадает ваша проверка здоровья.
Другие вопросы по тегам