如何禁止外部访问 127.0.0.1?

wba*_*bad 3 networking linux nginx iptables

我在 127.0.0.1:9000 上使用 tcp 套接字将 nginx 连接到 php5-cgi。但是我想确保不能对这个 IP 发出外部请求,这样攻击者就不能混淆 IP 并绕过 nginx 用 php 做讨厌的事情。

现在我想知道是否真的可以进行这种利用,如果可以,我该如何使用 iptables 来避免它?

Mad*_*ter 20

通常不可能localhost从外部地址访问仅绑定到 的服务。SF是非常 充满 问题,询问如何扭转这种状况,并且这样做是不平凡所需的课间操,正是因为结合只是整个概念localhost是为了让你安全结结实实。

  • 显然,IPv6 情况并非如此,其中 [`::1` 可以被欺骗](http://googleprojectzero.blogspot.de/2015/01/finding-and-exploiting-ntpd.html) 取决于您的防火墙配置. (4认同)
  • 不过,这肯定会被修补。内核/网络层不应从物理链接接受本地主机请求。 (3认同)

ben*_*123 5

您可以创建防火墙规则来阻止此流量,但启用反向路径过滤要容易得多。

(root)$ echo 1 > /proc/sys/net/ipv4/conf/eth0/rp_filter
Run Code Online (Sandbox Code Playgroud)

反向路径过滤使用路由表过滤掉传入数据包上的欺骗地址。

通过将以下内容添加到 /etc/systcl.conf,您可以在所有接口上默认启用此功能:

net.ipv4.conf.default.rp_filter=1
net.ipv4.conf.all.rp_filter=1
Run Code Online (Sandbox Code Playgroud)

更多信息:http : //www.slashroot.in/linux-kernel-rpfilter-settings-reverse-path-filtering

然而...

正如 MadHatter 已经提到的,这对于 127.0.0.1/8 来说是完全没有必要的。(如果需要,您可以使用 记录这些数据包net.ipv4.conf.all.log_martians = 1)。