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?
Antwort
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
Aber was ist mit Python auf Windows? –
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 .
Ich bin mir nicht sicher Hier, aber ist es in Python garantiert, dass IRQs den Benutzercode rechtzeitig erreichen (durch die Python-Ebene)? –
BSD ein Microkernel? Was? –
@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 ... –
"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.
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
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).
Ich verstehe. Wie würde man Regeln zu einer Firewall hinzufügen? – Jake
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 –
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.
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.
Sehr möglich und ein ganzer Rahmen, um es hier gewidmet: https://github.com/austin-taylor/bluewall
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 –
- 1. Ist es möglich, One-Liners in Python zu schreiben?
- 2. Ist es möglich, einen Windows-Dienst mit Python zu schreiben?
- 3. Ist es möglich, eine Schleife in Scala Console zu schreiben?
- 4. Ist es möglich, Code zu schreiben, um Code zu schreiben?
- 5. Ist es möglich, "reine" C++ - Klasse in Cython zu schreiben?
- 6. Ist es möglich, Syntax wie -()() zu schreiben?
- 7. Ist es möglich, eine Jugendschutz-App für iOS zu schreiben?
- 8. ist es möglich, eine generalisierte Rebind-Vorlage zu schreiben?
- 9. Ist es möglich, eine Erfolgsnachricht mit Gebietsschemata zu schreiben?
- 10. Ist es möglich, Erweiterungen in Delphi Debugger zu schreiben?
- 11. Python in Java, ist es möglich
- 12. Ist es möglich, ein Betriebssystem komplett in C zu schreiben?
- 13. Ist es möglich, ein selbstzerstörerisches Programm in C zu schreiben?
- 14. Ist es möglich, Klassen mit Funktionen in Scala zu schreiben?
- 15. Ist es möglich, eine kompilierte Python-Datei zu importieren?
- 16. Ist es möglich, Automatisierungstests für die nwjs App zu schreiben?
- 17. Ist es möglich, einen benutzerdefinierten Konverter für Pandoc zu schreiben?
- 18. Ist es möglich, ein generisches JSON-Schema zu schreiben?
- 19. Ist es möglich, stdout mit write_csv() aus readr zu schreiben?
- 20. Ist es möglich, Erweiterungsmethoden für Console zu schreiben?
- 21. Ist es möglich, schreiben eine rekursive IEnumerable <T>
- 22. Ist es möglich, openstreetmap (osm) routeplanner zu entwerfen/schreiben?
- 23. Ist es möglich, in eine Datei zu schreiben, ohne den Lesestatus zu schließen? PHP
- 24. Ist es möglich, eine ListViewGroup zu erstellen
- 25. ist es möglich, Python String-Interpolation in Ocaml zu reproduzieren?
- 26. Ist es möglich, 'else' in einem Python-Listenverständnis zu verwenden?
- 27. Ist es möglich, eine Funktion in Python weiterzuleiten?
- 28. Ist es möglich, einen Buchstabenbereich in Python zu erstellen?
- 29. Ist es möglich, Python-Funktionsargumente in Sphinx zu verstecken?
- 30. Gibt es eine Möglichkeit, eine Firewall zu umgehen?
Für welches Betriebssystem? Python muss mit dem Netzwerk-Stack des Kernels arbeiten. – mcandre
Er hat das nicht spezifiziert, also mach weiter und antworte ja;) – Konerak
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) –