使用mod_security保护网页服务器 |
作者: techrepublic.com.com 2006-12-07 09:46 AM |
|
总是关注那些最新发现漏洞数量的人们可以迅速意识到,其实对安全的最大“威胁”已经不再是和操作系统绑定的软件,而是本质上可以在任何平台上使用的网页服务。你会发现各种各样的网页程序其漏洞远比提供程序运行基础的系统本身多得多。 要说到在使用像PHP这样的脚本语言时犯错是多么的容易,或者看看在(大型)基于PHP的程序中所发现的漏洞数量有多少,足可以再单独另起一个话题了;但是实际上,我们关注的焦点应当是放在预防方法上,这样即使你运行的网页程序碰巧有了一个XSS(跨站脚本)漏洞,SQL注入漏洞,或任何一个其他类型的漏洞,你也可以保护自己,而不是冲过去将它升级到最新版本。 既然每个Linux的版本都装载了Apache,而且它驱动的网站远远比不使用它的网站多得多,所以最简单降低威胁的办法就是对Apache使用mod_security。相当多的Linux分发版本都提供了mod_security,所以它是唾手可得的良好工具,不过要注意它也可能使用apache2-mod_security或httpd-mod_security这样的软件包名称。即使你的版本中并未提供,下载它并进行源代码编译也是非常简单的事情;只是记得要将其编译为一个模块,以便插入Apache的“栈”(Stack)。 一旦做好了,编辑httpd.conf,然后添加: LoadModule security_module extramodules/mod_security.so 这会调入mod_security.so模块,启动引擎,并包含mod_security.conf文件(根据你使用的版本不同,路径可能不同)。包含一个独立配置文件的理由,是从正常的Apache指令中分离mod_security规则。一旦这些完成后,mod_security文件将包含所有的mod_security规则;而每次这些规则改变之后,Apache都必须重新加载。 一些示例规则有: SecAuditLog logs/audit_log 第一条打开了审核记录,并告诉他只记录相应的违反策略事件,这样可以非常容易的识别和记录问题。然后,mod_security被告知扫描所有的POST请求,首先拒绝,然后记录,并返回一个违反策略的“错误500”页面,而不是允许Web服务器执行该请求。 SecFilter指令则是建立一个真实的策略过滤器。在本例中,所有带有字符串“/etc/passwd”的请求都会被拒绝。这样,路径移动攻击,或者任何带有“../”字符串的都被禁止在他们的路径里。最后的SecFilter则是一个便宜的XSS过滤器,只允许普通的HTML标记。 mod_security非常强大,许多网站都提供了不同的规则。诀窍就是从小的开始,建立适当的过滤器。对某人有用的,未必适合你,或未必适合你所安装的软件,对mod_security你最后希望的是停止正统的通讯和请求。 |