问题描述
我想用一个软件来控制哪个程序可以连接到互联网。我知道这种行为与”firewall”这个词有关,但是如果有人要求个人防火墙,一些Linux用户会非常沮丧。我不想因为要求这样的程序而烦恼你。我不想”secure ports”或个人防火墙在Windows上承诺的其他东西。我查看了iptables
,但它不符合我的要求。
我在这里看到了一个很好的答案(如何阻止葡萄酒应用的互联网访问?),但设置它是非常不舒服的。
是否有软件要求每个程序是否可以访问互联网?
最佳解决办法
德国Ubuntu论坛(Google-translated to English)中有一个Perl script似乎就是这么做的。我从未尝试过,我没有仔细看过剧本,但也许它适合你。描述仅限德语,因此您可能需要翻译服务(如谷歌翻译;见上文)。
次佳解决办法
如果您仍在寻找此类应用程序,我目前正在开发该应用程序:http://douaneapp.com/
我的应用程序阻止任何未知的应用程序(授权应用程序的新版本被阻止)并询问您是否允许或拒绝其流量。
看看网站;-)
第三种解决办法
I found是解决问题的便捷解决方案。您创建一个永远不允许使用Internet的组,并以该组的成员身份启动该程序。
-
创建一个组
no-internet
。不要加入这个群体。 -
将规则
iptables -A OUTPUT -m owner --gid-owner no-internet -j DROP
添加到ip表,以阻止属于组no-internet
的所有进程使用网络。 -
执行
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允许一个人这样做,所以我几乎不认为它”foolhardy”。只是在不了解用例的情况下说”NO”有点狭隘。 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 Author: Christoph Hellwig Date: Sun Aug 14 17:33:59 2005 -0700
[NETFILTER]: Remove tasklist_lock abuse in ipt{,6}owner
Rip out cmd/sid/pid matching since its unfixable broken and stands in the way of locking changes to tasklist_lock.
Signed-off-by: Christoph Hellwig <hch@xxxxxx> Signed-off-by: Patrick McHardy <kaber@xxxxxxxxx> Signed-off-by: David S. Miller <davem@xxxxxxxxxxxxx>
第七种办法
我发现here的解决方案很好。它涉及创建允许Internet访问的user-group,并设置防火墙规则以仅允许该组访问。应用程序访问Internet的唯一方法是由该组的成员运行。您可以通过使用sudo -g internet -s
打开shell来运行此组下的程序。
要重温上面链接的帖子中的内容:
-
通过在shell中键入以下内容来创建”internet”组:
sudo groupadd internet
-
确保将运行下面脚本的用户添加到
/etc/group
中的sudo
组。如果您最终修改此文件,则需要在下面的脚本运行之前注销并重新登录。 -
创建包含以下内容的脚本,然后运行它:
#!/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
-
通过运行上面的脚本,您将拥有一个shell,您可以在其中运行具有Internet访问权限的应用程序。
请注意,此脚本不会执行任何操作来保存和还原防火墙规则。您可能希望修改脚本以使用iptables-save
和iptables-restore
shell命令。
参考资料