正文共:1111 字 18 图,预估阅读时间:1 分钟
我们刚刚测完了iptables配置URL黑名单过滤(如何通过iptables配置URL过滤黑名单?),整体效果还算不错。但是,在很多时候,可能我们还会用到白名单,也就是默认拒绝所有请求,仅允许匹配白名单域名的请求通过。
首先,这个动作就比较简单,仅需要将DROP(丢弃)动作调整为ACCEPT(接受)就可以了。但是,我们还是要考虑一下这中间的数据处理逻辑问题。
接着上次的实验结果来看。
我们现在拒绝了所有访问guotiejun.com相关HTTP页面和HTTPS页面的请求,还拒绝了所有访问sdwan.guotiejun.com相关HTTPS页面的请求。那如果我们单独加一条放通访问https://i.guotiejun.com页面的规则会怎样呢?操作命令如下:
iptables -I FORWARD -p tcp --dport 443 -m string --string i.guotiejun.com --algo bm -j ACCEPT
再次测试,发现访问成功。
查看规则匹配情况,也可以看到命中了ACCEPT的转发策略。
首先判断是不是最长匹配的关系,我们将拒绝https://*guotiejun.com*的策略移动到允许https://i.guotiejun.com策略上面。
然后清空缓存,刷新页面。
请求失败,无法访问。再看一下策略匹配情况。
可以发现,最上面的策略有报文命中,第二条策略没有被命中。这么看,策略是按照顺序依次匹配的,和匹配长度没有关系。
为了验证,我们先删除之前的策略,再重新配置几条策略。删除策略可以将前面插入命令中的-I参数修改为-D,例如:
iptables -D FORWARD -p tcp --dport 443 -m string --string i.guotiejun.com --algo bm -j ACCEPT
iptables -D FORWARD -p tcp --dport 443 -m string --string guotiejun.com --algo bm -j DROP
也可以使用-F命令,能够逐个删除指定表或链中的所有规则;如果没有指定任何链,则表中所有链的规则都将被删除。例如:
iptables -t filter -F FORWARD
然后我们依次配置4条规则,分别是拒绝所有HTTPS、接受https://i.guotiejun.com、拒绝https://*guotiejun.com*、接受https://sdwan.guotiejun.com。
iptables -I FORWARD -p tcp --dport 443 -j DROP
iptables -I FORWARD -p tcp --dport 443 -m string --string i.guotiejun.com --algo bm -j ACCEPT
iptables -I FORWARD -p tcp --dport 443 -m string --string guotiejun.com --algo bm -j DROP
iptables -I FORWARD -p tcp --dport 443 -m string --string sdwan.guotiejun.com --algo bm -j ACCEPT
理论上讲,结果应该是只有最上面的https://sdwan.guotiejun.com可以访问,其他所有页面均被拒绝,接下来我们验证一下。
但结果是所有的HTTPS页面均无法访问,我们查看一下策略匹配情况。
发现只有拒绝所有的策略被命中了,其他策略都没有命中,难道是不带target扩展的匹配方式不一样?我们将拒绝所有的命令也调整一下,所有的域名中肯定要带点号,我们就替换成如下命令:
iptables -I FORWARD -p tcp --dport 443 -m string --string . --algo bm -j DROP
再次测试一下。
这就比较神奇了,第一条策略被命中了,但是页面还是无法打开。
分析过程,可以看到状态是200,正常,但是无法加载资源。我们把最下面的策略移除试一下。
这次就正常了,看来还是最后一条策略匹配的太过分了。那如果我们把默认规则调整为匹配.com呢?
iptables -I FORWARD -p tcp --dport 443 -m string --string .com --algo bm -j DROP
现在测试就正常了,规则匹配也是正常的。
那不是.com的域名怎么办呢?
还记得我们之前有一篇介绍过域名的文章吗(域名.com是什么意思?95%的人都不知道吧?)?顶级域名主要包括.gov、.edu、.com、.mil、.org以及ISO-3166“国家名称表示代码”标准中标识国家/地区的英文两字母代码后缀。
不过5个顶级域名加上247个国家/地区代码,要添加252个规则,貌似有点多。不知道各位专家有没有什么好的解决方法?
长按二维码
关注我们吧
79.55 Gbps!已经初步测得VMWare ESXi 6.7的vSwitch转发性能
羡慕!大佬的VPP能达到180G性能,而我的却只有13.5G