ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。$ `* g* \3 y2 ^5 B7 r
- D6 B/ k, \( B+ a7 u* q! ]
1 i9 r0 w w& Z3 O8 D2 S. p在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。 y! Y1 K% {! X+ f+ O0 u
1 _, i8 a( E+ Q9 s" M
$ N* l& v% Z9 z- B5 `什么是ModSecurity
3 c2 |0 F2 m& h- fModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。7 r) ]2 |+ L9 e5 l2 ~) q8 l4 @
- U- \4 F1 @9 Z3 E, d! a6 X
2 s; w1 f) j+ |5 K+ i$ v6 zModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
+ z3 E) ?3 G- s$ I1 `& K4 e) N5 C& H' b! k, Z
c6 x* f+ l- Z% r+ _ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
; r4 U* a. z6 p! f+ S" y; n+ s: b. _9 r5 c) X) X6 k$ \- N
* ]1 D# g$ j4 H8 G7 z$ t# }: x
官网: https://www.modsecurity.org// R: i1 r: h y! d
# j* y7 a e% x5 N
- T2 W5 {7 L; r( {: O% A7 w
什么是OWASP CRS! u7 F* S) w' Y9 K, P! h7 ?5 W
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
K4 R; ]8 U2 i( p7 j) | E7 w* Z2 |+ x+ d
- h! M, [' D' i; k$ }" T
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
9 \. z: }8 U0 g/ l7 k, }
% _/ S3 M- @& |' Y+ `
) i* z4 ~. E# ^ {9 f! JHTTP Protection(HTTP防御)
# a, [8 g1 H; }2 U, s7 GHTTP协议和本地定义使用的detectsviolations策略。5 N4 r, H! [9 q# ~+ y# G
4 B Q& o7 H* m3 [6 E% @% _8 [* c0 r3 U+ K0 f5 L7 C5 N, O6 R& [4 i
Real-time Blacklist Lookups(实时黑名单查询)
' A+ T6 H. m) O0 {" E* U8 d利用第三方IP名单。
! w2 {$ d% \9 M/ @' o# ^) A4 C; ^. R4 C' H( T) O0 F
/ a8 @6 ]1 {- I. y
HTTP Denial of Service Protections(HTTP的拒绝服务保护)4 D8 \' S H+ w
防御HTTP的洪水攻击和HTTP Dos攻击。
( e, u: A6 o2 [7 m2 r0 P! J. L$ G: a
: c2 a% v- A" Q9 s. R" |: p0 m! a. o% p
Common Web Attacks Protection(常见的Web攻击防护)4 v0 T' u& j; M9 J+ r
检测常见的Web应用程序的安全攻击。+ B5 i. o2 T. Y, [5 m
( c) y# l8 r# [0 p- U+ T1 Z
6 ~, K- }8 x q" o- G) }) AAutomation Detection(自动化检测)1 f/ T1 X& B9 R5 f- M
检测机器人,爬虫,扫描仪和其他表面恶意活动。1 V$ Q) D3 {5 J$ P) h! a2 V0 v
, I* [$ R3 y& j1 E; E& @
6 b; }1 E. C# D& R: BIntegration with AV Scanning for File Uploads(文件上传防病毒扫描)# e. T i* W, }5 T9 \4 d3 c
检测通过Web应用程序上传的恶意文件。" Q$ c! L6 c' B/ p( J8 v( ~
) r' k" U9 S$ r/ f' @2 H/ w' q
/ C7 G' X7 p& u' E1 N8 nTracking Sensitive Data(跟踪敏感数据)8 E5 n7 V+ ~: t" U) t T7 e
信用卡通道的使用,并阻止泄漏。: _; S0 `; k/ ?$ ~1 b3 X
3 n5 y( f4 f c# w3 I
, A6 m- K' ~% y& R/ e8 JTrojan Protection(木马防护)
. D0 u9 B# Q6 x. _检测访问木马。
6 n7 j5 v6 n. Q# S3 R F
- s$ O3 U4 P8 o$ o4 B$ ], d" w1 K/ f( {: g L! }, m* y. o' H
Identification of Application Defects(应用程序缺陷的鉴定)) R) e/ F/ z3 u8 G4 V6 q1 c$ t
检测应用程序的错误配置警报。1 R; o0 C( C5 H
2 [. Z) x! k8 l `' d
* E6 |( f2 s/ Q1 `, s
Error Detection and Hiding(错误检测和隐藏)) g4 b% Y* I7 G9 b' J" E1 Z
检测伪装服务器发送错误消息。
' T. E1 b; D% K( x2 ~, ?4 f3 N2 a. L R; n r
6 w a) `! D9 i. f l3 i6 i9 m/ T安装ModSecurity
2 ^; l/ h- n2 l$ }5 U; x软件基础环境准备
# L& Q' C9 p2 M$ s2 z" }下载对应软件包2 W5 ~6 T7 u3 n' s5 K; J9 ~
$ cd /root
. M2 D9 S( c: {. Y1 q9 K; T$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
8 S! K' W& X: J; `- E' e$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz% w2 c; ~- J3 ~% ]' @, x x
安装Nginx和ModSecurity依赖包) J6 T w3 V9 `1 l9 L8 t5 U+ ~
Centos/RHEL
( Y# |( m! O* |. F6 F$ I1 X0 m: N" [5 }( X0 g, E
% k0 D0 w5 _+ l3 y# g! s$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel& y/ G9 t! G+ {, T) }1 W0 F+ B) t
Ubuntu/Debian, B7 ?5 y4 P s, z6 |8 O
5 l: X# _! W9 N2 D1 ?- M
# C. j. w& X, j) R3 A/ j8 Q
$ 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
}; @8 R: {. `0 t编译安装ModSecurity$ n. V8 @6 Q2 @
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。. t. i* I/ y y2 `' a+ q
9 S2 L$ |# h6 T. H
3 @- w1 {, a4 f+ S) X t5 T方法一:编译为Nginx静态模块
' y% Y$ a! T8 }# F& ?; R0 _" h- V. P" p' ?( F0 W
, {2 x4 m0 r# A4 S) B6 _, g2 G j* i编译为独立模块(modsecurity-2.9.1)
6 N. G# a( N/ l$ tar xzvf modsecurity-2.9.1.tar.gz
; N3 X) m6 \5 U8 j8 S$ X$ cd modsecurity-2.9.1/5 W, O2 T7 @ w4 _ _$ t3 d
$ ./autogen.sh: d) V* l/ r7 o1 P7 K) P! h' @
$ ./configure --enable-standalone-module --disable-mlogc
0 ?" S2 h( h! `# ?" x$ make" P, H# T8 J5 T. u
编译安装Nginx并添加ModSecurity模块
+ P0 @+ Y* ?/ j+ R- q* E$ tar xzvf nginx-1.9.2.tar.gz1 B0 J& b& {; }( Z
$ cd nginx-1.9.2
$ W0 M- j4 _( u) Y# B2 `$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/# G" L* `- E. M# i
$ make && make install g0 ?% u q, m9 h7 T
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
$ x( N! e0 X J( m8 A& M5 B: j2 Y/ v8 k2 B5 j
% [& r7 B9 J3 T1 k" o6 S5 }- d编译LibModSecurity(modsecurity-3.0)
4 ]: }* `7 i8 D/ s. |+ a1 @. Z9 u) Q$ cd /root8 [7 g% G& n; E4 u- q0 W
$ git clone https://github.com/SpiderLabs/ModSecurity
& b- x6 T# J4 [; J$ Q; Q8 Z, ~$ cd ModSecurity
) B& \! F' B) Z5 M t$ git checkout -b v3/master origin/v3/master( W$ C! K8 Q$ C( k. c i
$ sh build.sh
: ?6 k7 e! W* j# i: t1 z$ git submodule init
4 o- X- O! T( |* t5 P/ g2 q$ git submodule update3 w5 a0 ]; j2 Y2 C4 F
$ ./configure
2 o. j. R& F) d* Q$ make& p# B6 |: G/ a n$ L
$ make install* }. W6 v ]5 l7 m" L8 L, {( C8 r
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。! K0 B8 X8 w/ u3 r8 q, H* Q2 d
4 q9 U4 P; U- v# m! D6 q$ @
5 G" B+ {' ] x6 y. r& r$ ls /usr/local/modsecurity/lib
: x& s6 _% G, C; e. B% Rlibmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.0
1 c6 |. p. c) }. P编译安装Nginx并添加ModSecurity-Nginx Connector模块% H3 f# S X" Z' O
使用ModSecurity-Nginx模块来连接LibModSecurity
' t7 m2 \0 r) ?
/ Z0 b0 ^' j/ S) l3 ^ M" \, h! j: ?! ~, E0 h
$ cd /root
& b3 c U9 y* s$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx3 c, d y" B" K; V& r; U( B( z
$ tar xzvf nginx-1.9.2.tar.gz* C0 K+ i' N( c
$ cd nginx-1.9.2/ F& g/ O7 T8 o1 a; e: F/ t
$ ./configure --add-module=/root/modsecurity-nginx
1 t$ r* w+ p* _+ y2 r* o$ d, y' o$ make
, U, D$ @/ b. g: a' n$ make && make install
& ~9 q* k& l, T: u# p添加OWASP规则
o+ ?; j" e- O, b N* LModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。4 u. z z. n1 i0 P- [3 J% B
7 e% W: ^& f8 p! }; W3 y; }* D6 t$ Z5 S8 g1 e) X1 m, H
下载OWASP规则并生成配置文件
$ \! k; w# f. f. T0 H6 x$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
6 l" T7 D3 V# D& i& V( D$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/
, f0 s- G; g; P$ cd /usr/local/nginx/conf/owasp-modsecurity-crs' ^9 c" |" v# p5 L* K
$ cp crs-setup.conf.example crs-setup.conf! M) R; v5 ]' ?
配置OWASP规则3 y3 ^7 D& M9 k Z2 D1 T/ ~ j
编辑crs-setup.conf文件
! f- Z/ j' a5 `) c/ `
3 R( r9 T% U. h* ^% L1 {" P/ l( b8 s) O) y6 F6 T
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf5 Y+ `6 u, r g0 m( H r; i
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf" M/ g" z% t) o( T- J& X
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
& R \* H+ }2 C( D- H; Q/ s$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf. h/ R4 i% H+ H6 V, k& E
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
$ x5 ]1 s6 |' K: }0 x; M6 @4 W
3 T5 l8 a2 e! j
1 i" c, f/ X! `启用ModSecurity模块和CRS规则 B! o4 X' b9 j" @! q
复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。6 h, M( X! @$ K; A( i
1 R1 ]! o: V/ w; I
: |4 A6 U' a7 T% D- Y7 J6 a
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。
& j$ b0 f# `/ u, g7 h6 a k& H: l! e
}3 } ]$ q$ P& s9 f5 @+ ~
! y/ o1 C% Z: `3 g- e: s$ }$ cd /root/modsecurity-2.9.1/
3 O: L" d! [8 f( @0 r3 ?$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf : y* d5 Z: J( z; Z6 C0 f
$ cp unicode.mapping /usr/local/nginx/conf/' _: r0 ~8 B* N4 h' H: T# T
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
& |. P. r! @/ r8 |# D/ a) D: b) w, q7 d& {# G
& d* G9 p6 o; H" j" w4 F
$ vim /usr/local/nginx/conf/modsecurity.conf$ V# h* p3 j6 M( H& p0 b" u
SecRuleEngine On( u+ t1 E" c$ m( t) l% j+ G6 X |8 @
ModSecurity中几个常用配置说明:
# m9 I4 m! Q# U: J5 g, a5 c5 n" G3 Q
& m6 W& u; O" N2 S, ?3 X
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
: k: f0 {* O4 W+ B" ^" ~7 G1 @1 }3 c% C6 Z
, N+ G. s9 @/ t, D" ?2 ]2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
3 B) D0 R& A* N" A( p8 l
8 A2 }# Z, N' T* q* n2 v! i2 x2 ?" J! `2 ]
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。) C* W4 ^# |: `; |; L7 b
! ~- i; H! b/ L/ r/ p$ c: n# K
6 L# c) d! ^: @& ]
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。: `% h9 y# `* x9 `# e+ K- C$ }. c
1 } l1 x: U6 R- m/ g5 V: D5 e/ A$ B/ R3 E3 K- J" C
在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
6 C* p5 [% G5 C5 N
( `3 [" h" J* _ h- _7 a
4 ]4 Y6 ?8 ~7 V( ^9 C3.x版本CRS
% h9 h% B4 o/ \& b. M* O4 O3 c$ cd /usr/local/nginx/conf/owasp-modsecurity-crs" R1 P# ?# V& {$ m: m7 o: V
# 生成例外排除请求的配置文件
3 a/ N/ P+ S" M4 U/ ^" v$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf! L6 G7 y7 w1 }; n- x' d) f* v0 F
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
$ f" `7 A* n# K" ] S: G# r) a: }$ cp rules/*.data /usr/local/nginx/conf
: W g5 u8 _& P4 T& ?' k, o为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
& S s% |3 r+ T* _' W/ A+ p6 Z
. X7 A; { `8 b0 ^& I0 v- q$ I- w' w/ z/ D2 s7 {9 n0 b! k
$ vim /usr/local/nginx/conf/modsec_includes.conf
, Y, _" G9 H6 I) {. {; [( L D0 h$ G7 z- U$ F8 F0 R1 ?% @- K4 g
[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 ; X @7 }0 ~+ c T6 G. u; {
, E) p4 i% P3 c( C- d. z+ S注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。' @6 g, Z- B9 e }( G. j( ~
0 e0 ?* r! v2 r. C4 R M+ P
& q1 I/ W; V1 ?8 L5 p配置Nginx支持Modsecurity$ u, T& X: w8 A: O: F( `
启用Modsecurity$ F: `( O& b9 H' x. d; i# H
使用静态模块加载的配置方法# w8 u" a; K1 {8 d* h% R O1 t
在需要启用Modsecurity的主机的location下面加入下面两行即可:9 [' X) O* r2 ~* s6 l( z' O9 [
6 s& T3 p+ ?9 D! _+ ?1 F
9 j* V7 z+ W( q% yModSecurityEnabled on;
) T# r" I" L7 l# ZModSecurityConfig modsec_includes.conf;
' c& n* v6 C3 `/ }& c( ^修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
' p7 i U: \: X1 J+ |
4 {/ N" R# k% ]. h( r! i
- |( p8 _( h: a- o' l# V$ vim /usr/local/nginx/conf/nginx.conf
4 U. A7 B7 m1 H0 K. _; z4 c* J" X; i% E" u I
, P4 T1 g; i$ x) w, ?$ ^' xserver {% ~# t* G8 U( ~2 \$ ?
listen 80;
, l; E6 o- C1 W8 b: g server_name example.com;" b2 q! @* T6 E/ c6 U
9 b7 _- V" C6 t
3 m7 H G. U, d location / {7 y, ?' E& D' f w
ModSecurityEnabled on;
0 @# m: D6 e T4 N, s q ModSecurityConfig modsec_includes.conf;( i8 _/ A1 W1 i: X4 U1 ^
root html;
1 ? |; L6 @) x- ]: I, k index index.html index.htm;
8 X7 L$ i H. Q/ } }
- m% q# I ]) d+ y# e, r}
/ `0 r! E! X) G5 v' k2 B g+ W使用动态模块加载的配置方法 \5 { O! v' v0 w! g2 w0 f' Z0 R
在需要启用Modsecurity的主机的location下面加入下面两行即可:
# ?% |7 v9 O9 {! r7 o4 I
* X/ [" c$ ^! Q2 m6 e
) y7 T# I4 T' Vmodsecurity on;; U' Y+ K! t* s3 Z* Q/ G4 \; a& Q2 s
modsecurity_rules_file modsec_includes.conf;
. F$ H! i* n" o- `9 y修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。$ Z C3 P+ W- K- [, j
+ k2 ]9 `& v3 `2 X3 A+ L' p. U' ?* `7 G+ Y
$ vim /usr/local/nginx/conf/nginx.conf
+ ]) P* T) g4 y0 z1 s$ }+ ]6 f2 C) d% P0 N% x5 g. A2 r
! N" e& Z8 g D; x3 q5 K
server {
$ U% e: i* o7 ^0 A4 _& G listen 80;( g1 D i. u, M5 x
server_name localhost mike.hi-linux.com;
, G3 o* q: v' C" I4 L- J1 D access_log /var/log/nginx/yourdomain.log;1 N- ?5 M5 ~. c+ R9 w( _
Q# x* y8 b& G7 E
" I) I% q& h+ o0 ?( C& O location / {
% X0 y1 R w3 ~" O3 M3 P7 F9 O* d5 e% D5 o/ r
- Q% \9 i) F2 | modsecurity on;7 l/ f1 O; d$ E6 |. F* L3 a
modsecurity_rules_file modsec_includes.conf;" q- H6 g% H1 H' `( h+ s! H9 o
root html;. G7 {+ { [ {
index index.html index.htm;- ?3 k# z- M Q4 T
}; h, q; q- U6 z" ]
}4 H2 v! t) a! Z0 ~6 e/ O G
验证Nginx配置文件* O8 I' U" l* l( h+ w
$ /usr/local/nginx/sbin/nginx -t
* \; c! u9 H# \! B+ I& j3 i! Cnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
1 W/ u- S ~- E- n" Gnginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
8 b, P# v& J V" t6 r1 u d启动Nginx
% l& A5 U9 S5 s. z M/ r- `* R0 ~% b$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
, b) ], K. {3 g6 M. }5 a8 W2 u2 w. q/ d
测试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能够战胜更多复杂/未知/混淆的攻击模式。
# u3 R8 H( |) ^6 ~1 [ |