¿Es posible escribir un firewall en python?

¿Es posible escribir un firewall en python? ¿Decir que bloquearía todo el tráfico?

Sí, así es.

Tengo algunos códigos Python que interactúan con Linux iptables para realizar tareas de firewall, usando nfqueue. Puedo usar una regla en iptables que se parece a:

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

Y luego tener un código de Python que se parece a:

 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() 

Aquí hay un buen resumen en el que se basa el código anterior:

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

Python-iptables proporciona enlaces de python a iptables bajo Linux. La interoperabilidad con iptables se logra mediante el uso de las bibliotecas C de iptables (libiptc, libxtables y las extensiones de iptables), no llamando al binario de iptables y analizando su salida.

http://ldx.github.io/python-iptables/index.html

Estoy seguro de que en teoría podría lograr lo que quiere, pero creo que en la práctica su idea no es factible (si se pregunta por qué, es porque es muy difícil “relacionar” un lenguaje de alto nivel con el núcleo de bajo nivel).

Lo que podría hacer en su lugar es alguna herramienta Python que controle el cortafuegos del sistema operativo para que pueda agregar reglas, eliminar, etc. (de forma similar a lo que hace iptables en Linux).

Estoy seguro de que es posible, pero mal aconsejado. Como menciona mcandre, la mayoría de los sistemas operativos combinan las capacidades de red de bajo nivel que necesita para un firewall estrechamente en el kernel y, por lo tanto, esta tarea generalmente se realiza en C / C ++ y se integra estrechamente con el kernel. Los sistemas operativos de microkernel (Mach et al) podrían ser más susceptibles que Linux. Es posible que puedas mezclar algo de python y C, pero creo que la discusión más interesante aquí será sobre “por qué debería” / “por qué no debería” implementar un firewall en python en lugar de simplemente es técnicamente posible .

Hilo interesante. Me topé con él buscando ejemplos de Python NFQUEUE.

Mi opinión es que puedes crear un gran firewall en Python y usar el kernel.

Por ejemplo, agregue una regla de Linux fw a través de las tablas de IP que reenvían paquetes sys (la primera) a NFQUEUE para que Python FW decida qué hacer.

Si lo desea, marque el flujo / flujo de tcp con una marca FW usando NFQUEUE y luego tenga una regla de iptables que solo permita todos los flujos de tráfico con la marca.

De esta manera, puede tener un potente progtwig de alto nivel de python que decide permitir o denegar el tráfico, y la velocidad del núcleo para reenviar todos los demás paquetes en el mismo flujo.

“Sí”, esa suele ser la respuesta a “¿es posible …?” preguntas

Cuan difíciles y específicas las implementaciones son algo completamente distinto. Supongo que técnicamente no lo hagas de esta manera, si estuvieras empeñado en hacer un firewall rápido en Python, podrías usar las bibliotecas de socket y las conexiones abiertas desde y hacia ti en cada puerto. No tengo ni idea de lo efectivo que sería, aunque parece que no lo sería. Por supuesto, si simplemente está interesado en rodar el suyo y hacer esto como una experiencia de aprendizaje, entonces tiene un largo camino por delante y mucha educación.

OTOH, si realmente está preocupado por la seguridad de la red, hay muchos otros productos que puede usar, desde iptables en * nix, hasta ZoneAlarm en Windows. Muchos de ellos son gratuitos y seguros, por lo que realmente no hay razón para rodar los tuyos, excepto en un “Quiero aprender”.

Muy posible y se le dedica un marco completo aquí: https://github.com/austin-taylor/bluewall