2010-07-06 22 views
8

Ist es möglich, eine Firewall in Python zu schreiben? Soll es den gesamten Verkehr blockieren?Ist es möglich, eine Firewall in Python zu schreiben?

+2

Für welches Betriebssystem? Python muss mit dem Netzwerk-Stack des Kernels arbeiten. – mcandre

+4

Er hat das nicht spezifiziert, also mach weiter und antworte ja;) – Konerak

+0

Warum willst du das? sind Sie sich bewusst, dass Sie eine Schicht von ** C ** zwischen Python und tatsächlichen Netzwerkaufrufe auf dem Rechner haben (Assembly) –

Antwort

16

Ja, ja ist es.

Ich habe einige Python-Code, der mit Linux Iptables interagiert, um Firewall-Aufgaben mit Nfqueue durchzuführen. Ich kann eine Regel in iptables verwenden, die wie folgt aussieht:

iptables -A INPUT -j NFQUEUE --queue-num 1 

und dann einige Python-Code, der wie folgt aussieht:

import nfqueue 
from dpkt import ip 

q = None 

def cb(dummy, payload): 
    # make decision about if the packet should be allowed. in this case, drop everything: 
    payload.set_verdict(nfqueue.NF_DROP) 

q = nfqueue.queue() 
q.open() 
q.bind() 
q.set_callback(cb) 
q.create_queue(1) 

q.try_run() 

Hier ist ein schönes aufzuschreiben, dass der obige Code basiert auf:

http://blog.yancomm.net/2011/05/nfqueue-packet-mangling-with-python.html

+1

Aber was ist mit Python auf Windows? –

3

Ich bin mir sicher, es ist wahrscheinlich möglich, aber schlecht beraten. Wie mcandre erwähnt, koppeln die meisten Betriebssysteme die Low-Level-Netzwerkfähigkeiten, die Sie für eine Firewall benötigen, eng in den Kernel ein. Daher wird diese Aufgabe normalerweise in C/C++ ausgeführt und eng in den Kernel integriert. Die Mikrokernel-Betriebssysteme (Mach et al.) Sind möglicherweise zugänglicher als Linux. Vielleicht können Sie etwas Python und C mischen, aber ich denke, die interessantere Diskussion hier wird um "warum sollte ich"/"warum sollte ich nicht" eine Firewall in Python implementieren im Gegensatz zu nur ist es technisch möglich .

+0

Ich bin mir nicht sicher Hier, aber ist es in Python garantiert, dass IRQs den Benutzercode rechtzeitig erreichen (durch die Python-Ebene)? –

+0

BSD ein Microkernel? Was? –

+0

@Gollum: Das hängt stark vom Betriebssystem und der betreffenden Benachrichtigungsmethode ab. Es gibt keinen Standard für die Ausführung von Python-Code als IRQ-Handler ... –

2

"Ja" - das ist normalerweise die Antwort auf "ist es möglich ...?" Fragen.

Wie schwierig und spezifische Implementierungen sind etwas ganz anderes. Ich nehme an, technisch gesehen sollte man das nicht so machen. Wenn man in Python eine schnelle Firewall bauen wollte, konnte man die Socket-Bibliotheken verwenden und Verbindungen zu und von sich selbst an jedem Port öffnen. Ich habe keine Ahnung, wie effektiv das wäre, obwohl es so aussieht, als ob es nicht wäre. Natürlich, wenn Sie nur daran interessiert sind, Ihre eigenen zu rollen, und dies als Lernerfahrung zu machen, dann ist es cool, Sie haben einen langen Weg vor sich und viel Bildung.

OTOH, wenn Sie tatsächlich besorgt über Netzwerk-Sicherheit gibt es Tonnen andere Produkte gibt, die Sie von iptables auf * nix verwenden können, um Zonealarm auf Fenster. Viele von ihnen sind beide frei und sicher, so dass es keinen Grund gibt, Ihre eigenen zu rollen, außer auf einer "Ich will lernen" -Basis.

+0

Danke :) - Es ist auf einer Basis zu lernen;) Normalerweise gibt es keine Notwendigkeit, das Rad execpt neu zu erfinden, wenn Sie wissen wollen, wie es gemacht wurde. – Jake

3

Ich bin mir sicher, dass Sie in der Theorie erreichen könnten, was Sie wollen, aber ich glaube in der Praxis ist Ihre Idee nicht machbar (wenn Sie sich fragen, warum, es ist zu schwierig, eine hohe Sprache mit dem niedrigen Niveau zu verbinden) Kernel).

Was Sie stattdessen tun könnten, ist ein Python-Tool, das die Firewall des Betriebssystems steuert, so dass Sie Regeln hinzufügen, löschen usw. können (ähnlich wie bei iptables unter Linux).

+0

Ich verstehe. Wie würde man Regeln zu einer Firewall hinzufügen? – Jake

+0

Unter Linux wird die Firewall durch den Befehl iptables gesteuert. Sie können damit die Firewall-Regeln konfigurieren. http://linux.die.net/man/8/iptables –

3

Interessanter Thread. Ich stolperte darüber nach Python NFQUEUE Beispielen suchen.

Meine Meinung ist, Sie könnten eine großartige Firewall in Python erstellen und den Kernel verwenden.

z. Fügen Sie eine Linux-fw-Regel über IP-Tabellen hinzu, die sys-Pakete (das erste) an NFQUEUE für python FW weiterleiten, um zu entscheiden, was zu tun ist.

Wenn Sie möchten, markieren Sie den Tcp Stream/Fluss mit einem FW-Zeichen mit NFQUEUE und dann haben Sie eine Iptables-Regel, die nur alle Verkehrsströme mit der Marke erlaubt.

Auf diese Weise können Sie ein leistungsfähiges High-Level-Python-Programm haben, das entscheidet, Datenverkehr zu erlauben oder zu verweigern, und die Geschwindigkeit des Kernels, um alle anderen Pakete im selben Fluss weiterzuleiten.

4

Python-iptables bietet Python-Bindungen zu iptables unter Linux. Die Interoperabilität mit iptables wird durch die Verwendung der iptables-C-Bibliotheken (libiptc, libxtables und iptables-Erweiterungen) erreicht, wobei das iptables-Binary nicht aufgerufen und seine Ausgabe nicht analysiert wird.

0

Sehr möglich und ein ganzer Rahmen, um es hier gewidmet: https://github.com/austin-taylor/bluewall

+0

Anstatt Links als Antwort zu veröffentlichen, fügen Sie einen Text hinzu, um zu erklären, wie diese Antwort hilft, das aktuelle Problem zu beheben –

Verwandte Themen