Negar endereço IP no AWS ELB

3

Eu, mais ou menos, seguindo a configuração na AWS:

Balanceador de carga elástico com 3 máquinas ou 3 zonas de disponibilidade diferentes. Meu grupo de segurança permite 0.0.0.0/0:80 como é meu aplicativo de trilhos (nginx, unicornio).

Eu queria saber se existe alguma maneira de negar acesso ao meu aplicativo para um endereço IP público específico? Eu tenho lido a documentação da AWS, mas como os SGs são "negar tudo", não há como negar apenas um endereço IP específico.

Alguma ideia? iptables nas 3 máquinas por trás do balanceador de carga?

Obrigado!

    
por boris quiroz 04.01.2013 / 09:54

4 respostas

5

Uma solução direta é usar uma regra de entrada de ACL da rede VPC. Isso só funciona se o seu ELB estiver em um VPC, mas se você o criou nos últimos anos, ele deve estar no padrão.

Para banir o 1.2.3.4, por exemplo, faça o seguinte:

  1. Faça login na AWS.
  2. Navegue até VPC .
  3. Escolha Network ACLs no menu à esquerda.
  4. Escolha a ACL associada ao VPC em que seu ELB está.
  5. Escolha a guia Inbound Rules .
  6. Escolha Edit e adicione uma nova regra com os seguintes atributos:
    • Regra #: 50 (qualquer número, desde que seja menor que a regra que ALLOWs de ALL)
    • Tipo: TODOS os tráfegos
    • Protocolo: ALL
    • Intervalo de portas: TODOS
    • Fonte: 1.2.3.4/32
    • Permitir / Negar: DENY

Há mais informações sobre as ACLs de rede aqui: link

    
por 08.02.2017 / 21:32
2

Não, não há opção para bloquear IPs com grupo de segurança.

O grupo de segurança é essencialmente uma lista branca, em vez de uma lista negra.

Tudo é negado por padrão e você pode abrir as portas seletivamente de acordo com sua necessidade, mas não pode bloquear nenhuma pessoa / ip específica.

Para isso, a melhor solução é, como você disse, IPtables nas 3 máquinas diferentes.

Tenho certeza de que, no futuro, os grupos de segurança da AWS também terão essa funcionalidade, mas não a partir de agora.

    
por 04.01.2013 / 12:34
1

Se você precisar apenas colocar alguns IPs na lista negra, provavelmente poderá usar o nginx_http_access_module no seu servidor web.

    
por 04.01.2013 / 13:27
1

For that, the best solution is, as you said, IPtables at the 3 different machines.

Na verdade, essa não é uma boa solução, já que o ip remoto ( $remote_addr in Nginx) será do loadbalancer da Amazon. Banimento que fará com que todo o tráfego encaminhado seja banido.

Você terá que inspecionar os pacotes e encontrar o cabeçalho HTTP X-Forwarded-For , o IPtables não está ciente do protocolo assim.

Eu decidi a seguinte solução para 2 IPs maliciosos 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 , só para que eu também possa testar isso localmente, onde não há http_x_forwarded_for disponível ..

Ligeiramente offtópico, mas postando por conveniência, eu 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

    
por 03.07.2014 / 11:23