![如何控制每个程序的互联网访问?](https://linux22.com/image/831354/%E5%A6%82%E4%BD%95%E6%8E%A7%E5%88%B6%E6%AF%8F%E4%B8%AA%E7%A8%8B%E5%BA%8F%E7%9A%84%E4%BA%92%E8%81%94%E7%BD%91%E8%AE%BF%E9%97%AE%EF%BC%9F.png)
我想使用软件来控制哪些程序可以连接到互联网。我知道这种行为与“防火墙”一词有关,但如果有人要求使用个人防火墙,一些 Linux 用户会非常不高兴。我不想因为要求这样的程序而让你不高兴。
我不想“保护端口”或个人防火墙在 Windows 上承诺的其他东西。我研究过,iptables
但它不符合我的要求。
我在这里看到了一个很好的答案(“如何阻止 Wine 应用程序的互联网访问”),但是这样设置起来很不舒服。
是否有一个软件可以询问每个程序是否可以访问互联网?
答案1
我成立一个方便的解决方案可以解决这个问题。您可以创建一个永远不允许使用互联网的组,并以该组成员的身份启动该程序。
创建一个小组
no-internet
。不是加入此群组sudo addgroup no-internet
向 iptables 添加一条规则,阻止属于该组的所有进程
no-internet
使用网络(ip6tables
也用于阻止 IPv6 流量)sudo iptables -A OUTPUT -m owner --gid-owner no-internet -j DROP
- 执行
sudo -g no-internet YOURCOMMAND
代替YOURCOMMAND
。
您可以轻松编写一个使用 sudo 的包装脚本。您可以通过添加以下内容来摆脱密码提示:
%sudo ALL=(:no-internet) NOPASSWD: ALL
或者类似的东西sudo visudo
使用iptables-save
和iptables-restore
来持久保存防火墙规则。
答案2
注意:Douane 不再积极开发,据报道在更高版本的 Ubuntu 中将无法使用。此解决方案可能不起作用,但出于历史原因,答案保持不变。
如果你仍在寻找这种应用程序,我目前正在开发该类型的应用程序:http://douaneapp.com/ https://gitlab.com/douaneapp/Douane
我的应用程序会阻止任何未知的应用程序(授权应用程序的新版本被阻止)并询问您是否允许或拒绝其流量。
看看这个网站;-)
答案3
另一个选择是火狱。它在沙箱内运行应用程序,您可以在其中控制应用程序是否可以看到网络:
firejail --net=none firefox
此命令将在没有互联网访问的情况下启动 Firefox 浏览器。请注意,Ubuntu repo 中的 firejail 发行版是过时的- 最好从 firejail 主页下载其最新的 LTS 版本。
答案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 防火墙,我使用效果不错开放的Snitch— 它还不在 ubuntu 仓库中,我也不会称它为生产级,但是按照github页面对我有用。