ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
7 M9 ^4 {1 n# H4 f* t8 s1 {1 G ?; L `; A$ i
' q1 h& K; g& S! X3 U4 W1 g在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
$ ^4 o' v8 V) N) R% Y. {5 [3 S! T$ l( s) W; D
$ v: E7 @" i) H& G) O7 k6 r什么是ModSecurity q X+ p [/ l/ R, d4 o3 o
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。0 W2 a6 Z2 u' ]! Q
' k6 \) M$ c+ v. f/ }5 @
- }+ w: I3 F; RModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。 v" f4 T& V! N: ?* s! n; d- ~
9 f# z. U8 a q! s1 {
0 z( t& F# t, p2 d' [9 z0 ?. I
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。9 T9 F5 q! z: x5 Z+ n2 l/ L
( t( e# b7 S3 w5 a( r; D" k' G
" \! E2 C7 p2 a" f1 `& a
官网: https://www.modsecurity.org/
2 \( j' v) a* R4 {9 {8 G5 c9 d% u* ~' r; c c9 p9 G6 D
# p' J) e8 H. [ q什么是OWASP CRS
" m; h8 Z! ]; I- YOWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。) d( U/ N/ Q( {# W i: m5 @* S. |
( P L, t* U/ o' Q
4 s+ ` M, t+ X7 v- wModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。0 z; t5 ?4 d1 `
: t+ `' e' P- S( |6 |+ H: A1 {
0 ~6 {7 ]7 E( U0 P2 P- Z2 n0 w+ x
HTTP Protection(HTTP防御)( H% p2 D9 N0 i! P( T
HTTP协议和本地定义使用的detectsviolations策略。6 T/ W- O o, O- ]. Q+ R" ?2 W( l
W5 C4 \7 ]% `; ~# b
5 j( M! T* r. J- CReal-time Blacklist Lookups(实时黑名单查询)
0 f A! H% ^' B: m利用第三方IP名单。
( u+ C1 C" z. \$ G5 r6 x
3 D# ~" j- `3 Z& H+ J2 l1 _9 M! {' Q2 [( X/ |7 B! n5 z
HTTP Denial of Service Protections(HTTP的拒绝服务保护)
@+ H6 v3 }: A防御HTTP的洪水攻击和HTTP Dos攻击。7 S* h' X) g4 }3 }/ [: e/ X. D
. r% c# G$ ~/ `2 P0 `9 b5 p( l3 M) u% K+ g% ]4 L* z
Common Web Attacks Protection(常见的Web攻击防护)% J! y* z6 W/ r
检测常见的Web应用程序的安全攻击。# Q% M* B* W( Z
& v2 s) W% N U6 {! x- k
) x1 W$ x2 r, r' O5 KAutomation Detection(自动化检测)5 r, n8 P0 t& y, V' q) \. F
检测机器人,爬虫,扫描仪和其他表面恶意活动。
/ A6 P6 R n2 Q5 z& L7 F; G2 h- q8 K0 T1 l
+ T# s* |, H% \% M0 G. ^ z- X
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)
4 H5 w$ m: }1 O3 R检测通过Web应用程序上传的恶意文件。
5 X# j, s! u1 u ]
( w% ?+ h7 g' E ~8 G/ Z
' I0 Q4 B4 M0 f$ m( F! ?- MTracking Sensitive Data(跟踪敏感数据)
5 ]. ?% j. _0 `7 z信用卡通道的使用,并阻止泄漏。; |" b' f$ J* P& S5 U+ J, M
! ?3 K4 V/ v. h2 v: `7 C2 e8 S+ c/ d$ n! _5 ?5 G
Trojan Protection(木马防护)
6 \7 d% M3 R( k" e' k9 N检测访问木马。
& d" O, r1 K, p/ j$ c4 z- ^& @1 D$ v p
6 ~" F* p$ q, ?7 C& D
Identification of Application Defects(应用程序缺陷的鉴定)
k8 A/ j- t u2 I1 O, k4 F- a检测应用程序的错误配置警报。# F* ~: n; \: z0 ?
6 h1 T/ x/ `# z4 s: [
; l4 L" F$ z5 O+ _* n vError Detection and Hiding(错误检测和隐藏): R" ?6 N- Y Y7 `7 \. m: ~& U
检测伪装服务器发送错误消息。
8 @ j- c# v2 _3 W* ]/ P% h+ D6 \% {( K
1 L6 S; {8 p% V; I W: o4 H0 E0 r" z安装ModSecurity" V! w% l ]+ A2 Y2 q& B3 Z8 V
软件基础环境准备8 b* P; e3 A/ e$ |
下载对应软件包
8 E1 y. o7 Z" h$ cd /root- ^" ~+ n! c. {% o) H6 S
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'6 }0 c: U4 c+ |8 F3 B! n& ^( `& k: S6 H- y
$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz
& C" f% e; m! i安装Nginx和ModSecurity依赖包
4 I* g. M+ s; @/ K! {) WCentos/RHEL9 C+ O+ C& t8 e! k' X: D
/ J0 Q% q0 R- |2 B: e" k; \2 U' j$ l" L, Z9 l* V
$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
. M1 ], ~/ H+ U( yUbuntu/Debian4 b* V- C% v1 y. w
0 z* F! D6 B7 R1 v/ D6 {
$ z$ ~2 J! ~% N1 z$ 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++-dev2 i" ?6 P/ t! o; i
编译安装ModSecurity
; [' |2 I R' RNginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。# X# o; E9 B6 i: a! h& O3 x
* J2 M( f& s' r1 f9 e" J1 c3 a/ d/ k' D0 ]0 `% R
方法一:编译为Nginx静态模块
9 ~* h( B- f6 j5 G8 U8 v9 R s/ X4 b# a! H# g4 U
& ^1 N6 {2 r4 e
编译为独立模块(modsecurity-2.9.1)' w4 V; o) P) ~9 n: {! U! ^
$ tar xzvf modsecurity-2.9.1.tar.gz2 W# Q; Y% f; ]. r0 J
$ cd modsecurity-2.9.1/& d Z K* Q4 s9 @, w* `! O
$ ./autogen.sh
' s' e. W% Q2 o' ?' Q6 l$ ./configure --enable-standalone-module --disable-mlogc3 k) W5 b' ~" { V9 i
$ make
3 Q/ ^! F- D" a6 e! [! s8 X编译安装Nginx并添加ModSecurity模块
2 b L n M8 t$ tar xzvf nginx-1.9.2.tar.gz0 t8 T7 k- D/ T4 [7 N
$ cd nginx-1.9.2% H. `8 ] q* W) d
$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/: Y |; O& j1 M3 N' C7 c5 p* o
$ make && make install0 V4 B; ]1 Y7 X: x: B6 h( G
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
8 M5 c0 H7 `/ q$ h$ s% G- ]# D8 v( F l' Z
' s E7 m" r; l) {6 E$ r" g编译LibModSecurity(modsecurity-3.0)
0 Y ]2 {9 S) A4 ^: A- Q1 {$ cd /root
0 E: ]1 }& F. k( g5 I: E$ git clone https://github.com/SpiderLabs/ModSecurity2 @7 h! ~: n1 o! G) b
$ cd ModSecurity7 n* N/ ~: O8 v) X5 u; N
$ git checkout -b v3/master origin/v3/master8 f+ ~, ?2 A( r8 R ^6 i
$ sh build.sh
0 q3 }* I$ t. ^1 h* D. ]6 H( ~$ git submodule init
4 r3 H( S1 T9 Z& |* q/ g$ git submodule update$ ~: t: m+ F7 B
$ ./configure
+ L `- f o6 r9 u G1 c+ M# t$ make
/ e0 K$ Q0 x4 P: f5 ]$ make install
+ g/ m* o' ]; b8 Q( v. ]/ CLibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。) C# E* c; F6 y
3 }& M& @/ C, h: n$ ~
# |3 T r' P* X7 W6 Z% S( T$ ls /usr/local/modsecurity/lib
6 E# o0 d$ ^4 O5 |- olibmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.0- L' q2 C K1 q X k
编译安装Nginx并添加ModSecurity-Nginx Connector模块
: C( R B5 D9 [$ o使用ModSecurity-Nginx模块来连接LibModSecurity
f0 V8 g& }$ M1 `- B8 C- b" B) m7 x9 |& B9 C2 x# N* G! @
3 D0 L5 A# F+ B* j/ W
$ cd /root
1 v6 m+ k) u. U* w0 f& ~8 `$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
: g9 E* h8 n# y$ tar xzvf nginx-1.9.2.tar.gz% D* g4 ~: K/ v' F" R
$ cd nginx-1.9.22 L. ~$ _* d3 e- y* Q& y3 D
$ ./configure --add-module=/root/modsecurity-nginx! i R4 A: G( W) b1 U" D- T
$ make1 E* Q! N3 V: j" Q/ E: S# w8 ~
$ make && make install
4 H9 O2 l5 C9 z3 ?4 r+ i添加OWASP规则$ L/ H% _: B/ H0 x. d6 t. x
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
p( D& V: B, e+ K
4 b/ g" [" @6 e3 ~( O. E4 E# L: a8 Z& o: K
下载OWASP规则并生成配置文件
: h6 U% k$ f, H0 R, ]$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
$ S3 z, K3 M3 @% L$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/- w( E4 |' V* M8 o/ i
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
2 t* N1 `5 ]) G$ cp crs-setup.conf.example crs-setup.conf
' {0 d4 s) G# S ~: W配置OWASP规则
" q8 @) t9 [* h; n" _4 x; Z编辑crs-setup.conf文件+ z6 H5 a' ]5 V7 j( J
w! J" Q7 y5 q' ?
0 t; ^$ p2 Y' x/ T# p1 ?! h$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
7 m: H3 ~' }# d$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
; n3 }" t3 N' n$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
5 F8 T9 D+ k8 c* }& r8 m$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf R! r$ ]% k+ T; p
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。& M4 h" D% t/ F* G
" Q% S/ N7 p6 \% [' ~0 C" t6 L! l( c% f) D6 u' j, N: \1 U
启用ModSecurity模块和CRS规则8 A% j% z e, B5 G
复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。" i" `0 p) U/ l' A4 c( N( h
: M ^% P. h) j; M& k
6 G3 q& t& F9 I6 P. D* |modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。! M/ J4 u+ R M6 ]9 i; i# T
, N3 n" a2 p4 q5 x0 h5 o
& \" n7 u: f# y
$ cd /root/modsecurity-2.9.1/. Q- \+ k) G \0 k. D! M! v8 H
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf
7 l- d! k3 K2 c9 Q$ m- q$ cp unicode.mapping /usr/local/nginx/conf/
% k( `5 r+ t& E x+ D% t1 A将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
3 P) [4 Z# u* Z: W" S+ y5 |% B
' |1 f( B% f3 f! m3 u0 g E+ N/ I# n) p
$ vim /usr/local/nginx/conf/modsecurity.conf* @4 }- }, e2 L/ |1 Y k0 P5 R
SecRuleEngine On
0 ^% z) b' G) ?& b0 S* p) lModSecurity中几个常用配置说明:
9 U+ Q4 K( I4 z' v3 r: E& O( ~
7 d7 X" f* ~* J" H7 \5 P4 B4 ?
' I0 O6 q0 l: A+ K) d1 s5 \1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
: |! T3 ^$ U5 E8 {
9 z+ b z( r6 F( o+ c# V% t
/ E( j: _) D! L% G1 D) B) @2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。% b5 J- o- T6 C, ]
3 s; R1 y! q! x9 V1 y$ i7 q8 l$ y5 s8 }
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
% X4 [% G9 k& p0 x( I9 C8 {' T' V, _
" Q7 Z4 F6 m' C o4 p0 b) q# ^4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。
8 m$ V. ?& w+ u" r( ^. L7 B0 Z+ i2 C# l* J* o
6 i5 E6 _% o/ k6 a* D+ z
在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。6 h8 z+ R: G, J( k( B4 ~0 C
- b6 s3 k& j3 g" q/ ]: W, O; c) A- [- K: R& r
3.x版本CRS7 g. W0 } x; [+ `
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
' U+ Y9 e+ Q4 @# 生成例外排除请求的配置文件
* G+ J8 k5 z$ R% n/ E$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf& v' P1 A& a; |- b) k Z
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
$ c; X! V7 I! S- L$ cp rules/*.data /usr/local/nginx/conf
8 R P/ ?2 j8 @% y0 u3 F1 H: ?为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。% Y: s, g# a3 w: r# f
?8 h+ V! y! L+ z" }
8 u' V& c! v0 |5 P% m
$ vim /usr/local/nginx/conf/modsec_includes.conf
% n" Z I7 _# Y* q
' b. S1 q4 D) J/ |' O[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 ( w3 ?" l; E1 b( `/ d d% T
% h- k8 A2 \' k% R* [! {/ X* l2 i注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
8 ^( y- A9 r; X( i) M1 q, P9 W: Z, O8 ]1 \- q6 ]' o
: C/ y" ]) M/ u
配置Nginx支持Modsecurity3 z5 P# Q& y7 P5 s( B, ?
启用Modsecurity6 n. f0 b9 g j
使用静态模块加载的配置方法 v, f# F7 x6 E6 Q
在需要启用Modsecurity的主机的location下面加入下面两行即可:% v8 o& y- { q7 n/ [
+ m. K& }& U# n0 u
$ T+ g! y& k0 O% q( i% O% L/ {% S% N
ModSecurityEnabled on;
) d% ~; O0 v3 j, i+ F/ L9 M6 vModSecurityConfig modsec_includes.conf;
) o0 K+ W) L( l$ C修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
1 `# `& `, C1 E$ U
: @! w' y4 m/ I b; r* K. T# U% ]# U+ E0 L: o
$ vim /usr/local/nginx/conf/nginx.conf5 W* P2 M3 J! ^
# c! `5 g9 n) m8 {# v8 i4 M5 L$ L" G/ r
server {9 i: X& J$ t3 Q2 p0 C' q
listen 80;
, N9 F1 ]2 ^ }. ?' e# U- P! j server_name example.com;+ e. J. G. Q. l$ Y6 R- R+ v
$ V q1 P, c: _3 i$ _# ~
$ g5 o0 B7 V* K' w, G0 J location / {; r( A3 V% g) _/ E t( |2 `1 a
ModSecurityEnabled on;
; V) T1 g8 n& U- T ModSecurityConfig modsec_includes.conf;6 D7 X) K. S1 d1 P% m4 B1 \1 b6 j
root html;$ y+ q: p; V! @
index index.html index.htm;
% D1 h" I2 m* R1 t4 Z! X }# n! M, @3 Q6 V
}& L. v7 h0 n2 F0 b4 H; t3 a
使用动态模块加载的配置方法
% B# J3 A3 Z" e6 R* C在需要启用Modsecurity的主机的location下面加入下面两行即可:. {4 W9 D$ A7 J. Y
# }/ i; ]! T9 X; G) ]* S
: s8 J+ l2 w/ f; N% k" Vmodsecurity on;8 @1 @/ S+ @0 E2 e4 }
modsecurity_rules_file modsec_includes.conf;
" z' X3 H$ O. ? m修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。9 ` ~4 U& v( c: b9 B3 Z, b
1 P9 t" \3 i5 h" w. g
8 D$ E- C# r: ]$ vim /usr/local/nginx/conf/nginx.conf
1 s* G4 R; D1 \8 e# u4 z; T: q, x, d
! @8 [" k4 e; T; n( X1 O# I
- p- [2 K1 ^7 {6 p1 F3 C* Wserver {/ \; ~" w9 w, b) A* {5 y
listen 80;) W+ a L; f. G) h9 G( _7 D2 b
server_name localhost mike.hi-linux.com;/ `* b& U: n( P, s3 o
access_log /var/log/nginx/yourdomain.log;: f+ |. t7 O" N3 ?: ~" ~" a, ^/ {, o: u7 }
- J. K1 A+ Q+ J/ X' Q' Q9 R# s
! x& ~. D/ `" x, }& T! G location / {% G8 r p1 g/ @
% L/ f. I1 W) Q! L9 V y1 t$ q
: }/ v6 V/ M5 C3 e; W
modsecurity on;/ N% d3 h4 x7 M3 w" X& x# U6 D4 Z
modsecurity_rules_file modsec_includes.conf;; w" k+ S, x6 X+ w: L4 T
root html;. }' }& |1 j! H
index index.html index.htm;3 v$ U( C2 b, x, F P& \
}* _ a; M& W9 z) _. R h) }: I3 x/ \ S
}
* X9 ^+ T' R9 o X6 e9 D验证Nginx配置文件3 i$ n2 m& s1 e$ W* `; j
$ /usr/local/nginx/sbin/nginx -t$ C' m8 w- ?( x* ^
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
a5 W* t) q3 s# v. t9 `5 ^7 d R$ Onginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
0 H8 ~+ s: f( ~9 Z g3 `. d启动Nginx7 F% c7 W- t- r" S- @
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
# f* i3 j3 C+ ]& W0 d5 e
8 G/ X, Y4 @" {$ T; F6 V测试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 _8 v7 b) H# K. Q& }7 T( l
|