AWS ELB에서 IP 주소 거부 가용 영역이있는 탄력적로드 밸런서. 내

AWS에서 다음과 같이 구성했습니다.

3 개의 머신과 3 개의 서로 다른 가용 영역이있는 탄력적로드 밸런서. 내 보안 그룹은 레일 응용 프로그램 (nginx, unicorn)이므로 0.0.0.0/0:80을 허용합니다.

특정 공개 IP 주소에 대한 내 앱 액세스를 거부 할 수있는 방법이 있는지 궁금합니다. AWS 설명서를 읽었지만 SG가 “모두 거부”하므로 특정 IP 주소를 하나만 거부 할 방법이 없습니다 .

어떤 아이디어? 로드 밸런서 뒤에있는 3 개의 컴퓨터에있는 iptables?

감사!



답변

간단한 해결책은 VPC 네트워크 ACL 인바운드 규칙을 사용하는 것입니다. ELB가 VPC에있는 경우에만 작동하지만 지난 몇 년 동안 생성 한 경우 기본 상태 여야합니다.

예를 들어 1.2.3.4를 금지하려면 다음을 수행하십시오.

  1. AWS에 로그인하십시오.
  2. 로 이동하십시오 VPC.
  3. Network ACLs왼쪽 메뉴에서 선택하십시오 .
  4. ELB가있는 VPC와 관련된 ACL을 선택하십시오.
  5. Inbound Rules탭을 선택 하십시오.
  6. Edit다음 속성을 가진 새 규칙을 선택 하고 추가 하십시오 .
    • 규칙 # : 50 (모든 것을 허용하는 규칙보다 작은 숫자)
    • 유형 : 모든 트래픽
    • 프로토콜 : ALL
    • 포트 범위 : ALL
    • 출처 : 1.2.3.4/32
    • 허용 / 거부 : 거부

네트워크 ACL에 대한 자세한 정보는 여기 ( http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_ACLs.html)에 있습니다.


답변

아니요, 보안 그룹으로 IP를 차단할 수있는 옵션이 없습니다.

보안 그룹은 기본적으로 블랙리스트 대신 화이트리스트입니다.

기본적으로 모든 것이 거부되며 필요에 따라 선택적으로 포트를 열 수는 있지만 특정 사람 / IP를 차단할 수는 없습니다.

이를 위해 가장 좋은 솔루션은 세 가지 다른 머신의 IPtables입니다.

앞으로 AWS 보안 그룹에도이 기능이 있지만 현재는 아닙니다.


답변

몇 개의 IP 만 차단해야하는 경우 웹 서버에서 nginx_http_access_module 을 사용할 수 있습니다 .


답변

이를 위해 가장 좋은 솔루션은 세 가지 다른 머신의 IPtables입니다.

실제로 $remote_addrNginx 의 원격 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;

예쁘지는 않지만 도움이되기를 바랍니다.


답변