是否可以在python中编写防火墙?

时间:2010-07-06 18:34:01

标签: python firewall

是否可以在python中编写防火墙?说它会阻止所有流量吗?

7 个答案:

答案 0 :(得分:17)

是的,是的。

我有一些Python代码与Linux iptables交互,使用nfqueue执行防火墙任务。我可以在iptables中使用看起来像这样的规则:

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

然后有一些看起来像的Python代码:

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

以上代码基于以下内容:

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

答案 1 :(得分:4)

Python-iptables在Linux下为iptables提供python绑定。通过使用iptables C库(libiptc,libxtables和iptables扩展),而不是调用iptables二进制文件并解析其输出来实现与iptables的互操作性。

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

答案 2 :(得分:3)

我确信这可能是可能的,但不明智。正如mcandre所提到的,大多数操作系统将防火墙所需的低级网络功能紧密地耦合到内核中,因此这项任务通常在C / C ++中完成,并与内核紧密集成。微内核操作系统(Mach等)可能比linux更适合。你可能可以混合一些python和C,但我认为这里更有趣的讨论将围绕“我为什么要”/“为什么我不应该”在python中实现防火墙而不仅仅是技术上可行的

答案 3 :(得分:3)

我确信理论上你可以实现你想要的,但我相信你的想法是不可行的(如果你想知道为什么,那是因为用高级内核“高级”语言“接口”太难了)。

你可以做的是一些控制操作系统防火墙的Python工具,这样你就可以添加规则,删除等等(以类似于Linux中的iptables的方式)。

答案 4 :(得分:3)

有趣的主题。我偶然发现了它寻找Python NFQUEUE的例子。

我的看法是你可以在python中创建一个很好的防火墙并使用内核。

E.g。 通过IP表添加linux fw规则,将sys数据包(第一个)转发到NFQUEUE,以便python FW决定做什么。

如果你喜欢它使用NFQUEUE标记带有FW标记的tcp流/流,然后有一个iptables规则,只允许带有标记的所有流量流。

通过这种方式,您可以拥有一个强大的高级python程序,决定允许或拒绝流量,以及内核在同一流中转发所有其他数据包的速度。

答案 5 :(得分:2)

“是” - 这通常是“有可能......”的答案。的问题。

多么困难和具体的实现完全是另一回事。我认为技术上不要这样做,如果你一心想在Python中制作快速防火墙,你可以使用套接字库并在每个端口上打开与自己的连接。我不知道会有多么有效,虽然它似乎不会。当然,如果你只是对自己的兴趣感兴趣,并将其作为一种学习体验,那么很酷,你有很长的路要走,并且有很多教育。

OTOH,如果您真的担心网络安全,那么您可以使用其他产品,从* nix上的iptables到Windows上的ZoneAlarm。它们中的很多都是免费且安全的,所以除了“我想学习”的基础之外,没有理由自己动手。

答案 6 :(得分:0)

非常可能,这里有一个完整的框架: https://github.com/austin-taylor/bluewall