ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
4 B6 S) p+ A5 _* p( j3 P# V- j! d: C# Y
0 ]0 l% ~1 B# ]$ S- E& X2 ?
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
( c5 w' \! X/ t% W) L3 G
9 k8 w) U( j, c- @
/ W& w0 O$ \/ `; V什么是ModSecurity
$ I% b* Q, d% E+ U+ w. T# s. oModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
. g6 U+ d8 u5 P5 ^/ m9 X+ W& `
* [( A5 \3 J" s# g5 a* e% z) u/ B
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。 l6 Z2 G$ v3 P! b' o9 a
: L6 l& m. M; F2 i, u0 X0 M g7 u M6 L# Z- \9 P/ E) A9 \
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。8 J5 t0 l- f4 N! [
- r; L. Z' `* I! G
$ k- |' @+ O' `, w+ F
官网: https://www.modsecurity.org/2 ~/ W: u# D6 f2 T9 A
$ r: [9 l0 S: d% ~
( a: C. P# m4 x& l# h+ U) v什么是OWASP CRS
8 }% s6 B/ m [. s8 C/ u# JOWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。' A* o \) c- f/ G C
; M& _7 J! Z; v& L
/ I7 }4 X' H. E/ |ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
$ d) l3 I6 R% |0 z; k4 N7 @/ N- O8 T4 c4 j% J* W+ r# M
7 _. B" U+ Y) V, q) h
HTTP Protection(HTTP防御)
% W" F2 z, d2 I6 X$ n' s2 cHTTP协议和本地定义使用的detectsviolations策略。
9 s/ }, i# V% L( k" B: k" \) o+ t0 Z) X- x* i1 b
' O3 H. \8 b- K V8 I3 sReal-time Blacklist Lookups(实时黑名单查询)- H/ l/ c$ Z+ {3 G) R$ M# \
利用第三方IP名单。
, o+ q& O/ k1 P* n2 Z$ u' h
2 \" i, z( }+ c2 B- h$ X
: k1 s, m1 W( k' I1 @HTTP Denial of Service Protections(HTTP的拒绝服务保护)
% S; y+ n1 a4 ]. I7 O0 {" { G* x- [防御HTTP的洪水攻击和HTTP Dos攻击。/ }+ V9 O E. O5 `5 w/ t# f) E
( |3 C) }+ [/ Z' W0 t# F- ? q1 ^
% O8 V9 I1 U7 q6 S
Common Web Attacks Protection(常见的Web攻击防护)
! B. ]8 U2 u- c# d0 D" l检测常见的Web应用程序的安全攻击。
* I$ L0 ]2 {$ d$ h; n$ N
! `2 z. J% N! |8 E) t7 Z8 {; F8 S5 j! U/ b+ x
Automation Detection(自动化检测)! y% O+ P8 L" T
检测机器人,爬虫,扫描仪和其他表面恶意活动。
$ w- [7 S) ?; Q3 H J8 W8 ~$ p5 Q& O7 s) E W9 d6 R& ^ w
6 c" \! i' a" o* f
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)- K/ [9 J6 r, T
检测通过Web应用程序上传的恶意文件。
0 u2 C# a( C0 Z; J6 P9 Y U0 I/ V/ s6 ^, p5 t4 ^
8 a) N! z5 w4 _( _; ^
Tracking Sensitive Data(跟踪敏感数据)
8 ]4 S; X t0 j- X" I4 z: J4 z信用卡通道的使用,并阻止泄漏。
8 I; K. M( z7 F* S
% |: z+ Q% Z2 x! C, x+ s; P* a/ g" ]+ C; e8 Y0 o
Trojan Protection(木马防护)
9 s X. x# u- z v% B; K. o/ L& z检测访问木马。+ d9 j. q. u0 \8 ^# _0 u
8 g+ l6 @1 f+ ]7 b) h% F: V
& S. ^$ o7 m' d$ U# O
Identification of Application Defects(应用程序缺陷的鉴定)8 c( }. t* ^5 A3 {
检测应用程序的错误配置警报。
; M/ c' [3 {7 U8 X* B! i# ~8 h. V! c) K# _
. K# g6 h' D+ G. w1 B) @% D& [
Error Detection and Hiding(错误检测和隐藏)/ w- H8 y; H6 G n# J- P
检测伪装服务器发送错误消息。
) X% }1 {' Z0 }1 I5 t
# }; I0 v) b' Y4 p8 Y
/ T- ^2 w# \8 e( U7 p安装ModSecurity
5 z' Y: ]9 D1 F( [; y1 _2 l# X软件基础环境准备( K$ `( \" v t+ e6 w* L( X! A
下载对应软件包
8 j" }1 J' }) y/ \$ cd /root
1 d4 D$ c( M2 c3 Z0 p+ ~) h$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
$ f& {/ S. ] p' X3 e" _6 z& H$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz
4 W3 s3 I/ D: `: o# R+ R安装Nginx和ModSecurity依赖包
9 h7 `; |5 M6 d: u, `1 U& XCentos/RHEL) S0 O& b6 Q; V# G" p8 s
P0 e9 e% C4 \) A
1 i; A+ ]; i: m3 a1 D+ K
$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
( c) R7 E7 e& y, ~; fUbuntu/Debian* @, Z, @5 p4 h" _
% P9 l# d$ u$ `( H+ i6 |
" e0 ?! D9 h9 m- }- F6 y2 A$ apt-get install libreadline-dev libncurses5-dev libssl-dev perl make build-essential git libpcre3 libpcre3-dev libtool autoconf apache2-dev libxml2 libxml2-dev libcurl4-openssl-dev g++ flex bison curl doxygen libyajl-dev libgeoip-dev dh-autoreconf libpcre++-dev
* W( f$ o: H2 q' P. n! a编译安装ModSecurity
* i& f! l% ~% q) mNginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。& C! c" ~" N9 `. ~
5 c1 E* w3 U/ X8 B" X2 c, u" y4 c1 d/ |( |7 K' r1 S8 i _6 q) v$ B* n, @
方法一:编译为Nginx静态模块' J+ M7 {6 f1 e: \5 m
0 U* w8 i. a7 h3 u5 a' K% d0 ]8 x! c2 x) t* u) C( F0 |
编译为独立模块(modsecurity-2.9.1)% }; g- H6 u( Z( F' k
$ tar xzvf modsecurity-2.9.1.tar.gz! j0 m9 R/ Y F: ]4 g( n/ `
$ cd modsecurity-2.9.1/
" R7 s8 o4 ?, S8 p# P$ Q! O: E3 Y$ ./autogen.sh
5 g) t5 B. b- H+ \$ ./configure --enable-standalone-module --disable-mlogc
% x1 g, @, J1 Y# J2 m1 o$ make
% A' U ~) n$ z, f0 Q编译安装Nginx并添加ModSecurity模块
* T1 R+ U- [/ p& [6 m! S0 T+ O$ tar xzvf nginx-1.9.2.tar.gz: E8 }3 @7 ?3 a8 }
$ cd nginx-1.9.2 K* s/ j: e* ]( [% W6 G3 k
$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/" G: h7 K- t+ O
$ make && make install
2 {2 j) L E4 s9 X7 t2 ?$ g7 j0 c方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
. b, C1 i0 ]5 o2 M3 Q( ?* B
' ~# i. }; R$ R) H6 C
6 t: ~2 @$ D; V p编译LibModSecurity(modsecurity-3.0)
# w5 ~% ~' \4 S1 }$ cd /root
2 W- x, k ^+ W, t; K- N$ git clone https://github.com/SpiderLabs/ModSecurity, f5 U6 G! b8 J: M2 Z
$ cd ModSecurity; }$ z+ z' K6 }. g6 Q3 D
$ git checkout -b v3/master origin/v3/master
; w& b) L# i5 q4 j3 ]2 d$ sh build.sh
2 @0 Q3 i' u: \% z+ v9 {6 @; C' ~4 z$ git submodule init# j3 B% c5 ]9 A. f' B$ S
$ git submodule update7 Z* m1 \4 N. T8 y7 n
$ ./configure
7 @) S3 t; l& ^ f# k- w/ N+ r7 B$ make& Q! _0 c! n0 E! s4 I
$ make install
% J9 ~% A8 Y2 @. e G: \- z8 k2 [: BLibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
; v7 }4 k! C$ j f2 K* f+ E m0 e1 M* B! }6 W9 h. e( _
! K7 A& u6 `+ Z5 d$ ls /usr/local/modsecurity/lib' D4 R! A' R. Q- ?9 C( N
libmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.0
9 y7 M% e/ d: V. P/ N \$ V6 l. b编译安装Nginx并添加ModSecurity-Nginx Connector模块
0 P9 N6 w1 e, F% u) R8 n使用ModSecurity-Nginx模块来连接LibModSecurity: ~, S2 K3 N/ F; s3 @. G- S7 z! p
" ^% r7 k% g( M- _# h0 e" A- R
w# ] X, c, M* e& i$ cd /root& |' }2 B: ]% x0 m3 W" r$ d. g. r
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
. U& _4 I" u8 \7 {( E$ tar xzvf nginx-1.9.2.tar.gz: g7 i) n- H b
$ cd nginx-1.9.2( c) `6 L* q3 |5 _$ P# f
$ ./configure --add-module=/root/modsecurity-nginx
- |2 m$ `$ c3 @+ ?2 \5 y, i/ `$ make! s: a: {; F5 I3 k" ]1 O; L
$ make && make install
0 w% p) y, h6 G; z8 _7 a$ M- S添加OWASP规则
6 ~$ _% l" ]6 W L. @ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
% M" W$ T/ E& h2 A# d* Q: T9 z% g! [+ I# y4 m! d* v% R
7 J6 ]6 k! N5 R4 Z6 `
下载OWASP规则并生成配置文件
1 [# ?/ ?( }% o# Z+ N' \( F ?1 w/ b2 r$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
8 }. S7 L' p8 {( y# H+ b$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/
$ T9 m3 v- n8 ]$ {) B$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
3 N# l6 X, F' x8 C5 ?% I$ cp crs-setup.conf.example crs-setup.conf
) i: N, t7 o! D- _3 t0 f配置OWASP规则
$ a1 _, ?+ o/ \; Q% Z9 | h4 y- V7 j编辑crs-setup.conf文件 n5 y5 v5 d& ?/ K4 N
5 B( K/ S6 ?+ W6 O
7 g( y _9 H% K; [; X$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
! ?8 X L& O& N$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf( Q Z0 l; K; s
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
& j2 c9 L: m) z/ \9 G$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf) o$ @# U8 ~: i
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。' v$ f" s1 y6 y$ A, Z
/ g& r( R5 m9 y4 v8 F% ?4 q) s2 q- ]+ `/ S i2 \; Z
启用ModSecurity模块和CRS规则
0 Z; `! D* I8 A2 {& o8 N复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。1 N7 u( Q) V! _; Y/ c# ]& G& u
. M( y+ [ I4 O2 n" f$ r! w
3 q2 l: o, f3 I9 b) A8 m5 ymodsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。, Q' r; F4 W: @3 Q
# ~; L: N* F! l) M9 r( _1 ~6 M
: T2 E4 `+ U2 ~. G
$ cd /root/modsecurity-2.9.1/2 Y' ?% b0 O# z# m. R. s" F
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf
1 {5 V9 p- H( V; y% f- h$ cp unicode.mapping /usr/local/nginx/conf/; {: f3 M& ~4 b: A: \, ?
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。3 ]5 [/ t) I6 F, Y* B/ U
( o5 j2 h4 Q: Y+ N. y( L# z( R" C# o0 ^& c% n' E5 y! l2 F4 ?2 E
$ vim /usr/local/nginx/conf/modsecurity.conf
0 u2 Q1 o' `. OSecRuleEngine On3 ?3 f9 O2 x! s6 x! _
ModSecurity中几个常用配置说明:
9 h1 U2 W) D d
+ ~5 e1 x! A" O8 a+ m! ?6 E$ z' _5 e. ]* T! w4 C3 G/ [! [+ v
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
& r' z m, e5 k4 X
1 |- d- [2 a# i- M- i1 m* Y: w
# I: {* N @5 i3 y5 q, y& o; x2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。, q' \/ w5 e# v R# U! B
: s) B! x/ Y. y4 n7 m) D
6 w, O1 W$ B" s( z/ `" d
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
) {8 y/ l! b4 P L
5 v9 t) }, k; k
$ j& { w) ?5 g: X& M, F" [4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。& J6 O' \4 G9 D4 [# g( u7 [" Y4 M
! M$ B: v9 E( _3 ]+ A+ j7 l2 h8 F2 ~7 T8 g9 h6 Q
在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
5 s1 m' U0 l; W: v4 a" F4 E' N5 D3 d+ F- V0 v
4 d9 A" r. ]) x2 {- [3.x版本CRS
. A, q7 }3 `7 Y0 _* r, u7 S. c$ cd /usr/local/nginx/conf/owasp-modsecurity-crs" K) m2 C5 F, @7 c! Z" W
# 生成例外排除请求的配置文件2 w! z' v2 l9 L6 X4 A) e
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
' D6 v3 ^+ @* O$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
5 M* h ~, N2 X( `; n+ _$ cp rules/*.data /usr/local/nginx/conf
; Y4 v5 j3 M: N, r' T为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
8 M. C" a; M- T! @
& {$ m8 [. X1 s& G- V0 I4 d- E
+ M- `- M8 n) N+ @" n$ vim /usr/local/nginx/conf/modsec_includes.conf' Z" t1 \2 E6 m
1 ^9 j& ]4 K5 o/ I; s3 U6 t
[Bash shell] 纯文本查看 复制代码 include modsecurity.conf
include owasp-modsecurity-crs/crs-setup.conf
include owasp-modsecurity-crs/rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
include owasp-modsecurity-crs/rules/REQUEST-901-INITIALIZATION.conf
Include owasp-modsecurity-crs/rules/REQUEST-903.9002-WORDPRESS-EXCLUSION-RULES.conf
include owasp-modsecurity-crs/rules/REQUEST-905-COMMON-EXCEPTIONS.conf
include owasp-modsecurity-crs/rules/REQUEST-910-IP-REPUTATION.conf
include owasp-modsecurity-crs/rules/REQUEST-911-METHOD-ENFORCEMENT.conf
include owasp-modsecurity-crs/rules/REQUEST-912-DOS-PROTECTION.conf
include owasp-modsecurity-crs/rules/REQUEST-913-SCANNER-DETECTION.conf
include owasp-modsecurity-crs/rules/REQUEST-920-PROTOCOL-ENFORCEMENT.conf
include owasp-modsecurity-crs/rules/REQUEST-921-PROTOCOL-ATTACK.conf
include owasp-modsecurity-crs/rules/REQUEST-930-APPLICATION-ATTACK-LFI.conf
include owasp-modsecurity-crs/rules/REQUEST-931-APPLICATION-ATTACK-RFI.conf
include owasp-modsecurity-crs/rules/REQUEST-932-APPLICATION-ATTACK-RCE.conf
include owasp-modsecurity-crs/rules/REQUEST-933-APPLICATION-ATTACK-PHP.conf
include owasp-modsecurity-crs/rules/REQUEST-941-APPLICATION-ATTACK-XSS.conf
include owasp-modsecurity-crs/rules/REQUEST-942-APPLICATION-ATTACK-SQLI.conf
include owasp-modsecurity-crs/rules/REQUEST-943-APPLICATION-ATTACK-SESSION-FIXATION.conf
include owasp-modsecurity-crs/rules/REQUEST-949-BLOCKING-EVALUATION.conf
include owasp-modsecurity-crs/rules/RESPONSE-950-DATA-LEAKAGES.conf
include owasp-modsecurity-crs/rules/RESPONSE-951-DATA-LEAKAGES-SQL.conf
include owasp-modsecurity-crs/rules/RESPONSE-952-DATA-LEAKAGES-JAVA.conf
include owasp-modsecurity-crs/rules/RESPONSE-953-DATA-LEAKAGES-PHP.conf
include owasp-modsecurity-crs/rules/RESPONSE-954-DATA-LEAKAGES-IIS.conf
include owasp-modsecurity-crs/rules/RESPONSE-959-BLOCKING-EVALUATION.conf
include owasp-modsecurity-crs/rules/RESPONSE-980-CORRELATION.conf
include owasp-modsecurity-crs/rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
, q2 r2 n4 t+ g2 @6 Y
$ C0 `0 G3 |4 K, V注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。. P3 C) @2 ?3 T" J8 }# k2 j
6 L$ N* y" G C0 N
! T/ d4 o. p) y1 s7 D- K配置Nginx支持Modsecurity
* ~) m- W# L4 p. ] z5 `9 x7 C8 p启用Modsecurity! `& \" g) s( Q& v
使用静态模块加载的配置方法3 {/ `4 J( L8 x6 l" b: S
在需要启用Modsecurity的主机的location下面加入下面两行即可:
4 A$ B2 e& h U. R7 t! j% B
# q6 ?0 o8 P! n& M! P n+ E& Y7 g' h$ d/ u
ModSecurityEnabled on;
5 s2 S! l, L* }3 XModSecurityConfig modsec_includes.conf;% G- t) [$ E9 f" v
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。4 p+ K7 v1 g1 }9 J! G! E
) V8 o2 o8 D5 \! F8 A
4 Q; o) D- c- Q- a$ E8 X
$ vim /usr/local/nginx/conf/nginx.conf' m* y0 l8 U' ~
4 I3 _% R2 P' O) _" R, K: A
! E1 C$ I, P% v: s" y7 V: h
server {
; N+ o n' z" ~4 W8 w" z* X! f7 [ listen 80;
6 S: ]4 @! D% e# ^1 i server_name example.com;
7 x& H4 r3 @* w; a
6 e/ G1 p, E7 r
: e c) L0 `( x' [& f location / {
' i2 @& q5 d& z5 D8 N$ y ModSecurityEnabled on;: j/ K w! [9 X. q' |, b. {9 ?
ModSecurityConfig modsec_includes.conf;
# j4 T' X; P5 I) z root html;
# _# `" n5 u$ W- ?5 l! A index index.html index.htm;
: W# P0 S& x( i }: T: q4 M) W1 z" d' w5 o |% {" g
}& y# U6 v( g+ A1 F
使用动态模块加载的配置方法8 H! h9 k3 G, @* j7 E6 T2 R) X
在需要启用Modsecurity的主机的location下面加入下面两行即可:/ b3 _" Y5 d- h5 M
' b5 [ T: d+ z
0 @# T \# F& F0 Ymodsecurity on;
! F% E o. T$ K7 n+ A3 o1 p9 Qmodsecurity_rules_file modsec_includes.conf;1 X1 g8 Q8 `6 B' Q
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
, g9 z( u; o) S$ l( U9 `
" e0 d' ~9 \& k5 X# X. v6 @0 n" i# }
$ vim /usr/local/nginx/conf/nginx.conf
! e7 \. O9 L( k+ v' X) R- I5 i: V
+ S2 k3 B) ?7 y; T; K( {8 }, h
server {
0 t2 N: N4 V% A listen 80;& k9 _1 p- [/ v6 l8 | a* [8 i
server_name localhost mike.hi-linux.com;6 S- J# F0 A# q5 C# q) f3 j
access_log /var/log/nginx/yourdomain.log;! n2 F4 o2 B P5 G
6 z# J" L8 o. ^% X
1 y" U2 ] b+ F5 Y' v7 ]
location / {( g; m5 l# t7 j4 z
; a4 O4 ^+ f% D( ^* ?, Y* [5 l
" s* i. ^7 @& f3 X1 \) z modsecurity on;
, B u4 L. w1 p% D: N$ x3 D modsecurity_rules_file modsec_includes.conf;1 z& `9 y2 g' x/ [
root html;6 |9 P3 _" n* }! Z$ n- y5 L
index index.html index.htm; M% Y3 S9 Q6 {" a' d8 s% z* o: _
}
9 s& q, b) E) B1 X}! v- L+ A U, u, V% N M
验证Nginx配置文件
3 R: i E( `5 c5 ~! v$ /usr/local/nginx/sbin/nginx -t
+ P$ `. v" X; \7 Z+ F! K1 K1 Y% tnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok$ T3 x9 t) R2 M9 @6 |3 Q
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful- P3 l2 @3 g/ R
启动Nginx( ]- W0 i3 |$ J% T# m6 L6 v! K" }; J
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf6 W. r6 e" \1 ]# a
& H2 m* W3 N5 _0 o测试Modsecurity ModSecurity现在已经成功配置了OWASP的规则。现在我们将测试对一些最常见的Web应用攻击。来测试ModSecurity是否挡住了攻击。这里我们启用了XSS和SQL注入的过滤规则,下面的例子中不正常的请求会直接返回403。 在浏览器中访问默认首页,会看到Nginx默认的欢迎页: [/url] 这时我们在网址后面自己加上正常参数,例如: 。同样会看到Nginx默认的欢迎页: [url=http://img.colabug.com/2017/06/842f48f203c6c2cd30144f29b57af97a.png] 接下来,我们在前面正常参数的基础上再加上 ,整个请求变成: [/url] 就会看到Nginx返回403 Forbidden的信息了,说明Modsecurity成功拦截了此请求。再来看一个的例子,同样会被Modsecurity拦截。 [url=http://img.colabug.com/2017/06/246ce28e95310a32f791893d4f5c55ca.png] 查看Modsecurity日志 [url=http://img.colabug.com/2017/06/ae44dcb58b8a4a0ea761317e398b3101.png][/url] 所有命中规则的外部攻击均会存在modsec_audit.log,用户可以对这个文件中记录进行审计。Log文件位置在modsecurity.conf中SecAuditLog选项配置,Linux默认在 /var/log/modsec_audit.log 。 $ cat /usr/local/nginx/conf/modsecurity.confSecAuditLog /var/log/modsec_audit.logModsecurity主要是规则验证(验证已知漏洞),Nginx下还有另一个功能强大的WAF模块Naxsi。Naxsi最大特点是可以设置学习模式,抓取您的网站产生必要的白名单,以避免误报!Naxsi不依赖于预先定义的签名,Naxsi能够战胜更多复杂/未知/混淆的攻击模式。
5 {# Z5 X( t$ \6 w |