我希望其中一个用户(不在 sudoers 列表中)可以在 14:00 到 16:00 和从 17:00 到 18:30 访问 Internet。是否可以?我可以为不同的工作日设置不同的时间间隔吗?
小智 8
以 root 身份登录:
须藤须
检查防火墙的状态:
ufw status
Run Code Online (Sandbox Code Playgroud)
如果防火墙处于非活动状态,请发出:
ufw enable
Run Code Online (Sandbox Code Playgroud)为了将用户wilhelm在周日、周二、周三和周五的互联网访问限制在允许的时间间隔内(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
Run Code Online (Sandbox Code Playgroud)
旁注:*请注意使用-Iswitch 而不是命令的-Aswitch iptables。所述-I开关在输出规则链的开始(上部),而不是在链的底部插入上述规则(3)。将手动附加的规则放在常规防火墙策略之上很重要,因为规则是从上到下处理的。如果最顶层的规则接受数据包,则不再检查链 OUTPUT 是否有可能已丢弃数据包的以下规则。
请确保确实正确输入了规则:
iptables -L OUTPUT
Run Code Online (Sandbox Code Playgroud)
为了删除不适当的规则,请说第 1 条规则,(从 1 开始计数iptables -v -L OUTPUT)问题:iptables -D OUTPUT 1。
保存 iptables 以便在下次启动时恢复:
iptables-save > /etc/iptables.rules
Run Code Online (Sandbox Code Playgroud)在/etc/rc.local附加行:
iptables-restore < /etc/iptables.rules
Run Code Online (Sandbox Code Playgroud)完毕
——
在 Ubuntu 11.10 (oneiric) 上测试,语言环境:he
您可以使用 iptables 的owner扩展来阻止用户访问网络,例如
sudo iptables -A OUTPUT -m owner --uid-owner user_you_want_to_block -j REJECT
Run Code Online (Sandbox Code Playgroud)
现在您可以使用 cron 添加或删除这些规则(如果您已经有一些 iptable 规则或希望它在不同时间为不同用户使用,则可能需要一些 shell 脚本)。