如何使用本机Linux工具(如netfilter)按内容过滤数据包?

时间:2015-06-24 05:38:05

标签: linux sockets networking tcp netfilter

我知道您可以使用netfilter根据地址,协议和其他内容过滤掉数据包。我的问题是你可以使用netfilter(或其他一些本机Linux实用程序)来允许你根据内容过滤数据包。过滤应该在客户端完成,该客户端使用root访问权限运行linux。

例如(为了讨论的目的),让我们说我想丢弃所有传入的UDP数据包,其中包含"色情"在数据包的主体中(假设没有压缩,没有ssl,我们只是试图用数据包主体中的ASCII /纯文本中的这个单词来捕获数据包)。有没有办法创建一个iptable,netfilter相关规则来丢弃这些传入的UDP数据包?

2 个答案:

答案 0 :(得分:1)

您可以使用iptables字符串模块在数据包中的任何位置查找字符串(包括标题)。

例如,要过滤您指出的示例:

 iptables -I INPUT -p udp -m string --string "porn" --algo bm -j DROP

有关此有用模块here的更多信息。

答案 1 :(得分:1)

kpcre module允许使用正则表达式进行数据包内容过滤。

例如,要过滤您指出的示例:

    iptables -I INPUT -p udp -m string --string "/porn/i" --algo regex -j DROP

字符串“/ porn / i”表示不区分大小写的“色情”字符串。