Chinaunix首页 | 论坛 | 博客
  • 博客访问: 734184
  • 博文数量: 119
  • 博客积分: 137
  • 博客等级: 少校
  • 技术积分: 1582
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-28 16:39
文章分类

全部博文(119)

文章存档

2017年(3)

2016年(7)

2014年(1)

2013年(8)

2012年(20)

2011年(27)

2010年(53)

分类: LINUX

2016-07-19 15:59:25

最近项目中要求添加家长管理的相关内容
要求如下
1. 限定小孩的设备(child MAC)上网时间,比如是PM 19:00 - PM20:00
2. 限定小孩能够访问的URL

经过研究:
使用crond 来定时执行脚本判断时间
使用ebtables 控制访问
使用iptables 实现URL过滤

控制访问的原理就是
方式一:
ebtables 拦截匹配的MAC,并将其DROP掉。

点击(此处)折叠或打开

  1. ebtables -I FORWARD -s 64:00:6a:03:d7:0c -j DROP


方式二

点击(此处)折叠或打开

  1. 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
使用下面一条规则既可以实现:

点击(此处)折叠或打开

  1. iptables -I FORWARD -m mac --mac-source 64:00:6a:03:d7:0c -m string --string "sina.com" --algo bm -j DROP


试过

点击(此处)折叠或打开

  1. 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让其通过
即:

点击(此处)折叠或打开

  1. iptables -I FORWARD -m mac --mac-source 64:00:6a:03:d7:0c -m string --string "sina.com" --algo bm -j ACCEPT
  2. iptables -A FORWARD -m mac --mac-source 64:00:6a:03:d7:0c -j DROP

但是这里测下来,封包都走DROP这条规则了。

再经过抓包分析,发现https的包通过是加密的,经过加密之后就匹配不到白名单了。
所以这条路是不通的。

再后来考虑到所有访问网址的都要经过DNS解析网址。
那么在DNS解析的时候,只让白名单中解析请求通过,其他的都DROP掉。


点击(此处)折叠或打开

  1. iptables -I FORWARD -j parentalcontrolmac_chain
  2. iptables -I parentalcontrolmac_chain -m mac --mac-source 54:4e:90:18:8e:ca -p udp --dport 53 -j parentalcontrolurl_chain
  3. iptables -I parentalcontrolurl_chain -m string --icase --hex-string "|04|sina|03|com" --algo bm -j ACCEPT
  4. iptables -A parentalcontrolurl_chain -j DROP
这样的是可以生效的,但是这个有个漏洞,可以通过host去绕过去。

那么最保险的方式就是在内核里面添加对domian的判断。这个待后续稍微闲下来的时候再去研究了。

阅读(5090) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~