免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1296 | 回复: 0
打印 上一主题 下一主题

使用mod_security加强Apache的安全性 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-05-22 23:52 |只看该作者 |倒序浏览
使用mod_security加强Apache的安全性

发布日期: 2005-05-22 22:20

作者: os
http://bbs.islab.org

目录:
一. 介绍
二. 准备
1.  需要的软件包
2.  下载和解压缩Apache HTTP软件包.
3.  下载和解压缩modsecurity软件包.
4.  下载modsecurity规则文件
三. 安装Apache和Modsecurity
1.  安装Apache
2.  安装Modsecurity
四. Modsecurity配置文件
五. 更多


一. 介绍
mod_security是一个集入侵检测和防御引擎功能的开源web应用安全程序(或web应用程序防火墙).
它以Apache Web服务器的模块方式运行, 目标是增强web应用程序的安全性, 防止web应用程序
受到已知或未知的攻击.

本文使用的系统是Redhat linux高级服务器版3, 推荐大家使用modsecurity的最新稳定发行版,
现在是1.8.7, 安装方式是通过DSO(动态共享对象)把mod_security集成到Apache Web Server.
(提示, 本文的步骤在其它linux发行版上也是适用的.)

二. 准备
1. 需要的软件包
1). apache的源代码包
下载地址:
http://apache.justdn.org/httpd/apache_1.3.33.tar.gz

2). mod_security的源代码包
下载地址:
http://www.modsecurity.org/download/modsecurity-1.8.7.tar.gz

3). mod_security基本规则
http://fedoranews.org/jorge/mod_security/mod_security.conf

2. 下载和解压缩Apache HTTP软件包.
建议从apache的官方网站获得可靠的apache HTTP软件包.
下载网址: http://apache.justdn.org/httpd/apache_1.3.33.tar.gz

1) 创建apache软件包存放的目录.
#mkdir -p /usr/local/src/webserver

2) 使用wget命令获得源代码包.
#wget http://apache.tarchive.com/httpd/apache_1.3.33.tar.gz
(如不能下载, 可直接通过浏览器保存或ftp上传到webserver目录)

3) 确认下载软件的完整性.
首先, 我们下载和检查分离的签名文件apache_1.3.33.tar.gz.md5, 然后进行
比较软件包和软件包md5签名文件的md5 checksum.

检查apache_1.3.33.tar.gz.md5内容
# cat apache_1.3.33.tar.gz.md5
MD5 (apache_1.3.33.tar.gz) = 3dfd2c3778f37a2dfc22b97417a61407

检查apache_1.3.33.tar.gz的md5 checksum
# md5sum apache_1.3.33.tar.gz
3dfd2c3778f37a2dfc22b97417a61407  apache_1.3.33.tar.gz

比较上面两个步骤的md5 checksum内容是一致的, 从而可以确认apache软件包
的完整性.

4) 解压缩源代码包, 在webserver目录下会生成一个新的目录apache_1.3.33
#tar zpxf apache_1.3.33.tar.gz

3. 下载和解压缩modsecurity软件包.
建议从modsecurity官方网站获得可靠的软件包.
下载网址: http://www.modsecurity.org/download/index.html

1) 使用wget命令获得源代码包.
#wget http://www.modsecurity.org/download/modsecurity-1.8.7.tar.gz
(如不能下载, 可直接通过浏览器保存或ftp上传到webserver目录)

# ls -al modsecurity-1.8.7.tar.gz
-rw-r--r-- 1 root root 313004 Mar  5 23:47 modsecurity-1.8.7.tar.gz

# pwd
/usr/local/src/webserver

2) 确认下载软件的完整性.
首先, 我们下载和检查分离的签名文件modsecurity-1.8.7.tar.gz.md5, 然后进行
比较软件包和软件包md5签名文件的md5 checksum.

下载modsecurity的签名文件
#wget http://www.modsecurity.org/download/modsecurity-1.8.7.tar.gz.md5

检查modsecurity-1.8.7.tar.gz.md5内容
#cat modsecurity-1.8.7.tar.gz.md5
0dd48656e451c711358c097dc80e0369  modsecurity-1.8.7.tar.gz

检查modsecurity-1.8.7.tar.gz的md5 checksum
# md5sum modsecurity-1.8.7.tar.gz
0dd48656e451c711358c097dc80e0369  modsecurity-1.8.7.tar.gz

比较上面两个步骤的md5 checksum内容是一致的, 从而可以确认modsecurity软件包
的完整性.

3) 解压缩源代码包, 在webserver目录下会生成一个新的目录modsecurity-1.8.7
#tar zpxf modsecurity-1.8.7.tar.gz

4. 下载modsecurity规则文件
#cd /usr/local/src/webserver
#wget http://fedoranews.org/jorge/mod_security/mod_security.conf


三. 安装Apache和Modsecurity

1. 安装Apache

请参考文章:
在Redhat Linux 9上通过DSO方式搭建Apache HTTP服务器
http://bbs.islab.org/showthread.php?t=370

注: 在Red Hat 9上安装Apache的步骤亦可用其它系统上.

2. 安装Modsecurity

到modsecurity的apache 1.X 模块目录运行apxs(你必须要root权限才能运行下面命令).

#cd /usr/local/src/webserver/modsecurity-1.8.7/apache1

[root@reakosys apache1]# /www/bin/apxs -cia mod_security.c
gcc -DLINUX=22 -DHAVE_SET_DUMPABLE -I/usr/include/gdbm -DUSE_HSREGEX -fpic
    -DSHARED_MODULE -I/www/include  -c mod_security.c
gcc -shared -o mod_security.so mod_security.o
[activating module `security' in /www/conf/httpd.conf]
cp mod_security.so /www/libexec/mod_security.so
chmod 755 /www/libexec/mod_security.so
cp /www/conf/httpd.conf /www/conf/httpd.conf.bak
cp /www/conf/httpd.conf.new /www/conf/httpd.conf
rm /www/conf/httpd.conf.new

复制modsecurity规则文件到apache的conf目录
#cd /usr/local/src/webserver
#cp mod_security.conf /www/conf/

创建日志目录
#mkdir - /var/log/httpd

修改apache配置文件
#vi /www/conf/httpd.conf
在文件末尾添加
Include conf/mod_security.conf

注: 到此为止, httpd.conf文件已包含下面三行代码(1,2条为自动, 3条手动添加)
LoadModule security_module    libexec/mod_security.so
AddModule mod_security.c
Include conf/mod_security.conf

然后重启你的Apache Web Server..
# apachectl restart
/usr/sbin/apachectl restart: httpd not running, trying to start
/usr/sbin/apachectl restart: httpd started

检查一下是否生成日志文件
# ls -al
total 8
drwxr-xr-x    2 root     root   4096 May 22 21:29 .
drwxr-xr-x   10 root     root   4096 May 22 21:02 ..
-rw-------    1 root     root      0 May 22 21:18 audit_log
-rw-------    1 root     root      0 May 22 21:18 modsec_debug_log

modsecurity的配置文件mod_security.conf位于apache的配置目录conf中, 日志文件
是/var/log/httpd/audit_log.

modsecurity配置文件包含了一些非常基础的规则设置, 这对于一般的站点而言是足够了.
如果你有什么特殊的需求, 更多可以参考下面的网址:
http://www.modsecurity.org/documentation/index.html

下面将介绍mod_security.conf配置文件.


四. Modsecurity配置文件

<IfModule mod_security.c>;

    # Turn the filtering engine On or Off
    SecFilterEngine On

分析每一个http请求

    # Make sure that URL encoding is valid
    SecFilterCheckURLEncoding On

URL编码确认

    # Only allow bytes from this range
    SecFilterForceByteRange 32 126

字节范围检查, 以有效防止stack overflow attacks(栈溢出攻击).

    # The audit engine works independently and
    # can be turned On of Off on the per-server or
    # on the per-directory basis
    SecAuditEngine RelevantOnly

有效解决apache日志对某个用户或攻击者信息记录的不足. 如果要
对某一个用户或攻击者发出的一个请求的详细记录, 可以访问
/var/log/httpd/audit_log文件.

    # The name of the audit log file
    SecAuditLog /var/log/httpd/audit_log

    SecFilterDebugLog /var/log/httpd/modsec_debug_log
    SecFilterDebugLevel 0

设置调试模式下的输出文件.

    # Should mod_security inspect POST payloads
    #SecFilterScanPOST On

    # Action to take by default
    SecFilterDefaultAction "deny,log,status:406"

设置特别的行动, 406为行动名称, 前面的三个为行动参数.

    # Redirect user on filter match
    #SecFilter xxx redirect:http://www.webkreator.com

    # Execute the external script on filter match
    #SecFilter yyy log,exec:/home/ivanr/apache/bin/report-attack.pl

    # Simple filter
    #SecFilter 111
   
    # Only check the QUERY_STRING variable
    #SecFilterSelective QUERY_STRING 222

    # Only check the body of the POST request
    #SecFilterSelective POST_PAYLOAD 333

    # Only check arguments (will work for GET and POST)
    #SecFilterSelective ARGS 444

    # Test filter
    #SecFilter "/cgi-bin/keyword"

    # Another test filter, will be denied with 404 but not logged
    # action supplied as a parameter overrides the default action
    #SecFilter 999 "deny,nolog,status:404"

    # Prevent OS specific keywords
    #SecFilter /etc/password

    # Prevent path traversal (..) attacks
    SecFilter "\.\./"

阻止目录周游攻击.

    # Weaker XSS protection but allows common HTML tags
    SecFilter "<( |\n)*script"

对不安全的(跨站点脚本)XSS进行保护, 但允许普通的HTML标识.

    # Prevent XSS atacks (HTML/Javascript injection)
    SecFilter "<(.|\n)+>;"

防止XSS攻击 (HTML/Javascript注射)

    # Very crude filters to prevent SQL injection attacks
    SecFilter "delete[[]]+from"
    SecFilter "insert[[]]+into"
    SecFilter "select.+from"

防止SQL注射攻击

    # Require HTTP_USER_AGENT and HTTP_HOST headers
    SecFilterSelective "HTTP_USER_AGENT|HTTP_HOST" "^$"

需要 HTTP_USER_AGENT和HTTP_HOST头.

    # Forbid file upload
    #SecFilterSelective "HTTP_CONTENT_TYPE" multipart/form-data

    # Only watch argument p1
    #SecFilterSelective "ARG_p1" 555

    # Watch all arguments except p1
    #SecFilterSelective "ARGS|!ARG_p2" 666

    # Only allow our own test utility to send requests (or Mozilla)
    #SecFilterSelective HTTP_USER_AGENT "!(mod_security|mozilla)"

    # Do not allow variables with this name
    #SecFilterSelective ARGS_NAMES 777

    # Do now allow this variable value (names are ok)
    #SecFilterSelective ARGS_VALUES 888

    # Stop spamming through FormMail
    # note the exclamation mark at the beginning
    # of the filter - only requests that match this regex will
    # be allowed
    #<Location /cgi-bin/FormMail>;
        #SecFilterSelective "ARG_recipient" "!@webkreator.com$"
    #</Location>;

    # when allowing upload, only allow images
    # note that this is not foolproof, a determined attacker
    # could get around this
    #<Location /fileupload.php>;
        #SecFilterInheritance Off
        #SecFilterSelective POST_PAYLOAD "!image/(jpeg|bmp|gif)"
    #</Location>;

</IfModule>;


五. 更多

关于作者: os, 操作系统研究和安全工程师.
思蓝安全论坛是一个致力于linux安全的论坛. 欢迎技术交流.

原文出处: 思蓝安全论坛
http://bbs.islab.org/showthread.php?t=760

版权声明: 引用或转载, 请注明作者与出处. 并请保留本文的连接.

如有问题或错误请提交到:
http://bbs.islab.org/showthread.php?t=760
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP