正文共:1555 字 16 图,预估阅读时间:2 分钟
我们前面曾经简单介绍过URL过滤功能(URL过滤功能了解一下?),并且以H3C VFW为例简单配置了一下URL过滤功能。
首先回顾一下,URL过滤,英文全称为URL Filter,一般简称为URLF,从字面上理解,是指对用户访问的URL进行控制,对用户访问的Web资源执行允许或禁止操作。
URL(Uniform Resource Locator,统一资源定位符)是互联网上标准资源的地址,用来完整、精确地描述互联网上的网页或者其他共享资源的地址。
在前面测试的时候,我们使用的是黑名单的方式,也就是默认放通所有,然后拒绝被匹配的请求。域名使用文本方式匹配域名中的关键字段,还区分了HTTP和HTTPS的服务区别。
前面我们也说过,URL过滤的原理上整体都是相似的,所以我前面又整理了一下iptables的用法(iptables命令简介),还包括match扩展项(iptables扩展项之match扩展)和target扩展项(iptables扩展项之target扩展)的使用说明。今天我们就用iptables来简单测试一下URL的过滤效果。
首先我们确认一下域名字段,需要使用string模块通过某种模式匹配策略来匹配给定的字符串。模式匹配策略可选为bm(Boyer Moore)或kmp(Knuth Pratt Morris),此部分的语法为:
-m string --string guotiejun.com --algo kmp
-m string --string guotiejun.com --algo bm
然后就是匹配协议,一般常用的是HTTP或者HTTPS。在iptables中,可以使用-p来匹配协议,但是这里的协议仅限于tcp、udp、udplite、icmp、icmpv6、esp、ah、sctp、mh或特殊关键字“all”中的一个。我们要匹配HTTP或者HTTPS,就要结合--sport或者--dport来指定端口或端口范围,这里就可以配置服务名称或端口号了,端口范围可以使用first:last格式来指定。此部分的语法为:
-p tcp --dport 443
-p tcp --dport 80
-p tcp --dport http
-p tcp --dport https
再就是动作类型,这部分适用于-j参数来匹配target扩展,一般常用的参数包括ACCEPT(接受)、DROP(丢弃)、RETURN(返回)和reject(AUDIT下,同DROP)。此部分的语法为:
-j ACCEPT
-j DROP
-j RETURN
-j AUDIT --type accept
-j AUDIT --type drop
-j AUDIT --type reject
最后就是确定规则下发到哪个链或者表了。-I命令用于在选定的链中插入一个或多个规则。如果没有通过-t选项指定转发表,则默认下发到filter表;也可以通过-t选项指定到nat、mangle、raw或者security表,不过一般都是配置到默认的filter表下面。
filter表下面包含预定义链INPUT(用于发往本地套接字的数据包)、FORWARD(用于通过设备路由的数据包)以及OUTPUT(用于本地生成的数据包),一般常用的就是FORWARD和OUTPUT。此部分的语法为:
-I FORWARD
-I OUTPUT
-t filter -I FORWARD
-t filter -I OUTPUT
如果有其他需求,也可以进行进一步的条件限制,比如通过-s选项限定源地址信息,通过-i选项指定接收数据包的接口名称,通过-o选项指定发送数据包的接口名称。
接下来,我们搭个环境测试一下。
结合前面介绍的文章(如果把Linux主机作为路由器转发流量,性能可靠吗?),我们将一台CentOS主机作为客户机的网关设备,并在CentOS主机上配置URL过滤。
首先,我们尝试直接访问一个HTTP页面。
然后,我们组合前面的各部分配置,可以得到禁止访问guotiejun.com相关的HTTP的页面命令如下:
iptables -I FORWARD -p tcp --dport 80 -m string --string guotiejun.com --algo bm -j DROP
这里我们也可以看到匹配TCP80端口被自动识别成了HTTP协议。配置过后再次测试页面的访问情况。
可以看到页面已经无法访问了。在CentOS上查看报文匹配情况,可以看到共匹配到了47个报文,共29328字节。
现在过滤的是HTTP报文,我们再试一下HTTPS页面是否访问正常。
可以看到,当前的HTTPS页面访问不受影响。我们再加一条禁止访问sdwan.guotiejun.com的HTTPS页面的命令:
iptables -I FORWARD -p tcp --dport https -m string --string sdwan.guotiejun.com --algo bm -j DROP
再次测试页面的访问情况。
可以看到页面已经无法访问了。在CentOS上查看报文匹配情况,可以看到共匹配到了76个报文,共43802字节。
现在所有带有guotiejun.com的HTTP页面都无法访问了,带有sdwan.guotiejun.com的HTTPS页面也无法访问了,其他的带有guotiejun.com的HTTPS页面访问应该是不受影响的。测试一下访问个人黄页。
如果要禁用所有带有guotiejun.com的HTTPS页面,用以下命令就可以了。
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 baidu.com --algo bm -j DROP
iptables -I FORWARD -p tcp --dport 443 -m string --string bing.com --algo bm -j DROP
测试一下访问情况,可以看到虽然域名可以正常解析、也可以ping通,但是HTTPS页面是无法访问到的。
iptables的报文统计情况如下:
可以看到,有成功转发的报文统计,还有每条拒绝规则对应的报文统计,一目了然。
怎么样,用iptables做URL黑名单过滤,你学会了吗?
长按二维码
关注我们吧
iperf命令简介
iptables扩展项之match扩展
iptables扩展项之target扩展
H3C防火墙RBM主备模式+静态路由方案验证
Debian通过NetworkManager配置双网卡
NetworkManager管理工具nmcli命令简介
79.55 Gbps!已经初步测得VMWare ESXi 6.7的vSwitch转发性能
还得是华为,OpenEuler打流能到37 Gbps
羡慕!大佬的VPP能达到180G性能,而我的却只有13.5G
Windows Server2012 R2搭建NFS服务器
CentOS 7搭建NFS服务器