ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。9 u2 {: ]% @4 J1 F. f
# [& @3 i- F# H# O
7 d: p0 N9 g8 l; H4 }
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。4 [ w- |0 F1 y' F% G" |7 Z
% c# j5 N! O3 a* E/ d @
4 }; e( k$ J9 g1 x7 J, C; Y什么是ModSecurity) b3 q/ U- N( Z" L
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
/ _2 r( v2 |6 m% T; v- Z' j
6 |# w% h, [1 _: a+ N8 U/ l3 G) G: U4 F0 i& w
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
5 c2 J3 C: M) u( M: ~7 ~& H* p9 K" N) @- R5 O9 Q0 y ^
, @3 \& ?/ U0 [+ O0 p6 L
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
, H1 u+ d$ N# W9 X2 |
( b& T8 {- \" u! ]
1 V+ _0 p a8 \3 U+ e' T官网: https://www.modsecurity.org/
+ p' d( O$ b) T$ G: ]! G' T7 A9 {* l) S
, r, s( q4 U3 I5 k什么是OWASP CRS
e# Q; U, z6 y- B" uOWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
0 b/ @) w7 B* L0 L) {' ~5 e
. O. z o8 E: Z" p' d& _/ l
# G* Q T9 n' E2 W" rModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
+ Z! g! K" E8 ~5 \& F: u! x' G: _ i
+ b% q3 f' m/ W5 UHTTP Protection(HTTP防御)( M% S7 H0 x- ^9 ?& h" }
HTTP协议和本地定义使用的detectsviolations策略。
5 \6 [! u, n6 W. R
- R) V) Y B) T
2 W7 v& z5 X; o7 N( `Real-time Blacklist Lookups(实时黑名单查询)
+ ^/ F0 m0 c6 Q+ G8 Q' H2 k% B0 k利用第三方IP名单。
( [ U2 {; t, z' d n/ z! f8 s( ^. b3 V* c- i) a) z9 E
4 L' g' W o) J1 t' ^. y6 s' S/ {6 D
HTTP Denial of Service Protections(HTTP的拒绝服务保护). @* p& r( r& S. _
防御HTTP的洪水攻击和HTTP Dos攻击。
, S! b! y; T5 \1 Z% x# @* f6 M4 {% l1 `6 j9 s
; i- y! c* J8 s2 F! K% a+ z
Common Web Attacks Protection(常见的Web攻击防护)
; n0 y E1 E# [- s9 J3 W检测常见的Web应用程序的安全攻击。 P6 \) @7 a7 V1 ?. _. I! D; M$ G3 b
$ _* k% S+ u1 _5 ]* ^. N% s; c2 ^
7 Y ]; F# n. C+ n) F# F& mAutomation Detection(自动化检测)! O! l0 I7 B! {
检测机器人,爬虫,扫描仪和其他表面恶意活动。( K* C' {2 h) N
- s) r/ Q# q% ?. c! M
9 m! r/ r6 ^9 F _
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)
1 X& L- f7 |' P9 h检测通过Web应用程序上传的恶意文件。4 s) L5 e' K8 \4 k
6 L; R( i6 |* A9 B2 j+ F* H( `
C/ J& ~- l3 r7 T! gTracking Sensitive Data(跟踪敏感数据)" f/ y- I- `0 N; @! v( I
信用卡通道的使用,并阻止泄漏。
! K3 O% j, n r2 F* q" K' C/ |4 j- Q
0 x5 x2 x$ A+ ?) P9 ~, [: j# `8 a, [
Trojan Protection(木马防护)
- f) d: i* n/ U" z. [" [7 o检测访问木马。
+ }1 G3 @: |1 n; T4 T! M9 B [# m$ [1 N ^! k' u; {
8 P* ^' i" X6 B; u+ V& f' @ ]- ZIdentification of Application Defects(应用程序缺陷的鉴定)
+ x0 J. ]! s6 T" m8 c6 D检测应用程序的错误配置警报。
. ^0 X3 |5 l+ k2 y
}' X% c$ j2 L- _4 o( }# Y5 Q
Error Detection and Hiding(错误检测和隐藏)4 e: c/ v3 [! G, S& d
检测伪装服务器发送错误消息。
; E0 }* f* t* A @* O; D# |" |$ H/ Q3 _0 T/ }+ v5 G; L* d
! F T. d$ ]# |安装ModSecurity- q6 {6 {. Z# L7 x' K' V- w
软件基础环境准备
: G' ~& B) H4 U: X" Q/ s" F下载对应软件包
2 J: K' K5 J2 B4 f: L$ cd /root1 N3 a- b; T& w+ d- F( F/ Q8 W
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
# E1 z. Z8 @. y! k: l$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz! E; q1 F" Q$ T) x4 a
安装Nginx和ModSecurity依赖包
; C; |0 a7 F3 t6 ~Centos/RHEL" c( `. B) K' H. @6 a# g# G# g: d
8 f5 O" p* W8 d: R& Q6 k4 [
3 I9 {' |( U1 e$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
& ]5 B U; u- V& p P! |8 W0 EUbuntu/Debian5 H# f7 ]. \4 J# X& M# f
) j* o% }5 r, p! q3 Z3 I! ~ B
5 _! |, }" m5 D1 A ~$ 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++-dev5 \) D3 P# Y5 x2 V' f
编译安装ModSecurity; d! I& V7 I# u4 [& Z/ O
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
+ d0 \, {' e- K: Q9 r$ j; L: G7 l3 S
C( [' n6 {1 n+ e( E1 v$ y6 d% B- V
方法一:编译为Nginx静态模块
# n5 l3 L1 l' z
# q! \6 m' o: [, O8 U5 \
% h3 g# ^; S" q: d& o编译为独立模块(modsecurity-2.9.1)5 T% J- Y9 c4 ^ m
$ tar xzvf modsecurity-2.9.1.tar.gz
$ M+ T) L$ z. k- D* J$ t z, _0 M; x$ cd modsecurity-2.9.1/
. T2 E2 T% I6 Y0 G; P4 W$ ./autogen.sh
2 q5 `6 s( n0 r4 |$ ./configure --enable-standalone-module --disable-mlogc
( M6 u* X: Q, F! g$ make
( ^1 K! E% F ]) d& { ]& _) h* C编译安装Nginx并添加ModSecurity模块
3 Q& r% ^% Q9 V% K! R- x/ Z- E$ tar xzvf nginx-1.9.2.tar.gz7 c8 K! M' q! u- j2 x
$ cd nginx-1.9.2
( D U/ Z) @- R" g4 u$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/% B6 M" m4 P0 N5 M- T' P% j9 P- g
$ make && make install: l% q1 {5 z3 Z7 `
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块9 ^& K2 F- s; [: p* C- i0 F
; R" v' d. Y0 j4 R6 X; L% U/ b
7 O5 g4 o7 w% G1 S: c) F1 I# Q5 K. X
编译LibModSecurity(modsecurity-3.0)" Q* c3 @) t: E. O% c
$ cd /root3 i7 A6 E. |' n, O1 ]2 O
$ git clone https://github.com/SpiderLabs/ModSecurity
7 w, E# y# c$ b, G9 u8 Q2 t$ cd ModSecurity
) p- _9 _0 M1 A6 a1 u* t$ git checkout -b v3/master origin/v3/master
! @+ c9 X, [2 P' p: p! L% _) v$ sh build.sh( y/ i; d; s& A3 I
$ git submodule init, D: V, p% o$ C& w! p! O& o+ ]
$ git submodule update" T: {- u. j- t3 p* _
$ ./configure
; }0 R6 c, E9 t$ make
5 |: Q9 @: [& Y0 G W$ make install
3 P6 ~4 t3 @* J8 Y1 LLibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。1 x4 y3 Y1 Z& P; i* L0 l% ?: f5 Z
9 ~2 V% O- k; i5 ^" a
; n p) F5 I% G8 I8 R$ ls /usr/local/modsecurity/lib# y8 ]9 B [. Y4 d
libmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.08 o$ @0 {% M0 E- \! ?2 C' x
编译安装Nginx并添加ModSecurity-Nginx Connector模块2 J3 S% T; o; k1 b: t
使用ModSecurity-Nginx模块来连接LibModSecurity
# {6 |. b5 f. G; v% c
+ ]/ o) c3 v: ?' i# u8 Z9 J
T4 D6 t3 A; a$ cd /root
$ l, T7 t! i/ L2 p: U+ R( Z$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx. p' C s+ N3 [" ]4 M P
$ tar xzvf nginx-1.9.2.tar.gz) O% q: p! Z2 E1 g: `* @0 {
$ cd nginx-1.9.2* I1 C) ?6 G4 M H: l
$ ./configure --add-module=/root/modsecurity-nginx
& H( f* H$ q8 i0 ?$ make
/ M% {; x; W+ Z3 p2 l2 @$ make && make install( t" b% x: u* [
添加OWASP规则, [1 l2 R$ b9 H. w; L1 N5 O. s$ A
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
* z: c3 Z0 z" B, ^1 u# p
. o. l! N" ]; W, p! ^8 H9 d5 X. m+ q
下载OWASP规则并生成配置文件
) g( L, T3 l2 K9 K# `# |$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
0 Q1 f* o. i# U$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/! y1 u) m) {& z4 G- E
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs5 L1 `, d$ J- H+ I* n* L, m
$ cp crs-setup.conf.example crs-setup.conf9 {6 g' o" `- Y. M* i% e* N
配置OWASP规则! j- {6 t% t/ P! S4 j% Q4 u
编辑crs-setup.conf文件& ]) H8 P I* Z% y& k8 U |
( f2 @9 R0 X' C( z
' }3 j3 x, d) g
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
8 T1 C& H0 J' h, e) H9 u$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
$ c0 ?; I' J5 T; [+ J0 y1 P: F4 h/ L$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
% y# o+ |5 W1 f0 V$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf$ o2 j9 n7 B8 A. x% {8 O A# E
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。( `# A- S2 H( O- k2 I9 W7 t8 c+ L, K1 B
/ t( w8 m( W$ l. `
% W8 J& S; N; z启用ModSecurity模块和CRS规则9 E9 G' A4 C! e1 E; P8 t1 W3 S
复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
& F7 c! g9 T3 h1 K. P9 O! H3 {
, f, d0 R! Z9 K3 Mmodsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。
" J0 v- b& y Y$ e/ v# H2 I5 W: y; S: i+ ~
, C4 C& R* m1 R- t) K) y
$ cd /root/modsecurity-2.9.1/
8 }- e4 D, R' S$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf 7 _& v h" W( _4 P. b$ j
$ cp unicode.mapping /usr/local/nginx/conf/
6 E c; y2 A' e& q' R: L, U将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。8 s7 v" i6 T4 h; s
' z' B/ W7 J: X8 Q) e; ?$ g) k: b' z: @& l$ W
$ vim /usr/local/nginx/conf/modsecurity.conf0 I- I- z% ?! p) h% |+ `
SecRuleEngine On
# R: ]& F4 X$ g4 DModSecurity中几个常用配置说明:: Y3 a# }' I& D+ f" G% h
! ~* X" X' B8 x; \# z
1 s( ]9 X' f/ W) C1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
8 |1 K1 G$ X8 @7 I2 j- A* `; J5 Y* p( ~% [+ v3 I
7 S/ {% B. ^9 x2 R- F/ A
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
% u2 G+ v/ S F* I' n3 n, X2 t9 m
( | Q: P2 Z/ i6 S4 h0 n
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
( W, E7 T" k2 R2 e% w) m+ ]( A, F: |7 p& f9 A/ x
0 q0 V- [( Z1 p5 Y
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。
8 T' D5 y; G6 ?& q# e a9 R# i% Z5 o3 b. V
( S% _/ L& o4 h2 s W
在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。9 s' S; _, N0 N& |! F
0 @' M2 r% K) `9 R2 }! d9 A5 u( T; U# v1 f( S# ]- |
3.x版本CRS
8 j6 V4 H7 U5 A+ c$ cd /usr/local/nginx/conf/owasp-modsecurity-crs+ [8 \' u6 k7 i# E# n
# 生成例外排除请求的配置文件* [; i- ~) y4 H% A
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf! T9 \$ H1 w) d
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
5 s4 j( f" {. ?) I/ a( ^8 a$ cp rules/*.data /usr/local/nginx/conf
# G% _0 m! p9 `" O% u8 e: l为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
5 j; ]9 `& ~8 q% \' V2 s, b7 t& H6 `/ {, {3 h9 W! A
4 U+ O) U" N; \7 z$ {
$ vim /usr/local/nginx/conf/modsec_includes.conf
2 I& J c& X @" |6 O: F( P+ `: x. U# {- M- \" E& L+ i9 d
[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 , T8 W; ^+ w5 g6 I1 l1 \# ~
# ~9 Y$ i' B8 Y/ N! d0 I
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
9 B! v- D; m4 ?- r+ f& s b
. p' P% R' L0 J+ o) U- e
0 [/ z0 d% L! `" p/ P; M3 _配置Nginx支持Modsecurity
- s( V; X# e+ T. d启用Modsecurity" F( n; X2 v7 R! P. k6 l& A
使用静态模块加载的配置方法6 [* y/ c# W& L# G5 q+ A8 V
在需要启用Modsecurity的主机的location下面加入下面两行即可:! G% w! T6 S( F. h3 D% b
( V! E* s7 ^( v: |0 g' l9 }7 L# T% {7 }, Q$ i
ModSecurityEnabled on;# M, B0 v) N( n$ p5 o, I- Z9 X
ModSecurityConfig modsec_includes.conf;
/ `1 p; C# n9 |- h3 T, B修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。' V0 M: M, \1 l' _3 @
' h6 l# d" T s _: w6 P, w5 a, B' `/ D* g p* S& O
$ vim /usr/local/nginx/conf/nginx.conf% k+ [! ]# A; _6 ~
& ], N# a9 H, M% ^4 M
( S9 t; J* l0 kserver {9 _; k/ k3 l" G3 z9 A7 Z& L1 s# Z
listen 80;
, X( J C, P# A' \$ k6 B _ server_name example.com;
4 _, S1 D$ c' t3 Z: X0 j3 A
( ^4 m! ?' G" M2 H1 H
9 x5 m3 q5 g" M0 `0 F8 l! h% A location / {
, p6 U3 S3 b3 n; B4 @ ModSecurityEnabled on;
d" s' g) \3 @3 n) Z ModSecurityConfig modsec_includes.conf;2 n+ r7 `4 E& T. m2 ^+ v
root html;4 G1 o) k( a. P! w
index index.html index.htm;% r0 a+ }- Z- P; l, w1 R( M5 D
}
# j. T# P& i- E( @0 b& d9 t& V}$ F4 B' _9 Z1 Y; l* ]9 x
使用动态模块加载的配置方法6 ?- B2 J- I3 D6 {2 ?
在需要启用Modsecurity的主机的location下面加入下面两行即可:# G; F4 ~1 Y4 \/ [( q; \% Z+ P
' r9 l6 N. F! H9 ^6 b6 V
; M$ C3 F9 R1 ^+ }) G
modsecurity on;8 I4 h6 j. \! `2 @9 k& G9 J
modsecurity_rules_file modsec_includes.conf;' t; L4 k# m# \% Q
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
) B) I3 u k# R% @4 ~/ G" `5 i: @! M7 d0 Z+ X
, g a2 U) C3 h' ?1 J; @- U
$ vim /usr/local/nginx/conf/nginx.conf& I% }$ a4 S* O: W, V' a+ V p* R
% W+ c* E4 L+ z; G S- e' S* s! i, x& F% z
server {1 D% |, J a x& ^
listen 80;
: p& ~6 Q7 N( T server_name localhost mike.hi-linux.com;
. Y6 x+ K$ F0 t. _( O access_log /var/log/nginx/yourdomain.log;* r; [8 ?$ Z0 o
0 \6 c" H/ n |1 l6 F9 o
% S! m: _. A# |/ y3 M location / {
+ a0 b" O& S+ s$ b
. H$ P( C4 @4 x; M- e+ g1 [9 @' B9 @; C( y& D' U
modsecurity on;
( s) v1 l. a' c8 {' `1 O0 F modsecurity_rules_file modsec_includes.conf;, R# w' A0 W$ g
root html;. d! o0 l# o) d$ ]! s
index index.html index.htm;
" ?! r7 f3 ?$ C. [}
' X3 o l; U/ T}
* T1 `# [8 ^ l9 ]$ Y( V2 i验证Nginx配置文件
, J* {, q" [9 T1 k" x" t$ /usr/local/nginx/sbin/nginx -t
4 R5 q& M; i( J* f* a Tnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
7 [( O: A8 z! q1 S2 gnginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful$ a* l, N0 K5 E+ E8 s
启动Nginx0 p0 S5 n0 h9 H9 W9 _
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
" i8 u z, d5 p0 r8 a
0 c$ V* V- Z4 t; i测试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能够战胜更多复杂/未知/混淆的攻击模式。 N+ m$ `& G5 x8 E
|