在 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 的优点是更简单,并且可以(这个脚本)是原子的。
我没有像您的代码中那样处理本地网络,因为您在文本的其余部分中没有提及。