답변:
간단한 해결책은 VPC 네트워크 ACL 인바운드 규칙을 사용하는 것입니다. ELB가 VPC에있는 경우에만 작동하지만 지난 몇 년 동안 생성 한 경우 기본 상태 여야합니다.
예를 들어 1.2.3.4를 금지하려면 다음을 수행하십시오.
VPC
.Network ACLs
왼쪽 메뉴에서 선택하십시오 .Inbound Rules
탭을 선택 하십시오.Edit
다음 속성을 가진 새 규칙을 선택 하고 추가 하십시오 .
네트워크 ACL에 대한 자세한 정보는 여기 ( http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_ACLs.html)에 있습니다.
몇 개의 IP 만 차단해야하는 경우 웹 서버에서 nginx_http_access_module 을 사용할 수 있습니다 .
이를 위해 가장 좋은 솔루션은 세 가지 다른 머신의 IPtables입니다.
실제로 $remote_addr
Nginx 의 원격 IP 가 Amazon의로드 밸런서에서 제공되므로 좋은 솔루션이 아닙니다 . 금지하면 모든 트래픽 전달이 금지됩니다.
패킷을 검사하고 HTTP X-Forwarded-For
헤더를 찾아야합니다 . IPtables는 프로토콜을 인식하지 못합니다.
Nginx에서 2 개의 장난 꾸러기 IP에 다음 솔루션을 정착했습니다.
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;
}
변수를 소개하여 사용할 수 $client_ip
없는 곳에서 로컬로 테스트 할 수도 http_x_forwarded_for
있습니다.
약간의 주제가 있지만 편의를 위해 게시하면서 클라이언트 IP를 액세스 로그에 추가했습니다.
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;
예쁘지는 않지만 도움이되기를 바랍니다.