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!
Wenn Sie nur die Funktionen von Flask verwenden, können Sie ein verwenden before_request()
hook testet das Attribut request.remote_addr
:
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 :
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%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;).
Tags und Links python flask ip-address