Verweigern Sie die IP-Adresse in AWS ELB

8

Ich habe mehr oder weniger folgende Konfiguration in AWS:

Elastischer Lastausgleich mit 3 Maschinen oder 3 verschiedenen Verfügbarkeitszonen. Meine Sicherheitsgruppe erlaubt 0.0.0.0/0:80, da es sich um meine Rails-Anwendung handelt (Nginx, Einhorn).

Ich habe mich gefragt, ob es eine Möglichkeit gibt, den Zugriff auf meine App auf eine bestimmte öffentliche IP-Adresse zu verweigern. Ich habe die AWS-Dokumentation gelesen, aber da SGs "Alle ablehnen" sind, gibt es keine Möglichkeit, nur eine bestimmte IP-Adresse zu verweigern .

Irgendwelche Ideen? iptables auf den 3 Maschinen hinter Load Balancer?

Vielen Dank!

boris quiroz
quelle

Antworten:

15

Eine einfache Lösung ist die Verwendung einer eingehenden VPC-Netzwerk-ACL-Regel. Dies funktioniert nur, wenn sich Ihre ELB in einer VPC befindet. Wenn Sie sie jedoch in den letzten Jahren erstellt haben, sollte sie die Standard-VPC sein.

Gehen Sie wie folgt vor, um beispielsweise 1.2.3.4 zu verbieten:

  1. Melden Sie sich bei AWS an.
  2. Navigieren Sie zu VPC.
  3. Wählen Sie Network ACLsaus dem linken Menü.
  4. Wählen Sie die ACL aus, die der VPC zugeordnet ist, in der sich Ihre ELB befindet.
  5. Wählen Sie die Inbound RulesRegisterkarte.
  6. Wählen EditSie eine neue Regel mit den folgenden Attributen aus und fügen Sie sie hinzu:
    • Regel #: 50 (eine beliebige Zahl, solange sie kleiner ist als die Regel, die ALL zulässt)
    • Typ: ALL Verkehr
    • Protokoll: ALL
    • Port Range: ALL
    • Quelle: 1.2.3.4/32
    • Zulassen / Verweigern: VERWEIGERN

Weitere Informationen zu Netzwerk-ACLs finden Sie hier: http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_ACLs.html

Tama
quelle
1

Nein, es gibt keine Option zum Blockieren von IPs mit Sicherheitsgruppen.

Die Sicherheitsgruppe ist im Wesentlichen eine weiße Liste anstelle einer schwarzen Liste.

Standardmäßig wird alles abgelehnt, und Sie können Ports je nach Bedarf selektiv öffnen, aber Sie können keine bestimmten Personen / IP-Adressen blockieren.

Die beste Lösung dafür sind, wie Sie sagten, IPtables auf den drei verschiedenen Computern.

Ich bin mir sicher, dass AWS-Sicherheitsgruppen in Zukunft auch diese Funktionalität haben werden, aber noch nicht.

Napster_X
quelle
1

Wenn Sie nur einige IPs auf die schwarze Liste setzen müssen, können Sie wahrscheinlich nginx_http_access_module auf Ihrem Webserver verwenden.

Sebastian Cruz
quelle
Das Hauptproblem dabei ist, dass ich herausfinden muss, wie es "automatisch" gemacht wird, da alle meine Konfigurationen von Chef verwaltet werden. Ich brauche so etwas wie Fail2Ban oder Denyhost, um einer Chef-Konfiguration zu sagen, dass sie einige IP-Adressen blockieren soll ...
Boris Quiroz
1

Die beste Lösung dafür sind, wie Sie sagten, IPtables auf den drei verschiedenen Computern.

Eigentlich ist das keine gute Lösung, da die Remote-IP ( $remote_addrin Nginx) vom Loadbalancer von Amazon stammt. Ein Verbot, das dazu führt, dass der gesamte weitergeleitete Verkehr gesperrt wird.

Sie müssen die Pakete überprüfen und den HTTP- X-Forwarded-ForHeader finden. IPtables ist nicht protokollbewusst.

Ich entschied mich für die folgende Lösung für 2 ungezogene IPs in 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;
}

Einführung einer Variablen $client_ip, damit ich diese auch lokal testen kann, wo keine http_x_forwarded_forverfügbar ist.

Etwas offtopisch, aber der Einfachheit halber postend, habe ich diese Client-IP auch zu meinen Zugriffsprotokollen hinzugefügt:

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;

Es ist nicht schön, aber ich hoffe, es hilft

kvz
quelle