如何在Linux上阻止对某些程序的Internet访问


Answers:


31

对我来说,解决方案很简单。

  1. 创建,验证新组;将所需的用户添加到该组:
    • 创建: groupadd no-internet
    • 验证: grep no-internet /etc/group
    • 添加用户:useradd -g no-internet username

      注意:如果要修改现有用户,则应运行:用进行usermod -a -G no-internet userName 检查:sudo groups userName

  2. 在路径中创建一个脚本并将其可执行:
    • 创建: nano /home/username/.local/bin/no-internet
    • 可执行文件: chmod 755 /home/username/.local/bin/no-internet
    • 内容: #!/bin/bash
                    sg no-internet "$@"

  3. 添加iptables规则以删除组no-internet的网络活动:
    • iptables -I OUTPUT 1 -m owner --gid-owner no-internet -j DROP

      注意:不要忘记使更改永久生效,因此它将在重启后自动应用。这样做取决于您的Linux发行版。


   4.进行检查,例如在Firefox上运行:

  • no-internet "firefox"

万一您想例外并允许程序访问本地网络

  • iptables -A OUTPUT -m owner --gid-owner no-internet -d 192.168.1.0/24 -j ACCEPT
  • iptables -A OUTPUT -m owner --gid-owner no-internet -d 127.0.0.0/8 -j ACCEPT
  • iptables -A OUTPUT -m owner --gid-owner no-internet -j DROP

注意:如果产卵,将保留规则。例如,如果您运行一个没有Internet规则的程序,并且该程序将打开浏览器窗口,则仍然会应用这些规则。


2
一些注意事项Ilia:广告1:-修改现有用户:usermod -a -G groupName userName-检查:sudo groups userName广告3:-我在iptables中已经有很多规则,新规则的位置至关重要。应该是OUTPUT链中的第一条规则。因此,我使用insert:iptables -I OUTPUT 1 -m owner --gid-owner no-internet -j DROP允许访问LAN:确保ACCEPT规则高于DENY规则。奇迹般有效。例如在Wifiguard上使用它。Prog会检查wlan中是否有未知设备,但每次启动都会“拨回电话”。

该脚本将仅传递命令。如果尝试使用参数启动程序,则应使用“ $ @”而不是“ $ 1”。由于某种原因,我不得不将其临时存储在变量中,以便bash正确处理它:cmd =“ $ @”; sg no-internet“ $ {cmd}”
2015年

使用“ nointernet”而不是“ no-internet”。无论出于何种原因,当您尝试使用sg或chgrp时,Ubuntu 14.04都无法处理破折号(提示输入密码,然后失败)。

1
取消共享-n YourAppToBlock>使用“ nointernet”而不是“ no-internet”。也许是“不\-互联网”?
SarK0Y

我像描述的那样尝试,但是对我来说,将我添加到“ no-internet”并设置了ip-tables之后,我再也无法连接到Internet(使用和不使用bash脚本no-internet)。
Viatorus '16
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.