iptables:尝试理解授予突触访问权限的规则

iptables:尝试理解授予突触访问权限的规则

(这是基于 antiX 的系统,而 antiX 本身又基于 Debian stretch。)我对 iptables 有以下规则:

iptables -F
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A INPUT -s 192.168.10.0/24 -d 192.168.10.0/24 -j ACCEPT
iptables -A OUTPUT -s 192.168.10.0/24 -d 192.168.10.0/24 -j ACCEPT
iptables -A OUTPUT -m owner --uid-owner root -j ACCEPT
iptables -A OUTPUT -m owner --gid-owner internet_access -j ACCEPT
iptables -nvL

这个想法是,对于 root 所做的一切以及 internet_access 组中的所有内容,都允许外部流量。这似乎(大部分)按预期工作。但是,synaptic(以及 apt 系列中的其他程序)似乎不喜欢该规则集。它无法重新加载其数据库,而是挂起。我在 Google 上搜索解决方案,发现添加此行有帮助:

iptables -A OUTPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT

我(我想我)知道它的作用,但我不明白为什么首先有必要这样做。synaptic 以 root 身份运行,因此它应该具有完全的互联网访问权限(以 root 身份启动的其他应用程序确实具有互联网访问权限)。

其次,如果我将上面的规则改为这样:

iptables -A OUTPUT -p tcp --dport 80 -m owner --uid-owner root -m state --state NEW -j ACCEPT

它再次停止工作。但是,如果我使用 psgrep 列出突触进程,它会显示为用户 root 和组 root。我很困惑。

(如果您还没推断出这一点的话,我对 Linux 还很陌生(可以说对 iptables 还很陌生)。)

答案1

在我的 Kubuntu 中,这是因为apt-get运行多个/usr/lib/apt/methods/http进程。它们的所有者是_apt,而不是root。我知道_apt在我的 Debian 中也存在。

成为_apt您所在组的成员internet_access应该会有所帮助。
成为_apt您所在组的成员internet_access不会有所帮助,因为--gid-owner如果数据包套接字的文件结构归给定组所有,则匹配。这与“如果数据包套接字的文件结构归给定组的成员所有”不同。

在我的 Kubuntu 中,这些进程由/http拥有。最简单的解决方案似乎只是允许用户通信:_aptnogroup_apt

iptables -A OUTPUT -m owner --uid-owner _apt -j ACCEPT

相关内容