如何禁用进程的互联网访问但允许本地主机?

如何禁用进程的互联网访问但允许本地主机?

在 Ubuntu 17.04 中,我一直在尝试使用 IP 表来阻止进程的互联网连接,但允许 localhost,特别是 127.0.0.1:5500(进程创建的服务器)。

虽然该进程无法访问互联网,但访问 127.0.0.1:5500 也会超时。尝试 ping 127.0.0.1 结果为"ping: sendmsg: Operation not permitted".

我按照以下步骤操作: https://ubuntuforums.org/showthread.php?t=1188099

我的 IP 表文件是:

#!/bin/bash
iptables -A OUTPUT -m owner --gid-owner no-internet -d 192.168.1.0/24 -j ACCEPT
iptables -A OUTPUT -m owner --gid-owner no-internet -d 127.0.0.0/8 -j ACCEPT
iptables -A OUTPUT -m owner --gid-owner no-internet -j DROP

我用它来运行sudo -g no-internet <command>,即sudo -g no-internet firefox

我做错了什么,还是这根本不可能?有更好的方法吗?

答案1

这是新 nftables 的解决方案。然而 Ubuntu 17.04 可能太旧了。 Debian 在最新版本中默认只安装了 nftables。

它是根据我的系统上的类似内容改编的。它没有按原样进行测试(尤其是行dport:我没有这个),但应该可以工作。

#!/usr/sbin/nft -f

table ip my_table {}
flush table my_table

table ip my_table {
    chain output {
        type filter hook output priority 0; policy accept;
        skuid "other" jump restrict_chain; #user to restrict
    }

    chain restrict_chain {
        counter;
        oifname != "lo" jump reject_chain;
        tcp dport != 5500 jump reject_chain; #line not tested
        accept;
    }
}

nftables 的优点是更简单,并且可以(这个脚本)是原子的。

我没有像您的代码中那样处理本地网络,因为您在文本的其余部分中没有提及。

相关内容