web-dev-qa-db-fra.com

Deny Adresse IP sur AWS ELB

J'ai, plus ou moins, après la configuration sur AWS:

Équilibreur de charge élastique avec 3 machines O 3 Zones de disponibilité différentes. Mon groupe de sécurité permet de 0.0.0.0/0:80 comme c'est mon Rails Application (Nginx, Licorne).

Je me demandais s'il y a un moyen de refuser l'accès à mon application à une adresse IP publique spécifique? J'ai lu une documentation AWS, mais comme SG's's's's "nier tout", il n'y a aucun moyen de nier juste une adresse IP spécifique.

Des idées? iptables sur les 3 machines derrière l'équilibreur de charge?

Merci!

8
boris quiroz

Une solution à terme simplifiée consiste à utiliser une règle entrante du réseau VPC. Cela ne fonctionne que si votre ELB est dans un VPC, mais si vous l'avez créé au cours des dernières années, cela devrait être par défaut.

Pour interdire 1.2.3.4, par exemple, procédez comme suit:

  1. Connectez-vous à AWS.
  2. Accédez à VPC.
  3. Choisir Network ACLs Dans le menu de gauche.
  4. Choisissez l'ACL associé au VPC que votre ELB est dans.
  5. Choisir la Inbound Rules onglet.
  6. Choisissez Edit et ajoutez une nouvelle règle avec les attributs suivants: [.____]
    • Règle n °: 50 (n'importe quel nombre aussi longtemps que c'est inférieur à la règle qui permet de tout)
    • Type: Tout le trafic
    • Protocole: tout
    • Gamme de ports: Tous
    • Source: 1.2.3.4/32
    • Autoriser/refuser: refuser

Il y a une tasse de plus d'informations sur les ACL de réseau ici: http://docs.aws.amazon.com/amazonvpc/latest/userguide/vpc_acls.html

15
Tama

Pour cela, la meilleure solution est, comme vous l'avez dit, iptables sur les 3 machines différentes.

En fait, ce n'est pas une bonne solution que l'IP distante ($remote_addr à NGinx) sera de l'albancier d'Amazon. L'interdiction qui aboutira à tout le trafic transmis à être banni.

Vous devrez inspecter les paquets et trouver le HTTP X-Forwarded-For En-tête, IPtables n'est pas conscient du protocole comme ça.

Je me suis installé pour la solution suivante à 2 ips coquine à 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;
}

Introduire une variable $client_ip, pour que je puisse aussi tester cela localement, où il n'y a pas http_x_forwarded_for disponible..

Légèrement offtopic mais postant pour plus de commodité, j'ai également ajouté que le client IP à mes journaux d'accès:

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;

Ce n'est pas joli, mais j'espère que cela aide

1
kvz

Non, il n'y a pas d'option pour bloquer IPS avec groupe de sécurité.

Le groupe de sécurité est essentiellement une liste blanche, au lieu de la liste noire.

Tout est refusé par défaut et vous pouvez ouvrir sélectivement les ports en fonction de vos besoins, mais vous ne pouvez bloquer aucune personne/adresse IP spécifique.

Pour cela, la meilleure solution est, comme vous l'avez dit, iptables sur les 3 machines différentes.

Je suis sûr que des groupes de sécurité AWS auront également cette fonctionnalité, mais pas à ce jour.

1
Napster_X