在.htaccess中阻止IP地址有多安全?

4

我有一个Web服务器,托管了几个不同的网站。其中一些由外部客户使用,而另一些仅供内部使用。对于内部网站,我有一个.htaccess文件,拒绝所有IP地址,但允许以10.25.x.x开头的任何IP地址。

IndexIgnore *
deny from all
allow from 10.25.

这意味着只有我们本地网络中的计算机可以访问服务器。即使客户端计算机具有10.25.x.x的本地IP地址,我的Web服务器也应该只看到他们的公共IP地址,对吗?
我没有表单上传文件到此目录,所以它们不应该能够覆盖.htaccess文件。
我的问题是:攻击者是否有任何方法可以绕过这些安全方法?如果是这样,我可以采取哪些预防措施来确保不会发生这种情况?
3个回答

5
我认为Sébastien Renauld的答案表明IP黑/白名单并不能完全保护您的网站。您的应用程序应该已经足够安全,以便进行公共访问部署。无论如何,IP限制确实有助于限制对您的应用程序的攻击向量。
请记住,IP欺骗在技术上是可能的,但很难执行。
从网络外部,黑客必须至少绕过以下障碍:
- 任何删除故障IP数据包的ISP逻辑(即具有与发送者IP不同的IP地址)。 - 您这边的任何防火墙/网关/路由器都会丢弃这些数据包。通常内部和外部网络是分开的,数据包不易在这些网络之间路由。 - HTTP使用TCP协议,其中包括三次握手作为连接设置的一部分。这意味着发送方也需要确认连接。简而言之:此连接设置使用任意数字来同步服务器和客户端的通信。黑客需要猜测这个数字,并在正确的时刻发送它。

除了我刚总结的障碍,攻击者需要绕过更多的障碍,例如防止本地合法客户端干扰攻击。(想想服务器欺骗IP地址的响应将去向何处以及模拟的客户端会做什么。)

欺骗IP地址的更简单方法是从网络内部进行。嗯,如果已经可能了,你可能需要先研究一些其他事情 :)

我希望你能看到,现在一个黑客实施这种攻击实际上是不可行的。安全是攻击者所获得的满足感与所需努力之间的平衡。

因此,我认为IP白名单制度,以及Sébastien Renauld建议的本地网络绑定,是足够好的安全实践。您仍然需要假设攻击者可以访问您的内部网络,并且因此还应该关注您的网站和服务器本身的安全性。


4
你问题的底线是:永远不要依赖于IP地址的值。
为了证明和阐述这一点,这里的文件解释了IP地址实际上是如何附加到数据包上的。它实际上只是源和目标的字节列表。任何人都可以有效地修改它们(顺便说一下,这就是NAT做的事情之一,否则NAT穿透将无法工作)。这意味着,如果它们可以被修改,它们就可以被欺骗。
有一些方法可以部分地防范这种情况,但所有方法都依赖于启发式算法。例如,最简单的规则是,如果一个数据包来自你的WAN接口,但声称来自192.168.0.1,那么你知道有什么问题。市场上的一些安全设备正是这样做的:它们过滤掉它们认为可疑的内容。
在你的情况下,有一种方法可以完全抵御这一切。我假设你正在使用Apache。如果是这样,不要将你的VirtualHost绑定到所有接口(这是Apache的默认设置:*:80),而是将其绑定到特定的本地接口(10.0.0.0:80或等效)。这将强制Apache仅在该接口上侦听ping,如果运行unix/linux,则与其他接口隔离并保证是独立的。这使你可以拥有一个仅限于局域网的网站。

谢谢您的解释。我正在使用XAMPP在Windows 2008服务器上运行Apache。您认为VirtualHost方法仍然有效吗? - Kenny Johnson
OT:这是一个很好的介绍。我喜欢它。 - hellerve
2
@Carson:比htaccess过滤更有效。虽然它不会是欺骗防护的,但现在你只需要添加一个ISA上游(或PIX防火墙),它们都支持入口过滤。从那里开始,你就完成了。 - Sébastien Renauld

1

是的,有的。IP欺骗是可能的。请记住,每个人都可以更改他发送的数据包的元数据。

除了完全不同的身份验证方法外,几乎没有预防性方法可以帮助您。您无法仅通过.htaccess黑名单(在您的情况下应该是白名单)实现有效的安全性。 入口过滤是必须的。


能够伪造公共IP地址以看起来像本地IP地址吗?我原以为本地地址(10.x.x.x,192.168.x.x等)只用于局域网。 - Kenny Johnson
@KennyJohnson:这取决于您在网络中所需连接的节点。如果您距离目标只有一步之遥,并且该目标没有设备可以进行进入过滤(正如Carson所指定的那样)。 - Sébastien Renauld
请记住,IP只是某些数据包头部内的一个数字。它可以手工制作,那么谁能阻止攻击者签名为10.x.x.x呢?许多ISP通过网络入口过滤来阻止这种情况,但我不会依赖于此。如果你必须仅使用.htaccess来完成它(尽管我不建议),请彻底检查从外部发出的每个数据包。 - hellerve
1
...或者将Apache绑定到本地接口,这比让Apache绑定在所有东西上并信任所有东西要好一步。这是另一种解决方案,在Windows上稍微更安全,在*nix上更安全得多。 - Sébastien Renauld
如果我将Apache绑定到本地接口,是否会影响整个服务器,还是只能限制在某些目录中?我们的服务器上有2个网站需要对公众保持可用状态。 - Kenny Johnson
1
@KennyJohnson:这会限制您的VirtualHost及其所有内容。但是,这并不会完全限制Apache。 - Sébastien Renauld

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接