ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
9 o, v. x. F8 _, o7 d7 E* a: ^% m# o
$ [9 _2 C! e! r" b2 ]
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。7 g5 L' Q" x \' c6 v% f! h! ?% l) C3 }2 h
7 F+ l: ]) }# Y" B+ R( W% H! X# |. x
什么是ModSecurity7 P+ B! J: F# q2 }$ }) ~, P4 p
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。& [2 ]$ y5 X( `$ b+ @( o
) }" Q3 G- m- T7 \) ?# l9 M; D
+ q6 y: g% {# z% }. ^* sModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
( P3 Q% X) n# h, ]
3 t* D0 S3 j) v9 W8 s5 G9 H2 Q8 m
. G& t o0 ^( o# G7 }( t. vModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。3 G7 A( v7 @% z0 w6 t2 ^! n9 \/ e
0 Z8 C5 U" P) ?# l2 _4 b
& }$ Q/ o$ i* L* R2 l {( d
官网: https://www.modsecurity.org/
& ]9 T7 J$ ?7 `' x% I; G
- O# ]8 E/ Q9 c+ w
- A' Y3 t. Y+ b什么是OWASP CRS
' X! D7 e, v% c* _OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
! r C0 L# S) r7 p
! E) X3 @- H# W- W/ r
1 |! D% q3 u& C ?ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
, }; Z1 ~& ?7 A" r% }" z
7 J; Q2 }4 K) k5 W2 A' }/ S5 v. b
& M7 w% I' I# l# L# U& f0 H6 tHTTP Protection(HTTP防御)% S9 F( S, B5 ?- M" M
HTTP协议和本地定义使用的detectsviolations策略。! Z' L, y2 b1 e3 K' m- N9 } s
: j5 h+ n' q* R2 i$ t; l A
; x! ]; e; r6 e4 l5 Z# Q: JReal-time Blacklist Lookups(实时黑名单查询)2 f+ @: t4 ~+ U
利用第三方IP名单。 h" C* p8 D8 i$ p, y
4 p/ n! B- _: I8 M- G
5 _2 ?* T4 H( d/ E% y4 dHTTP Denial of Service Protections(HTTP的拒绝服务保护). h& j3 V: ?9 K- b5 ?8 T1 ]2 A
防御HTTP的洪水攻击和HTTP Dos攻击。$ ~+ g; z5 e: k; F6 d0 I
8 I" U2 V4 f) F9 `
% ~9 l/ p) ]9 p2 UCommon Web Attacks Protection(常见的Web攻击防护)+ }& u8 J- R: S- J& y& ]/ W
检测常见的Web应用程序的安全攻击。
: t) A9 m/ x% p3 P C9 Y0 ~* X" n, X3 R' P* G
2 I8 u D3 {. s% Y: w: Y/ x! n8 x9 V
Automation Detection(自动化检测)
4 M4 u, g5 |4 ^' j0 m' C+ U3 |* r检测机器人,爬虫,扫描仪和其他表面恶意活动。8 h% s9 Z4 t: @- f' I( K0 W2 P* u
7 G! a8 F+ g5 @. h |3 n; e
, `% m. t" t3 M& |2 [- U" [7 w7 w1 m6 vIntegration with AV Scanning for File Uploads(文件上传防病毒扫描); H) E" z( F& Y; r9 G: T2 h
检测通过Web应用程序上传的恶意文件。7 J3 d- z6 ]! }
9 V- ]) v8 p! Z5 v8 u+ M
& k5 L5 N: V# O$ sTracking Sensitive Data(跟踪敏感数据)
I! {- B J5 z4 D) v1 u* ?信用卡通道的使用,并阻止泄漏。! ~* R7 l; O1 P, q4 H9 h" R; R
* b, |4 ~ }& ~" r0 M8 L6 z) Q) O ~$ m3 `" ^
6 X; ^3 N2 |+ R9 t! h' d
Trojan Protection(木马防护): S! j- {8 L' F* z& n
检测访问木马。
- v) L0 f+ j } @
$ ?* h* W: g: L5 v4 u" Z' F) n1 h7 E9 e! ^; k8 P8 _ K0 n& g
Identification of Application Defects(应用程序缺陷的鉴定)* |# V0 r: f7 u5 Y% O3 y
检测应用程序的错误配置警报。" l6 I* \5 p8 p' |; o. U
; j8 a. E/ H; _& G1 J5 S* M3 J9 C
- I3 k/ b: c9 l% Y A
Error Detection and Hiding(错误检测和隐藏)2 ], N$ |: S, V: U& R) m, _8 C: V
检测伪装服务器发送错误消息。
, F( C( z1 w% |. N
S% P; x% B) w" m6 \7 ?+ {
# i% j$ V# ~) h- }/ S$ p+ P3 N安装ModSecurity# Q, v1 o9 Q3 u3 ^4 w% R8 k
软件基础环境准备8 s k1 s9 U* K) A' W2 ?
下载对应软件包5 X- [8 J( O' B6 U" Z
$ cd /root
* t7 b/ ]: T: }7 q w$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
4 K0 `: e& x; m5 G% Y: }( {6 _: f$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz- m- j. K1 o4 o9 W. d$ x5 E, k4 \ g
安装Nginx和ModSecurity依赖包/ c% L( y4 M' h1 O' q& H; H# g4 Y
Centos/RHEL
& s2 j. {- T# C/ I8 t. i* r. _9 ~! F% O5 X8 P) |9 C6 p
5 M( {) x! D& U4 x$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel3 c7 b$ U( m: h6 G( Q1 S* H
Ubuntu/Debian A) y. a# E9 M5 v
' w# G8 U) r! b) r/ N* p; d+ R! X/ w) v# V! \
$ 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
; ^, |' }, A1 ~编译安装ModSecurity
# z2 r, j1 `) E# A* i. A5 |( F0 I, FNginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。7 [2 w# w8 R' u% z$ P1 I( ~& T
( M n% X; h' h" x8 t* R
$ J7 N* n8 H5 f& [
方法一:编译为Nginx静态模块, ?: t) ?! |3 k! w f, M. u
4 F+ ~# r0 E9 m9 ]/ m& r0 J4 {8 L. l% o9 R$ r; ]
编译为独立模块(modsecurity-2.9.1)$ ^0 e' {0 e- R4 M; b; ?( ?4 J
$ tar xzvf modsecurity-2.9.1.tar.gz1 H" P/ K j( c
$ cd modsecurity-2.9.1/1 i6 |4 x9 L/ T/ @2 y. P
$ ./autogen.sh
$ ?5 u$ w @7 x$ m# d$ ./configure --enable-standalone-module --disable-mlogc" R- J/ K" t( d: [# E
$ make
0 ?" {( D9 ?4 p编译安装Nginx并添加ModSecurity模块5 f _1 E7 c; r3 n
$ tar xzvf nginx-1.9.2.tar.gz. a) M8 j7 v% w# R. b; o- a
$ cd nginx-1.9.2
% z0 k. F& i- s6 y- h1 R$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/
+ W( A: B0 @) U5 `4 E5 t3 ?1 Q4 Z$ make && make install
( A7 [2 Z6 t% C- L0 R/ a8 S; ^方法二:编译通过ModSecurity-Nginx Connector加载的动态模块) m* B1 f' }0 H( t4 x2 A+ Y. e
/ p) J' S. L$ j( I8 ^( i
. j4 g8 l" v5 w% V' `. n: j' ]
编译LibModSecurity(modsecurity-3.0)
4 z: i7 k6 X3 c9 ]$ cd /root* S; X# z. ?9 W' [9 C W0 V, ?' @
$ git clone https://github.com/SpiderLabs/ModSecurity
) J7 ^* B6 @% @+ U$ cd ModSecurity+ w; H. X! ?6 c6 B$ x
$ git checkout -b v3/master origin/v3/master- _# x9 L$ N( A6 z! v& D1 P) [
$ sh build.sh
7 K* d: L9 c ?$ d k$ git submodule init* L1 n' v8 q1 g ~
$ git submodule update
+ ^$ Z" o1 F- z" A# h0 L6 x% x& e$ ./configure
2 E$ E! o9 }% q7 j; l# ?. @$ make
* [$ z; {$ p" n; s! @. k$ make install
/ _& i% p+ d, m' cLibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
: ^. ~4 u( E8 N; W5 V# r" i0 f2 ^4 O4 F& O" o' t0 E9 R y
& w6 j4 X. B, o
$ ls /usr/local/modsecurity/lib
' W1 a" f% H- }0 s/ s I' r+ E6 Glibmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.0
5 p# L T; e1 j6 U- j编译安装Nginx并添加ModSecurity-Nginx Connector模块: U+ |3 i1 ]* P& b' z7 x
使用ModSecurity-Nginx模块来连接LibModSecurity2 q" e/ I5 Q( G: F G
" w4 G% `. A9 J7 z
6 \" a( F; E- E4 ?5 X$ cd /root! [# Y* _; P4 B. k
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx+ K2 s& U) O) p
$ tar xzvf nginx-1.9.2.tar.gz
2 I R, a& w( n9 ~- A1 C4 E$ cd nginx-1.9.2
& y9 A; D2 ]# _5 ^$ ./configure --add-module=/root/modsecurity-nginx
8 m7 w4 S# x/ L/ w; _' ]" T* ~$ make2 ]8 M4 k4 ]+ P; i8 t! F
$ make && make install
* a% A8 c( k2 A添加OWASP规则: u' E, F8 k* A5 m- d: N
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
6 r8 ?8 h2 E2 ?- e l8 j! h, j7 D6 D& J- e- S4 o! {
$ s1 L* u5 h, {* D; k+ t下载OWASP规则并生成配置文件 \3 M' q& U( V- [
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git; L2 k" `/ X2 _2 R4 L( N/ T' j" W( T
$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/8 C9 |! s+ t$ E- h3 G
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs2 H T! ^1 e8 \- L
$ cp crs-setup.conf.example crs-setup.conf
8 N4 x- C: U6 H4 [. M& `配置OWASP规则
' ?* G( F4 L: i: G' y+ N编辑crs-setup.conf文件
) ]) C+ `8 Q! [/ C1 [& t% U
4 @1 x1 O# y0 i
) ?( `" Z" S+ {4 p0 X$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
# W6 ]1 e8 T# P( | D9 u% D8 E$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf6 e) o& w0 h, s0 ^1 O5 K
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
* N* R% j; B# z' W$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf: F8 T. u) t7 D8 v
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
N$ y9 X* J( g) H3 v5 O% U" G' r7 Z5 _+ s; }6 l1 Y
( W1 M0 o; a6 Z6 l
启用ModSecurity模块和CRS规则
5 [ U+ E. ?- q0 M: c复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。' n) C* a: b* i% l
! T. @' I; c$ x* {
$ Z1 \+ _( Q" r$ \6 w' _3 p3 Vmodsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。0 Y9 Z- M% i) J' X
0 D9 `. [0 y L, q( M- P; g8 n/ S( J1 x
$ cd /root/modsecurity-2.9.1/
; L: `( j [( _7 [5 V; l: V _& n/ [$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf 6 E# g; N1 P4 g$ s
$ cp unicode.mapping /usr/local/nginx/conf/4 X4 F% F( } \3 y2 j; [& f
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
b& E! N* H; N, [2 [% P y [" W$ p: m; }% \7 c8 Z M
8 }& D# s' ]3 V( k1 e
$ vim /usr/local/nginx/conf/modsecurity.conf, o# x1 f+ ?- L P/ y+ t
SecRuleEngine On
4 P% a0 H" i: s. NModSecurity中几个常用配置说明:4 X k* g7 t2 |2 B
" \0 s1 ~! |5 ?0 X
3 Z6 g Z; d: [
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
m2 x, X2 a+ C7 W
4 b: u# _9 V- M) v* W- y$ L# N% E0 T4 A* Z1 T* t0 g! F
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。1 T) |$ Y- [" k2 ]
6 @7 k0 B& _+ ?; B g( y) {
# f; n! X7 A" W3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。& m n, P0 U& j2 L: Z' \7 l
( Q$ Q4 v- @# Y4 H. ^' ~. y& E$ R* ~, G' D3 O
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。: ~- T& V+ f" l; i- u! u
$ C, W, A: c6 @( n
5 ?5 n6 A* U: j
在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。( P9 E& t6 `% L' o& B
6 y# O0 K: f- L+ ~) g( b5 [( \2 u1 Q
k3 Q5 x* Y4 {4 L5 b0 R3.x版本CRS
. v* O: y$ q0 A8 }$ cd /usr/local/nginx/conf/owasp-modsecurity-crs8 l& h! R# f4 P' A; J$ L; o
# 生成例外排除请求的配置文件7 N+ d s s# Y1 t0 i- U* V
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf# M' K4 o& e( x4 I$ o) M x& u
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf; b: s0 `# x6 ^& T1 I5 p. G/ o
$ cp rules/*.data /usr/local/nginx/conf
" R; E; S, ^5 H8 o- S% m为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。: R4 [3 r, Y& o, f0 o0 q9 v f
9 ]$ R& t, P& E7 U
& E1 R8 u( o1 B! `! ~, v; C
$ vim /usr/local/nginx/conf/modsec_includes.conf
8 B& I% L) J8 ]4 k. t8 p1 _+ ]
3 v1 g5 n+ ~8 z0 w; h/ B[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
9 ~' b: t4 h2 E. [6 B: ` X0 H
* i; f E( ~" ?! [注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
1 W( ]5 g* c" U- w+ d( N* [; o+ w Q* j% }- A
3 n( H% S! F9 X8 p: ~) e8 R1 @
配置Nginx支持Modsecurity+ }- [5 ~: U( I
启用Modsecurity0 D# \4 U3 g9 h5 n/ _$ I1 @
使用静态模块加载的配置方法
1 n2 T. ]3 j9 J( p9 h在需要启用Modsecurity的主机的location下面加入下面两行即可:9 e7 c9 P% |4 J5 c# T
6 [! _8 V k/ m& K! h1 r
' O0 E, U: {& F$ ^! p; lModSecurityEnabled on;
# p8 e3 z1 r6 [9 \. w, SModSecurityConfig modsec_includes.conf;
, R0 V# D. @% B$ b0 Q0 L2 w7 u修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。3 y/ W. H ~' `: C7 s4 T
" c9 p4 w+ X: Y2 y0 |# U0 E0 J" m3 q1 n
$ vim /usr/local/nginx/conf/nginx.conf. Z7 C7 \( ^) f
. H! V5 Y* H9 W5 I0 w# s; l. a6 {
server {$ L# P) ~4 j2 H5 Q- Z
listen 80;: H8 O# u2 u s& O7 e
server_name example.com;' h: @( U& D& _7 }. H6 s
N- c: C% B/ v% S; H
l# G9 y. d$ Z$ S- M location / {8 _7 c" p. h- \ V
ModSecurityEnabled on;
) o+ M7 a6 O- ~, ^3 s, ]' ^ ModSecurityConfig modsec_includes.conf;
9 w! @4 F. N. m6 I" M! J root html;
7 C! s- A ?: Q8 B1 x1 E0 v7 v& L# ` index index.html index.htm;
4 h P# F$ t+ V8 h! L& K4 m5 |3 L }
4 J6 q8 A! c+ ^7 y" c/ {}5 z/ ?6 j2 Y k+ Q
使用动态模块加载的配置方法
+ }/ i1 }) @% U2 q1 z X) k3 j在需要启用Modsecurity的主机的location下面加入下面两行即可:# b, }& @: v% S/ v
3 ]/ W" h/ p9 N0 ^( N1 B8 \. S
# j6 c# Q4 B5 N4 ?
modsecurity on;
1 E& X/ `6 B& @( H' W7 d8 w$ xmodsecurity_rules_file modsec_includes.conf;0 u' Q* N/ T0 |8 s
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
! Z! ^9 T& i% j9 l$ G+ N
" p" I6 O# g1 @; d u8 j0 F+ w4 ?! D0 [2 y$ i
$ vim /usr/local/nginx/conf/nginx.conf
1 H; G% i Z* |' @9 _* \
4 |, R9 x; M. H% T3 J% z6 w1 l6 B) l: u2 O+ `
server {+ i3 W4 ?# N$ A% Y. [
listen 80;8 E$ z; C3 _( v G( I
server_name localhost mike.hi-linux.com;
: k2 i7 S& N3 N9 g# }4 ~. B access_log /var/log/nginx/yourdomain.log;
& ]5 h/ I* k' \* E9 P \
: R2 a5 Y* |; S. W# l4 [
! a+ m" d. P2 x& c' z. C, _ location / {& x' g4 B" m9 F& e. t
8 M; G1 a- [$ |8 d7 }1 K
: ?- {( _+ T8 V% I3 V! r! z" Q* b modsecurity on;
! g) |& z& v2 m4 F; E modsecurity_rules_file modsec_includes.conf;6 z8 g' m# x# W- L+ y
root html;: h5 X- I7 O# D) ^" T( m
index index.html index.htm;
! N6 f1 ^9 A3 o9 v( ?}
$ f' v9 l7 a2 [" A5 T}& Y, I% \% \" w) f0 w4 j7 \
验证Nginx配置文件
; L" ~) ]7 y5 F; X# `$ /usr/local/nginx/sbin/nginx -t
8 B2 F1 f: P- S5 T" _! H9 X- w) }nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
3 O0 T/ q1 J) u% T+ N7 Unginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful* r& d4 ?4 ?! O
启动Nginx: X+ n+ R7 X% b6 f9 q4 B4 R: L/ Q/ s5 U
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf% o0 y/ s8 R7 u, e2 [0 ~
; Y5 f5 U8 j$ r/ r. y4 L
测试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能够战胜更多复杂/未知/混淆的攻击模式。
6 y/ W+ Z. K; i" p |