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


59

我想使用一种软件来控制哪个程序可以连接到互联网。我知道这种行为与“防火墙”一词有关,但是如果有人要求使用个人防火墙,则某些Linux用户会非常不高兴。我不想因这样的程序而让您不高兴。
我不想“保护端口”或“个人防火墙”在Windows上承诺的其他功能。我调查了iptables一下,但不符合我的要求。

我在这里看到了一个很好的答案(“如何在酒类应用程序中阻止Internet访问”),但是对此进行设置非常不舒服。

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


在Mac上,有一个名为little snitch的软件可以执行此操作。我认为也有Windows版本...
Alvar

Answers:


6

德语Ubuntu论坛中有一个Perl脚本谷歌翻译成英语)似乎可以做到这一点。我从没有尝试过,也没有仔细看一下脚本,但是也许对您有用。说明仅以德语提供,因此您可能需要翻译服务(例如Google Translate;请参见上文)。


我会看一下。有趣的是,它可能是正确的工具。不幸的是,没有gui,但是它不应该阻止我:)
guerda 2011年

34

如果您仍在寻找这种应用程序,我目前正在开发该应用程序:http : //douaneapp.com/ https://gitlab.com/douaneapp/Douane

我的应用程序阻止了所有未知的应用程序(阻止了授权应用程序的新版本),并询问您是允许还是拒绝其流量。

看看网站;-)

屏幕截图


凉!我也查看了ppa,但是尽管在那里创建了应用程序,但那里没有软件包。另外我不知道它是否可以显示将IP解析为可读的站点名称?而且,我将按照编译说明进行操作,在那里看到了许多有关ubuntu dep软件包的提示,并且我将使用checkinstall创建.deb软件包的本地副本以轻松管理升级(删除/安装)。我想也可能是checkinstall可以用来创建您的可分发内容。
Aquarius Power

您可以在Github上打开功能请求(github.com/Douane/Douane/issues):)
ZedTuX 2014年

2
嗯,这似乎正是我所需要的!但是我找不到要在Ubuntu上安装的软件包。
azerafati

仍然没有为Ubuntu打包吗?
安华

1
Douaneapp.com又回来了!:)
ZedTuX

26

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

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

    sudo addgroup no-internet
    
  2. 将规则添加到iptables中,以阻止属于该组的所有进程no-internet使用网络(ip6tables还用于阻止IPv6流量)

    sudo iptables -A OUTPUT -m owner --gid-owner no-internet -j DROP
    
  3. 执行sudo -g no-internet YOURCOMMAND而不是YOURCOMMAND

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

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

或者,类似的东西 sudo visudo

使用iptables-saveiptables-restore保留防火墙规则。


1
我尝试了您的指南,sudo -g no-internet firefox连接速度比默认指南更快。没用
肯2014年

1
@kenn我只能说在这里工作正常。我猜您在创建规则时做错了什么。不保存规则,不使脚本可执行或类似操作。
蒂姆(Tim)

我重新启动并没有运气就再次应用了上述规则
kenn 2014年

1
即使使用Firefox也对我来说效果很好。谢谢!
Kostanos '18年

1
在Ubuntu 19.04上,这似乎也不适合我。我确实必须安装iptables-persistent,以便在重新启动之间保存更改。(因此,您可能需要将其添加到上面的解决方案中)。但是,sudo -g no-internet firefox不会限制Firefox访问Internet。从概念上讲,此解决方案似乎应该可行。有一些基本的东西被忽略吗?例如,我们是否需要同时设置ipv4和ipv6才能使其工作?
PJ辛格

5

Ubuntu中已经有防火墙ufw,但默认情况下已禁用。您可以通过命令行或它的前端gufw启用和使用它,可以直接从Ubuntu软件中心安装它。

如果您需要阻止对特定应用程序的互联网访问,可以尝试LeopardFlower,它仍然处于beta版本,并且在Ubuntu软件中心不可用:


4

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

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

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

有关更多详细信息,请参见man unshare此答案

Linux GUI防火墙

如果您正在寻找GUI防火墙,那么我在OpenSnitch上已经取得了不错的成绩-它尚未出现在ubuntu 仓库中,因此我不称其为生产级,但是按照github页面上的构建步骤进行操作对我来说很有效。


3

@psusi:我真的希望人们不会兜售坏的和无用的信息。IPTables可以做到这一点,因此我几乎不会认为它“很强硬”。在不了解用例的情况下只说“ NO”,这有点狭narrow。 http://www.debian-administration.org/article/120/Application_level_firewalling

编辑bodhi.zazen

注意-在发布此答案之前的8年中,此选项已从2005年的IPtables中删除

查看-http: //www.spinics.net/lists/netfilter/msg49716.html

提交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 <hch@xxxxxx>
Signed-off-by: Patrick McHardy <kaber@xxxxxxxxx>
Signed-off-by: David S. Miller <davem@xxxxxxxxxxxxx>

2
对于考虑举报此问题的任何人:这不应该是评论,它可以回答提出的问题。@ user141987我确实建议扩展此范围,以提供有关如何设置iptables以实现每个应用程序限制的更多信息。我建议您在答案中包含重要信息(并仍然提供链接以供参考)。
伊利亚·卡根

2
iptables不会按应用程序过滤。
Panther

该文章似乎是错误的信息,因为没有这样的选择。过去拒绝创建此类选项的请求之所以被拒绝,是因为其本质上是不可靠的;应用程序可以简单地更改其名称。
psusi

3
@psusi您是否在说“如果您的内核是使用CONFIG_IP_NF_MATCH_OWNER编译的,则可以将iptables防火墙配置为基于每个命令允许或拒绝数据包”是不正确的?还是简单地说,大多数内核不包含该选项?如果这是不正确的,是否存在揭穿它的信息来源?(此外,请注意,每个应用程序防火墙限制的主要目的不是试图使其完全安全地运行不受信任的应用程序。其目的主要是使用户能够控制应用程序的内置配置选项之外的措施。 )
Eliah Kagan

此选项于2005年从内核中删除,比给出此答案早了8年-spinics.net/lists/netfilter/msg49716.html,尽管相反的说法并不准确,但您不能使用iptables进行应用程序过滤。
Panther

3

另一个选择是firejail。它在沙箱中运行应用程序,您可以在其中控制应用程序是否可以看到网络:

firejail --net=none firefox

此命令将启动没有Internet访问权限的Firefox浏览器。请注意,Ubuntu存储库中的firejail分发已过时 -最好从firejail主页下载其最新的LTS版本。


2

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

回顾一下我上面链接的帖子中的内容:

  1. 通过在外壳中键入以下内容来创建“互联网”组: sudo groupadd internet

  2. 确保将运行下面脚本的用户添加到中的sudo组中/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. 通过运行上述脚本,您将拥有一个外壳,您可以在其中运行可以访问Internet的应用程序。

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


1

无论好坏,Linux使用不同的方法。没有简单的图形界面可提供此功能。互联网上有很多关于此主题的讨论,如果您使用Google搜索,可以找到有趣的讨论。尽管辩论很有趣,但迄今为止,还没有专门的程序员小组想要编写和维护此功能。

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

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

看到:

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

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




0

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

如果您不喜欢程序在运行时在网络上正在做什么,则不要运行该程序。


7
Microsoft的防火墙不是第一个提供此功能的主要防火墙。它甚至不是第一个提供它的Windows防火墙。BlackIce Defender,ZoneAlarm和其他用于Windows的其他软件防火墙比Windows Internet连接防火墙的引入早几年。此外,在Linux社区中还没有这样的共识。我们经常使用AppArmor(或SELinux)来约束应用程序的行为(而且我想知道AppArmor是否可以适应此目的……)。没有理由要控制哪些应用程序可以访问Internet是“错误的”。
Eliah Kagan 2013年

而且,正如其他几个答案可以证明的那样,每个应用程序的防火墙限制是完全可能的;此功能内置在iptables / netfilter中!
伊利亚·卡根

不,netfilter和iptables都无法针对每个应用程序进行过滤。它们可以按用户和端口过滤,但不能按应用程序过滤。
Panther

“可以简单地运行另一个”吗????那么,显然,这样的程序的创建者并没有阻塞目标程序的子进程,因此存在很大的缺陷。
trusktr
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.