使用 iptables 限制输出以仅允许本地主机

使用 iptables 限制输出以仅允许本地主机

我想使用 iptables 将出站流量限制为仅本地主机。我已经在 OUTPUT 上设置了默认 DROP 策略,并设置了拒绝所有流量的规则。我需要在 OUTPUT 链中添加一条规则。

我见过这种类型规则的几个不同例子,最常见的是:

-A OUTPUT -o lo -j ACCEPT

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

有什么理由使用后者而不是前者吗?数据包可以lo使用除 127.0.0.1 之外的地址吗?

答案1

如果您的机器有多个接口,并且您尝试与其中一个接口上的 IP 进行通信,则流量实际上将通过该lo接口。Linux 足够聪明,可以确定此流量是发往其自身的,而不会尝试使用实际接口。

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

你可以通过运行以下命令来查看内核通过环回接口路由的所有内容

ip route show type local table all

(只需注意第一个值,它是 IP 或网络/掩码)

答案2

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

也可以分配其他地址,但这种情况非常罕见。

答案3

我已经在 OUTPUT 上设置了默认的 DROP 策略,并设置了拒绝所有流量的规则

这毫无意义;它们达到相同的目的。默认策略为 DROP 就足够了。

你正在寻找的规则可能是

iptables -A OUTPUT -o lo -j ACCEPT

但是更多的 iptables 经验将(希望)教会您不要这样做;而是使用输入规则。

相关内容