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

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

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

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

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

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

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

看看网站;-)

屏幕截图

我找到了解决问题的方便解决方案。 您创建一个永远不允许使用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允许人们这样做,所以我几乎不认为它“蛮干”。 只是在不了解用例的情况下说“不”有点狭隘。 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作者:Christoph Hellwig 日期:Sun Aug 14 17:33:59 2005 -0700

[NETFILTER]:删除ipt {,6}所有者中的tasklist_lock滥用行为

撕掉cmd / sid / pid匹配,因为它无法修复,并且阻止了对tasklist_lock的更改。

 Signed-off-by: Christoph Hellwig  Signed-off-by: Patrick McHardy  Signed-off-by: David S. Miller  

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

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

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

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

  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命令。

无论好坏,Linux使用不同的方法。 没有简单的图形界面来提供此function。 在互联网上有很多关于这个主题的讨论,如果你谷歌搜索,你可以找到有趣的讨论。 虽然辩论很有意思,但到目前为止还没有一个专门的程序员小组想要编写和维护这个function。

在Linux中提供此function的工具是Apparmor,Selinux和Tomoyo。

这些工具都不容易学习,并且都有优点和缺点。 我个人更喜欢SELinux,尽管SELinux有更陡峭的学习曲线。

看到:

http://www.linuxbsdos.com/2011/12/06/3-application-level-firewalls-for-linux-distributions/

有一个已经被引用的应用程序,leopardflower。 我不确定状态/维护。

它是在iptables中直到内核版本2.6.24如果你运行的是2.x – 2.6.24机器并且你的内核已经完成它你可以做到。 由于某种原因,他们把它拿出来,所以不是它不是微软。 http://cateee.net/lkddb/web-lkddb/IP_NF_MATCH_OWNER.html

尝试豹花 。 它具有GUI和每个应用程序的限制。

不,这是不可能的。 它也不是传统防火墙定义的一部分。 微软最近提出了这个问题,试图解决他们根本破坏的操作系统安全问题。 在Linux社区中,它被认为是愚蠢和不可行的,因为一个不允许的程序可以简单地运行另一个程序并以此方式获得访问权限。

如果您不喜欢程序在运行时在网络上执行的操作,则不要运行该程序。