有很多人都认可“没有Web,就没有Internet”。Web 服务是一种可以用来解决跨越网络应用集成问题的开发模式,这种模式为实现“软件作为服务”提供了技术保障。观看了赵明同学设计的网络拓扑结后,我只能说这个哥们的胆子是在太大了,在没有任何防御手段前,就干利用一台负载均衡器直接挂接在Internet上,看来他抽烟还是抽的少。而“软件作为服务”实质上是一种提供软件服务的机制,这种机制可以在网络上暴露可编程接口,并通过这些接口来共享站点开放出来的功能。可是在很多情况下,Web应用程序及 Web站点往往易遭受到各种各样的攻击,数据在网络传输过程中也很容易被窃取或盗用。
Web的外围防御何等重要
Web服务的安全涉及了很多内容,我们可以从他可能受到的攻击上看,例如对WEB应用程序的破坏、绕过验证与Session验证、获取管理权限、获取资源、针对主机漏洞与WEB安全漏洞攻击、跨站脚本攻击及SQL注射攻击等等。另外,硬件与物理环境的错误,也都会导致资源无法被客户端访问到。安全面的Web安全防御要从以下几个方面入手,构建出一个安全的防御架构:?
资源保护:对于重要资源,如数据库中或文件系统上的数据;物理环境,如UPS供电、磁盘冗余、双机冗余;Internet访问接口的访问控制,数据的授权与认证访问。?
威胁和威胁建模:所有类型的威胁包括网络威胁、主机威胁、与应用的威胁;重点放在Web应用的威胁,如:SQL注入、跨网站脚本、输入篡改、劫获会话等;掌握威胁建模的方法与步骤,使你能系统地全面地了解Web应用可能的威胁。?
程序缺陷与服务漏洞:包括操作系统在某方面的弱点或特性,以及它有可能造成威胁的发生。网络、主机或应用程序编写过程中可能存在缺陷。
攻击与对策:100%的安全是不存在的,当某人或者设备采取的危害资源的行为之后,应对威胁、减小危险的安全措施。最后是应急响应、犯罪证据的取证,以及灾难恢复工作的执行效率。
缺少防火墙保护
赵明连最基本的防护都没有建立起来,我想还是让我们也从最基础的安全设备来慢慢解决问题吧。我试问赵明一个问题,如今的网络中,还有那个网络是没有防火墙的呢?
防火墙是指设置在不同网络(如可信任的企业内部网和不可信的公共网)或网络安全域之间的一系列部件的组合。大多数对外部提供服务的Web服务器都放在DMZ区域或内部网络中,对外部和内部用户授予不同的访问权限。对于配备了专用防火墙的网络,此项任务可以在防火墙上完成,这样可以减轻路由器的负担。对于没有配备专用防火墙的简易网络,采用动态分组过滤技术建立对重要服务器的访问限制就显得尤为重要。
图:最普通的硬件防火墙内部结构
当然,无论是基于路由器实现,还是在防火墙上完成设置,首先都应该制定一套访问规则。如:允许外部用户到Web服务器的向内连接请求,已经允许Web服务器到外部用户的向外答复等等。在多数的网络中,我们不可能将Web主机直接曝露在Internet上,所以使用NAT(Network Address Translation,网络地址翻译)技术,将局域网中Web服务器的内部地址翻译成合法的Internet IP地址使用,这是提高Web主机安全性的普遍做法。
反向代理与防火墙的集成应用
不过话又说回来了,即使使用了防火墙技术,我们还有可能遭受入侵攻击导致服务器瘫痪或网页被篡改,这是因为无法避免Web服务器的真实数据暴露在网络外部。而大多管理员都在使用包过滤型的防火墙保护对外发布Web的信息,但传统意义上的包过滤防火墙有很多弊病,归纳起来有三点:?
通信方面:包过滤防火墙只能访问部分数据包的头信息;?
状态监管:包过滤防火墙是无状态的,所以它不可能保存来自于通信和应用的状态信息;?
信息处理:包过滤防火墙处理信息的能力是有限的。
比如,教科书上都讲IIS Unicode攻击,以及最近流行的“注入技术”,因为这种攻击是选择了防火墙所允许的80端口,而包过滤的防火墙无法对数据包内容进行核查,此时防火墙等同于虚设,即使在防火墙的屏障之后,也会被攻击者轻松拿下超级用户的管理权限。
另外一种做法就是使用反向代理技术,反向代理服务器可以避免有效的减少上述攻击。它对外就表现为一个Web服务器,不同之处在于的这个服务器没有保存任何网页的真实数据,所有的静态网页或者CGI程序,都保存在内部的Web服务器上。因此对反向代理服务器的攻击并不会使得网页信息遭到破坏,这样就增强了Web服务器的安全性。
反向代理方式和包过滤方式或普通代理方式并无冲突,因此可以在防火墙设备中同时使用这两种方式,其中反向代理用于外部网络访问内部网络时使用,正向代理或包过滤方式用于拒绝其他外部访问方式并提供内部网络对外部网络的访问能力。因此可以结合这些方式提供非常好的的安全访问方式。
综合反向代理功能和普通拒绝外部访问的普通防火墙软件相结合,就能构成一个既具有保护内部网络、又能对外提供Web信息发布的能力的防火墙系统。由于反向代理能力需要软件实现,因此不能使用现有的防火墙系统,需要使用相关软件进行开发改进。Unix显然是首选平台,我们基于FreeBSD系统,提出一种基于ipfw、natd与squid的防火墙设置方式。其中ipfw可以基于ip地址、端口、协议等对ip包进行过滤,natd提供网络地址转换功能,这样就隐藏了内部网络的拓扑等信息,ipfw和natd结合就构成了强大的包过滤网关。而squid是Internet上最流行的Web代理服务器之一,虽然它提供的是普通的正向代理能力,但其为开放源代码软件,并且具有强大的可配置性,因此很容易可以将其更改为反向代理服务器。
针对赵明设计的拓扑,如下图:
踩点
我们可以从客户端的角度(正常访问和黑客攻击)重新修改此网络结构,做到外围安全调整的目的。基本顺序为:客户端 →防火墙→负载均衡器→反向代理(缓存)→WEB服务器→数据库服务器,其结构如下:
假设,原来设计上的负载均衡服务器采用了Nginx,那么这个网站就可以建立在“混元”或者是硬件“防火墙+开源”的基础上重新设计和部署,例如采用:?
Cisco的防火墙:建立基本Web通信和访问防护?
eAccelerator:加速PHP引擎,同时也可以加密PHP源程序?
memcache:用于高速缓存常用数据?
libevent:memcache工作机制所需?
MySQL:原数据库?
Nginx:用做负载均衡器?
Squid:做反向代理的同时提供专业缓存功能防止网页篡改 至此,我已经大致的Web外围防护中的一些概念、用途以及实现的方法,而基于篇幅的原因,有一些内容需要赵明自行去查阅更多的技术资料才能找到答案,不过也都是以上这些软件具体的安装步骤了。但愿赵明能够“软硬兼施”,确保网站的安全运维。