Ist es möglich, schreiben Sie eine firewall in python?
Ist es möglich, schreiben Sie eine firewall in python? Sagen, es würde den gesamten Verkehr blockieren?
- Für welches Betriebssystem? Python arbeiten mit Netzwerk-stack des kernel.
- Er hat nicht angeben, so gehen Sie vor, und die Antwort ja 😉
- Warum würden Sie wollen, dass? sind Sie sich bewusst, dass Sie eine Schicht von C zwischen python und der tatsächlichen Vernetzung fordert der Maschine (Montage)
- Für sagen wir mal.. Windows.. @Gollum, Nur um zu versuchen, es zu tun..
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, ja, es ist.
Ich habe einige Python-code, der im zusammenspiel mit Linux-iptables-ausführen-Firewall-Aufgaben, mit nfqueue. Ich kann mit einer Regel in iptables, das aussieht wie:
Und dann haben einige Python-code sieht wie folgt aus:
Hier ein nettes schreiben, dass der obige code ist basiert auf:
http://blog.yancomm.net/2011/05/nfqueue-packet-mangling-with-python.html
Python-iptables stellt python-Bindungen von iptables unter Linux. Interoperabilität mit iptables wird erreicht durch die Verwendung der iptables-C-Bibliotheken (libiptc, libxtables und der iptables-Erweiterungen), ruft nicht das iptables-binary und analysieren Ihre Leistung.
http://ldx.github.io/python-iptables/index.html
Ich bin sicher, in der Theorie könnte man das erreichen, was Sie wollen, aber ich glaube, dass in der Praxis deine Idee ist nicht machbar (wenn Ihr Euch fragt warum, es ist, weil es zu hart für die "Schnittstelle" eine high-level-Sprache mit der low-level-kernel).
Was könnten Sie stattdessen tun, ist, einige Python-tool, das steuert die firewall des Betriebssystems, so könnten Sie Regeln hinzufügen, löschen , etc. (in einer ähnlichen Weise zu dem, was iptables in Linux).
Ich bin sicher, es ist wohl möglich, aber schlecht beraten. Als mcandre erwähnt, die meisten Betriebssysteme, die paar die low-level-networking-Funktionen, die Sie brauchen für eine firewall fest in den kernel und damit ist diese Aufgabe in der Regel in C/C++ und integriert eng mit dem kernel. Die microkernel-Betriebssysteme (Mach et al) möglicherweise besser geeignet als linux. Sie können mischen einige python und C, aber ich denke, die interessantere Diskussion hier sein "warum sollte ich"/"warum sollte ich nicht" implementieren Sie eine firewall in python im Gegensatz zu nur ist es technisch möglich.
Interessanten thread. Ich stolperte über es auf der Suche nach Python NFQUEUE Beispiele.
Mein nehmen ist, könnten Sie schaffen eine tolle firewall, die in python und die kernel.
E. g.
Hinzufügen eines linux-fw Regel durch IP-Tabellen, die nach vorne sys-Pakete (das erste) zu NFQUEUE für python-FW zu entscheiden, was zu tun ist.
Wenn Sie es mögen, markieren Sie die tcp-stream/flow mit FW-Markierung mit NFQUEUE und haben dann eine iptables-Regel, die nur erlaubt es, alle Verkehrsströme mit der Marke.
Diese Weise können Sie eine leistungsfähige, high-level-python-Programm zu entscheiden, zu erlauben oder zu verweigern Verkehr, und die Geschwindigkeit der kernel weiterleiten alle anderen Pakete in den gleichen Fluss.
"Ja" - das ist in der Regel die Antwort auf die Frage "ist es möglich...?" - Fragen.
Wie schwierig und spezifische Implementierungen sind etwas ganz anderes. Ich nehme an, technisch nicht tun, diese Art und Weise, wenn Sie waren versessen auf macht eine schnelle firewall in Python, Sie könnte verwenden Sie die socket-Bibliotheken und offene verbindungen zu und von sich selbst auf jedem port. Ich habe keine Ahnung, wie effektiv das wäre, obwohl es so scheint, als wäre nicht. Natürlich, wenn Sie einfach nur daran interessiert, Ihre eigenen Rollen, und tun dies als eine Lernerfahrung, dann cool, Sie haben einen langen Weg vor Euch, und viel von Bildung.
OTOH, wenn Sie wirklich besorgt über die Netzwerk-Sicherheit gibt es Tonnen andere Produkte gibt, die Sie verwenden können, von iptables auf *nix zu ZoneAlarm unter windows. Viele von Ihnen sind beide frei und sicher, so gibt es wirklich keinen Grund zum Selbstdrehen außer auf einem "ich will lernen" - basis.
Sehr gut möglich, und ein ganzes framework gewidmet ist es hier:
https://github.com/austin-taylor/bluewall