Wie man den Flask dev Server auf nur eine IP Adresse beschränkt

7

Ich entwickle eine Webseite mit dem Python Flask-Framework und mache jetzt ein paar Devving, indem ich meine Änderungen an einen entfernten Dev-Server weitergebe . Ich habe diesen Remote-Dev-Server eingerichtet, um die Website öffentlich mit app.run(host='0.0.0.0') zu bedienen.

Das funktioniert gut, aber ich möchte nicht, dass andere Leute meine Website noch sehen. Aus diesem Grund möchte ich irgendwie meine IP-Adresse whitelist, so dass der Dev-Server nur die Website zu meiner eigenen IP-Adresse dient und keine Antwort, 404 oder irgendeine andere nicht nützliche Antwort auf andere IP-Adressen gibt. Ich kann natürlich den Server einrichten, um Apache oder Nginx zu verwenden, um die Website tatsächlich zu bedienen, aber ich mag das automatische Neuladen der Website auf Codeänderungen für das Entwickeln meiner Website

Weiß jemand also eine Möglichkeit, dies mit dem eingebauten Flask-Dev-Server zu tun? Alle Tipps sind willkommen!

    
kramer65 07.03.2014, 13:11
quelle

2 Antworten

24

Wenn Sie nur die Funktionen von Flask verwenden, können Sie ein verwenden before_request() hook testet das Attribut request.remote_addr :

%Vor%

Die Verwendung einer Firewall-Regel auf dem Server ist jedoch wahrscheinlich die sicherere und stabilere Option.

Beachten Sie, dass die Remote_Addr maskiert werden kann, wenn sich zwischen dem Browser und Ihrem Server ein Reverse-Proxy befindet; Sei vorsichtig, wie du das einschränkst und dich nicht aussperren. Wenn der Proxy in der Nähe des Servers selbst (wie ein Lastenausgleich oder Front-End-Cache) lebt, können Sie die request.access_route list , um auf die tatsächliche IP-Adresse zuzugreifen. Tun Sie dies nur, wenn remote_addr selbst auch eine vertrauenswürdige IP-Adresse ist :

%Vor%     
Martijn Pieters 07.03.2014, 13:18
quelle
3

IMHO Obwohl Sie das erwartete Ergebnis mit der obigen Lösung leicht erreichen können, sollte dieses Problem auf der Netzwerkebene des Betriebssystems behandelt werden. p>

Um Datenverkehr von einer beliebigen Quelle zu einem bestimmten Port auf Ihrem Server zu verweigern / zuzulassen, handelt es sich um eine Aufgabe für die Firewall des Betriebssystems. Die Pakete und ihre Quellen (IP-Adressen) müssen auf der Netzwerkebene Ihres Betriebssystems im Kernel Land behandelt werden und dürfen nicht an Ihre Anwendung weitergeleitet werden. Wenn auf Ihrem Server keine Firewall ausgeführt wird, muss eine Firewall konfiguriert sein, um Ihren Server zu schützen, obwohl Ihr Server noch nicht in Produktion ist.

Hier ist der Gedankengang: in Anbetracht der Tatsache, dass die Pakete, die auf Ihren Server kommen, zuerst die Analyse des Kernels Ihres Betriebssystems durchlaufen (nehmen Sie an, dass Sie ein Unix-artiges oder GNU / Linux-ähnliches Betriebssystem), können Sie die eingehenden Verbindungen zur Netzwerkschicht aus Kernel's Land mit verweigern / zulassen umgehen. Verwenden Sie dazu eine Paketfilter-Software wie Netfilter , die in der Regel über IPTABLES verwaltet werden.

Hier ist eine Netfiler-Regel, die Ihre Bedürfnisse erfüllt:

%Vor%
  • Der gesamte Verkehr, der zum Port 80 kommt, wird gelöscht, mit Ausnahme der Verbindungen, die von Ihre_ip_Adresse kommen.

Das Prinzip der Filterung / Blockierung eingehender Verbindungen / Pakete auf der Netzwerkschicht des Betriebssystems wird in gewisser Weise für die Microsoft-Betriebssysteme angewendet, aber ich bin mir nicht sicher. Ich habe nie darüber recherchiert, wie die Windows-Firewall mit der Paketfilterung umgeht, aber es gibt gute Chancen, dass sie auf sehr ähnliche Weise funktioniert.

Also, hier ist ein letzter Gedanke:

  

Pakete müssen auf der Netzwerkschicht Ihres Betriebssystems behandelt werden. Machen   Lass die Pakete nicht zu deiner Anwendung kommen: es ist sicherer und   Verteilt den Job an die richtigen Parteien auf Ihrem System.

     

Der Linux Kernel und seine Module (Netfilter) sind viel zuverlässiger, kompetenter und   effektiv, um diese Art von Problemen zu behandeln, als Flask.

Denken Sie daran, diese gute Praxis;).

    
ivanleoncz 30.06.2016 20:52
quelle

Tags und Links