IP地址过滤有多安全?

30
我计划部署一个包含敏感数据的内部应用程序。我建议将其放在不暴露于公共互联网、仅局限于我们内部网络的机器上。但是,IT部门拒绝了我的建议,称为一个应用程序设置一个完整的机器不值得。(如果相关的话,该应用程序有自己的域名,但我被告知他们无法基于URL阻止请求。)
在应用程序内部,我编写了代码,只有当请求来自内部IP地址时才响应请求,否则它只会显示一个页面,上面写着“你不能查看这个”。我们的内部地址都有一个独特的模式,所以我正在使用正则表达式检查请求IP。
但是,我对这种策略感到紧张。对于我来说,这似乎有点奇怪。这样做合理安全吗?

你能提供你正在使用的正则表达式吗? - Evan Fosmark
3
严肃?他们不能在防火墙中设置该域名的IP地址规则吗? - Nat
@Ethan,请查看http://security.stackexchange.com/questions/4533/in-what-scenarios-is-relying-on-source-ip-address-as-a-security-control-acceptable。 - Pacerier
13个回答

23

IP过滤总比没有好,但它有两个问题:

  1. IP地址可以被欺骗。

  2. 如果内部机器受到攻击(包括客户端工作站,例如通过木马进行安装),那么攻击者可以将其用作跳板或代理来攻击您的系统。

如果这是非常敏感的数据,不一定需要专门的机器(虽然最好是这样),但您至少应该以某种方式对用户进行身份验证,并且不要在同一台机器上运行较不敏感(更容易遭受攻击)的应用程序。

如果确实很敏感,请请安排安全专业人员审核您所做的操作。

编辑:顺便提一下,如果可以,请放弃使用正则表达式,而是使用诸如tcpwrappers或操作系统内置的防火墙等功能。或者,如果您的应用程序可以有一个不同的IP地址,请使用防火墙阻止外部访问。(如果你没有防火墙,那么你可能就放弃了,可以把你的数据直接发给攻击者了 :-))


10
我不同意IP地址欺骗是这个问题的一个问题。发帖者担心敏感数据,而仅仅欺骗IP地址本身并不能让坏人访问那些数据。 - bmb
是的,但这与IP过滤的安全性问题有关。在这种情况下,问题2是更大的问题,而最大的问题是同一台服务器上的其他面向互联网的应用程序以及该组织普遍存在的安全态度似乎很差。 - frankodwyer
除了第二点,这个答案含糊不清且误导性。 - Pedro Lobito

12

我更倾向于使用SSL和证书,或者简单的用户名/密码保护,而不是IP过滤。


你的意思是在IP过滤的基础上使用用户名/密码机制吗? - Pacerier
1
正如Pacerier所说,没有“代替”的选项。 - Max Barraclough

5

这取决于您需要多么安全。

我假设您的服务器是外部托管的,而不是通过VPN连接的。因此,您正在检查HTTPS站点的请求地址是否在您自己组织的网络内。

使用正则表达式匹配IP地址可能有些靠不住,难道您不能像其他人一样使用网络/子网掩码吗?

它真的需要多安全?IP地址欺骗并不容易,欺骗的数据包无法用于建立HTTPS连接,除非它们还操纵上游路由器以使返回数据包被重定向到攻击者。

如果您需要真正安全,请让您的IT部门安装VPN并在私有IP地址空间上进行路由。为那些私有地址设置IP地址限制。即使有人破坏了上游默认网关,通过基于主机的VPN进行路由的IP地址限制仍然是安全的。


5
如果您的应用程序正在检查IP地址,则它非常容易受到攻击。在这种情况下,您没有任何保护措施,路由器是需要进行IP过滤的地方。您的应用程序可能会检查发送IP地址的HTTP头信息,这很容易被欺骗。如果您在路由器上锁定IP地址,那就是另一回事,并且可以为您提供一些真正关于谁可以从哪里访问站点的安全性。
如果您只是在内部访问应用程序,那么SSL不会给您带来太多好处,除非您试图保护来自组织内部的各方的信息,或者您需要客户端证书。这是假设您永远不会从外部连接访问该站点(VPN不算,因为您正在隧道进入内部网络,并在技术上成为其一部分)。这并不会造成伤害,而且设置起来也不难,只是不要认为它会解决您所有问题。

3
IP白名单,正如其他人所提到的,容易受到IP欺骗和中间人攻击的影响。在中间人攻击中,考虑某些交换机或路由器已被攻击并将看到“回复”。它可以监视或甚至更改它们。
还要考虑SSL加密的漏洞。根据努力程度,这也可以在中间人攻击中挫败,以及关于素数重用的众所周知的错误等。
根据数据的敏感性,我不会仅满足于SSL,而是会选择StrongSWAN或OpenVPN以获得更高的安全性。如果正确处理,这些都会比中间人攻击更少受到攻击。
仅依赖白名单(即使使用SSL)我认为是“低级别”的,但可能足以满足您的需求。只需清楚地了解其含义,并不要陷入“虚假安全感”的陷阱。

2
如果受到IP地址限制,那么即使他们可以欺骗IP地址,也无法获得回复。当然,如果暴露在互联网上,仍然可能遭受其他攻击而不仅仅是针对应用程序的攻击。

2

仅仅因为所有的内部IP都符合给定的正则表达式,并不意味着所有符合给定正则表达式的IP都是内部IP。因此,你的正则表达式可能存在安全风险。

我不知道你用什么技术来构建你的网站,但如果是Windows/ASP.net,你可以根据请求时的Windows凭据检查请求机器的权限。


2

像所有的安全措施一样,单独使用是无效的。如果您必须将其放在公开的 Web 服务器上,请使用 IP 白名单、基本的用户名/密码身份验证、SSL、良好的监控设置和最新的服务器应用程序。

话虽如此,将服务器设置为仅限内部 IP 地址,然后限制其对外访问的意义何在?这似乎基本上是重新发明了 NAT 免费提供的功能,而且对于仅限内部的服务器,还需要担心 Web 服务器漏洞等问题。

通过将服务器设置仅限内部访问,你没有任何收益,而且有很多好处。


1

对于资源问题,我的第一个想法是是否可以通过虚拟机来解决一些魔术般的事情?

除此之外 - 如果您所检查的IP地址要么是您知道属于应该访问该应用程序的计算机的IP,要么是本地IP范围内的IP,则我认为它是足够安全的(实际上,我目前正在一个项目中使用类似的方法,尽管保持网站“隐藏”并不是非常重要)。


1
一个适当的防火墙可以防止IP欺骗,这并不像欺骗来电者ID那么容易,因此因为欺骗危险而/不/使用IP过滤的论点有些过时。安全最好以层次方式应用,这样你就不仅依赖于一个机制。这就是为什么我们有WAF系统、用户名+密码、第3层防火墙、第7层防火墙、加密、MFA、SIEM和一系列其他安全措施,每个措施都增加了保护(成本逐渐增加)。
如果您谈论的是一个Web应用程序(这从您的问题中并不清楚),则解决方案相当简单,无需花费高级安全系统的成本。无论是使用IIS、Apache等,您都可以在每个应用程序的基础上限制连接到特定目标URL以及源IP地址 - 无需更改您的应用程序 -。防止基于IP的Web浏览器访问您的应用程序,再加上IP源限制,应该可以大大防范随意浏览/攻击。如果这不是一个Web应用程序,你需要更具体地说明,这样人们才知道是否只有基于操作系统的安全(如其他人所建议的)是您唯一的选择。

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