Đối với điều đó, giải pháp tốt nhất là, như bạn đã nói, IPtables tại 3 máy khác nhau.
Trên thực tế, đó không phải là một giải pháp tốt vì ip từ xa ( $remote_addr
trong Nginx) sẽ là từ bộ cân bằng tải của Amazon. Cấm điều đó sẽ dẫn đến tất cả lưu lượng chuyển tiếp bị cấm.
Bạn sẽ phải kiểm tra các gói và tìm X-Forwarded-For
tiêu đề HTTP , IPtables không nhận thức được giao thức như thế.
Tôi giải quyết cho giải pháp sau đây cho 2 IP nghịch ngợm ở 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;
}
Giới thiệu một biến $client_ip
, để tôi cũng có thể kiểm tra biến này tại địa phương, nơi không http_x_forwarded_for
có sẵn ..
Hơi khó chịu nhưng đăng để thuận tiện, tôi cũng đã thêm ip khách hàng đó vào nhật ký truy cập của mình:
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ó không đẹp, nhưng hy vọng nó sẽ giúp