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

gue*_*rda 72 iptables firewall

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

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

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

小智 38

注意:Douane 不再积极开发,据报道在更高的 Ubuntu 版本中不起作用。此解决方案可能不起作用,但由于历史原因,答案保持原样。

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

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

看看网站;-)

截屏

  • 呃,这似乎正是我需要的!!但是我找不到可以在 Ubuntu 上安装它的软件包。 (2认同)

Tim*_*Tim 34

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

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

    sudo addgroup no-internet
    
    Run Code Online (Sandbox Code Playgroud)
  2. 向 iptables 添加规则,以防止属于该组的所有进程no-internet使用网络(ip6tables也用于防止 IPv6 流量)

    sudo iptables -A OUTPUT -m owner --gid-owner no-internet -j DROP
    
    Run Code Online (Sandbox Code Playgroud)
  3. 执行sudo -g no-internet YOURCOMMAND而不是YOURCOMMAND.

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

%sudo     ALL=(:no-internet)      NOPASSWD: ALL
Run Code Online (Sandbox Code Playgroud)

或者,类似的东西 sudo visudo

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

  • @kenn我只能说它在这里工作得很好。我猜你在创建规则时做错了什么。不保存规则,不使脚本可执行或类似的事情。 (2认同)
  • 对我来说效果很好,即使使用 Firefox。谢谢你! (2认同)
  • 在 Ubuntu 19.04 上,这似乎也不适合我。我确实必须安装 iptables-persistent 才能允许在重新启动之间保存更改。(所以您可能想将其添加到上面的解决方案中)。但是, sudo -g no-internet firefox 并不限制 Firefox 访问互联网。从概念上讲,这个解决方案似乎应该有效。是否有一些基本的东西被忽视了?例如,我们是否需要同时设置 ipv4 和 ipv6 才能使其正常工作? (2认同)

Dim*_* II 11

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

firejail --net=none firefox
Run Code Online (Sandbox Code Playgroud)

此命令将在没有互联网访问的情况下启动 Firefox 浏览器。请注意,Ubuntu 存储库中的 firejail 发行版已过时- 最好从 firejail 主页下载其最新的 LTS 版本。


Flo*_*sch 6

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


hei*_*o81 5

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

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


ccp*_*zza 5

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

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

# run app without access to internet
sudo unshare -n sudo -u my_user my_app
Run Code Online (Sandbox Code Playgroud)

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

Linux图形用户界面防火墙

如果您正在寻找 GUI 防火墙,我在OpenSnitch 上取得了不错的结果——它还没有出现在 ubuntu 存储库中,我不会称其为生产级,但遵循github页面中的构建步骤对我有用