ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。: `+ p2 W* E6 g+ D( y% }
9 R: m+ U0 n6 r0 E0 a" c- u D0 K3 p7 m) ^; ^. o
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。0 A: G& X( ]2 b8 o& K1 E( m
" k' u% L4 ]1 a6 g' J- Z9 Z/ `0 _/ s! Q5 e V+ ?) j
什么是ModSecurity& ?3 D1 ?. p3 j2 w @& P: a) p( l
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
% G6 A, m: b8 A, \. c$ x" H- G; Q3 F7 B7 c. b
9 }# a5 J6 g; _% W; ]ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。4 E5 Y3 {6 ~' N2 Y- e
) [$ X5 a: v, r2 ~7 o
9 u2 b3 W9 d. p$ o6 OModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
/ B) `) b6 G6 w9 x' A* b' O! Y; G8 d6 n& S
; F; z6 P# b/ O$ w; n3 G: X4 q
官网: https://www.modsecurity.org/5 F% A) l( H, t% x) S6 U( ~
1 m6 B6 t; c3 K# E" N4 ?& s1 Z9 |9 A. q- O4 Q6 A3 }( m
什么是OWASP CRS; w8 m& M& w2 y
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
- @, P2 k$ H/ G9 \% d, `. R, ^# D+ ~" h% o
8 U# H3 B" Z9 P* c
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
$ T- D9 z" y) b+ b* ]5 m+ x" M$ S- v' Y9 L0 F7 J
( b9 j, m c w$ E6 J/ BHTTP Protection(HTTP防御)
9 F A6 q( V" o6 E1 lHTTP协议和本地定义使用的detectsviolations策略。
1 o1 I4 C* Z' E1 s. _1 _' r& ~- ~) M, U
; d0 N+ p) I$ \9 `
Real-time Blacklist Lookups(实时黑名单查询)
8 r* x' E: U8 @- y! q5 x0 e' K利用第三方IP名单。
7 b$ O0 r0 p' A
' O/ n$ ^3 b, G$ g
6 h6 U8 b: E& |$ n* FHTTP Denial of Service Protections(HTTP的拒绝服务保护)9 L$ k% }4 z, v. L6 ?8 F$ [' J
防御HTTP的洪水攻击和HTTP Dos攻击。0 c& B' Q6 d1 S. R
7 f& E" J% d7 u. ~1 |. n+ u
% {" \+ X4 d/ |; j4 x2 G( u. jCommon Web Attacks Protection(常见的Web攻击防护)
. a4 ?( C, A- @# X" G9 h" z检测常见的Web应用程序的安全攻击。
3 v" n0 L; `7 S/ l# c8 L N
- C; a" n V: |4 A z: M/ F! w6 H" N K- Z$ y8 b
Automation Detection(自动化检测)
/ m& B3 B, F4 ] [检测机器人,爬虫,扫描仪和其他表面恶意活动。: j! v& V* [2 w! K
$ H0 q1 x4 M+ L/ K
0 K8 B7 H: ~) q# a% D1 t4 t$ }Integration with AV Scanning for File Uploads(文件上传防病毒扫描)
- k( V; h/ B. M1 G4 c; B) S! u# X检测通过Web应用程序上传的恶意文件。6 N& `: w+ p! ]- t
( x3 v/ ` X9 ] ^0 f9 L6 e1 k% b6 z
Tracking Sensitive Data(跟踪敏感数据)/ g3 f& q1 t) S. O
信用卡通道的使用,并阻止泄漏。1 s! L, @3 i; y6 P5 g1 |
0 ~0 u% g3 n& a7 ?, q6 L9 U: {; j0 P
Trojan Protection(木马防护)" C j9 h/ X4 b% K2 i1 j
检测访问木马。
& a3 K% {+ V' z. y
$ A) C9 H* z7 K( v1 u9 w6 D! l1 O6 k3 i! h0 ^1 y7 B
Identification of Application Defects(应用程序缺陷的鉴定)
( H, v# u1 Q+ f5 w8 Z2 G检测应用程序的错误配置警报。
' @5 b4 w( h0 l- P
( f ?. I7 `0 P) B
( k/ [7 P9 k; C3 P/ R2 }9 {Error Detection and Hiding(错误检测和隐藏)$ B! P( f8 k7 M3 {
检测伪装服务器发送错误消息。
! ] K. e9 g; j( s7 h! m9 V
( m3 C5 T8 f+ ?5 {% B
1 @5 P) `% |. _+ _ \* K: ?6 L安装ModSecurity
. e. y& x: x3 _. y# Z9 U软件基础环境准备
; x4 d& J4 I4 d4 l4 c9 t下载对应软件包4 a. v. Z C s
$ cd /root
. l* H4 N& Y c$ O4 ^$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
& B; x# n7 K2 n/ Q! 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
0 Z: \5 v7 c4 ~2 p, ]' e安装Nginx和ModSecurity依赖包
. i6 ~3 Y- |- {+ V1 cCentos/RHEL1 w2 X8 y' I8 s; o o& _( u9 |; V
" ~% H1 D' i9 r @& a
! m5 n0 A" c( l
$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
8 i1 y& @6 A& g1 N7 U# QUbuntu/Debian) \+ M7 R B) k
) f0 ]! M# o, A6 g) y
8 S! a6 a3 d0 [7 ]+ Y$ p4 }$ 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++-dev9 y3 N- o, u9 G
编译安装ModSecurity7 A# a8 A; T% \ R) _1 l
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。3 ~2 ?! U, ^' Z1 f8 w& a, h% y
" f$ u! {/ Q: ]6 h# l& W# @' h t" ]
6 t; W1 L9 \: F1 C- d" F+ w方法一:编译为Nginx静态模块! p2 m" a8 x7 _3 ~) M9 l
, M& r: T. @$ z2 c1 a
& ?0 f4 F9 ?: z2 L$ p( O5 }编译为独立模块(modsecurity-2.9.1)( t; u& q4 E2 s8 B( R. k
$ tar xzvf modsecurity-2.9.1.tar.gz
( c7 G% L) \+ i6 A. h" y6 @$ cd modsecurity-2.9.1/! Z$ {! W9 x2 J( H0 ?# f
$ ./autogen.sh
* @, L8 P% W" F) [$ ./configure --enable-standalone-module --disable-mlogc
+ H' j* ?& E& L% a# h$ make! z0 C% w0 E% I8 V+ n2 h9 j9 ^
编译安装Nginx并添加ModSecurity模块
5 J! T8 `4 |$ I- {1 l4 ^0 [$ tar xzvf nginx-1.9.2.tar.gz4 S- x$ W. `% { @! v
$ cd nginx-1.9.2
' ^6 b2 N& {6 B( a$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/9 I7 r9 s4 [( ~6 Y9 t9 v$ a
$ make && make install6 l! X9 o6 Z u# M# L' k
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块+ h* ^% h! ^% q, r
' P$ v" u6 k% `* n4 c7 E2 S
# m0 ^, k# [: D5 U7 u9 y4 F编译LibModSecurity(modsecurity-3.0)3 N: v5 _ \ T
$ cd /root
* p% i! R% C* k8 L* Q$ git clone https://github.com/SpiderLabs/ModSecurity
: o8 B4 B# [2 ~, Q$ cd ModSecurity% z/ v6 `" b3 h; O. b
$ git checkout -b v3/master origin/v3/master
! s7 t0 S1 \, j' L$ sh build.sh) r6 W3 x$ A" c! [, K9 |6 O
$ git submodule init, g+ M1 N+ L& o7 a9 e
$ git submodule update
% A6 Y3 ?8 c. `3 U$ ./configure
1 d5 u2 E5 q3 J% g0 x$ make
( T/ n9 ^2 E( T8 w% `$ make install3 }1 l; J# c. ~+ f; ` l( `$ Y
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
. j' M2 v/ e/ s# i' O, k
0 x+ A1 X/ ?& b9 I; h C
$ }, Q/ |6 q% [/ j% }" i$ ls /usr/local/modsecurity/lib. [, M6 [# I1 `* p+ `
libmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.0
d5 }/ U r3 [% [/ y编译安装Nginx并添加ModSecurity-Nginx Connector模块1 _9 C$ b# \! I) F- j
使用ModSecurity-Nginx模块来连接LibModSecurity) s1 i+ F* K$ M4 C4 l6 n% \
* R8 Y9 Y' B" L( u0 y7 u" B. X
0 f( {, F" S. s, R/ c. p8 U
$ cd /root
% ^+ _ B3 W4 C, d! B$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx" G' C5 [5 `* O* `* \" l3 k
$ tar xzvf nginx-1.9.2.tar.gz
& O5 ^: |4 K0 I8 R2 y$ cd nginx-1.9.2# ]. q2 }+ d, R* B0 Z0 r8 ^
$ ./configure --add-module=/root/modsecurity-nginx
1 O6 G+ e/ B: K/ Q0 J+ A0 x$ make
/ f( T; V2 N& E9 t% O8 G$ Q$ make && make install
, I3 R- g% b$ y8 t3 e6 M& @添加OWASP规则
7 @* P6 w& l( p+ f& `2 RModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。. Z3 K5 @; P6 b, W) z+ y6 h) A, g' t0 R
- q+ O. T% u/ g% F# {
" C% f$ D2 \) j% u7 p$ v
下载OWASP规则并生成配置文件5 _9 P- b; Y& l4 j, D9 x0 z5 z
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
& W# W( c' o0 h3 t5 q) ]$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/
+ ?9 I, f6 d! R% R$ I4 s+ E ?$ cd /usr/local/nginx/conf/owasp-modsecurity-crs+ }/ T* Q' F0 t$ t) m' ~, s
$ cp crs-setup.conf.example crs-setup.conf
3 M B7 Q1 U7 B) X) [ v配置OWASP规则/ o, H9 U4 c; @$ @3 M6 [' q9 m
编辑crs-setup.conf文件9 P5 q w; Y' O4 B$ W3 V
' w& R X9 t# E3 F9 n( k
8 |4 E* E$ q7 _: z$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf. Q- v: p: A" y: g% Q9 p: l
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
% f! H4 A) @' t) J" V: o$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
$ l0 |2 O2 R4 \; j x% n! r+ G$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf1 T* M- ~' o1 ]: Z l7 C, v# D% E
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。 A6 z* k+ y$ _8 W0 M
: {" Z. p) R' i/ \" Z- E# p* q" y6 F' e0 ]* I* F9 o) q6 U* i1 D9 Q! g7 m% k
启用ModSecurity模块和CRS规则) ]! C5 E( | c" i6 y
复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。# j( t$ A5 ]0 {
& z# S* Y$ G2 C$ X/ i0 T$ R
- [! d/ B: h7 \ d! O4 {. hmodsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。& R6 ^- V4 P% n$ g
! L2 K" X, {- I: [: r8 l6 X
. \% \+ [' K/ T: d$ cd /root/modsecurity-2.9.1/
_3 w/ m6 W9 M$ f% \$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf
6 I$ w0 D0 w0 Q) o4 a6 D- C$ cp unicode.mapping /usr/local/nginx/conf/; H7 ^& w4 S6 }8 ]: y! j
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
& l+ ?. W$ N1 R: l0 a% u0 `" V. {1 }0 ]! o M g" P7 g( Y- G
4 p8 o- O0 Y! a' E* l8 X4 N$ vim /usr/local/nginx/conf/modsecurity.conf3 C) B! T5 B6 |
SecRuleEngine On
' A! `) F' x; ]( NModSecurity中几个常用配置说明:- }% P( T: U) F: e) N
1 V, L+ w3 ]+ z" F
& [* X' z3 k- I9 ^9 E7 \1 j. H9 s; Q
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
" D! S4 B- y& H7 X- Y+ E2 @: h
. L) |* E* c& a1 E, i7 f# X% e2 o3 C7 w6 z7 T" ` {
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
9 p/ q1 |5 B6 s& {/ t
. D" k1 `4 O: u/ }4 o% Q* r# L& e6 N6 j
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
2 C d: n- ]2 z( x6 n, `" z) k& z' A c1 \* N" K
3 e6 s7 H* A. i6 Y
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。0 z- Z& y( _8 V1 F7 P
6 D9 z" s5 K- q# E/ U
7 E+ Z; w. h! N: g在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
" \2 I. K5 t8 _
g2 q4 E. i) k9 u4 M) @* U, U4 ~* E; g0 O% {1 {2 n% \
3.x版本CRS! y S; ^. u+ b* p
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs3 b( [! r# d3 g" e+ Y" z+ ^4 o+ e a
# 生成例外排除请求的配置文件7 o1 h6 x7 A5 G2 [' P
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
- O! f8 M/ I1 ^$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf" O5 f2 _1 W9 u: K5 v" B
$ cp rules/*.data /usr/local/nginx/conf
( ]6 s& c2 N( t为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。# U$ t' K9 T( q4 O
6 H! ?0 v. F6 G: x) ^" v4 H8 M" X5 z1 n& ]! o1 O/ N* ?6 {% W
$ vim /usr/local/nginx/conf/modsec_includes.conf
8 n& j7 v# q& y6 i- x! E
5 B: M% h1 u6 ]1 I% F[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
$ A2 C0 e; f* i0 x6 ?. i( `7 s9 U& C8 ^+ w, F% Z
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
8 g+ D6 A$ ~8 s9 }7 k' z6 s7 s, L, Y1 ]8 b& D0 y3 f# {) t
& U% ^' u+ R Q, e
配置Nginx支持Modsecurity( ]! [0 ^3 Z) ^. i
启用Modsecurity
0 I: I0 A, u' [% v4 q& E" C- }使用静态模块加载的配置方法5 v/ _+ w' X+ y d* ]: f1 h
在需要启用Modsecurity的主机的location下面加入下面两行即可:( c, @ O% d4 y0 E$ H
1 i! A+ Q; H! |" @7 }" g* H4 k
9 r7 ]3 E M8 }! W
ModSecurityEnabled on;+ c1 D/ Q1 Z- K9 a# ^) Q
ModSecurityConfig modsec_includes.conf;5 M3 L' c3 @' i, ?5 i0 X/ i
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
2 M1 N: }. n& h! u/ D( d: k. Q8 X: J" m1 o/ w3 i
! [; a4 c& Z& W" I% c
$ vim /usr/local/nginx/conf/nginx.conf
& w6 i/ ^/ w5 j1 D1 R- u4 Z6 P6 J: r9 Y7 ^; a
! O' k$ N i _: F: z& s1 E3 x1 U: Wserver {6 c2 U9 J Y) K% U; V3 v
listen 80;
% ^5 H- _! t& F; `, R server_name example.com;
3 c6 \' y0 {6 N( o& h
4 A8 D( q# u& X' d; c, R0 o3 {" M7 V
location / {5 P4 X8 M/ M# q; z
ModSecurityEnabled on;5 G" @4 j( Y7 e
ModSecurityConfig modsec_includes.conf;
+ X' C) ~0 @3 n root html;% ^- U$ Z0 u* Q$ [
index index.html index.htm;
* S) N: q% [' t# |+ G. \1 V }" P) R/ e% Z# Y! y9 J7 E
}+ G' W$ q: E2 p8 @, L% k8 G
使用动态模块加载的配置方法9 K/ }: b0 t* w# g7 C1 Y
在需要启用Modsecurity的主机的location下面加入下面两行即可:
' l2 l- a) m* z7 H' o5 B$ i/ M. P5 k( p0 c: p _ c
: y% U" I! t$ Q1 B. S. pmodsecurity on;
" r0 ]( Q8 x5 F5 Q% Y9 ^/ wmodsecurity_rules_file modsec_includes.conf;+ t8 `1 D6 D: x- n
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
1 i4 ]. d5 z! D: C) h' N8 k- c* B- ~* J& [& y% K* T! ~
! @2 T; Q J: Q) g7 q$ vim /usr/local/nginx/conf/nginx.conf
0 H$ c. n! L& x, }7 r# n! [
6 l: A5 T( Z! f' q' e+ l) i- Q6 x! h [- w p5 B
server {! \2 P! [8 w! |3 Z3 v1 Q" K
listen 80;$ M- E) \, m" W9 P' ~! l. Y4 q4 W
server_name localhost mike.hi-linux.com;
1 o( O- m, q3 w9 v* z- X f8 T access_log /var/log/nginx/yourdomain.log;; q6 J T0 p: y6 v/ C+ g6 r
3 d8 C9 b5 v! d* i/ }$ l7 }' O( a/ ?* i; }
location / {
9 e5 E3 V; ~* ^+ g1 C: k/ i$ O! Z9 D V, e7 [5 Z- U
+ r3 [1 U' `; M1 t modsecurity on;2 U$ m I# G6 g1 M
modsecurity_rules_file modsec_includes.conf;6 x. q4 r1 e8 B; m; d' e* ]
root html;
# {+ }$ ?4 B; T2 F4 t' d index index.html index.htm;
+ R Q$ j: V5 b}0 @( [' y/ l% ^3 U3 H- @0 j4 u
}
% H* f5 t, d4 [3 V: E( o0 o验证Nginx配置文件
# t4 D2 t* f; |5 v$ Q) _- H$ /usr/local/nginx/sbin/nginx -t2 P0 T5 | T0 ~7 w
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
7 V `" ^: W& knginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
7 O- f0 q6 O) ~" K: F3 U7 E启动Nginx
* \+ m/ {$ W% u" `( y4 I5 k [5 E$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf ^9 S. x) {3 R$ o' _* V
3 ~ G0 t0 H! {# D" _3 J/ x
测试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能够战胜更多复杂/未知/混淆的攻击模式。 2 h$ d" t, D. t: p; V( F' D2 Q
|