使用ModSecurity 保护Web服务安全(5)

  • A+
所属分类:未分类

3 了解mod_security 配置文件

/etc/httpd/conf.d/mod_security.conf :mod_security模块主配置文件
/etc/httpd/modsecurity.d/ - 配置文件目录。
/etc/httpd/modsecurity.d/modsecurity_crs_10_config.conf – 特别配置文件
/var/log/httpd/modsec_debug.log –调试文件日志。
/var/log/httpd/modsec_audit.log ModSecurity报警信息文件。
查看/etc/httpd/modsecurity.d/modsecurity_crs_10_config.conf 确保下面有一行:

SecRuleEngine On

4 设置mod_security

上述的步骤只是将Mod Security启动而已,但实际上并不会为你的web服务器做任何的防护动作;因此需要额外设定才会让Mod Security发挥功能,此部分将会对如何设定Mod Security做一个说明。

下面开始介绍Mod Securit的四种主要的设定指令。

(1)一般的设定,包括装规则引擎(rule engineer)开启等基本指令,常见的设定如下:

#Basic configuration options

# 打开过滤引擎开关。如果是Off,那么下面这些都不起作用了。

SecRuleEngine On

#配置是否让ModSecurity默认处理或缓冲请求体

SecRequestBodyAccess On

#配置ModSecurity允许的最大请求体的缓存区大小

SecResponseBodyAccess On

#配置拦截文件存储的目录

SecUploadDir /opt/apache-fronted/tmp/

#配置是否保存事务处理后的拦截文件

SecUploadKeepFiles Off

#配置ModSecurity允许的最大请求体的缓存区

SecRequestBodyLimit 131072

#配置ModSecurity使用内存保存的最大请求体大小

SecRequestBodyInMemoryLimit 131072

#配置ModSecurity允许的最大请求体的缓存区大小,除了请求中正在传送的文件大小。这项指令便于在受到某些使用大尺寸请求进行DoS攻击时减少影响。提供上传文件服务的WEB应用必须配置SecRequestBodyLimit为一个很大的值。由于大文件直接进行磁盘文件存取,不会加大内存的消耗。但是,仍然有可能有人利用超大请求体限制和发送大量大小的非上传请求。该指令消除这一漏洞。

SecResponseBodyLimit 524288

(2)设定Mod Security如何执行调试的日志部分,常见的设定如下:

#指定ModSecurity调试日志文件的路径

SecDebugLog logs/modsec_debug.log

#配置冗长的调试日志数据

SecDebugLogLevel 0

(3) 设定Mod Security如何执行审计的日志部分,常见的设定如下:

#定义主审计日志文件

SecAuditEngine RelevantOnly

SecAuditLogRelevantStatus ^5

SecAuditLogParts ABIFHZ

SecAuditLogType Serial

SecAuditLog logs/modsec_audit.log

(4) Rules

Mod Security最主要的设定部分,是一个以事件为基础的语言。

语法:SecRule VARIABLES OPERATOR [ACTIONS]

VARIABLES:指定哪些变量要进行处理

OPERATOR:要如何处理这些变量取得我们想要的

ACTIONS (optional):当达到上述的处理时,要做什么动作

(5)Rule处理的阶段

ModSecurity 2.x允许把规则置于下述五个阶段之一:

请求头(REQUEST_HEADERS) 阶段

这个阶段的规则会在apache完成请求头的读取后立即被执行(post-read-request阶段),这时,还没有读取请求体,意味着不是所有的参数都可用。如果你必须让规则尽早运行,应把规则放在这个阶段(在apache使用这个请求做某些事前),在请求体被读取前做些事情,从而决定是否缓存这个请求体,或者决定你将希望这个请求体如何被处理(如是否以XML格式解析或不解析)。

请求体(REQUEST_BODY) 阶段

这是通用输入分析阶段,大部分传统的应用规则不在这儿,这个阶段你肯定能收到参数(只有读取过请求体后),在请求体阶段,ModSecurity支持三种编码类型。

l  application/x-www-form-urlencoded - used to transfer form data

l  multipart/form-data - used for file transfers

l  text/xml - used for passing XML data

大部分WEB应用还没有使用其它的编码方法。

响应头(RESPONSE_HEADERS) 阶段

发生在响应头被发送到客户端之前,如果你想观察响应发生前就在这儿运行,如果你想使用响应头来决定你是否想缓存响应体也行。注意一些响应状态码(如404)在请求环的早期就被apache管理着,我也无法触发预期。加上apache在后面的勾子上双增加了一些响应头(如日期、服务器和连接信息等),这些我们无法触发和审查。在代理配置模式下或使用phase:5(logging)工作的较好。

响应体(RESPONSE_BODY) 阶段

这是通用输出分析阶段,这里你能运行规则截断响应体(当然提供缓存)。这个阶段你想检查输出的HTML信息公布、错误消息和失败的验证文字。

记录(LOGGING) 阶段

在日志发生前运行的一个阶段,放在这个阶段的规则只能影响日志记录器如何执行,这个阶段可以检测apache记录的错误消息,在这个阶段你不能拒绝或阻断连接,因为太迟了,这个阶段也允许检测其它的响应头,如那在phase:3或者phase:4阶段中不可用的。注意在这个阶段,你应当小心不要继承破坏性的动作到规则中,这样的情况在ModSecurity2.5.0及其以后的版本中被当作配置错误。

图-4是标准的apache请求流程,5个ModSecurity处理阶段显示其中。因此,在rule的部分即可指定你要处理的哪一部份进行处理。

图-4

(6)Rules 简介

SecRule是ModSecurity主要的指令,用于分析数据并根据结果执行动作。通常规则的格式如下:

SecRule VARIABLES OPERATOR [ACTIONS]

l  VARIABLES 规则中的变量

第一部分,VARIABLES描述哪个变量被检查,举个例子,下述规则会拒绝URI中含有单词dirty的事务。

SecRule ARGS dirty

每条规则可以指定一个或多个变量

SecRule ARGS|REQUEST_HEADERS:User-Agent dirty

XPath格式是选择操作的第三方支持格式。XPath格式仅能针对特殊变量XML使用,只有请求体使用XML格式时可用。

SecRule XML:/xPath/Expression dirty

注意:不是所有的集合支持选择操作格式类型,你需要参考各个集合的文档来决定是否支持。

一些常见的变量:

ARGS、ARGS_NAMES、ARGS_GET、ARGS_GET_NAMES、ARGS_POST、ARGS_POST_NAMES

AUTH_TYPE

REQBODY_PROCESSOR、REQBODY_PROCESSOR_ERROR

FILES、FILES_NAMES、FILE_SIZES

REMOTE_ADDR、REMOTE_HOST、REMOTE_PORT

REQUEST_BODY、REQUEST_COOKIES、REQUEST_COOKIES_NAMES、REQUEST_FILENAME

RESPONSE_BODY

Rule中的变量部分可以一个以上, 以”|”来区隔即可,如果设定的规则超过多行,则可用””来进行分隔。

l  OPERATOR

第二部分,OPERATOR描述如何进行检查。OPERATOR是正则表达式(Regular Expression),但其实ModSecurity提供不少可用的OPERATOR,利用”@”即可指定要用何种OPERATOR,例如SecRule REQUEST_URI “@rx iii”。

以下是一些范例:

SecRule REMOTE_ADDR "^192.168.1.101$"

REMOTE_ADDR:指定变量对象为远程联机的IP地址

"^192.168.1.101$":针对上述的变量进行比对,如果非192.168.1.101,则符合,可指定要做何种动作

SecRule ARGS "@validateUtf8Encoding"

ARGS:指定变数为http传递的参数

"@validateUtf8Encoding":指定OPERATOR为对这些参数进行Utf8编码进行检查

SecRule FILES_TMPNAMES "@inspectFile /path/to/inspect_script.pl"

FILES_TMPNAMES:指定变量为上传档案的暂存名称

"@inspectFile /path/to/inspect_script.pl":指定利用inspect_script.pl档案的语法来检查上传档案

l  ACTIONS

第三部分可选的,ACTIONS,描述当操作进行成功的匹配一个变量时具体怎么做。指定如果VARIABLE有符合OPERATOR的情况时,要执行何种动作。ACTIONS主要区分为五种型态:

(1)Disruptive actions (中断目前的处理)

deny、drop、redirect、proxy、pause…

(2)Non-disruptive actions (改变状态)

Append、auditlog、exec…

(3)Flow actions (改变规则流动)

allow、chain、pass、skip…

(4)Meta-data actions (包含规则的metadata)

id、rev、severity、msg、phase、log, nolog、…

(5)Data actions (可放置内容给其它action用)

capture、status、t、xmlns…
如果有需要服务器的租用与托管的敬请联系QQ:1501281758(亿恩星辰)   联系电话:0371—63322220

本文出自:亿恩科技【www.enkj.com】

河南亿恩科技股份有限公司(www.enkj.com)始创于2000年,专注服务器托管19年,是国家工信部认定的综合电信服务运营商。亿恩为近五十万的用户提供服务器托管、服务器租用、机柜租用、云服务器、网站建设等网络基础服务,另有网总管、名片侠网络推广服务,使得客户不断的获得更大的收益。 服务热线:400-723-6868 服务器/云主机 24小时售后服务电话:0371-60135900 虚拟主机/智能建站 24小时售后服务电话:0371-55621053
广告也精彩
avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: