2016-08-08 55 views
1

Ich habe eine Django App, die Apache und mod_wsgi auf einer EC2 Instanz hinter einem AWS ELB Balancer verwendet. Der Balancer ordnet den SSL-Datenverkehr (Port 443) dem Port 8080 auf der EC2-Instanz zu. Apache verfügt über einen auf Port 8080 konfigurierten VirtualHost, um die Django-App zu bedienen, wobei ServerName auf den Domain-Namen der Website eingestellt ist. Django läuft im Produktionsmodus (DEBUG = False) und stellt unter anderem einen healtcheck-Endpunkt (at/healtcheck) zur Verfügung. Die Einstellung ALLOWED_HOSTS wird auf den Domänennamen für die Website sowie auf die private IP-Adresse der EC2-Instanz festgelegt, damit der Load Balancer den Endpunkt des Healthchecks erreichen kann.Django HTTP_HOST Fehler auf AWS EC2 hinter Load Balancer

Mit dieser Konfiguration funktioniert alles einwandfrei. Das Problem ist, dass ich mit Fehlermeldungen wie diese gelegentliche Ausbrüche von E-Mails von Django halten Empfang: ERROR (EXTERNAL IP): Invalid HTTP_HOST header: '52.51.147.134'. You may need to add u'52.51.147.134' to ALLOWED_HOSTS. Die Header enthalten auch HTTP_X_FORWARDED_FOR = '139.162.13.205'

ich verschiedene IP-Adressen (und manchmal Host-Namen), der Zugehörigkeit zu Skript-Kiddies, nehme ich an .

Wie kann ich verhindern, dass dieser Datenverkehr jemals die Django-App erreicht, während gültiger Datenverkehr (HTTP_HOST ist mein Domänenname) und ELB heartcheck-Datenverkehr (wo ist HTTP_HOST meine private IP-Adresse) zulässig ist?

+0

Wenn ich richtig verstehe, ist das nur lästig, Sie haben keine anderen negativen Auswirkungen? Wie auch immer, Sie sollten in der Lage sein, dies einfach in Apache zu filtern, aber es wäre nützlich, wenn Sie Apache-Version und aktuelle VirtualHost .conf –

Antwort

1

Ich würde vorschlagen, dass Sie Verkehr auf Ihrer EC2-Instanz nur vom Load Balancer mit einer Sicherheitsgruppe UND die IP-Adresse Ihres Büros/Haus erlauben, wenn Sie SSH in die EC2-Instanz.

http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/elb-security-groups.html#elb-vpc-instance-security-groups

Dies wird die Script-Kiddies vom Schlagen der EC2-Instanz direkt stoppen, das ist angezeigt, was hier geschieht.

+1

bereitstellen könnten, die ich bereits getan habe. Port 8080-Datenverkehr ist nur auf die Sicherheitsgruppe des Load Balancer beschränkt. Port 22 (SSH) Verkehr ist offen für die Welt, aber das ist nicht das Problem. Der unerwünschte Verkehr kommt durch den Load Balancer. –

+1

Es sieht so aus, als ob Sie diesem Fehler https://code.djangoproject.com/ticket/19866 ausgeliefert sind, aber er wurde vor langer Zeit behoben. Welche Version von Django benutzt du? Jemand muss das HTTP_HOST spoofen und das sollte jetzt eine 400 zu ihnen zurückgeben und keine E-Mail an Sie wegen eines 500 Fehlers senden – nkhumphreys

+1

Ich benutze Django 1.10. Das Verhalten scheint mit diesem Fehler zusammen zu hängen. Es sieht so aus, als wäre der Fehler tatsächlich behoben worden, und der zurückgegebene Antwortcode ist 400, aber eine Sicherheitsausnahme wird immer noch protokolliert, sodass ich (als Administrator) eine E-Mail erhalte. Jetzt kann ich sicherlich mit der Logging-Konfiguration herumspielen, um das zu deaktivieren, aber es wäre schön, wenn ich diesen Traffic filtern könnte, bevor er überhaupt Django erreicht. Danke trotzdem, das war nützlich. –