ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。7 u. a/ r$ n: N$ Y2 b5 T# s
$ _; t5 Y6 E7 ]( ~5 L4 @, j
6 u2 X; c4 ]! E9 Y( w: ^) w在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。) A8 H% ?; T* {) v
5 M: A; W9 M( R/ U4 A
$ ^# |7 y3 i% v6 ?* r0 w0 Q8 U什么是ModSecurity
% f9 h% _# }$ s0 P( rModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。. [ Y2 z5 |3 H) c: T
/ e0 k/ X' a) _! L7 e5 I; R5 U) H
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
' W9 `0 |# B6 R" _( T8 @: I& V- o+ h1 D' u- n( n# P& ]
" ~2 R" y( k/ R5 {8 C4 A. K! Q) XModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
* ?8 g! l$ n. z' d. U2 r' G7 c
9 {, g# z1 y% x$ F8 P3 n1 o+ @' I5 L/ y3 D& p5 i( p
官网: https://www.modsecurity.org/
0 q7 R7 J+ L' m2 A! H% W+ U5 A0 t. Z6 z+ y7 U3 ]
. n. O6 j( r* H. o4 }什么是OWASP CRS
: I0 i) L3 F* Y# j! Q o: v5 }OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
3 v0 y' b8 M( D3 F1 x9 V$ Q4 F' u6 s N" i1 L. c# ?
$ D! E" u& B& Q! l1 z( V! x
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
, n, l8 g# N6 S4 d6 _* r% S. c; v1 x* F0 E) w
1 v% d. j; t# x `1 h( z0 `
HTTP Protection(HTTP防御)
% {5 L& s: A! x- M; V' X) Y# bHTTP协议和本地定义使用的detectsviolations策略。0 H2 [; X: Y3 ^- |; o8 c
- s9 c" i; L" y3 E! K- _7 v% [- w- R- H. U- K0 k. W- z
Real-time Blacklist Lookups(实时黑名单查询)4 R7 x+ f( B5 J. {0 r1 i: k |# S- ?
利用第三方IP名单。 {' @2 z' W$ v/ { l3 y7 W7 D
1 w: r0 y" O0 P1 Q" v3 g( Z' W4 h
& ~& O; ^4 g( J9 M$ _HTTP Denial of Service Protections(HTTP的拒绝服务保护)' T+ |# J3 S. a! Y( Z/ ^3 b% X
防御HTTP的洪水攻击和HTTP Dos攻击。
$ D3 e* I4 @* J+ p
$ k% P+ J% J2 |7 I8 g( g% q" S1 q& J
Common Web Attacks Protection(常见的Web攻击防护)
9 P6 c. c, Y" W/ ?检测常见的Web应用程序的安全攻击。
- z4 R5 [' e4 D2 h# H1 I8 |8 \
: a' u3 o) u8 Z9 k8 a2 }+ g$ ]/ H% _2 [
Automation Detection(自动化检测)
/ ^; Z" Y3 W0 \' ?( A检测机器人,爬虫,扫描仪和其他表面恶意活动。
1 _: X( H v) D B# P5 L
1 L( M! ^8 ^& z' q p# e! y3 f+ M/ _3 r
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)9 N, [, R1 _! p! @
检测通过Web应用程序上传的恶意文件。# k" ?# A. F2 a% F1 p ?. [+ E) x# k
8 B" I6 S% i: i6 d2 F3 T6 L# H! {8 b; r, E0 q" |
Tracking Sensitive Data(跟踪敏感数据)1 P( K9 f! l: V3 x" H* j
信用卡通道的使用,并阻止泄漏。- V4 g9 r/ V& n% z. M
5 D0 q. j* o% V" `; X, @7 q
2 R* F; T; D5 M: {" LTrojan Protection(木马防护)
, l5 T2 }) O5 H0 [/ ^/ l检测访问木马。
! p X, l8 ~( }* E7 _: C
, E/ T3 l( g( G* {1 D: l
5 w. W. [, E4 f8 B3 R% Y9 E8 oIdentification of Application Defects(应用程序缺陷的鉴定)4 ]3 u- I0 |! l0 W: i0 \
检测应用程序的错误配置警报。7 Y/ Y' R7 u; U
6 _6 |+ b+ R: I1 u: ?# W0 @1 K8 k
+ b# G+ P+ l& Q9 H( G
Error Detection and Hiding(错误检测和隐藏)
$ s) O* Z, ]+ K, e检测伪装服务器发送错误消息。
z' c8 b7 O( c0 I% T1 B0 ?* m
( d$ ?" n' I: _1 A u& G2 D/ o7 w! |
9 I i. {. [( B安装ModSecurity
8 m( w1 ~. I+ U* w( w软件基础环境准备
6 x, }! `# a' t. B下载对应软件包0 S* H9 ^% y( F3 j# h1 E
$ cd /root
1 n3 {9 m; s. a$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
4 N5 V# \2 r8 Q$ 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 [" R8 ~/ n8 \安装Nginx和ModSecurity依赖包' P& w( C0 Z0 {2 |5 {
Centos/RHEL
" j: A5 I& m" V- n2 c3 Y
" [2 e* U% p" m# m# `3 X/ J- h1 L# E$ q( j% d
$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
8 S/ r( b6 R6 I/ X# u5 l9 E/ }Ubuntu/Debian
/ S9 [$ N4 j2 j* k+ o8 i' A; |. { }) c- A
' z9 Y# a$ b5 }$ 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
' e- ]; j4 u, y编译安装ModSecurity
l s/ p5 H/ D2 wNginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。* U3 s% S0 u% v, J' \
3 W& G' Y2 j- S' ^+ O/ ~1 Q0 e. G+ c% j! o9 h' o& J
方法一:编译为Nginx静态模块7 m4 k: [! v" X5 @
( ~3 i8 t+ D$ Y
1 J; y( U. x+ E. C$ w( y% S8 S
编译为独立模块(modsecurity-2.9.1)
; }% a; m ?0 p& h5 l$ tar xzvf modsecurity-2.9.1.tar.gz
9 s! J- a0 J# b/ \8 N$ cd modsecurity-2.9.1/
1 y3 U0 ~0 x3 M* W! v/ A7 x$ ./autogen.sh
% [5 j% ~. |; V t. \. E- o }- t9 Z$ ./configure --enable-standalone-module --disable-mlogc
, m- c- O; L; o! y( y4 C$ make
$ {3 }6 _: K; x5 A编译安装Nginx并添加ModSecurity模块
6 I; z: L- y/ Q; ^$ tar xzvf nginx-1.9.2.tar.gz4 M' W/ Q7 f; M% R4 O
$ cd nginx-1.9.2
/ W' u. V/ C' ^$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/+ x/ L' b8 h" @, g- K- k* F
$ make && make install
! Q1 L, h1 j8 p. A/ ?* z4 S4 y6 V方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
2 X7 i) x3 D% y& g# d6 Z) L" I; n! D* c9 V) [# t6 n6 [
7 e$ p( K7 ~& E1 G; _3 q8 J# i
编译LibModSecurity(modsecurity-3.0)/ j4 K W9 H3 i4 K* Q
$ cd /root
- |# D; s/ a4 W* N7 W: I" ^' g$ git clone https://github.com/SpiderLabs/ModSecurity
% s% z7 s. O: v; v! d8 U$ g0 F9 |$ c$ cd ModSecurity
; k0 Z6 r3 |# n' ]1 W& C$ l2 y$ git checkout -b v3/master origin/v3/master1 K! j, M# N: Y- R
$ sh build.sh
0 X# y* U# h/ | O% D$ git submodule init
8 s" z8 v4 Y: s6 `% h$ y7 D$ git submodule update; n8 ], z. p- K* O0 u8 y9 a: y
$ ./configure8 I) l/ |6 k! j, o; A6 O, R6 @
$ make
5 X/ V5 k( X; \) l) I) x* \$ make install
/ ^4 ^; Q: T1 I$ `! GLibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。# C" B0 C$ ^2 S! M* P, n" U
: }4 q3 F# {! C. x4 Z7 C/ ~$ b
3 V) m W. c/ j, B3 k1 ^8 ^8 N
$ ls /usr/local/modsecurity/lib
8 l: i+ K$ Q7 U- [1 I2 Q7 t7 U/ Ylibmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.0
; T) j/ ~ d. v8 \4 g, V( v编译安装Nginx并添加ModSecurity-Nginx Connector模块
7 v2 ?; ~0 e+ s使用ModSecurity-Nginx模块来连接LibModSecurity
3 d. s" ^) @0 B3 G0 M# ?& g5 ]
% {- J' J0 @/ T, w4 O [
- Y! ?6 X% Y; E. y2 k* d$ cd /root
$ b2 Z/ c4 a6 ?5 n8 d$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
" z* i' F' i6 y7 s1 d" X$ tar xzvf nginx-1.9.2.tar.gz* X- b# h0 @9 ^2 h# g" N7 ]$ S* B
$ cd nginx-1.9.2
0 A) e& Y0 M+ K' |$ ./configure --add-module=/root/modsecurity-nginx
/ z2 v. z- H; j' ~2 Q, Q$ make
0 A! `7 A" u. W5 M) U: q$ make && make install
5 d# y' W& Y3 }2 i' x1 b p添加OWASP规则. O) y9 X$ Q% U+ l" w8 C/ G4 a2 S
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。! w2 K* s) v/ `# w+ m
% k' L8 |" f) [ ]& S0 l$ e. @. K7 i
( C4 n4 B& [0 O' W* @下载OWASP规则并生成配置文件
0 f) a/ y6 p$ ~3 ]$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
# Q1 T, r+ {# q' F: [$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/4 ]4 n1 z A1 v0 z
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs2 A, y" F m; E7 T* v( d/ O
$ cp crs-setup.conf.example crs-setup.conf9 i, p5 {& g5 y: i0 v
配置OWASP规则
( O6 y) v/ V; f& z9 I编辑crs-setup.conf文件6 R, ]- ~5 R/ g( `
# [& e2 [' R" Q, `7 J
6 j4 \3 D; _- v! l2 m
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
6 f& b9 r( ~9 V$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf( I+ }$ l' h! `
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
4 A1 [) t2 P1 `% B: j/ l$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf D+ O) D8 J7 j9 v9 [
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
- _1 M" `6 F; |: D) c2 Q! R
+ _5 T3 u5 f3 {' o, V4 z( V: J/ h' A# U# A; I( c9 ?3 D% r
启用ModSecurity模块和CRS规则- H5 n& p, I$ n
复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。+ a J$ k J; \( }* L% _
9 Y; y* Q( `/ b3 E
) y% i# I6 N# q+ @9 \+ rmodsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。7 G# @! m9 i+ ^0 g
1 X% S2 Q" t [5 P5 c0 ~- {5 D$ b
$ j) e5 M; R% ~3 R" e( ^$ cd /root/modsecurity-2.9.1/
& n2 U- _2 o, [" s7 e1 d$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf
' i: ]2 M% `; R$ cp unicode.mapping /usr/local/nginx/conf/
, Z3 s$ Z# p$ \. k( ]将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。+ v$ R! \! D# L
- l- Z: X+ L9 c1 d) y1 |/ V$ `0 s9 B0 L, n) x
$ vim /usr/local/nginx/conf/modsecurity.conf
2 d# L2 `7 i3 J/ _9 J& o# jSecRuleEngine On
! C$ o: n, A& tModSecurity中几个常用配置说明:
: c0 d* B- D, g r
; d5 l b; j! b! x1 h( V
3 D' u1 E. E( A9 p8 j1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。0 ]2 W: S# Z6 w2 m/ J+ ]8 ^$ Z
; y( G- m; h! n
+ X. Q4 U7 O# t1 l) ?
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。4 s4 t+ O0 s& `% k' ?
) D1 c% t. Z/ R+ T; R
, D2 i5 U4 n; E0 ^ m/ |3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。9 J9 ^* ^7 c' B. M) {; m1 F5 s( l
: u b6 ~6 w) }" s
3 C8 C' Z3 ~7 C
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。
! Q1 B+ c( r- f; i& f4 `
, k+ p/ N1 h" z( M) u
' F2 a( M6 Z8 `4 Q$ t在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
, o# X7 K0 k5 R" h7 Q) J9 i- E& G' X9 L
9 e% S* M# \5 T; ~3 T0 u3.x版本CRS4 T! d! z6 v2 b5 a
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs/ \3 V# [, o7 ]# M" `- n, H
# 生成例外排除请求的配置文件
1 T3 r( L5 r* T' h1 [$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
' N5 X# y2 ?" p9 h* X5 F$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
, L( F# z9 c7 L* K) k$ cp rules/*.data /usr/local/nginx/conf
! x8 e) S2 R* K8 ~! ]+ ~为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
: L; u% S5 |* l1 B6 l3 u
4 E' d8 J5 C5 Y& R$ L8 j1 r) j- h
8 G# ?/ h J! X- z9 x$ vim /usr/local/nginx/conf/modsec_includes.conf
0 O+ M+ v! w' ]$ i
. W2 V4 ~, p, u( u- r[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 , c9 t! t: N( f2 v
+ ~9 k& c! Q5 T& I, a. e4 ^注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。1 g- f6 K8 h; I3 _1 F& E9 ], R5 ~, E
3 y* M$ j( x, E9 r0 e& n' {! j
* ^9 N* R, C0 I- B配置Nginx支持Modsecurity6 @" S. n4 w5 `2 ?% ?
启用Modsecurity
9 O" [6 X# n" c- _# U使用静态模块加载的配置方法
7 L5 Q; r" w. j" R8 S) Y5 I在需要启用Modsecurity的主机的location下面加入下面两行即可:4 r( r1 j! [: }: Y+ t4 ?
8 ~5 q& E: a1 V
. n3 m8 y1 p2 M0 h; ^7 k
ModSecurityEnabled on;
5 `/ r1 @9 p$ e( o5 TModSecurityConfig modsec_includes.conf;
. T9 ^# L; m$ \, j修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
7 p& F# F$ m/ h" }* }2 G5 W/ I. x; p% c; z j( j
0 a$ ^! g) v# q- ?1 T$ vim /usr/local/nginx/conf/nginx.conf$ {2 z5 Y- e8 s, ?0 @
4 B+ w b$ J- y- Y# J
/ l, s* `! [* K( a* k7 `& |
server {
9 ]6 Z8 [1 j4 J3 A listen 80;
, |- t$ z2 Z5 o3 A, P* C; ? server_name example.com;' |* t2 O" o* r* u' \2 S' a; I
; L! T* A' H8 n1 `, A9 T
8 [1 K. r; R. s2 ~4 U location / {
( a3 }0 e7 Z- M& \% |# D ModSecurityEnabled on;
6 e0 S7 `- T! z& H' V. u9 @ ModSecurityConfig modsec_includes.conf;+ i) {0 ?) j2 V2 D- p
root html;9 T2 I/ ?" {, L/ t. A1 u/ L1 Y
index index.html index.htm;
. p, n/ U9 u$ h9 H. a% ^+ [ }7 @! y0 H' X' h9 m3 Q, f# {( \
}9 N/ j! t A' b1 i8 a
使用动态模块加载的配置方法' I9 i4 E8 U- z# a z# a5 X
在需要启用Modsecurity的主机的location下面加入下面两行即可:( T4 i6 g' T* D
6 H$ Q2 W3 p, Z6 [. A {0 s- \; S9 E
modsecurity on;
7 k5 {3 D( E9 Y3 d9 x( Y) j( Cmodsecurity_rules_file modsec_includes.conf;, _; M/ j+ y4 S5 \- p+ L. |! {6 d
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
' F( S! T6 q. h# }. O& r$ k1 o9 r1 ^2 M$ m7 f) Y
& R- _1 w4 L/ j( S" F. }$ vim /usr/local/nginx/conf/nginx.conf
* w: m! m' q1 X2 @* u, S6 t3 U& ?% k' J/ @* ^. U' b6 u1 G3 W
4 @+ b# s# E' q0 F- ]$ h
server {
7 U+ B* ^6 d1 Q" ~ o. Z- k6 L listen 80;6 w, n; A; Z2 S
server_name localhost mike.hi-linux.com;
5 ^3 d) d. F, k2 u3 I access_log /var/log/nginx/yourdomain.log;9 Z* T9 x1 C+ i+ U* y# D
; z; T) s" y9 K
4 ]' |4 z9 N& S7 f location / {9 c0 F4 C. p2 p9 s
9 O M/ Z5 Q3 w* o; p
4 l! W) h3 I. q8 @5 @
modsecurity on;
- f: _/ L" b: q8 C9 u. ? modsecurity_rules_file modsec_includes.conf;
' s. q" u: O. C root html;1 W# K; m0 q. s) ~7 w3 _
index index.html index.htm;
- W4 O& Y5 b$ u O}) ]( y! c% ^. T: w* q
}# w q* J) G0 Q3 D: k
验证Nginx配置文件" a: @( T- ?+ E) M
$ /usr/local/nginx/sbin/nginx -t1 P% v4 h1 V6 d7 v
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok0 B1 H8 P9 V, Z5 g/ [
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
% g2 _1 y6 d$ X) r$ `启动Nginx* O) F) v. T* ?4 @3 G9 C0 M) c
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
6 @% Y8 W- K' [$ n7 r3 F# p A' k
: X6 x: E8 T* m1 K, Z4 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能够战胜更多复杂/未知/混淆的攻击模式。 8 [4 D! q/ \ w! s0 k/ J
|