Ubuntu 上是否有用于出站流量的交互式防火墙?

Ubuntu 上是否有用于出站流量的交互式防火墙?

我希望阻止某些程序“呼叫总部”,并允许其他程序仅访问特定的网络服务器。

有没有什么方法可以以交互方式允许或拒绝来自 Ubuntu 上各个程序的出站通信?

答案1

那将是网络过滤器/ip过滤器使用一些可以以交互方式执行操作的脚本(可能使用 Ubuntu 上提供的良好 API),使用后台脚本。

有一些老讨论在这个 UbuntuForums 页面上.
另请参阅 UbuntuIPTables如何操作防火墙页。

答案2

你可以给阿努比斯试试吧。这里有 Karmic Koala 的安装说明和软件包(我是超级用户新手,所以你必须自己找到它们 >:-S 提示:在下载页面上向下滚动到“分发版”)。

答案3

虽然不完全是交互式的,但我知道 3 种限制程序网络访问的方法。

  1. 默认情况下,Linux 会为用户分配权限,并且他们运行的每个程序都具有相同的权限。以单独的用户身份运行不受信任的程序。如果您能做到,这很简单。(有时您不喜欢程序需要 root 权限。)添加以下防火墙规则:

    iptables -A OUTPUT -m owner --uid-owner ${untrusted_uid} -j DROP
    
  2. 如果你不怕修补内核,请尝试grsecurity。它允许同一用户的不同可执行文件具有不同的权限。这可能是最好的方法,因为您可以将其与 iptables 规则集成并指定详细的限制。规则应如下所示:

    ...
    role your_regular_user u
        ...
        subject /path/to/untrusted/program
            connect disabled
        ...
    ...
    
  3. 使用 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”。

以下是一些参考资料。

https://help.ubuntu.com/community/Gufw

相关内容