我想使用一种软件来控制哪个程序可以连接到互联网。我知道这种行为与“防火墙”一词有关,但是如果有人要求使用个人防火墙,则某些Linux用户会非常不高兴。我不想因这样的程序而让您不高兴。
我不想“保护端口”或“个人防火墙”在Windows上承诺的其他功能。我调查了iptables
一下,但不符合我的要求。
我在这里看到了一个很好的答案(“如何在酒类应用程序中阻止Internet访问”),但是对此进行设置非常不舒服。
是否有软件询问每个程序是否可以访问互联网?
我想使用一种软件来控制哪个程序可以连接到互联网。我知道这种行为与“防火墙”一词有关,但是如果有人要求使用个人防火墙,则某些Linux用户会非常不高兴。我不想因这样的程序而让您不高兴。
我不想“保护端口”或“个人防火墙”在Windows上承诺的其他功能。我调查了iptables
一下,但不符合我的要求。
我在这里看到了一个很好的答案(“如何在酒类应用程序中阻止Internet访问”),但是对此进行设置非常不舒服。
是否有软件询问每个程序是否可以访问互联网?
Answers:
德语Ubuntu论坛中有一个Perl脚本(谷歌翻译成英语)似乎可以做到这一点。我从没有尝试过,也没有仔细看一下脚本,但是也许对您有用。说明仅以德语提供,因此您可能需要翻译服务(例如Google Translate;请参见上文)。
如果您仍在寻找这种应用程序,我目前正在开发该应用程序:http : //douaneapp.com/ https://gitlab.com/douaneapp/Douane
我的应用程序阻止了所有未知的应用程序(阻止了授权应用程序的新版本),并询问您是允许还是拒绝其流量。
看看网站;-)
我找到了解决该问题的便捷解决方案。您创建了一个不允许使用Internet的组,并以该组的成员身份启动程序。
创建一个组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
保留防火墙规则。
sudo -g no-internet firefox
连接速度比默认指南更快。没用
Ubuntu中已经有防火墙ufw
,但默认情况下已禁用。您可以通过命令行或它的前端gufw启用和使用它,可以直接从Ubuntu软件中心安装它。
如果您需要阻止对特定应用程序的互联网访问,可以尝试LeopardFlower,它仍然处于beta版本,并且在Ubuntu软件中心不可用:
在另一个用户下运行程序将使用该用户而不是您自己的配置文件。
这是一种不需要修改防火墙规则的解决方案,并且可以在sudo
具有修改后环境的同一用户(通过)下运行,您所在的用户是my_user
您要运行的应用程序my_app
:
# run app without access to internet
sudo unshare -n sudo -u my_user my_app
有关更多详细信息,请参见man unshare
和此答案。
如果您正在寻找GUI防火墙,那么我在OpenSnitch上已经取得了不错的成绩-它尚未出现在ubuntu 仓库中,因此我不称其为生产级,但是按照github页面上的构建步骤进行操作对我来说很有效。
@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>
iptables
以实现每个应用程序限制的更多信息。我建议您在答案中包含重要信息(并仍然提供链接以供参考)。
另一个选择是firejail。它在沙箱中运行应用程序,您可以在其中控制应用程序是否可以看到网络:
firejail --net=none firefox
此命令将启动没有Internet访问权限的Firefox浏览器。请注意,Ubuntu存储库中的firejail分发已过时 -最好从firejail主页下载其最新的LTS版本。
我发现这里发布的解决方案是一个很好的解决方案。它涉及创建允许访问Internet的用户组,并设置防火墙规则以仅允许该组的访问。应用程序访问Internet的唯一方法是由该组的成员运行。您可以通过使用打开外壳程序来运行该组下的程序sudo -g internet -s
。
回顾一下我上面链接的帖子中的内容:
通过在外壳中键入以下内容来创建“互联网”组: sudo groupadd internet
确保将运行下面脚本的用户添加到中的sudo
组中/etc/group
。如果您最终修改了此文件,则需要注销并重新登录,然后以下脚本才能起作用。
创建一个包含以下内容的脚本,然后运行它:
#!/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
通过运行上述脚本,您将拥有一个外壳,您可以在其中运行可以访问Internet的应用程序。
请注意,此脚本不会执行任何操作来保存和还原防火墙规则。您可能希望修改脚本以使用iptables-save
和iptables-restore
shell命令。
无论好坏,Linux使用不同的方法。没有简单的图形界面可提供此功能。互联网上有很多关于此主题的讨论,如果您使用Google搜索,可以找到有趣的讨论。尽管辩论很有趣,但迄今为止,还没有专门的程序员小组想要编写和维护此功能。
在Linux中提供此功能的工具是Apparmor,Selinux和Tomoyo。
这些工具都不是太容易学习的,并且各有优缺点。我个人更喜欢SELinux,尽管SELinux的学习曲线更陡峭。
看到:
http://www.linuxbsdos.com/2011/12/06/3-application-level-firewalls-for-linux-distributions/
有一个已经被引用的应用程序leopardflower。我不确定状态/维护。
直到内核版本2.6.24为止,它都位于iptables中。如果您正在运行2.x-2.6.24机器,并且您的内核已将其编译,则可以执行此操作。由于某种原因,他们将其取出,因此没有Microsoft。 http://cateee.net/lkddb/web-lkddb/IP_NF_MATCH_OWNER.html
不,不可能。它也不是防火墙的传统定义的一部分。微软是最近才提出来的,目的是解决他们从根本上破坏了的操作系统安全问题。在Linux社区中,它被认为是愚蠢且不可行的,因为不允许的一个程序可以简单地运行另一个程序,并以此方式获得访问权限。
如果您不喜欢程序在运行时在网络上正在做什么,则不要运行该程序。