
在Apache环境下,除了修改httpd.conf 来提高安全性,
还可以安装mod_security这个模块来提高web程序的安全性。
而且这个模块提供的安全内容挺有针对性,大多针对现在网上对网站的攻击手段。
下面是从网上找到的一些资料作为参考进行演示。
下载安装相关的包:
#export PKG_PATH=ftp://ftp.openbsd.org/pub/OpenBSD/4.4/packages/i386/
#pkg_add modsecurity-apache
modsecurity-apache-1.9.3p2: complete
--- modsecurity-apache-1.9.3p2 -------------------
To finish the install of modsecurity-apache-1.9.3p2, you need
to enable the module using the following command
/usr/local/sbin/mod_security-enable
The manual is found at /usr/local/share/doc/mod_security.
If you already have Apache running on your machine,
you should not use "apachectl restart" - instead,
you should fully stop and then start the server.
出现上面信息,说明成功安装。
=====================================
下面启用mod_security:
/usr/local/sbin/mod_security-enable
Enabling module...
[activating module `security' in /var/www/conf/httpd.conf]
cp /usr/local/lib/mod_security.so /usr/lib/apache/modules/mod_security.so
chmod 755 /usr/lib/apache/modules/mod_security.so
cp /var/www/conf/httpd.conf /var/www/conf/httpd.conf.bak
cp /var/www/conf/httpd.conf.new /var/www/conf/httpd.conf
rm /var/www/conf/httpd.conf.new
看到命令其实就是一些文件的移动和权限。。。
mod_security可以用来抵御XSS和SQL注入等攻击,我们需要把一些“防御”指令加到mod_security的配置文件中:
========================================
下面添加 mod_security 的配置文件
vi /var/www/conf/modules/modsecurity.conf
输入下面的内容:
# 启用mod_security过滤
SecFilterEngine On
# 分析URL请求
SecFilterCheckURLEncoding On
# 检查字节长度以避免栈溢出攻击(数字请酌情修改)
SecFilterForceByteRange 32 126
# 有效记录日志信息
SecAuditEngine RelevantOnly
# 定义日志文件
SecAuditLog logs/audit_log
# 定义DEBUG文件
SecFilterDebugLog logs/modsec_debug_log
SecFilterDebugLevel 0
# 检查POST请求(某些POST请求可能会和这个冲突)
# 使用phpMyAdmin管理数据库时,某些操作会被这个拦截(例如新建数据库和用户时)
# 遇此情况,则把此行注释掉,重启Apache
# 操作完后记得恢复,以提高数据库的安全性
SecFilterScanPOST On
# 阻止返回406错误
SecFilterDefaultAction "deny,log,status:406"
# 阻止返回500错误
SecFilterDefaultAction "deny,log,status:500"
# 当攻击者使用chmod,chgrp,wget等命令的時候,重定向到特殊的页面(请按照实际情况修改)
SecFilter chmod redirect:http://www.google.com
SecFilter chgrp redirect:http://www.google.com
SecFilter wget redirect:http://www.google.com
# 防止操作系统关键词攻击
SecFilter /bin
SecFilter /sbin
SecFilter /etc
SecFilter /bsd
SecFilter /usr
SecFilter /var
# 只接受知道如何处理的请求
# GET请求是个例外,是因为某些客户端把text/html当做请求内容的一部分
SecFilterSelective REQUEST_METHOD "!^(GET|HEAD)$" chain
SecFilterSelective HTTP_Content-Type "!(^application/x-www-form-urlencoded$|^multipart/form-data;)"
# 不接受仅有GET和HEAD头的请求
SecFilterSelective REQUEST_METHOD "^(GET|HEAD)$" chain
SecFilterSelective HTTP_Content-Length "!^$"
# 要求每个POST请求提供长度
SecFilterSelective REQUEST_METHOD "^POST$" chain
SecFilterSelective HTTP_Content-Length "^$"
# 不接受无法处理的转换
SecFilterSelective HTTP_Transfer-Encoding "!^$"
# 防止目录遍历攻击
SecFilter "\.\./"
# 防止跨站(XSS)攻击(HTML/Javascript注入)
SecFilter "<( |\n)*script"
SecFilter "<(.|\n)+>"
# 防止SQL注入攻击(简单示例,请自行完善)
SecFilter "delete[[:space:]]+from"
SecFilter "insert[[:space:]]+into"
SecFilter "select.+from"
SecFilter "union[[:space:]]+from"
SecFilter "drop[[:space:]]"
# 需要HTTP头确认
SecFilterSelective "HTTP_USER_AGENT|HTTP_HOST" "^$"
# 把服务器伪装成M$机器
ServerTokens Full
SecServerSignature "Microsoft-IIS/6.0"
# 限制upload.php文件只能用来上传jpeg,bmp和gif的文件(仅为示例,按照实际情况修改)
#<Location /upload.php>
#SecFilterInheritance Off
#SecFilterSelective POST_PAYLOAD "!image/(jpeg|bmp|gif)"
#</Location>
然后保存退出。
记住把mod_security的配置文件保存在/var/www/conf/modules目录,例如上面的:/var/www/conf/modules/modsecurity.conf
mod_security的配置按需修改好后,保存退出,重启Apache即可!
重启apache ,
#apachectl restart
现在 apachectl 不能启动, 可能是上面配置文件复制时候有问题,换行问题吧。
记事本现在设置不自动换行,重新复制一次。
先删除刚才的配置文件
rm /var/www/conf/modules/modsecurity.conf
再重新新建一个。
vi /var/www/conf/modules/modsecurity.conf
好了,没有问题了,可以正常启动。
上面的具体修改内容,和设置的情况,请注意小心修改,防止不能访问。
还有提醒大家就是 复制配置文件内容时,注意换行问题,我刚才就是这个情况。
上面这个资料是网上找到的,我本人现在还没有对它的效果进行测试,呵呵。
不过刚才配置文件我写错了一些东西 导致 apache 不能启动,这个说明有进行运作的。
至于配置内容上面的安全设置,我是没有进行测试,以后有时间测试一下吧。
谢谢观看。。。