ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
, _2 R: Q# M; X" Z
, ^8 i$ T3 P: f" w8 @7 z. Y4 U5 O O& u/ E2 w, S
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
: e' `3 a6 T: }( S! h7 S
' B% m4 r: N5 E
, d' g! A. ^+ J2 _) | e/ k, n, N什么是ModSecurity9 W% _; G |$ K2 u
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。/ I Y# x% u2 \+ j5 a* Q9 \
- _. b" m. U. p7 g& g
- l( j8 e; u$ _
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。. i( a. r" Q; ]7 t# \8 D( o
0 P9 E9 [& P U
, S: i! { t$ T1 pModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
) a" z( C# B5 J. Q: ^0 J4 M$ D
! @, F8 T L3 }) i
! D& v$ F! |1 d4 r官网: https://www.modsecurity.org/; i& S9 e& n0 x+ \/ e c% n0 w
( h8 C( l0 q5 m4 D* z k. ~
! F+ S L5 B! _9 D3 D1 Q
什么是OWASP CRS3 }; z& t* z5 c
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
7 _; [8 q2 W6 @ v, Q. s1 C. j( R/ N' `2 }
$ v: u3 s) i4 Q! c Q
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
9 Y# `- `+ z3 ~' k+ J$ U6 o
/ l5 |1 x" e/ s! N$ V% y9 Q- p) n" p7 b- Y0 u& h$ ^9 `' c
HTTP Protection(HTTP防御)
: |4 ~1 v" N5 W: {HTTP协议和本地定义使用的detectsviolations策略。
4 z+ q, R5 G1 u* q3 f) g2 G4 a2 T
5 e0 s% n7 r/ G9 ?7 K" f3 @0 N# ?( A/ v- t3 C
Real-time Blacklist Lookups(实时黑名单查询)
( N/ K# Z0 G( e9 T) t2 r利用第三方IP名单。
: D. i3 c' p2 c: ?7 A, h* e/ U: s- g
) } d: j: g5 S& l Z) t
8 n) y/ I6 J% m/ O* D) GHTTP Denial of Service Protections(HTTP的拒绝服务保护)( k+ q- s" ]0 x7 T6 b2 D, t
防御HTTP的洪水攻击和HTTP Dos攻击。( R/ h8 b; ]$ M
! [% ]6 e9 I' ^: K1 _
4 O) \2 f* {9 ]+ i8 ^0 oCommon Web Attacks Protection(常见的Web攻击防护)2 g0 w9 M6 m( U) `0 O
检测常见的Web应用程序的安全攻击。
9 g, P: J2 G j- I! B& V8 {; e- R1 V% |0 j- }" t1 b k; x* R, g, a
7 ~5 t4 `2 x2 k: s! L. r5 u! c
Automation Detection(自动化检测)
; ? c& B+ Q6 @* m检测机器人,爬虫,扫描仪和其他表面恶意活动。
4 ~% I( ~: @( Q& T- y; y3 x9 _, y+ T
( S/ L% R+ j; k5 _/ x3 H
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)
: v3 ]/ z- ?8 x检测通过Web应用程序上传的恶意文件。+ J3 l9 t; i4 k% L3 X% {" V! C
0 R" H5 _& }' c! t/ A- @; b7 }! J4 F3 V9 j3 S% d
Tracking Sensitive Data(跟踪敏感数据)
; Y& G- M# Z! K$ Q2 \) k信用卡通道的使用,并阻止泄漏。
8 a9 k! ^0 B% `1 W% c. v* L$ J. q: S4 `
/ T* y* A7 H u# N0 H- ^" MTrojan Protection(木马防护)
# F) K) P3 `7 r8 g/ `检测访问木马。
: y( }; D+ o, ?6 G
$ X) n) C. K T4 o3 K+ L
/ P9 i1 t1 X# g4 V" v( ?* J+ Z7 CIdentification of Application Defects(应用程序缺陷的鉴定)
; a$ L' {7 U3 H7 v2 T6 l检测应用程序的错误配置警报。/ X* }# i* l H, d: k
2 K3 [7 H9 F/ U# t! m3 T
. s; K. Z/ h' n/ @& CError Detection and Hiding(错误检测和隐藏)0 Y0 ~/ q6 t0 B
检测伪装服务器发送错误消息。
o x. K$ c' W1 `: ~5 T: h5 D+ d7 `+ `
6 B8 W" r" C% D6 |# A$ \7 {/ G安装ModSecurity
# x: Z) i8 F6 C/ W6 h软件基础环境准备' d* z; N! A6 H# B- ?1 @
下载对应软件包' ]0 P* h- n1 Z S2 Y/ A* P
$ cd /root
& q% x. M0 u5 H! }; B$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
6 u% _* ?% n4 z( `4 S, W+ 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; ]+ H5 F0 c3 f; z: `: b
安装Nginx和ModSecurity依赖包
+ {" f6 z) q6 Y- q- NCentos/RHEL
L& J7 h) Z* L0 a. v( y: I& Y. C5 x5 x4 I- Q# f( x" ^
0 G4 ?' G0 I% `# `4 H3 t
$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel6 Q4 e. h8 c3 P' u( G4 j2 m: K$ Q
Ubuntu/Debian
# P/ u( ?. s" U6 R6 j/ ]* j( Z, X0 w6 Z, X4 Q8 C
T& |6 B7 Y+ B a4 m$ 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
3 }8 {7 N0 `8 b9 e+ }编译安装ModSecurity2 `& T# j# f' Q# {+ R
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
1 a/ ~/ m3 L! l7 o, t
) {' c$ g8 D* Q' m8 q* Z {2 e2 ~: i9 j! |' q0 n
方法一:编译为Nginx静态模块
- C1 S% J) Q' x7 f0 k7 H$ g( O
h& L0 V7 y- _' ~$ I; i5 H9 M# ^9 @% z8 Z: C# @- y; n
编译为独立模块(modsecurity-2.9.1)
: j" ^9 S' m: M1 L, x4 @4 B! ~7 c$ tar xzvf modsecurity-2.9.1.tar.gz
2 w4 k* r8 v& P- t, _2 w+ a$ cd modsecurity-2.9.1/6 y6 G2 D5 G, z# a; b3 O' S
$ ./autogen.sh
7 m6 N2 c1 C9 B8 }* s$ ./configure --enable-standalone-module --disable-mlogc; s; d: p7 s# Y
$ make/ t% o, [" E: O6 c+ ?6 K8 U6 |
编译安装Nginx并添加ModSecurity模块
1 w4 a. p E& `: ?% E$ tar xzvf nginx-1.9.2.tar.gz
. o7 v- g2 g4 f/ a ?% P$ cd nginx-1.9.2
9 E+ e5 B/ X4 ~2 I% `$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/
- ?+ e# ^$ p) |$ make && make install; R/ C; Z8 b6 {* \/ @# |9 ]$ j
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块" H1 ?* p" N( d2 `1 W
2 b" l$ m E f' U6 S# L- I* E, E- e3 e5 O* U, J
编译LibModSecurity(modsecurity-3.0)
+ H& G3 G( R. X- a& ~$ cd /root6 h( [& _1 d, N3 ?0 W1 b! d
$ git clone https://github.com/SpiderLabs/ModSecurity7 P1 O8 a! ~# O/ W$ U4 Z2 @" d
$ cd ModSecurity* M0 @5 q# Q- ^/ q: W# k
$ git checkout -b v3/master origin/v3/master, X; P: T! m6 j. h! q
$ sh build.sh
9 q4 |' ]8 G2 F" q$ git submodule init
1 ?! p$ f( ^- ?6 q T$ git submodule update
: D; }, i- h. }& G$ ./configure. `, ^0 ~6 E3 l2 Z' G/ B
$ make2 ]4 I! e1 E: c4 S8 @
$ make install A7 p" Y1 j. C
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。8 g" K1 D$ ]2 g! m7 _
' V8 H; G! ]2 F+ U
( z& k- L2 m$ o7 c$ ls /usr/local/modsecurity/lib3 u- y) B* r) Q h
libmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.01 {/ V0 V/ y; ~9 w2 I
编译安装Nginx并添加ModSecurity-Nginx Connector模块
/ a) P; P( w# \3 ]2 R: i使用ModSecurity-Nginx模块来连接LibModSecurity+ h, b! K* @3 e! _3 E, B
$ C) P6 T- I* x5 v: y1 V6 A* J
) I$ D, f6 F: X5 _ \' I
$ cd /root' D1 ^9 R9 f- G, I
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx, Z. Q0 F/ E* q. y- i8 S+ K2 H: d( t
$ tar xzvf nginx-1.9.2.tar.gz
! a- E& S7 j9 C4 B$ cd nginx-1.9.24 w- V" Y/ D5 I/ N# Y4 t
$ ./configure --add-module=/root/modsecurity-nginx+ c- B8 m8 W& f' ]; Q
$ make* Z2 O H3 v1 \) F; @( H! H
$ make && make install
~; H" [0 ^$ P7 L添加OWASP规则5 Q. V, X/ |: j, d4 B% J
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。. {# Y- L& g8 X9 G# n6 [
6 g/ a" a. R+ o0 Q1 Z, m
2 e% D- D5 k8 X下载OWASP规则并生成配置文件
& g' K! f1 F/ Q7 ~$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
6 u- y5 \- b* W' b) O$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/8 j0 g* U+ `9 J! t
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs& I! e) e$ \. C
$ cp crs-setup.conf.example crs-setup.conf
' a, T. U- ~$ v& c& f. {8 \" r# f2 x配置OWASP规则' ~* v, T1 s9 v0 g7 j
编辑crs-setup.conf文件9 C& {% N0 X: d9 [9 j6 N; F
" ^8 t' W; _1 U2 V. \, C+ L. _+ D. [$ X' K
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
6 c+ v3 U8 q+ ~& k& ~$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
6 K# E j2 K1 K$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf, j9 c) i' Y; R3 @2 {% B0 I' D
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
4 K3 {7 h D! T1 b& K, ^默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
$ k) ^7 |9 R3 J6 e9 b9 I y
0 L- f9 I# y9 E# F3 l! ^8 u/ K2 w. U3 ?; L; r! c
启用ModSecurity模块和CRS规则4 R$ ~3 K* q5 y( N& P0 K. c ]& d% ]
复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。7 {5 h: F9 a( ^; c# @/ l; P9 s* D( q
4 o( }+ Q) N* \7 Q6 W1 n: n: `/ ?
) f8 ^4 k3 o C" c3 tmodsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。
6 d& M$ ^# `" y. b3 x9 Y% ~5 m) y9 s7 q' t! G \
( L: l' e8 }$ E5 ^. R$ cd /root/modsecurity-2.9.1/
1 P0 K" n' E& j$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf
% ~) f6 p' f5 g$ cp unicode.mapping /usr/local/nginx/conf/$ h: p0 o( s$ G; Y0 N; q2 u
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。4 z' l5 E. d9 u& j6 L$ ?/ E5 V
$ ~6 U) G* c* [8 m3 o) U) [8 Y f% R7 t+ ?% {
$ vim /usr/local/nginx/conf/modsecurity.conf% Q! X1 u7 [# f. z' ?# h
SecRuleEngine On' s j/ |; O# l6 Y, O) J; o" V% _% o
ModSecurity中几个常用配置说明:- _* d7 ?) }, X
& C' P0 [: C8 H" W( g; Y3 a4 Y: R6 }
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。7 z# Q4 z* e) }
) s5 O" H2 N2 c, z/ b# r
: v& k4 D9 U$ G' R: V9 a% O6 i2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。6 m. f) @' l5 K8 x0 Z: @
4 y% ^ W. Z" }- |9 m
# k3 v; u4 x( C: F& C( M3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
5 S1 d8 j7 }: s$ T/ V" ^0 _2 w. a- \6 Q$ [4 J2 N L
& l5 ^" l' A- u6 n4 Q# Y$ o; g8 l4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。* D2 M4 i$ J9 T+ C$ ?
0 U0 j, r7 t8 N2 j2 d5 o
+ X" C4 m N: d在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。* H- ?. n/ Q( e
: Z* `) ?- `/ m2 E2 I* h
2 g7 p7 s8 m: Q! w3.x版本CRS0 Y0 G9 n9 }+ z$ ]! f
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs" T1 g7 s0 [. i% [; E, a
# 生成例外排除请求的配置文件& T" N" e% u: H; a& ?! y
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf) Z* a! z; Q6 e+ }$ x7 N) L
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf* U$ D+ M% i- T6 R5 U8 m
$ cp rules/*.data /usr/local/nginx/conf p( D6 n2 \7 ?+ s( }. H! S
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。4 X% h0 \( O( B. }
' v' F8 q& Z0 W% m7 @1 W
8 \* |/ \( n$ d$ \$ vim /usr/local/nginx/conf/modsec_includes.conf
, A U) J. [- ~; k
* m5 _% n g% B% X$ W[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
4 a$ N {) t6 l6 j2 n2 y7 _3 l0 L4 p$ R
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。' {3 e8 `, C J( A' K) `. Z& c
9 Z7 @5 z( U! _5 J& u$ r% A( f) B7 ~* ?$ m& q8 T' ?# p
配置Nginx支持Modsecurity
/ S( r; J8 N6 c9 h启用Modsecurity+ i0 v1 s4 P6 O* c, T
使用静态模块加载的配置方法' n9 k& t: u+ b; I) |7 e8 p
在需要启用Modsecurity的主机的location下面加入下面两行即可:
8 }% |/ X* C2 y- {" `
! k+ k( F5 F0 `5 v* G) M4 h R9 [2 y" j9 D
ModSecurityEnabled on;; u; {: G {0 [- F" _
ModSecurityConfig modsec_includes.conf;0 z$ [8 U( C* {
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。! V9 _9 [3 T! I% D$ K, K
, z+ }1 |( M) k3 G9 N* c
2 M9 M- I P' n, R" P' U [
$ vim /usr/local/nginx/conf/nginx.conf
: y2 q1 I# v( r' i& C: d
# a+ ^) J$ F8 Q% j& V* ] i6 Y
2 u$ p) b. [8 w/ bserver {" q8 }/ X6 F9 [
listen 80;
6 p7 O4 [) A7 [/ v. f server_name example.com;
: u2 N& u+ P* f1 ?. n$ t1 o
* p$ c- }- t' v( f) l( F1 J* X# X4 Q Q) e
location / {6 z5 s+ b5 q2 Y9 e9 v4 b- D
ModSecurityEnabled on;
% R) v- l4 J% S4 m5 G' u ModSecurityConfig modsec_includes.conf;
+ ~* E4 t! k! F7 e* M, T0 ~5 h; Z& q root html;
! R6 C( ^6 K3 g% M- L/ y" F" k; C index index.html index.htm;) l0 w" D$ h1 | W# F5 k2 J
}2 z( r4 ^9 ?( u1 \7 t7 J. L
}
3 i! ? [2 Y V# N' u使用动态模块加载的配置方法
8 e) U( l' D+ u+ v2 {9 S" K在需要启用Modsecurity的主机的location下面加入下面两行即可:4 b8 a6 G/ f9 ?( q' @
- H/ P/ N7 r; Y8 R: i2 {2 b$ P+ C* }/ @% q, E5 ~$ l: T* X2 V
modsecurity on;
" W$ n9 a( e' B6 q- A# C9 \4 Q5 D2 kmodsecurity_rules_file modsec_includes.conf;
/ z/ F/ s& b! F( q3 z& j5 ~% H修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
" Z& i2 r4 _& y! k
0 M4 n4 V8 |' G$ V7 O0 z, x2 d$ p- a7 [+ |) n
$ vim /usr/local/nginx/conf/nginx.conf
5 I6 U' W. ^% o# O! w* ~/ s b* y# w) \
: [% Q( K( I" f* k9 U' k3 @+ x) v4 |$ {3 m
server {2 b. `2 A/ h3 v4 z) C
listen 80;
- r% Y+ d0 C7 Q server_name localhost mike.hi-linux.com;
+ P' L2 r8 q6 e/ Y* ^: D! H3 P access_log /var/log/nginx/yourdomain.log;0 Z; h: K" x/ y
: K3 z9 y7 c9 W+ C* T; `8 c( ]# p ?+ r/ O' T4 v; s- W
location / {$ i& K7 C; v8 e4 k- K6 K+ k
/ f$ m2 ?2 T; H! F4 Y4 g! y
; B+ y. f5 C. e# }7 B( i' X3 V
modsecurity on;: e- M: j( L, c4 W. I+ ^
modsecurity_rules_file modsec_includes.conf;$ b9 b" ?6 O9 c8 A! X
root html;7 S( f/ k/ a4 A; T' {
index index.html index.htm;
C+ v- V4 O9 @0 k& [}
8 v% i% s* f g}- d; ^& b& O, [0 f" u
验证Nginx配置文件
1 D- Q+ P$ D) \0 y$ /usr/local/nginx/sbin/nginx -t
* z, R4 ?* W; O8 P6 R/ |% T1 |# onginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
/ ^+ E& U8 u; B6 @nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful% i1 ]8 {& z" L) O
启动Nginx
4 X5 B% K" c4 y# A$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf; R% }, @2 V# ~. a" P
, o- M' p! u6 ?8 l( n! z' U测试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能够战胜更多复杂/未知/混淆的攻击模式。
) E: g* T3 [4 S+ g |