![使用 iptables 限制输出以仅允许本地主机](https://linux22.com/image/579442/%E4%BD%BF%E7%94%A8%20iptables%20%E9%99%90%E5%88%B6%E8%BE%93%E5%87%BA%E4%BB%A5%E4%BB%85%E5%85%81%E8%AE%B8%E6%9C%AC%E5%9C%B0%E4%B8%BB%E6%9C%BA.png)
我想使用 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 经验将(希望)教会您不要这样做;而是使用输入规则。