Para eso, la mejor solución es, como usted dijo, IPtables en las 3 máquinas diferentes.
En realidad, esa no es una buena solución, ya que la IP remota ( $remote_addr
en Nginx) será del equilibrador de carga de Amazon. Prohibición que resultará en la prohibición de todo el tráfico reenviado.
Tendrá que inspeccionar los paquetes y encontrar el X-Forwarded-For
encabezado HTTP , IPtables no es consciente del protocolo de esa manera.
Me conformé con la siguiente solución para 2 IP traviesas en Nginx
set $client_ip $remote_addr;
if ($http_x_forwarded_for) {
set $client_ip $http_x_forwarded_for;
}
if ($client_ip = "123.123.123.123") {
return 403;
}
if ($client_ip = "123.123.123.234") {
return 403;
}
Introduciendo una variable $client_ip
, solo para que también pueda probar esto localmente, donde no hay http_x_forwarded_for
disponible ...
Ligeramente fuera de tema pero publicado por conveniencia, también agregué esa ip del cliente a mis registros de acceso:
log_format main "\$client_ip - \$remote_user [\$time_local] \"\$request\" \$status \$body_bytes_sent \"\$http_referer\" \"\$http_user_agent\"";
access_log /var/log/nginx.access.log main;
No es bonito, pero espero que ayude