当前位置:C++技术网 > 精选软件 > 服务器安全防护:2 源头控制场景分析-封闭式IP控制

服务器安全防护:2 源头控制场景分析-封闭式IP控制

更新时间:2018-11-29 11:26:42浏览次数:1+次

    在文章《服务器安全防护和保护措施方案》一文中,我已经罗列了从源头到最末端的所有控制方式。
    不管对于什么东西进行控制,从源头控制,效果是最好的。当然,这里不是应付DDOS攻击的,DDOS攻击不在本文讨论的范围内。
    对于IP控制,我这里将类型分为两大类:封闭式和开放式
1.封闭式


    封闭式的使用场景,是非常普遍的。那么什么是封闭式的场景呢?
    很多服务器提供的服务,如果不是公开的,一般都会将接口调用对指定的IP开放,其他IP直接不允许访问。为什么要这样呢?考虑到的是安全和性能。对于开放的IP,一般是针对企业的服务器而言的,IP是固定的。那么针对数量有限的IP进行开放,非常容易做好请求的控制。不是指定的IP,就不响应,而允许的IP则畅通无阻。在这样的前提下,安全性是很高的。因为攻击者压根没有机会访问到服务器,所以其他什么攻击渗透操作都无法进行(仅限于此处的控制,不含系统其他方面的)。
    而这一做法成本低,效果明显,对于明确接口授权的前提下,是非常好实现的,是很多企业会采用的。
    对于中小企业,特别是硬件厂商,更愿意采用封闭式的IP控制。再多的IP只是操作麻烦点,但是可以避开很多不安全因素,更何况硬件厂商在软件方面的实力是有限的。当然了,实际采用什么方案,最终还是和当时的发展情况相匹配的。
    性能方面的考虑就是,尽管一些IP请求了无效的数据,尽管服务器会报请求失败,但是请求还是会被进行正常的处理,在进入到业务流程后,必然造成了更多的不必要的性能开销,比如数据库操作、业务流程处理等。从发起一个无效的请求,到最后判定无效,这期间本身就会消耗性能的。既然这些都是不必要的,而且本身也就对少量客户提供服务,那么就没有必要去处理这些无效的请求,直接在请求的最开始判断IP是否在允许的列表中,如果不在,那么后续的处理都是不必要的,此时就可以立即结束请求处理。
    对于非法的请求,压根也没有必要返回结果,直接将处理线程结束掉,是最快最省性能的做法。
    实现这个控制,可以有多层次的。首先是服务器系统级别的,即防火墙。然后是服务程序级别的控制,最后是应用程序级别的控制。服务器系统级别的效果最好,这是最早接受到请求的地方,不过这个方法操控上比较麻烦。然后就是服务程序级别的控制,比如nginx或apache等。这些都没有把关好,请求会被一级级传递到应用层,应用层在最开始如果及早判断和处理,也是可以减少不必要的性能消耗的。真正耗性能的位置则是应用层了。业务流程的逐层处理,甚至因为开发上的性能优化不到位,更是容易出现大量的性能消耗。而防火墙和服务程序一般都是经过大量的优化的,在性能消耗上还算是比较小的。
    我们这里说的封闭式IP控制,并不是指不能用域名方式控制。真正请求的是IP,域名只是中间过程中产生的一个转换产物,介于人和计算机之间的一个易于使用的东西。对于计算机来讲,不存在域名什么的。所以对于域名的控制,实际上最终还是转换为IP的。另外有一点,域名的解析是可以更换的,所以这样控制上会扑空。在第一次控制域名的时候对应的是一个IP,等你禁止这个域名时,相当于禁止此时解析的IP。然后可能出现的情况就是其他域名解析到这个IP或者直接使用其他IP进行访问。最终落脚点还是IP。
    不过在实际的开发中,更多使用的是域名方式的控制。毕竟,客户也不想固定住一个IP,而域名是可以长期固定的。只要是真正的客户,换几个IP都是没有关系的。这个控制主要是对非客户而言的。所以对于客户的域名的控制,虽然是没法精准控制IP,但是是需要允许的。当然不排除有些公司真的就只能固定为一个IP。而一般公司开发都有测试IP和正式IP的,这样的话就变得麻烦,而域名则可以很好的适应这个工作,因为域名可以随时修改解析的IP。
    最后总结一点,在合适的场合采用封闭式IP控制,可以非常简单粗暴的控制非法IP的访问,效果很好。在开发过程中,我们一般会用域名形式来控制,更加灵活。效果主要体现在安全防护,简单明了,不需要高深理论和操作的支持,易于实践。性能方面则是可以尽早的处理掉无效的请求,以免在处理无效的请求的过程中浪费服务器性能。

    限于篇幅,后面的开放式控制则另起一文,你可以搜索“服务器安全防护1-源头控制场景分析”找到对应的文章,再进行阅读。