ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
% v% D. C/ s0 [+ H9 u$ Z4 h3 P0 i8 Y5 M
4 u' w1 z- l5 d9 Y% W# t" Q7 X. [) E
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
: b4 y% Q. i+ [! i- t
2 x" Y. t, K& H) N8 A+ Y: _5 m9 B
什么是ModSecurity( [+ Z" U( J3 E6 M: v& f5 w
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
$ X: K1 e! n2 i" K/ {, o4 T( Q( _6 }# H7 W) c
* ]. S4 G6 }. T' \5 W( O5 d, A
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
4 G9 u) T4 J' ~ @
) J0 \/ j, f2 U! N: z; r
; z3 F r" d. LModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。& y; d$ e( I- v
- [( d+ |5 k I" @- I; N
& a( L9 h( E# l/ D0 N官网: https://www.modsecurity.org/
) S6 O- ]4 e3 d. X' H M% f# l% ^
. E3 e: R+ _. W; P# m! S7 y7 L1 G; E4 N4 o' H' r2 ]2 K
什么是OWASP CRS$ L1 r6 w0 @# S9 ?. @
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
1 [/ a3 p* S+ g8 l" K! g9 O& x. N) P m% I) _
" b1 T. I4 P# P. p4 e5 l! o! D8 LModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。1 h$ i# e- d/ m: [
, F- U- k# l. [. }4 y, M
& x, k' h2 ~* i$ i$ PHTTP Protection(HTTP防御)
: D$ l& I5 l8 A) \) L+ U8 F5 mHTTP协议和本地定义使用的detectsviolations策略。
& g' X& {9 S2 s$ O) E1 i4 I. Q% l! E8 r) A
0 E4 H* G4 \2 F. D: eReal-time Blacklist Lookups(实时黑名单查询)
( v9 J$ y3 X2 W" j/ M5 H# w9 z利用第三方IP名单。. B' b5 M9 W8 A
* }5 g8 v9 z+ a1 _1 W
) B0 i- J) [4 S+ Z% nHTTP Denial of Service Protections(HTTP的拒绝服务保护)# s; ~, U' f) K
防御HTTP的洪水攻击和HTTP Dos攻击。
: F' z8 {+ R" F1 n' u7 h) y) Z
& t. m/ ^$ S+ V* |5 {4 W/ I- W3 d6 v) M0 i; M: p5 Y/ l) \
Common Web Attacks Protection(常见的Web攻击防护)9 y# d7 ?$ [- |( I, o% K7 J
检测常见的Web应用程序的安全攻击。
! B9 n9 m; [: i' v; `. D* Q" J+ X, v3 K' [% H' a9 u d
" [! o4 ]4 u! p1 ~
Automation Detection(自动化检测)
+ A" c8 l8 r* B7 ]% X检测机器人,爬虫,扫描仪和其他表面恶意活动。
( S. M* w1 h+ G5 E$ |8 I7 |" U, B9 M2 u0 o: I% c2 {! S6 p; z
$ n" W7 I0 a; U8 b: X! R& ?Integration with AV Scanning for File Uploads(文件上传防病毒扫描)+ I8 Z- _8 B. b1 y3 s
检测通过Web应用程序上传的恶意文件。+ X' q/ h, E4 _2 Z: y& V
$ I, _7 Z9 K' k$ C2 B# n
. s2 z( Q* G* n: ?& C7 R
Tracking Sensitive Data(跟踪敏感数据)
) N4 X1 k9 i# A! h/ Y, v信用卡通道的使用,并阻止泄漏。: O! O: X# |% q4 o! F' J
5 C8 g1 p! f/ w# T2 ~
5 g6 b5 _1 G+ |% m
Trojan Protection(木马防护)8 j* \. _& F) t+ }" R; z& F
检测访问木马。
& r# b/ A: [' ]* |9 P
! L3 J) K& L- G' h* ?
+ G& e+ w3 T8 W6 N4 TIdentification of Application Defects(应用程序缺陷的鉴定), X' y( w4 L: o6 ]3 x- z
检测应用程序的错误配置警报。
. m# \" U' s5 B T2 N1 h- h' {9 W) a4 Q! C% {, w0 L! y5 x2 b
* S9 u7 R& O( B- y0 u1 sError Detection and Hiding(错误检测和隐藏)
3 i6 O4 y% V, H+ p; U2 S* G1 {8 H检测伪装服务器发送错误消息。/ {6 m! L% F- o- W4 ]
9 F: U% j' |2 C0 `% B1 g& G7 I
+ j5 {' }/ [5 L安装ModSecurity$ J1 J- j* |& c h2 u+ z% {+ K
软件基础环境准备$ [4 v5 R/ ~* G) c, I. d8 M: s7 a
下载对应软件包
/ ?9 ]* c3 p0 k& o9 {$ cd /root5 g+ b2 K! m* X. N0 B8 y5 Q4 s
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz': T3 K' s) V8 I, j- w
$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz
+ r3 r1 j8 U0 o. R1 `, \% n6 H安装Nginx和ModSecurity依赖包. T8 q. q8 |- ~ b! b
Centos/RHEL6 i+ j3 Q$ c6 E K+ R/ v
7 t. b. c+ O6 } t$ k' L6 g
4 i# f8 k$ d6 T, [4 x( g, @3 F
$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel K; u( O) y" ~! c
Ubuntu/Debian% J* w( X0 n3 M! S7 u, f z) w7 H
' x* r) b; @$ `* ~6 u% w9 _+ d! g- p g
$ 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' @. X- n2 [. d" g, d3 w8 U
编译安装ModSecurity. x a7 _8 U8 p2 U" Y4 z( c
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
- q% m/ c: J: V' s0 m$ m; T( t5 S* \) P$ S% Y! O) \, i! Y
$ x( h# c n; O( N& y: s% Y方法一:编译为Nginx静态模块2 `! T+ }# g& X- n
) W2 H" o; a$ s1 c# T
' c# @- W: T4 T: S2 Y/ D# O+ u7 `编译为独立模块(modsecurity-2.9.1)
9 o. Q' j7 } N( O) \% u$ tar xzvf modsecurity-2.9.1.tar.gz: |; M9 Y% M1 Y: M
$ cd modsecurity-2.9.1/
7 V+ e: p! B' J) e) r2 |+ g/ o$ ./autogen.sh
% \* ?2 S2 V+ H# F! P8 p- Y$ ./configure --enable-standalone-module --disable-mlogc' ^/ x$ D* R1 L" u
$ make
" ?" H! z7 H- x' w$ b5 Y4 [) ^编译安装Nginx并添加ModSecurity模块3 e2 T, S2 ~% \
$ tar xzvf nginx-1.9.2.tar.gz$ ~7 i8 c. b3 D6 V
$ cd nginx-1.9.2 v, D! P2 u3 i+ Z, ~. ]1 ?
$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/: f9 g' t1 l" w# P+ p
$ make && make install
5 n0 b( G4 M' k& ~6 F9 q方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
2 p' r1 E8 h7 x# x' F
8 E* O" R$ t9 y, ~! _8 Z
1 f x: y6 F2 a, Y9 }& N编译LibModSecurity(modsecurity-3.0)8 d# T3 V4 ]; p
$ cd /root
7 I# _: Z1 K( q3 T& D$ git clone https://github.com/SpiderLabs/ModSecurity
1 g8 H+ V7 @* |: ^- K+ _8 g/ U3 n3 E: q3 z$ cd ModSecurity
1 n2 G7 p! t$ j2 {$ git checkout -b v3/master origin/v3/master
- x2 z9 t( E9 I6 d( u$ sh build.sh2 i1 ]& b* W7 O4 f; r$ d
$ git submodule init
4 G# S8 f& `' c0 E8 ^ @$ git submodule update1 T. o" T2 a- L9 I" m( ?; g
$ ./configure
^' U8 Q+ ^3 o) p5 f6 J$ make) `; u- Y( M! t* W
$ make install
1 V& [6 j. r4 q6 `( E' yLibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
. Q+ {7 r: p% g% z8 U9 m: q# }, ~ l' C3 L% J* |. b
/ ^9 u+ a/ s2 Y( t: M
$ ls /usr/local/modsecurity/lib
$ B3 S1 a8 ?! a0 W- H. j$ u# Clibmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.08 v' u+ H% n& [* ?2 J2 x
编译安装Nginx并添加ModSecurity-Nginx Connector模块) s; l l2 R$ N
使用ModSecurity-Nginx模块来连接LibModSecurity+ f. T* h0 X0 a$ ^# E/ @; r
: b9 x: t( c( Q/ x; H
5 i5 R6 b/ Q* I; g; v$ cd /root
1 z3 ]0 M+ R; _' _1 x4 n; ~/ C- x$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx$ S$ y" `" Q+ Z0 T3 t9 U' P- ^
$ tar xzvf nginx-1.9.2.tar.gz
+ j: j$ ]) C& ^' C" g1 E$ cd nginx-1.9.2: \$ R2 U# U& ?2 u$ W( s+ R
$ ./configure --add-module=/root/modsecurity-nginx
' U3 Q+ s4 R* |/ T) D/ J0 \5 c$ make* [1 h; W* q7 V- X" y* e0 c
$ make && make install
( [. p& }9 h+ d; V4 w添加OWASP规则
. T- |3 J1 `5 \3 t2 x" M3 gModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。' }, E/ W4 ~4 L1 z- i5 Q6 n
s8 X& b, T# o1 @$ S" o
- C# u |+ n5 Q" Q3 O下载OWASP规则并生成配置文件- `% J f( i6 w4 K7 e
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
% H4 l7 Y) p/ T% I6 X5 y$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/
- [& i0 E3 t8 X$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
6 o9 t# i8 w9 `8 Y! P$ cp crs-setup.conf.example crs-setup.conf! R# {5 I) C" ~6 j" I* h: c5 A
配置OWASP规则3 |2 P7 i( G ?0 z9 u8 i
编辑crs-setup.conf文件
" H! q) E3 U5 ^" _1 R _5 D# n6 o) [9 h; g4 @: z
" M" a2 U/ d! y" N( X
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
1 v% {+ \* y% n+ o9 E$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf0 [4 }& W! t: N% h. W
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
1 \9 e, M! T$ w. p$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
- W% \* Q4 I/ j5 f) X7 j默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。2 H) E- U1 M% Q
: C) z3 K$ H; q% l& N# B) a: d/ m' m* S7 C# }6 l% s7 B
启用ModSecurity模块和CRS规则 h, a/ Y1 X5 d& {
复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。" Q" H' k2 U0 d! d9 B% e- R
3 w5 ?2 ?. {7 [9 ]' I
. H+ l c" Z% _modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。* T% }' I2 U& }
8 K* a( c, E3 S5 E7 ~/ R% @# N6 }& g1 I4 a+ W, ^
$ cd /root/modsecurity-2.9.1/7 k; o6 S2 H) _
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf
- b1 |1 P9 g4 x( _1 {$ cp unicode.mapping /usr/local/nginx/conf/
/ r- \" o7 O' }3 @" ]8 f1 ~/ n将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
* s! l- ~! e. F2 T. P( ?# q% e8 |- O c/ l2 m: C0 @% k1 A
: A a- X1 I. h# S7 S3 \$ k6 ^: b$ vim /usr/local/nginx/conf/modsecurity.conf
; \. A2 x+ D% w& T. nSecRuleEngine On
+ L8 p! C! H4 a" L7 jModSecurity中几个常用配置说明:, @# ?, b* J' r# K8 m
, h' ] H4 v2 @7 w3 p, \5 d8 w2 i
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
) |0 f+ I1 s8 k% n/ f
1 q- G0 I7 \5 ~) s- f4 x/ v3 @& b& ~: t2 I+ b
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
8 A7 I* @0 w! D6 |: u( Y, \) r' j/ m8 Y
9 g/ D8 o& p' r/ }
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。; l7 L4 j( ? L4 w4 D }
; D b* `$ C* y8 u; G1 j0 I2 O" p+ w! b. }) P
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。% l3 g) Y. E3 D
) n7 u9 j% m: R/ H: V# n1 R- g" d$ H. x1 j
在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
: x2 J' h4 L" Y3 z/ U" }# e7 L4 _) T, L
( ?) r8 b4 p ^- i6 V
3.x版本CRS
8 O; V9 L; M; r% }9 s" \$ cd /usr/local/nginx/conf/owasp-modsecurity-crs5 t7 F% i& U+ i* e, M+ |
# 生成例外排除请求的配置文件
: Q) _: y' m- r+ q$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf+ D( A$ j, x7 `3 P' R9 V* t$ n
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf6 ^3 f& m2 B) o+ ?6 I
$ cp rules/*.data /usr/local/nginx/conf
6 N6 H; n' J C$ X. y4 y" d' [. h为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。0 @' ^9 B: |3 K2 h
1 ~7 j# ~) o( Z6 F, c! K8 n& u( `
" _9 P. f% z, ?2 \! S% V' R3 E$ ^- V$ vim /usr/local/nginx/conf/modsec_includes.conf
$ u ^8 S1 c; L- d
) M9 t+ ]1 z& h* Y! m# y1 J1 M( `[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 ' w0 C; V! u i! \* f& P7 C4 g
( {4 E& M" n' R2 Z k注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。+ i' W) g* F8 c: o1 _# q
) x+ S" Q4 a# K" u
! b' z0 ]- a' r6 F6 h( \$ P
配置Nginx支持Modsecurity* B# C5 g: u+ A
启用Modsecurity# k. D4 B( q4 X0 m4 D- P
使用静态模块加载的配置方法
) M& O9 w4 g9 F/ x2 p在需要启用Modsecurity的主机的location下面加入下面两行即可:/ C' G8 w& Q. t! a
" e' |5 ~8 ?4 z! ]% K
: \. e9 b+ ]6 ~ModSecurityEnabled on;; s7 A: T, F1 N5 }
ModSecurityConfig modsec_includes.conf;
& ?( e8 r. q# `) e修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。+ v; _ X. D' S5 e
* J: r! D6 q+ e# l, T
8 P) T) ~/ j1 Z" W& G! s$ vim /usr/local/nginx/conf/nginx.conf
* x4 m7 H4 D8 g4 |4 x8 r3 G
$ Q v2 L( a5 [5 s4 X6 z- M8 N( r' |. ?* B. v/ E( t/ B# [& Z( x4 P
server { Y6 A5 i. k+ y; @4 ] \
listen 80;9 [7 X7 |6 R! ^, W: t
server_name example.com;- p# o+ q% |: F, X
e% D: z! p7 D$ H1 e: K
) n, e ]7 y3 L# @; d5 Q! L1 O+ G location / {
]- ]3 @2 ]6 q+ Q' N ModSecurityEnabled on;
) Q: r H- p n) L ModSecurityConfig modsec_includes.conf;! {+ L9 m6 j+ E4 o$ E; A
root html;! l) p$ E7 }" m: b6 W0 a' e* O/ Z
index index.html index.htm;4 S3 Y( X G% e* B1 O
}8 z* |" Q( o C' L" Q) n$ V: l
}
) N5 B3 @ H# z, m% H使用动态模块加载的配置方法
: m; k) K* M1 X: f在需要启用Modsecurity的主机的location下面加入下面两行即可:
4 R; K# a& o4 f0 R2 A- J3 G! R% A4 [7 x8 w2 C9 c
0 y/ L3 _. {/ N7 m Z3 p
modsecurity on;8 c( b: {5 R& G- o7 X7 I8 a" d6 r
modsecurity_rules_file modsec_includes.conf;
. X t) ]% O% v1 ]8 h修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
9 z; V8 N4 g7 I! [
0 M; D+ p& |4 W; V9 i& G+ E8 `) V5 F }4 m- { \) h6 m! S/ Q, K
$ vim /usr/local/nginx/conf/nginx.conf% j: I7 I; C$ V: t' M: G+ P) D6 y
. m( g$ n* y4 ~4 T2 Y) [, P* h( T0 Q+ r" V. ^1 ~! ]
server {( c; d1 `/ O8 u- b+ {8 ?
listen 80;
* L" O0 T6 \$ t- i! i. u) I server_name localhost mike.hi-linux.com;' q- m% j5 S" P; N& k0 R" \
access_log /var/log/nginx/yourdomain.log;$ U5 g: ?( X# |* ?* L$ a% v5 c
6 _6 Q, t( N/ a& y9 _+ L/ D
& ]; g) |6 M5 f! o
location / {4 b( F4 m3 O8 O8 L6 g/ B
8 D( T4 `' D/ n. s' h+ s( M9 e, ?
modsecurity on;- F( ^9 D( Z8 ^' {8 D- H, W
modsecurity_rules_file modsec_includes.conf;
- Q1 ]: c# ^& |* H2 A) U root html;
" ?& c. Q0 o7 l: y! U3 P0 Z index index.html index.htm;4 Q' X! ]; [4 ?& I U; V. i
}
7 I( T6 C' r6 E4 k}5 N4 F/ a& S* ^# }( L
验证Nginx配置文件- w5 J7 X3 } H, i" t
$ /usr/local/nginx/sbin/nginx -t
4 x }& I1 O1 F: n# Q1 I- N& H7 ^nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok6 |& S8 C. ~ F9 q6 W/ ?3 T0 k9 ^
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
/ V6 P5 f) C$ j2 S, B* u- m启动Nginx" d3 R8 l& P# G3 }; \* B
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf8 V5 G% V( @4 ]/ \! e& V
5 }& ]; [- ^$ c, a
测试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能够战胜更多复杂/未知/混淆的攻击模式。 3 A. f9 R4 b8 u8 L2 _
|