Para isso, a melhor solução é, como você disse, tabelas de IP nas três máquinas diferentes.
Na verdade, essa não é uma boa solução, pois o ip remoto ( $remote_addr
no Nginx) será do loadbalancer da Amazon. A proibição resultará na proibição de todo o tráfego encaminhado.
Você terá que inspecionar os pacotes e encontrar o X-Forwarded-For
cabeçalho HTTP , o IPtables não tem conhecimento de protocolo assim.
Eu resolvi a seguinte solução para 2 IPs impertinentes no 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;
}
Introduzindo uma variável $client_ip
, apenas para que eu também pudesse testar isso localmente, onde não há http_x_forwarded_for
disponível.
Ligeiramente offtopic, mas postando por conveniência, também adicionei o IP do cliente aos meus logs de acesso:
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;
Não é bonito, mas espero que ajude