我正在尝试创建一个系统来过滤网络上某些类型的互联网流量。基本上,我希望能够检查发往互联网的数据包,并选择是让它们通过还是简单地丢弃它们(想想 UDP 数据包)。
决定的规则相当复杂,不能写成简单的防火墙规则。我想编写一个程序来做出这个决定。
我已经构建了一个 Linux 系统,并使用 arpspoof 来确保所有网络流量都流经该系统。我知道我可以将 /proc/sys/net/ipv4/ip_forward 设置为 0 或 1 以阻止所有流量转发或允许所有流量通过。我还可以编写防火墙规则来完成简单的事情。
如何让所有流量通过我编写的程序来决定是否应该转发或丢弃数据?我应该关注哪些类型的工具或系统?
答案1
# iptables -A PREROUTING -t nat -j NFQUEUE --queue-num 0
然后编写您自己的用户空间程序。 https://home.regit.org/netfilter-en/using-nfqueue-and-libnetfilter_queue/
但我认为 netfilter 已经具备了你想要的所有功能;您可以使用iptables
/编写非常复杂的规则nftables
。