iptables与正则表达式网址匹配

时间:2017-03-31 07:48:32

标签: regex iptables

我需要实现的目标    我需要计算有多少用户打开正确的网站和子网站     例如`http://stackoverflow.com”          'https://stackoverflow.com/questions'

我有什么    路由器设置在Centos 7上    iptables的    https://github.com/xnsystems/kpcre/wiki/iptables-string-regex

我不能用鱿鱼。    此计数系统无法更改IP头(src和dst IP地址)    这就是为什么我需要计数使用iptables与日志选项    或者可能有软件会在没有任何数据包修改的情况下对网址进行计数

问题    我找不到一种方法,我会看到有多少IP地址(有多少用户)点击了正确的网址

我的iptables行看起来像这样,不起作用    我的意思是匹配所有网址(包括所有子网址)不仅http://stackoverflow.com

  

sudo iptables -I OUTPUT -p tcp --dport 80 -m string --string "^http://stackoverflow.com$" --algo regex -j ACCEPT

请帮我解决此案。

更新:
以下三个例子请尝试让它们工作

sudo iptables -I OUTPUT -p tcp --dport 80 -m string --string stackoverflow.com --algo regex -j ACCEPT  
sudo iptables -I OUTPUT -p tcp --dport 80 -m string --string stackoverflow.com/documentation --algo regex -j ACCEPT  
sudo iptables -I OUTPUT -p tcp --dport 80 -m string --string stackoverflow.com/questions'; --algo regex -j ACCEPT  

如你所见,我使用了--algo regex 如果你知道没有它的另一个解决方案,请建议。

2 个答案:

答案 0 :(得分:0)

我检查了规范链接,它不是很完整(例如\b似乎知道,但没有解释),但我认为你需要的正则表达式是:

^(http:\/\/){0,1}[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+(\/[a-zA-Z0-9_-]+){0,}$

更新:允许http://前缀和/documentation后缀。

请尝试。
未指定捕获组()的使用,但这通常有效 如果你给出的例子匹配,不应该或不匹配,我应该调整这个答案。 最简单的调整是在[a-zA-Z0-9_-]之间在两个位置插入更多字符(允许使用URL)。

答案 1 :(得分:0)

包含数据包中URL的行不仅包含URL,还包含一些额外的关键字。

如果您想阻止“http://stackoverflow.com ,那么您应该指定如下网址:

iptables -I OUTPUT -p tcp --dport 80 -m string --string "/\/ .+Host: stackoverflow.com/si" --algo regex -j DROP

或者如果您想要屏蔽“http://stackoverflow.com/questions,那么您应该像这样指定网址:

iptables -I OUTPUT -p tcp --dport 80 -m string --string "/\/questions .+Host: stackoverflow.com/si" --algo regex -j DROP