给定一个典型的Web服务器,使用Apache2,常见的PHP脚本和DNS服务器,从安全的angular度来看,将phpmyadmin这样的pipe理接口绑定到localhost并通过SSH隧道进行访问就足够了?
或者有人知道,例如。 phpmyadmin(或任何其他常用脚本)正在本地主机上的某个端口上侦听容易伪造的请求,如果没有其他身份validation的话会被执行?
iptables ? 这个想法是,如果有人发现在PHP脚本或Apache的弱点,networking仍然会阻止这个请求,因为它没有通过SSH隧道到达? …有人可以从互联网上的某个地方轻易伪造一个请求,以便networking服务器可以接受它,如果服务器只在127.0.0.1上侦听,认为它来源于127.0.0.1?
这是可能的,但极不可能。 考虑一下:当一个进程正在监听一个绑定到127.0.0.1的端口时,只有当数据包的目的地址是127.0.0.1时,一个进入的IP包才会到达这个进程。 除非你的攻击者已经破坏了他和你的服务器之间的每一个路由器,否则这样的数据包将不会被路由到你的服务器,因为127.0.0.1通常不是一个可路由的地址。
但假设不可思议的事情发生了,一个伪造的包到127.0.0.1到达你的服务器。 在这种情况下,数据包必须通过不是回送接口( lo )的networking接口到达。 由于按照惯例,所有发往127.0.0.0/8的合法数据包都必须通过lo接口到达,所以使用一个简单的iptables规则就可以很容易地将伪造的数据包识别并阻塞到127.0.0.0/8:
-A INPUT -d 127.0.0.0/8 ! -i lo -j DROP
如果将进程的绑定地址更改为127.0.0.1,则这应该足以防止从任何其他计算机进行任何远程访问。 如果您尝试连接,则会拒绝连接 。 这将出现(从远程计算机的angular度来看)就像进程停止和端口closures。
为了增加安全性,您可以添加iptables规则来阻止来自远程地址的这些端口。 这将防止您通过更改configuration(错误或升级后)意外启用远程访问。