最近项目中要求添加家长管理的相关内容
要求如下
1. 限定小孩的设备(child MAC)上网时间,比如是PM 19:00 - PM20:00
2. 限定小孩能够访问的URL
经过研究:
使用crond 来定时执行脚本判断时间
使用ebtables 控制访问
使用iptables 实现URL过滤
控制访问的原理就是
方式一:
ebtables 拦截匹配的MAC,并将其DROP掉。
-
ebtables -I FORWARD -s 64:00:6a:03:d7:0c -j DROP
方式二
-
iptables -I FORWARD -m mac --mac-source 64:00:6a:03:d7:0c -j DROP
这一条规则也可以阻止
64:00:6a:03:d7:0c访问网络。
那么在这条基础上加上iptables 关于time的match也可以实现定时访问。当然这个要修改iptables使其支持time。
URL过滤
黑名单模式:
默认所有都是ACCEPT的,指定的URL给禁掉。比如举例sina.com
使用下面一条规则既可以实现:
-
iptables -I FORWARD -m mac --mac-source 64:00:6a:03:d7:0c -m string --string "sina.com" --algo bm -j DROP
试过
-
iptables -I FORWARD -m mac --mac-source 64:00:6a:03:d7:0c -d "sina.com" --algo bm -j DROP
但是系统解析
sina.com时获取的IP地址不全,所以不能用这个,用这个就不能把所有的sina.com的挡掉。
白名单:
规则:非白名单上的URL都要给DROP掉。
刚开始我的思路是相反于黑名单,DROP掉所有,除了匹配符合的url让其通过
即:
-
iptables -I FORWARD -m mac --mac-source 64:00:6a:03:d7:0c -m string --string "sina.com" --algo bm -j ACCEPT
-
iptables -A FORWARD -m mac --mac-source 64:00:6a:03:d7:0c -j DROP
但是这里测下来,封包都走DROP这条规则了。
再经过抓包分析,发现https的包通过是加密的,经过加密之后就匹配不到白名单了。
所以这条路是不通的。
再后来考虑到所有访问网址的都要经过DNS解析网址。
那么在DNS解析的时候,只让白名单中解析请求通过,其他的都DROP掉。
即
-
iptables -I FORWARD -j parentalcontrolmac_chain
-
iptables -I parentalcontrolmac_chain -m mac --mac-source 54:4e:90:18:8e:ca -p udp --dport 53 -j parentalcontrolurl_chain
-
iptables -I parentalcontrolurl_chain -m string --icase --hex-string "|04|sina|03|com" --algo bm -j ACCEPT
-
iptables -A parentalcontrolurl_chain -j DROP
这样的是可以生效的,但是这个有个漏洞,可以通过host去绕过去。
那么最保险的方式就是在内核里面添加对domian的判断。这个待后续稍微闲下来的时候再去研究了。
阅读(5152) | 评论(0) | 转发(0) |