如何限制用户访问互联网的时间间隔?


12

我希望其中一个用户(不在sudoers列表中)可以从14:00到16:00和从17:00到18:30都可以访问互联网。可能吗?我可以为不同的工作日设置不同的时间间隔吗?


您最好在路由器或网关控制级别进行此操作,而不是在系统本身进行此操作……据我所知,Ubuntu中没有简单的系统可以在用户级别限制Internet访问。
托马斯·沃德

当我在路由器级别进行访问时,所有用户都将受到限制...
cupakob 2011年

Afaik(自9.04开始,我一直在寻找解决方案),没有针对此的软件解决方案。当然,在我的网络上,每台计算机只有一个用户,并且它们都通过充当网关的服务器盒进行连接。那个盒子有一个crontab,可以阻止该系统上的所有 Internet访问,然后在以后将其删除。随后,它也每天在不同时间运行。出于好奇,为什么您需要将访问时间限制在一个严格的时间范围内,为什么需要按用户进行访问呢?
托马斯·沃德

我需要用户使用,因为一台PC被两个用户使用。并且我想限制访问权限,因为第二个用户必须了解更多信息,而不要留在Facebook :),但是您对crontab的想法很好....您正在使用什么来阻止访问?当我阻止路由器时,我可以为用户做同样的
事情

我的路由器和网关盒是分开的-当网关盒从其他盒分配一个静态地址(从而处理数据)时,我使用iptables阻止静态分配的专用IP地址发送出站或入站数据,从而阻止所有互联网流量到该盒子。每个crontabs都使用其自己的iptables命令以删除计划中的项目。这是一个不完善的系统,因为我只可以购买一个性能更好的路由器:P
Thomas Ward

Answers:


7

您可以使用iptables的owner扩展名来阻止用户访问网络,例如

 sudo iptables -A OUTPUT -m owner --uid-owner user_you_want_to_block -j REJECT

现在,您可以使用cron添加或删除这些规则(如果您已经拥有一些iptable规则,或者希望将其用于不同时间的不同用户,则可能需要一些shell脚本编写)。


哦,我不知道该存在的:P @Florian:(a)为此需要加载哪些内核模块?(b)可以使用-j REJECT --reject-with <argument>吗?
托马斯·沃德

(a)xt_owner自动加载。(b)我看不出为什么--reject-with不能对此起作用但从未尝试过。
Florian Diesch 2011年

我将在稍后进行测试:P iptables联机帮助页中是否存在所有者模块,以详细说明其用法?(旁注:由于我的内核是自定义编译的,所以我问什么内核模块:/)
Thomas Ward

看起来正是我想要的...。我必须尝试一下:)
cupakob 2011年

@EvilPhoenix:是的,它记录在iptables手册中
Florian Diesch 2011年

8
  1. 以root身份登录:

    苏多苏

  2. 检查防火墙的状态:

    ufw status
    

    如果防火墙不活动,请发出:

    ufw enable
    
  3. 为了将用户在周日,周二,周三和周五的恶意互联网访问限制为允许的时间间隔(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开关而不是命令-A开关iptables。所述-I开关在输出规则链的开始(上部),而不是在链的底部插入上述规则(3)。将手动附加的规则放在常规防火墙策略之上非常重要,因为规则是从上到下处理的。如果最上面的规则接受一个数据包,则不再检查链OUTPUT,以查找以下可能丢弃该数据包的规则。

  4. 请确保确实输入了正确的规则:

    iptables -L OUTPUT
    

    为了删除不合适的规则,规则说1号,(从顶部从1数iptables -v -L OUTPUT问题)iptables -D OUTPUT 1

  5. 保存iptables以便在下次启动时恢复:

    iptables-save > /etc/iptables.rules
    
  6. /etc/rc.local追加行:

    iptables-restore < /etc/iptables.rules
    

做完了

-

在Ubuntu 11.10(oneiric)上测试,语言环境:他


1
完美解决方案的绝佳答案!但是请注意,所有时间都被解释为UTC,因此对于我来说,可能不得不手动将其与本地时间抵消central european summer time -2 hours
精确企鹅

我做了所有步骤,但它们都起作用了(互联网访问受到限制),但是重新启动后,互联网又恢复了。我检查了iptables -L OUTPUT,却找不到我添加的规则...
Lawand 2014年

1
ufw即使以后使用,您启用的原因又是iptables什么?
balu

可以使用--kerneltz选项(“使用内核时区而不是UTC”)
修复的@PrecisePenguin
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.