Python Private Network

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
ippurk
User
Beiträge: 61
Registriert: Mittwoch 8. Juli 2009, 20:40

Hallo zusammen,

nach langer Zeit kommt mir nun auch mal wieder Python unter die Finger.

Ich habe den Plan, ein sicheres Netzwerk zwischen verschiedenen Python-"Maschinen" aufzubauen.

In diesem Netzwerk soll es möglich sein, daß Pythonprogramme miteinander kommunizieren, um Steuerbefehle (keine Echtzeit) und Dateien bis ca. 20MB Größe zu übertragen. Einige Dinge laufen automatisiert zwischen den im Netzwerk eingebundenen Computern ab, andere sollen über einen "zentralen Control-Server", der über ein in Django geschriebenes Interface verfügt, steuer- und abrufbar sein.
Die Verbindungen sollten eine hohe Sicherheit aufweisen, sämtlicher Datenverkehr muß verschlüsselt sein.

Meine Frage: In welche Richtung muss ich lesen ? Welche Techniken kommen hier in Frage ?
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Ich würde ja mal mit HTTPS anfangen.
BlackJack

Man muss sich auch immer klar sein dass es nichts *sicheres* gibt, sondern nur verschiedene Abstufungen von Sicherheit/Unsicherheit. SSL ist zum Beispiel eine übliche Verschlüsselung für Daten die über das Netz gehen (HTTPS, FTPS, …), man muss sich aber auch im Klaren über die Schwachstellen sein. Auch recht alte Algorithmen in SSL enthalten, Schlüssellängen, wenn die NSA mit liest — ist das ein Problem oder egal… :-)
ippurk
User
Beiträge: 61
Registriert: Mittwoch 8. Juli 2009, 20:40

ok, die NSA muß mir im Moment egal sein, anscheinend kommen die ja sowieso in nahezu alles rein...

Leider ist dieses Verschlüsselungsthema für mich auch recht neu. VPN, SSH, SSL, HTTPS, SFTP hört sich für mich im Moment alles ganz toll an, das wars dann aber auch erst mal so grob.

Meine Frage zielt auch eher darauf ab, wie konkrete Pythonlösungen für so ein Problem aussehen könnten.

Meine Überlegung bisher war, über eine "relativ" gesicherte Verbindung (was für eine auch immer dann zur Anwendung kommt) einen Webservice wie jsonrpc zu verwenden, um die Steuerbefehle und Statusmeldungen zu übertragen und zusätzlich mit ftp-Verbindungen die Daten zu schicken.

Geht das in die richtige Richtung ?
BlackJack

@ippurk: Wäre auch meine erste Überlegung nur das ich die Dateien auch über HTTPS laufen lassen würde.
ippurk
User
Beiträge: 61
Registriert: Mittwoch 8. Juli 2009, 20:40

ok, also in meiner Vorstellung sieht das als Kette ungefähr so aus (correct me if iam wrong...):

Python auf Client -> jsonrpc in HTTPS-Request verpacken ?? -> HTTPS über Internet -> Apache -> mod_wsgi -> Python auf Server

und das Ganze nochmal andersrum, damit beide beteiligten Rechner jederzeit aktiv werden können.
BlackJack

@ippurk: Ja, so ungefähr. Wobei man den Apache/mod_wsgi vielleicht auch durch etwas ”kleineres” ersetzen kann wenn man das nicht auf jedem Rechner installieren möchte. Kommt halt drauf an was ein „Client” ist. :-)
ippurk
User
Beiträge: 61
Registriert: Mittwoch 8. Juli 2009, 20:40

also diese Apache-Variante kommt mir auch etwas groß vor. Es gibt eigentlich immer nur eine Handvoll Verbindungen, Steuerbefehle kommen vielleicht mal alle paar Tage vor, der Datentransfer könnte dann aber schon so konstante 10MB/min betragen.

Was gibt es denn für kleine Alternativen zu Apache / mod_wsgi ? Kann man da Python selber als Server benutzen ?

Für die jsonrpc-Sache, was ist da so angezeigt ? bjsonrpc ?
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

Bei wenig Verbindungen und praktisch keinen statischen Daten weiß ich nicht, was Apache groß machen soll. Reine Pythonserver bringen fast alle Frameworks mit, zum Beispiel Flask oder Bottle.
ippurk
User
Beiträge: 61
Registriert: Mittwoch 8. Juli 2009, 20:40

hm, vielleicht verstehe ich da noch etwas falsch, aber ich suche ja eigentlich nicht nach einem Webframework, da bin ich mit Django schon genug beschäftigt.

Es geht eher um "machine-to-machine-communication".

Es gibt zwar eine zentrale Einheit, auf der eine Djangoseite läuft, die auch diverse andere Aufgaben erfüllt, aber in erster Linie gibt es ein Netzwerk aus z.B. 10 Computern, die an diesem einen Zentralserver hängen und an diesen 10 "outstations" hängen je wieder eine Handvoll Rechner. Also sozusagen so: 1 Masterserver -> 10 Verteilerserver -> je 5 Ausführungsserver.

Ein "Ausführungsserver" erfasst autark Daten, z.B. Wetterdaten, die zur Datensicherung erst einmal über ein lokales WLan o.ä. auf dem Verteiler zwischengespeichert werden, der aber auch steuernd eingreifen kann. Besteht die Internetverbindung zwischen Verteiler und Master (was nicht immer der Fall ist), sollen die Messdaten hochgeladen und weiterverarbeitet werden. Es muss möglich sein, daß jeder mit jedem (ähem) reden kann, daß also auch vom Zentralserver Zugriff auf alle einzelnen Teilnehmer möglich ist, damit Konfigurationen angepasst werden können etc.

Also, vielleicht könnte man sagen, daß die "Datenerfassungsrechner" irgendwo auf einem Feld rumstehen.

Da jetzt mit einem riesen Webframework rumzuhantieren, wenn es eigentlich gar keine Websites gibt, sondern nur Steuerbefehle und Daten, kommt mir übertrieben vor.
BlackJack

@ippurk: Welche Riesenwebrahmenwerke? Schau Dir Bottle oder Flask doch mal an. Bottle ist *ein* Python-Modul. Flask ist etwas modularer aufgebaut, aber beide fallen in die Kategorie Mikrorahmenwerk.
ippurk
User
Beiträge: 61
Registriert: Mittwoch 8. Juli 2009, 20:40

ok, Flask und Bottle sehen auf jeden Fall gut aus.

Allerdings scheinen bei beiden die mitgelieferten Server keine Client-Authentication mit SSL zu unterstützen, was dann doch notwendig wäre. Jetzt bin ich auf twisted als Serverlösung gestoßen... ist das eine sinnvolle Alternative ? In dem Zusammenhang gibts da auch noch txjsonrpc, ist das was ?
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Die mitgelieferten Server bei Flask und Bottle dienen auch ausschliesslich zur Entwicklung, wobei der Flask Server durchaus auch SSL unterstützt. In der Praxis würde man z.B. Nginx nehmen um statische Dateien auszuliefern und SSL zu machen und alles weitere an einen WSGI Server wie gunicorn abgeben.
Dami123
User
Beiträge: 225
Registriert: Samstag 23. Februar 2013, 13:01

Wenn du weißt was du brauchst, könntest du auch im Internet danach suchen ;)

Github hat mir das ausgespuckt bottle-ssl.
Der Beschreibung zufolge passend. Und nicht das einzige Suchergebnis.
ippurk
User
Beiträge: 61
Registriert: Mittwoch 8. Juli 2009, 20:40

@Dami123: es geht tatsächlich darum, daß ich noch nicht so genau weiß, was ich brauche, um alles umsetzen zu können. Darauf bezieht sich ja auch meine Frage in erster Linie. Leider fällt es mir oft recht schwer, bei den ganzen Sidepackages von Python eine Art Überblick zu bekommen.

Bei meiner "Suche im Internet" nach Bottle und SSL ist mir wohl tatsächlich entgangen, daß SSL mit ein paar Tricks auch unterstützt wird...aber danke für den Hinweis, ich werde das mal weiter ergründen.

@DasIch: Verstehe ich das richtig, daß gunicorn unabhängig von Nginx arbeitet, ich also 2 Server parallel laufen hätte ?

Hat vielleicht noch jemand etwas zu "Twisted" zu sagen ? Ich habe versucht, den Umfang dieses Paketes zu verstehen, aber so ganz klar geworden ist mir noch nicht, wofür man das einsetzt.
Antworten