限制输出只允许使用iptables的本地主机

我想限制出站stream量只有本地主机使用iptables。 我已经在OUTPUT上有一个默认的DROP策略,并且有一个拒绝所有stream量的规则。 我需要在OUTPUT链中添加一条规则。

我已经看到了这种types的规则的几个不同的例子,最常见的是:

-A OUTPUT -o lo -j ACCEPT

-A OUTPUT -o lo -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT

有没有任何理由使用后者,而不是前者? 可以在数据包上使用127.0.0.1以外的地址吗?

如果您的机器有多个接口,并且您尝试与其他接口之一的IP进行通信,则stream量实际上将通过lo接口。 Linux足够聪明地弄清楚这个stream量是注定要发生的,而不是尝试使用真实的界面。

规则-A OUTPUT -o lo -j ACCEPT将允许其他stream量,而规则-A OUTPUT -o lo -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT将拒绝它。

你可以看到内核在环回接口上运行的所有内容

 ip route show type local table all 

(只要注意第一个值,即IP或networking/掩码)

是的,它可以有其他地址。 你可能会看到127.0.0.0/8正在使用的任何东西。 在Debian / Ubuntu系统中, 127.0.0.0/8范围内的地址用于处理Apache问题。

其他地址也可以分配,但这是非常罕见的。

我已经在OUTPUT上有一个默认的DROP策略,并且有一个拒绝所有stream量的规则

这是没有意义的; 他们达到了同样的目的。 DROP的默认策略就足够了。

你正在寻找的规则可能是

 iptables -A OUTPUT -o lo -j ACCEPT 

但有一些iptables的经验将(希望)教你不要这样做; 使用input规则。