家长控制或者儿童上网,说的都是可以指定某个设备可以在某个时间段允许上网,或者某个时间断不允许上网。

1、禁止上网

禁止上网比较直接,当检测在当前时间断,则将包丢弃

使用iptables的time扩展模块,进行时间检测。

在FORWARD链DROP掉数据包,

例如19:00-21:00禁止IP上网:

iptables -I FORWARD -s 192.168.1.103  -m time --timestart 19:00 --timestop 21:30 --kerneltz -j DROP

这边的kerneltz代表使用内核上的时区,而非默认的UTC

又或者19:00-21:00禁止mac地址上网:

iptables -I FORWARD -m mac --mac-source 48:A9:22:71:8B:13  -m time --timestart 19:00 --timestop 21:00 --kerneltz -j DROP

另外时间后面可以指定礼拜几–weekdays,比如:

iptables -I FORWARD -s 192.168.1.103 -m time --timestart 5:00 --timestop 6:30 --weekdays 1,2,3,4,5 -j DROP

或者使用英文:

iptables -I FORWARD -s 192.168.1.103  -m time --timestart 5:00 --timestop 6:30 --weekdays Mon,Tue,Wed,Thu,Fri,Sat,Sun -j DROP

openwrt利用防火墙规则禁止某个ip或者mac规定时间,规定日子禁止上网,而局域网能访问的iptables规则

也可以直接在INPUT链上面禁止,这样设备就连局域网也无法访问

iptables -I INPUT -s 192.168.1.103  -m time --timestart 5:00 --timestop 6:30 --days Mon,Tue,Wed,Thu,Fri,Sat,Sun -j DROP

2、允许上网

禁止上网是直接DROP,允许上网的话,则是这一段时间断ACCEPT,其他时间段都DROP,所以我们只需要确保ACCECP在DROP之前即可

例如19:00-21:00允许IP上网,其他时间段不允许:

iptables -I FORWARD -s 192.168.1.103  -m time --timestart 19:00 --timestop 21:30 --kerneltz -j ACCEPT
iptables -I FORWARD -s 192.168.1.103 -j DROP

如果有多个时间断的话,也必须确保所有的ACCECT再最后的DROP之前

如礼拜一到礼拜五20:00到21:00允许上网,周末17:00到21:30允许上网。

iptables -I FORWARD -s 192.168.1.103  -m time --timestart 20:00 --timestop 21:00 --weekdays 1,2,3,4,5 --kerneltz -j ACCEPT
iptables -I FORWARD -s 192.168.1.103  -m time --timestart 19:00 --timestop 21:30 --weekdays 6,7 --kerneltz -j ACCEPT
iptables -I FORWARD -s 192.168.1.103 -j DROP

http://www.zsythink.net/archives/1564