我希望阻止某些程序“呼叫总部”,并允许其他程序仅访问特定的网络服务器。
有没有什么方法可以以交互方式允许或拒绝来自 Ubuntu 上各个程序的出站通信?
答案1
那将是网络过滤器/ip过滤器使用一些可以以交互方式执行操作的脚本(可能使用 Ubuntu 上提供的良好 API),使用后台脚本。
有一些老讨论在这个 UbuntuForums 页面上.
另请参阅 UbuntuIPTables如何操作和防火墙页。
答案2
你可以给阿努比斯试试吧。这里有 Karmic Koala 的安装说明和软件包(我是超级用户新手,所以你必须自己找到它们 >:-S 提示:在下载页面上向下滚动到“分发版”)。
答案3
虽然不完全是交互式的,但我知道 3 种限制程序网络访问的方法。
默认情况下,Linux 会为用户分配权限,并且他们运行的每个程序都具有相同的权限。以单独的用户身份运行不受信任的程序。如果您能做到,这很简单。(有时您不喜欢程序需要 root 权限。)添加以下防火墙规则:
iptables -A OUTPUT -m owner --uid-owner ${untrusted_uid} -j DROP
如果你不怕修补内核,请尝试grsecurity。它允许同一用户的不同可执行文件具有不同的权限。这可能是最好的方法,因为您可以将其与 iptables 规则集成并指定详细的限制。规则应如下所示:
... role your_regular_user u ... subject /path/to/untrusted/program connect disabled ... ...
使用 LD_PRELOAD 禁用 connect() 函数。这是最丑陋的方法,只有在别无选择时才使用它。您将需要这样的库:
#include <errno.h> #include <stdio.h> #include <sys/types.h> #include <sys/socket.h> int connect(int sockfd, struct sockaddr const* addr, socklen_t addrlen) { errno = ECONNREFUSED; printf("connection refused\n"); return -1; }
使用以下方法编译
gcc -fPIC -shared -Wl,-soname,fake_connect fake_connect.c -o libfake_connect.so
使用以下命令启动程序
LD_PRELOAD="./libfake_connect.so" ./untrusted_program
答案4
我已经使用 gufw 一段时间了,它很好用,而且易于安装/配置。gufw 不随 Ubuntu 安装提供。您必须手动安装它“sudo apt-get install gufw”。
以下是一些参考资料。