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