当前位置: 首页>>技术问答>>正文


如何控制每个程序的互联网访问?

, ,

问题描述

我想用一个软件来控制哪个程序可以连接到互联网。我知道这种行为与”firewall”这个词有关,但是如果有人要求个人防火墙,一些Linux用户会非常沮丧。我不想因为要求这样的程序而烦恼你。我不想”secure ports”或个人防火墙在Windows上承诺的其他东西。我查看了iptables,但它不符合我的要求。

我在这里看到了一个很好的答案(如何阻止葡萄酒应用的互联网访问?),但设置它是非常不舒服的。

是否有软件要求每个程序是否可以访问互联网?

最佳解决办法

德国Ubuntu论坛(Google-translated to English)中有一个Perl script似乎就是这么做的。我从未尝试过,我没有仔细看过剧本,但也许它适合你。描述仅限德语,因此您可能需要翻译服务(如谷歌翻译;见上文)。

次佳解决办法

如果您仍在寻找此类应用程序,我目前正在开发该应用程序:http://douaneapp.com/

我的应用程序阻止任何未知的应用程序(授权应用程序的新版本被阻止)并询问您是否允许或拒绝其流量。

看看网站;-)

firewall,iptables,ubuntu

第三种解决办法

I found是解决问题的便捷解决方案。您创建一个永远不允许使用Internet的组,并以该组的成员身份启动该程序。

  1. 创建一个组no-internet。不要加入这个群体。

  2. 将规则iptables -A OUTPUT -m owner --gid-owner no-internet -j DROP添加到ip表,以阻止属于组no-internet的所有进程使用网络。

  3. 执行sudo -g no-internet YOURCOMMAND而不是YOURCOMMAND

您可以轻松编写一个使用sudo的包装器脚本。您可以通过添加删除密码提示

%sudo     ALL=(:no-internet)      NOPASSWD: ALL

或类似于您的/etc/sudoers

第四种办法

Ubuntu中已经有防火墙,但是默认情况下它被禁用。您可以通过命令行启用和使用它:

https://help.ubuntu.com/8.04/serverguide/C/firewall.html

或者您可以使用带有图形界面的程序gufw,它可以直接从Ubuntu软件中心安装:

https://apps.ubuntu.com/cat/applications/oneiric/gufw/

如果您需要阻止对特定应用程序的Internet访问,您可以尝试此程序仍处于测试版,并且在Ubuntu软件中心中不可用:

http://sourceforge.net/projects/leopardflower/

第五种办法

在另一个用户下运行程序将使用该用户的配置文件而不是您的用户。

这是一个不需要修改防火墙规则的解决方案,并且在具有修改环境的同一用户(通过sudo)下运行,其中您的用户是my_user,并且您要运行的应用程序是my_app

    # run app without access to internet
    sudo unshare -n sudo -u my_user my_app

有关详细信息,请参阅man unshare

第六种办法

@psusi:我真的希望人们不会兜售糟糕而不是有用的信息。 IPTables允许一个人这样做,所以我几乎不认为它”foolhardy”。只是在不了解用例的情况下说”NO”有点狭隘。 http://www.debian-administration.org/article/120/Application_level_firewalling

编辑bodhi.zazen

注 – 此选项已于2005年从IPTABLES中删除,8年前已发出此答案

见 – http://www.spinics.net/lists/netfilter/msg49716.html

commit 34b4a4a624bafe089107966a6c56d2a1aca026d4 Author: Christoph Hellwig Date: Sun Aug 14 17:33:59 2005 -0700

[NETFILTER]: Remove tasklist_lock abuse in ipt{,6}owner

Rip out cmd/sid/pid matching since its unfixable broken and stands in the way of locking changes to tasklist_lock.

Signed-off-by: Christoph Hellwig <hch@xxxxxx> Signed-off-by: Patrick McHardy <kaber@xxxxxxxxx> Signed-off-by: David S. Miller <davem@xxxxxxxxxxxxx> 

第七种办法

我发现here的解决方案很好。它涉及创建允许Internet访问的user-group,并设置防火墙规则以仅允许该组访问。应用程序访问Internet的唯一方法是由该组的成员运行。您可以通过使用sudo -g internet -s打开shell来运行此组下的程序。

要重温上面链接的帖子中的内容:

  1. 通过在shell中键入以下内容来创建”internet”组:sudo groupadd internet

  2. 确保将运行下面脚本的用户添加到/etc/group中的sudo组。如果您最终修改此文件,则需要在下面的脚本运行之前注销并重新登录。

  3. 创建包含以下内容的脚本,然后运行它:

    #!/bin/sh
    # Firewall apps - only allow apps run from "internet" group to run
    
    # clear previous rules
    sudo iptables -F
    
    # accept packets for internet group
    sudo iptables -A OUTPUT -p tcp -m owner --gid-owner internet -j ACCEPT
    
    # also allow local connections
    sudo iptables -A OUTPUT -p tcp -d 127.0.0.1 -j ACCEPT
    sudo iptables -A OUTPUT -p tcp -d 192.168.0.1/24 -j ACCEPT
    
    # reject packets for other users
    sudo iptables -A OUTPUT -p tcp -j REJECT
    
    # open a shell with internet access
    sudo -g internet -s
    
  4. 通过运行上面的脚本,您将拥有一个shell,您可以在其中运行具有Internet访问权限的应用程序。

请注意,此脚本不会执行任何操作来保存和还原防火墙规则。您可能希望修改脚本以使用iptables-saveiptables-restore shell命令。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/1694.html,未经允许,请勿转载。