我希望其中一个用户(不在 sudoers 列表中)可以在 14:00 至 16:00 和 17:00 至 18:30 之间访问互联网。可以吗?我可以为不同的星期几设置不同的时间间隔吗?
答案1
您可以使用 iptables 的owner
扩展来阻止用户访问网络,例如
sudo iptables -A OUTPUT -m owner --uid-owner user_you_want_to_block -j REJECT
现在您可以使用 cron 来添加或删除这些规则(如果您已经有一些 iptable 规则或希望在不同时间为不同的用户执行此操作,则可能需要一些 shell 脚本)。
答案2
以 root 身份登录:
须藤苏
检查防火墙的状态:
ufw status
如果防火墙不活跃, 问题:
ufw enable
为了限制用户威廉周日、周二、周三和周五在允许的时间段内(14:00-16:00 和 17:00-18:30)访问互联网:
iptables -I OUTPUT -p tcp -m owner --uid-owner wilhelm -m time --weekdays Su,Tu,We,Fr --timestart 00:00:01 --timestop 14:00:00 -j DROP iptables -I OUTPUT -p tcp -m owner --uid-owner wilhelm -m time --weekdays Su,Tu,We,Fr --timestart 16:00:00 --timestop 17:00:00 -j DROP iptables -I OUTPUT -p tcp -m owner --uid-owner wilhelm -m time --weekdays Su,Tu,We,Fr --timestart 18:30:00 --timestop 23:59:59 -j DROP
边注:*请注意命令中使用
-I
switch 而不是-A
switchiptables
。-I
交换机将上述规则(3.)插入到OUTPUT规则链的开头(顶部),而不是链的底部。将手动附加的规则放在常规防火墙策略的顶部非常重要,因为规则是从上到下处理的。如果最顶层的规则接受了数据包,则不再检查链OUTPUT中可能已丢弃该数据包的以下规则。请确保规则确实已正确输入:
iptables -L OUTPUT
为了删除不适当的规则,比如说规则 1,(从 的顶部开始按 1 计数
iptables -v -L OUTPUT
)问题:iptables -D OUTPUT 1
。保存 iptables 以便在下次启动时恢复:
iptables-save > /etc/iptables.rules
附加
/etc/rc.local
以下行:iptables-restore < /etc/iptables.rules
完毕
--
在 Ubuntu 11.10 (oneiric) 上测试,语言环境:he