能否用Python编写一个防火墙?假设它可以阻止所有流量?
是的,没错。
我有一些使用nfqueue与Linux iptables进行防火墙任务交互的Python代码。我可以在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
Python-iptables提供了Linux下的iptables的Python绑定。通过使用iptables C库(libiptc、libxtables和iptables扩展),而不是调用iptables二进制文件并解析其输出,实现了与iptables的互操作性。
有趣的帖子。我是在寻找Python NFQUEUE示例时偶然发现它。
我认为你可以使用内核在Python中创建一个很棒的防火墙。
例如,通过IP表添加Linux防火墙规则,将系统数据包(第一个)转发到NFQUEUE以供Python防火墙决定如何处理。
如果您喜欢,可以使用NFQUEUE标记TCP流/流,并具有仅允许所有具有该标记的流量流的iptables规则。
这样,您就可以拥有一个功能强大的高级Python程序来决定是否允许或拒绝流量,以及内核转发同一流中的所有其他数据包的速度。
我相信这是可能的,但不被建议。正如mcandre所提到的,大多数操作系统将你需要用于防火墙的低级网络功能与内核紧密耦合,因此通常使用C/C++完成此任务并与内核紧密集成。微内核操作系统(如Mach等)可能比Linux更适合。您可以混合使用一些Python和C,但我认为在这里更有趣的讨论将围绕“我应该”/“我不应该”实现一个Python防火墙,而不仅仅是技术上是否可能。