Untuk itu, solusi terbaik adalah, seperti yang Anda katakan, IPtables di 3 mesin yang berbeda.
Sebenarnya, itu bukan solusi yang baik karena ip jarak jauh ( $remote_addr
di Nginx) akan berasal dari loadbalancer Amazon. Larangan yang akan mengakibatkan semua lalu lintas diteruskan dilarang.
Anda harus memeriksa paket-paket dan menemukan X-Forwarded-For
header HTTP , IPtables tidak menyadari protokol seperti itu.
Saya setuju untuk solusi berikut untuk 2 IP nakal di 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;
}
Memperkenalkan variabel $client_ip
, hanya supaya saya juga bisa menguji ini secara lokal, di mana tidak ada yang http_x_forwarded_for
tersedia ..
Sedikit offtopic tetapi memposting untuk kenyamanan, saya juga menambahkan ip klien ke log akses saya:
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;
Itu tidak cantik, tapi harap itu membantu