我输入:
netstat -atlpvn
并注意到像 gedit 和 python 这样的应用程序在网络之外有外部地址(网络是连接到互联网的单台计算机)。
有什么方法可以限制允许哪些应用程序传出?例如,我只希望 Firefox 有传出连接?
谢谢
答案1
据我所知,限制每个应用程序的 Internet 连接的唯一方法是通过 SELinux 功能,这需要为必须具有 Internet 连接的应用程序提供额外的权限。我怀疑为 Firefox 提供额外的权限是否会有助于提高安全性,而且尝试访问 Internet 的应用程序无论如何都可以通过 Firefox 或 wget 或其他“合法”应用程序进行访问。此外,对于脚本,我认为您必须将这些功能赋予解释器(例如/usr/bin/python
),它不会以任何有用的方式进行区分。
您可以逐个用户地限制互联网连接;请参阅将软件绑定到不同的网络接口和双网络连接例如。或者,您可以在轻量级虚拟环境中运行不想授予 Internet 连接的应用程序,例如龙芯。
答案2
编辑:此解决方案自内核 2.6.14 起无效。请参阅 Gilles 的评论。
您可以在输出链中使用 iptables 规则,并使用 --cmd-owner 选项匹配进程名称。例如:
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m owner --cmd-owner "firefox-bin" -j ACCEPT
iptables -A OUTPUT -m owner --cmd-owner "ssh" -j ACCEPT
iptables -A OUTPUT -j DENY
这样,您就允许从 firefox-bin、ssh 和已建立的连接输出流量。
答案3
您可能需要一款像 LeopardFlower 这样的应用程序,它允许每个应用程序设置防火墙。除此之外,创建一个单独的帐户并在其下启动 Firefox,然后使用像 ipatbles -A OUTPUT -m Owner --uid-owner 1005 -j DROP 这样的规则来阻止该用户的所有流量。