ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。1 }' H3 N6 z2 U$ ^
/ Y# y$ v0 N* S4 L( A- Y( Y9 A
' r2 ?! @ |; c- A在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
8 u- t2 p1 n7 n4 v! g, f' G1 x! l5 F5 L& ]* {- }
6 }. l6 k3 h) o, t9 h! u什么是ModSecurity% \: f* J1 Q9 \( V6 Q1 s9 { r- x
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。, ^$ ] j+ o$ S6 x+ u, F
+ Z4 l; s* V+ q: ?* D+ a+ r8 M
' M0 s& m4 c2 B1 J2 L b, W/ bModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。 M/ f: ]4 t: X2 Q U
0 ]; a, d& N- ~, r; B2 R4 ^1 A
/ K7 Y6 `0 f* b- A4 o# J6 w- v, qModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。! G/ b$ O' e9 f9 c+ M1 ]
1 [% t: s- m8 n5 W5 b8 B4 J1 f* }5 ?) w. o( L" ~7 r
官网: https://www.modsecurity.org/
: h. w$ _7 D: B. w _5 G# C. _6 a% h1 _
8 h t* _1 S6 P什么是OWASP CRS
9 J: }1 a! N9 ]; X" l; y+ o uOWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。" Q. @2 j6 C I7 P0 `
* m: J& Z9 a% r8 F+ J" W/ W
0 K9 y4 l2 _& Y" OModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。% D; v, t! U5 d0 X
9 f' s0 Z1 Q, `+ {
3 l; x7 p6 R* O# M1 b) l
HTTP Protection(HTTP防御)3 u$ M8 @% C3 ]2 m
HTTP协议和本地定义使用的detectsviolations策略。
' I6 C( i# J' i# f; |& s
2 P6 c3 ^0 S: ]. Q8 n2 z
+ \; e: I, [/ o' S% ]Real-time Blacklist Lookups(实时黑名单查询)
1 Z6 Z D% f# K利用第三方IP名单。 A2 z1 M6 o& ?! x4 F$ V
" k4 v4 r5 Q9 z, D
1 g: a* e0 X7 I' y! LHTTP Denial of Service Protections(HTTP的拒绝服务保护)
& [3 b0 ?$ j8 w" n, c" }$ p防御HTTP的洪水攻击和HTTP Dos攻击。( ]' A- R. m3 m" S5 \- f: y% i
& I8 Q7 c, K1 _5 |. r) g5 A
5 l! K# U/ b% `2 RCommon Web Attacks Protection(常见的Web攻击防护)% j4 L) g7 p9 I: O9 S# M- \. M7 g
检测常见的Web应用程序的安全攻击。3 b8 b1 |8 v) u
' }- x( [ y% R3 Q9 |
" E1 j3 b# u$ B+ ]( ^! S! {Automation Detection(自动化检测)( S( m) i( M: l2 ~
检测机器人,爬虫,扫描仪和其他表面恶意活动。
6 h$ T* d G$ K9 f. E
d3 \9 A3 I" N% n; T4 @( ^. d' F) ~* k; Q5 U0 ^
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)
- H% H; W. I; ~5 u3 @) h检测通过Web应用程序上传的恶意文件。
1 h1 k( `' I0 R: A# c( H+ o! ^( ] A8 b, G( G
0 h) b7 K" w$ d; Y, {; m h, X" vTracking Sensitive Data(跟踪敏感数据)
; a% T( e$ Z3 z3 F) c8 Y0 q信用卡通道的使用,并阻止泄漏。
z# c9 W/ t& Y" d( C' x& ^- Y& y. k* l: Q8 ?
' I1 Y2 f# S! P: U7 T
Trojan Protection(木马防护). w# o8 N5 I/ F N% a! n
检测访问木马。0 E h3 K! i: ^' q6 i0 g0 W
) H; [! @. [( Q3 t2 Q" s
0 V9 Z$ A9 s$ k# U
Identification of Application Defects(应用程序缺陷的鉴定)3 p& j* \9 i3 Z; c' F
检测应用程序的错误配置警报。0 ~' z4 G) i! g& _; v) ?; n7 \
3 e& k+ l5 N* m! ]6 E
8 S0 [ ?6 K I J6 H% @Error Detection and Hiding(错误检测和隐藏)1 `/ {" N& E1 Y. @) x
检测伪装服务器发送错误消息。
6 X+ B) b# o: O2 ]4 I& @/ i
) A' F- w. m9 {/ T% }; u4 R6 V
: n8 [9 O, c6 X* [( L8 h安装ModSecurity
3 e/ M, F) P# Q" y5 f/ x( y( Q软件基础环境准备
; z' W+ r# j% y3 \下载对应软件包6 C3 L# a& m$ c) l
$ cd /root6 M% e; @9 v* ]. |- v' k l1 M# g, i
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'# q8 U5 R" ~) A; u5 ?& D" p
$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz
9 L b8 u9 Z5 Z, e* G安装Nginx和ModSecurity依赖包
# ?; U7 I1 q3 X7 z7 ECentos/RHEL
$ \7 `$ P( B, [# N- t4 D. o. J+ h$ E6 k8 D: j9 K
5 ^) e$ @8 C g+ k" [$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
V8 T8 m. C9 A% O9 b8 wUbuntu/Debian1 @" q2 @. b, i7 t
6 X. S2 N K" B1 |# N2 Z1 n7 m
- j8 P/ z r; K% g( s$ 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 L( U& q8 J D8 W! L7 d O
编译安装ModSecurity
j/ q- J+ c5 Z1 d7 UNginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。* G+ B4 x; _& }
2 k; v% e. v3 x: R- D
7 y6 z- S1 h" H) ~/ A方法一:编译为Nginx静态模块* w; \" N5 X" l
- b) {4 [8 s X/ c$ ~- z+ ^2 |0 @
1 ]6 {% t" h+ ?$ s1 K+ p- M) F5 P
编译为独立模块(modsecurity-2.9.1)
6 L @+ D4 s, W$ tar xzvf modsecurity-2.9.1.tar.gz: W9 C3 O, b. y6 w3 O$ e
$ cd modsecurity-2.9.1/
6 L9 Z9 d* v8 J$ ./autogen.sh2 D, A) W3 B- `3 `% \4 p
$ ./configure --enable-standalone-module --disable-mlogc1 {% q4 N; P9 C! B+ K
$ make
; F6 g% O4 ?+ r/ v* B7 t编译安装Nginx并添加ModSecurity模块
3 D7 N+ {0 Q- h# Q6 _$ tar xzvf nginx-1.9.2.tar.gz
/ H0 f+ K* }* z$ c( |" W* W$ cd nginx-1.9.21 b- n! l: `/ t" @: a
$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/3 V# Y: i9 g2 k8 u! c8 e
$ make && make install
) ?: g w$ b" v方法二:编译通过ModSecurity-Nginx Connector加载的动态模块8 F+ C o/ b; }& s Q2 {. S* _( m4 n
: \8 n* E) R! s' h, o
/ v* {0 `, x+ X A! b* x8 ?% G9 w
编译LibModSecurity(modsecurity-3.0) D" U- m8 n. c2 W* L0 S
$ cd /root. d5 I* `7 a7 _* C0 m* [8 ^, Y
$ git clone https://github.com/SpiderLabs/ModSecurity
' i' Y) |* u5 m, y6 G; b$ cd ModSecurity" k2 ?7 j' ~4 @! N# g& b: d
$ git checkout -b v3/master origin/v3/master
6 w$ V% N( A; w8 p5 v$ sh build.sh, G9 e( m5 T8 W; y
$ git submodule init; R0 S/ {: z; V. }) }7 _
$ git submodule update
, C8 ?% R& G5 k; o$ ./configure- L: v/ y+ b( {/ v! m% v# f) K0 x
$ make
6 O3 N. E' f/ s1 J; v: z/ V! F$ make install
. e% v8 }# E1 H' |9 QLibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
8 _1 ?. _5 b% w9 l
/ N8 X! p; i p& u8 V) Q, g/ p \. i1 `6 ], P' |# @
$ ls /usr/local/modsecurity/lib
! a- t* p8 @' p0 b- elibmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.0
" M+ F' Y3 h) G d% w$ K8 _编译安装Nginx并添加ModSecurity-Nginx Connector模块- i0 G& E: K3 R9 s1 T6 l
使用ModSecurity-Nginx模块来连接LibModSecurity; h3 g4 f: ^! y/ C; R; d
- v9 L0 U# x ^( V! [0 v
5 ~5 k, j/ z6 x; f/ {$ cd /root
* z0 y& R/ _) D6 h$ q" S$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
% y- }& _- B6 q. U. H* U l$ tar xzvf nginx-1.9.2.tar.gz+ K" I' w, B4 u9 F( U. g0 F+ s
$ cd nginx-1.9.2/ L& ?0 T; I. T3 \) c, D" D: S
$ ./configure --add-module=/root/modsecurity-nginx: H( o) @9 Q# A
$ make$ J* t% |7 K% ]# J
$ make && make install) i+ \, Y4 p0 p- O- ~
添加OWASP规则
! J/ T% I+ m4 q) G9 ]7 a, N. LModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
% C) t, B; g P- M7 h: \2 k h
$ b: U. R3 z/ |8 q r8 P( E3 p- l* F$ C# n. ]" O \1 u5 y3 }
下载OWASP规则并生成配置文件8 Y6 x; l- G/ O( m8 U7 y" Q
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
& g3 j/ \1 O4 g, ^; _$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/9 `5 `8 p& q1 L) l5 `
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs' D X2 g0 P- f$ z$ N$ L! i8 n
$ cp crs-setup.conf.example crs-setup.conf8 ?& T6 q3 _; c6 p% }
配置OWASP规则5 p, r$ v- I6 Y9 B, H
编辑crs-setup.conf文件( J; A6 d* Y5 ]6 x# y. R
% X% i+ e) n7 K E; B( z" `
& l1 ^3 C& j3 u' n4 Y$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf* a, g* [) Z% g
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
( T4 Q0 o) y# Q6 s) T" H" F$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf. g8 d! \% j9 r6 P9 E1 R2 W7 H
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
$ u5 O/ q9 ]8 }- F9 ~5 N( l2 \, R默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
; d, m: O. Q- h$ d4 c0 u: E, Q) F# _6 Z+ S8 e' Q0 i! C( {( [
; S/ Z4 j; E/ [! M" C# N! f
启用ModSecurity模块和CRS规则0 X; C. }% j8 M; Y8 [1 c
复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
8 Q8 v& P: `2 r. d9 @- w( \% n4 t# g- I/ b* b5 N0 ^( s
% E; V8 h: M5 ]6 l8 h
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。. U$ C+ F% @7 B* G$ |+ h
/ T q9 D0 v/ I8 S* j' Q* s$ o% S% e) I
$ cd /root/modsecurity-2.9.1/5 @) W! ^8 F& ]) q0 @7 W9 \
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf 2 N1 G+ [3 ?0 |( |, [8 z
$ cp unicode.mapping /usr/local/nginx/conf/
2 g5 z3 f( ~: G2 `0 l将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。9 ?: `/ ]4 o d. i' j" W
, R$ P9 _# J. V# s) c$ T% L
$ g. {: {- R9 R+ r1 _
$ vim /usr/local/nginx/conf/modsecurity.conf r6 V0 Q, W' a' x# }/ x% r
SecRuleEngine On* I% u# G. C# J+ I8 [
ModSecurity中几个常用配置说明:
* [; J) b! Z4 q6 A% j. i, o+ W0 r- y, Y8 d( d0 ^1 l/ d
. K" Y( A& c4 @% D# ^3 L. ?; N( P4 F
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。4 K5 d T4 S: ^
/ S& [4 C# \* R/ r
: \( a/ \$ p7 q6 |/ U0 Q
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。; y+ @3 J7 C9 E) Q% m; z* h! n! H
$ i2 U! u; n5 v# y
; a; {0 n6 p8 W# ^3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。# e7 [6 R2 V4 G0 C. |
# Y9 G$ @4 W: u% A' X6 o! Q4 G* N: ]. A7 h9 W7 y! Q5 _3 H
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。
. c8 Z" t7 F/ J$ v1 ^% C8 f' ?; J& @
; F/ ^! x6 |# M7 \$ `
在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
# A1 h2 ~* N' A1 }$ B: G5 a" |$ g% P2 y N2 I9 i. m; {: h( `, F* {/ ?
' S% U' T4 M* {+ h
3.x版本CRS: X6 ^: G. n5 M
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
) r, G# O3 b# |6 [9 O1 c" @% t# 生成例外排除请求的配置文件
1 @7 v. ?) I/ M* j! s4 l$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
; W0 G& ~5 @5 V7 h$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf7 d9 N) N4 H$ L8 r
$ cp rules/*.data /usr/local/nginx/conf
! [1 E) ?2 f9 j) O3 X" G- K为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。5 ^% ~7 Y/ N8 L' m2 U% N# ?
" f% B& N, }4 G5 V% y7 @- ~+ t- d7 I
$ vim /usr/local/nginx/conf/modsec_includes.conf$ c: s3 O3 K) e6 |
5 C2 _' g4 ^) o! N
[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' d0 m Y- @! c7 |! m: _6 {' m! W& K0 m4 C) f6 f
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
/ I% x ]/ y6 B: Q Q4 @9 L
; U L) @( M! L q1 U! f ]
" @: x5 R9 C' y9 Z/ i& m9 P配置Nginx支持Modsecurity _: I9 P9 @2 Q) C
启用Modsecurity0 ]3 R3 L s6 t8 v5 H
使用静态模块加载的配置方法5 ~; d5 b8 `7 L
在需要启用Modsecurity的主机的location下面加入下面两行即可:1 A& z2 m) G/ @; h7 B
! { @4 A0 Q0 H( N& F% _; `- ~5 s3 w, C* ^
ModSecurityEnabled on;8 |* G. _6 |2 s
ModSecurityConfig modsec_includes.conf;$ b0 i8 \2 t/ [* @5 i& d3 W
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。* j0 H P3 ^% H" i0 `! q) k- K
# x1 ^, G; A# D# h6 [5 E4 S% J
" e0 C: \8 ], P% ^( Q2 V$ vim /usr/local/nginx/conf/nginx.conf; ~2 T @- [1 Q! a7 O+ R2 o2 g
, @9 h: A/ a7 a, R0 u+ w2 }$ Q$ b7 Q7 k% S
server {
1 a: ~) u! G; ~5 g; J+ h6 t+ k listen 80;
4 |3 N; r4 f- }$ C7 ^( ~9 v# z server_name example.com;7 I4 s+ P6 c4 @ P# g% P7 x
4 X" l3 o" j. n6 K7 L6 I1 E: E& y
location / {
' Y$ `8 ^% f9 w/ f0 i, V ModSecurityEnabled on;. O+ {/ z& V' P/ X6 \8 J
ModSecurityConfig modsec_includes.conf;
( P$ n& F I. A+ X root html;
9 J* N! w. E; a9 d, G index index.html index.htm;
1 [; C" t& r" }9 R5 {0 U B) u! Z }
' b* o3 `) B \5 D$ D; K6 S$ z}
; Q2 _" N4 I2 a9 m# Z5 q$ t使用动态模块加载的配置方法
& y9 A* {$ |0 _: e在需要启用Modsecurity的主机的location下面加入下面两行即可:
0 O: @3 e' {+ d, }+ S. N$ F8 p4 o+ M) `/ J- F8 @9 u9 r6 `* X
5 q; P5 h3 y+ E3 ^ N+ m/ n5 `, M5 fmodsecurity on; _. w4 r8 _' Q4 G
modsecurity_rules_file modsec_includes.conf;
9 z$ V1 E g1 x* C8 B% w& d f, _修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。+ m! o2 j' L( W# L4 S0 [
9 }' b, k! b4 O3 o* C% e
$ F9 I6 v h; ^3 ~$ K& a+ ^7 J
$ vim /usr/local/nginx/conf/nginx.conf
2 Q9 f B7 Z* n* r5 `
1 ^" M+ q: G( j: O, l
2 Z2 Z5 Q, w' ]' Z7 ?server {1 J" o X- Z5 P: l9 a, _1 Y
listen 80;+ i8 \0 N6 s9 _' k, T, b
server_name localhost mike.hi-linux.com;
1 H& G$ J/ p+ @ access_log /var/log/nginx/yourdomain.log;
' ~' H+ {, w, t
7 b& K' Z% @& |2 V7 L, a' u
4 m; ~3 z7 {+ ~% _' | z location / {
9 s5 M6 F* j0 w: X5 z% v
. Y5 P* S# o8 @2 S9 T7 n% ]! s7 v0 }( w" m
modsecurity on;6 X# B! c, H& t* M# ?
modsecurity_rules_file modsec_includes.conf;( }/ t: }# J9 |
root html;
B' s' P* e. j index index.html index.htm;+ a* ]$ _8 F' l4 o, s) N5 Q
}& w% B+ m# D8 _" M
}
9 |# ~% b/ ^7 d- T$ ?- a% m5 Y验证Nginx配置文件
+ e1 e% C0 }1 \$ /usr/local/nginx/sbin/nginx -t
0 _) f7 l/ B* Tnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok ^2 X( c1 n$ x Y, ~6 M0 e
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
7 t; n1 T1 b+ k8 R% p启动Nginx
_% ?8 l/ ?3 \% U$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf8 A. b) h/ r. j+ w
" B2 {* ?2 ]+ p' ~: E* X0 T测试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能够战胜更多复杂/未知/混淆的攻击模式。
* \: Q7 B, s4 a; O3 l% G! f3 P |