ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
1 j z6 p) w C: r( K1 P' J! i" b! I P. Q
, P1 W: d9 r/ P }$ ^7 o在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
) V" H6 v( e8 s, o4 h
3 P& A( {* W b0 O
c4 T) K- x; w0 Q什么是ModSecurity
" ?* B! u( {) z; nModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
* |8 X4 o4 E0 c \) _
; U$ s- e" ?. k. T, I/ Y! p% W. {6 u d/ ~- P- F, t, v/ S
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
; u4 {1 Z& I: r# \: @; m; A8 v* ^. }4 I
9 n8 J; m. U( p' U. [
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。& Y) N8 B$ K2 I8 T. ? ^3 Z
! ]: ~; a& N {* a& e6 X
$ ?& \/ }0 h& c' j官网: https://www.modsecurity.org/
) H; t" Q8 w) J* e6 l3 H8 S
# R7 j& o" l/ d3 b. A' t
/ I! }/ S3 K+ O; G什么是OWASP CRS2 h" ?! ^2 \, Q" S. r
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
, x ^* p* d+ F) a9 J+ q/ a3 [+ ]# V
6 R+ \* O R( M" q. z: }) ?
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。( O$ R0 j6 J4 H
7 |/ v( `2 C1 B0 D
0 a3 d6 ^6 D2 i( V! u. G P
HTTP Protection(HTTP防御) {- a9 A0 s- E' _$ Y A
HTTP协议和本地定义使用的detectsviolations策略。0 m4 c9 D8 ]/ @. e3 w
; N. B, ^: S! A1 R! d7 @
) `; I' k D1 }
Real-time Blacklist Lookups(实时黑名单查询)
* b. |. p( D# f9 `# \4 k利用第三方IP名单。
9 ]( q7 d) t% k; ?6 Z; P1 \6 O. y6 p2 T
& P4 b. }/ D, D: Y& w# j( F7 A4 q7 z) n; ^3 c n
HTTP Denial of Service Protections(HTTP的拒绝服务保护)
4 }2 V- e5 H" f4 H4 A: F7 Y防御HTTP的洪水攻击和HTTP Dos攻击。: f( W9 G% q5 x+ `. J5 B+ ?3 [
2 K" {6 i, i0 W! N8 Y7 X1 x; c9 J' H* g: g
Common Web Attacks Protection(常见的Web攻击防护)
0 m) T/ t* c! C# K. s( d检测常见的Web应用程序的安全攻击。6 b8 S! U- I1 ^, ?" ]
" A/ c% _- O" h+ X
0 e1 b1 Y5 H0 _; Z( X% O1 @Automation Detection(自动化检测)
, A+ ?3 c2 J( ^8 S9 j' N5 I检测机器人,爬虫,扫描仪和其他表面恶意活动。$ q1 K" o% y" {. U! r
( s! a: _+ U. x& c- S; {; B
; {- ]% ?! j6 N* K( F
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)
" e8 v# ]5 W- i. Y0 ?检测通过Web应用程序上传的恶意文件。! F7 P9 z. E' q r+ a
( `. b# j( ^# | B. C5 P% @( y
. g; s7 I, D- P, gTracking Sensitive Data(跟踪敏感数据)
3 |# R, ~: R) ?( p+ c1 s7 R信用卡通道的使用,并阻止泄漏。, N7 l3 ~! P! F& Q7 x2 h. {; a1 R6 s
6 v" p2 Q8 i& e
6 \, w2 p5 C ~ |Trojan Protection(木马防护)
! [2 C0 y0 |$ F8 h3 h检测访问木马。
+ l) Y+ L R1 |& z" j J
+ N% b' i8 r) D L3 `/ [% y! }( a6 L& @% C2 R
Identification of Application Defects(应用程序缺陷的鉴定)9 J8 P P2 W, N+ F5 B" n# N
检测应用程序的错误配置警报。
3 m/ k# a/ O4 W3 y6 z; c$ D) u0 ~7 J& e
; }- O. [5 u* @5 B3 V) v
Error Detection and Hiding(错误检测和隐藏)' R2 H1 y7 S* |- i6 E5 i% i
检测伪装服务器发送错误消息。' l1 J8 ~* V8 x5 b
: v u& u; S1 l( w" y
- L6 B& d: ?8 k3 I# L5 m! o
安装ModSecurity% O$ }7 H; Y# f4 \
软件基础环境准备
( v0 _$ }; G& O6 M: `% D$ D( Q下载对应软件包
% b. b0 ^- n3 ?3 |$ cd /root
# v/ K3 I# I& K' G$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
( C5 e9 O% o* Z6 S, o$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz4 B4 d& i% ^+ @! x( y( R
安装Nginx和ModSecurity依赖包
/ `' `8 L# u- Z% e' WCentos/RHEL6 d3 t+ v: x! l* F0 [5 e
4 X+ l6 Y# x; N% S, H6 p* R3 w
) b( v1 m3 Y+ M
$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel& F2 ~. _% D/ \, K
Ubuntu/Debian) ~5 F8 D/ w; d0 Z F
2 y/ f" k; z. ?- ~3 [* f- r, d# V; h0 w. \# N- B
$ 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) O4 z9 Z, }% r
编译安装ModSecurity
( m# ?$ r" ]+ V% x, p0 I' _2 qNginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。% J4 [5 }5 u9 y9 k( x3 x
8 e! k. w. v: d) P
" R1 ^5 D+ u8 `3 M* D/ r8 l+ d3 v方法一:编译为Nginx静态模块+ L, q3 y, O" s2 `; n0 }. s- B
" {7 M. \* t) v! s/ n
% Q" }( {1 o" _! B6 ^) c2 x
编译为独立模块(modsecurity-2.9.1)- A4 e6 s+ ?* }! ~1 M
$ tar xzvf modsecurity-2.9.1.tar.gz/ o& j# Y/ U8 K, h
$ cd modsecurity-2.9.1/" }# @5 x7 Z+ z$ R5 y
$ ./autogen.sh
5 K. {* a/ _3 |- e$ ./configure --enable-standalone-module --disable-mlogc- o" h: _2 L: u# `. ]
$ make! c1 j7 X9 H+ T$ H
编译安装Nginx并添加ModSecurity模块
6 x% q! Z1 f9 A' i1 _! a2 g$ tar xzvf nginx-1.9.2.tar.gz
" ]+ ^! J0 E! y! K5 g$ cd nginx-1.9.2
5 y! p y5 g+ z* U$ i$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/
8 n9 G" M3 z5 }/ E6 I5 o$ make && make install
1 m- D+ b: L* F7 V! V0 b+ @9 ?方法二:编译通过ModSecurity-Nginx Connector加载的动态模块$ u: w( O) g& R) d, K
& ]* C. q, k9 B' { J
* b, l- V! }. Z
编译LibModSecurity(modsecurity-3.0). z( y6 w2 K1 M
$ cd /root% z0 g8 S+ k8 ]) A2 Y/ e
$ git clone https://github.com/SpiderLabs/ModSecurity
4 ~+ g& l: g% y2 H2 }9 }5 I; q$ cd ModSecurity
. c& l, Q' ]% w9 b E/ g$ git checkout -b v3/master origin/v3/master
$ G8 r5 v' S- }$ C& l$ sh build.sh
2 c+ ^6 H6 z( R" g3 _$ git submodule init9 X7 i, j2 H- [" c! V
$ git submodule update
5 Y h' y% g- J3 i' ^$ ./configure1 s" y$ H* M- P7 b1 b% K; q. M3 ]9 K
$ make7 ]* b8 u! X/ k* Y+ H: J
$ make install
, z: T% i: i! m' s3 MLibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。; i& i N% D! X( O! ?3 c- ]$ f
7 W T. `" T: z' X/ o1 n+ l9 v$ Y
+ l$ i% Y7 Q) ^, z$ ls /usr/local/modsecurity/lib
- p+ [2 J; f0 K( l3 r& p9 Slibmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.0
% d4 H: p' {+ z$ h编译安装Nginx并添加ModSecurity-Nginx Connector模块6 f- I6 z- \* L% d- u8 A
使用ModSecurity-Nginx模块来连接LibModSecurity8 k) v! `; \; w6 Z H( G5 p8 d
m6 k+ g) v; G0 ]: d
: C m$ @% h! [1 h' x" J( R7 [$ cd /root
2 d- @8 ?9 l! z" G$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
; g0 r I5 O" Y7 s$ tar xzvf nginx-1.9.2.tar.gz
% ~" s2 {! j; J: d/ |% A, N$ cd nginx-1.9.2
4 a; R G% u( C, ?/ y# z$ ./configure --add-module=/root/modsecurity-nginx
2 |2 r X% p$ D2 \8 R0 G2 _$ make
; q, [. l; P% }& H [) X. a& `! P8 M$ make && make install6 s% f& J8 U9 T1 E; ~
添加OWASP规则7 r: \8 D" h% O) u' `& z( m) y
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。0 v9 ?: k) ^( U" f
- F w3 c/ s# B2 o' j; E* S( \& i9 |# R, @/ r. O
下载OWASP规则并生成配置文件
( z; D2 W c# ?" l7 |& l4 o- M$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git, `' _3 i; S/ h) u3 Z
$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/" R0 b) K" B$ S, l
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs' i" O( z& _' ^6 H* i% A
$ cp crs-setup.conf.example crs-setup.conf" c% u |: O: V, a: ]
配置OWASP规则
: ?9 s6 c% P4 P& L( h F# N编辑crs-setup.conf文件" X0 G) z X! g" r' a$ T0 r' W% G
2 A! m y# m. s- x+ R, |" {7 O2 G$ e, n8 S7 F$ Q/ J; W% i% k
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf+ a: ^% K* w, N+ z% E
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf2 a4 v6 R4 N3 l8 d4 R: c0 a, s
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf5 C: X. ^; w/ t X. H/ \5 e* O, M# ?, Y
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
# B# w" p0 S- Y$ B/ ]9 N+ s) o默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。0 g" X" f6 U1 q) I/ X1 W8 [( }& a
8 y+ y" t% q- c! i6 f; S- ]2 Y: V+ V) G/ N6 p1 B4 g2 J
启用ModSecurity模块和CRS规则7 ^ Q3 t( G( \3 W: n0 t6 R
复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。4 o: n' M8 Q/ F- d0 A
0 A- L2 n2 }) o0 j* x8 Y0 b: k
6 X, h$ V6 Y. H4 f
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。
- }8 V& `: K5 y ^" K% o" w- k% V w. l' T3 P6 ]4 l# r- |
0 K3 i2 }/ w2 n7 Z" ^# z* H
$ cd /root/modsecurity-2.9.1/! T0 [( a7 P( Q4 [2 o# G
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf 0 d3 W" ^0 F* x! x6 q- h
$ cp unicode.mapping /usr/local/nginx/conf/
/ D/ r7 G( f+ Z2 h9 m将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。9 [2 @, a! B3 T- ]) d2 |
& |/ i: X8 n- x c! r8 H O9 I9 o. a7 P6 Z
$ vim /usr/local/nginx/conf/modsecurity.conf. w! f: h; o. s9 w) o
SecRuleEngine On
2 _/ ~1 I, R+ u& f2 b% U/ _4 pModSecurity中几个常用配置说明:
! Z) i; ]9 N4 N8 G1 g+ L8 o/ D& l
3 ^. O7 L# v" N9 ^
6 Y+ N" F. v3 Y0 x6 y+ Y9 _1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。: Y" _4 Z, c6 X# R8 O
* @3 m' n, ]' N) T& }0 g4 k3 U; s
/ @& e- ^5 T) u) L r
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
$ u6 z$ |9 I+ g* w% O4 N- F- B4 ~3 W
9 `2 I5 R' C/ M' w( a# P C1 p
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
1 V3 _5 i& I. U, k
4 R+ I; F) \6 R" ^/ @* d0 y+ t7 f# L* i
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。
: y! `# P6 C; d" F
M0 T! S( E' O7 e. V1 L' U" I& Q* ]3 @
在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
- {9 ?7 L! [; i* L6 i+ h" f- ]% t5 f
' Q( e) r3 D% V2 w: P; ]- P
3.x版本CRS
1 @2 O& Y) h' T# Q8 r% G# t$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
7 ?4 r1 I- I8 a5 b# 生成例外排除请求的配置文件/ j+ l, m) [. Z& X
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf$ d2 x, n' D; R, n
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf) w% k1 m! E9 U, ^+ i, I
$ cp rules/*.data /usr/local/nginx/conf
# e! l, z8 D: L( V0 I1 r为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
% G8 b7 [( k6 M) ~6 l6 y
`7 C5 O) y0 Y/ n/ B
1 D% g2 L8 `6 J K0 b; [$ vim /usr/local/nginx/conf/modsec_includes.conf9 }8 t. t% P e {5 u
: c1 W. I [* s4 r6 s' b1 |
[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
& ?5 ^! g% x6 o$ P+ L
( E/ y' U" n; M9 K4 W; ~! P注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。: Y( q- G8 N* G
3 T& D" S% n5 B* x4 g
- {* k1 l4 \* \8 [+ e配置Nginx支持Modsecurity
. {9 v V: ^; j* L( I7 C ?启用Modsecurity
8 u3 _) g9 ]) g5 c, F6 G使用静态模块加载的配置方法( S. i' x- w" \) C) J2 A
在需要启用Modsecurity的主机的location下面加入下面两行即可:9 n5 {7 p. Z* c8 r, x
7 Q% r3 ~4 B/ e& {9 i( ]! ^: v2 T2 H- r1 b1 l8 f6 ]' C
ModSecurityEnabled on;9 E8 h" V8 j% o: {+ D2 |
ModSecurityConfig modsec_includes.conf;
& y8 W! {# d" K: [. p修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。! p( V! ?1 ?2 i& p2 S' i h8 X
( ]/ x9 B4 e$ j4 F+ p, F4 V
* ~6 r* y7 ?: f3 { i6 \$ vim /usr/local/nginx/conf/nginx.conf
# h9 |. P. i2 K2 m ^+ z1 }1 B& _# K+ X2 \/ e
6 c. [' R+ {% R8 cserver {; `: K% z# J% T
listen 80;" y9 [9 T8 U3 k# H
server_name example.com;9 |) X" u- K2 v/ J5 ~) f( q
% x$ v( D+ {9 Z: \$ M; m* V6 s
- h1 T- G _1 t3 ^! X' N location / {
6 R: q, O$ }8 V; e, @0 I ModSecurityEnabled on;1 t& @) [+ w6 X" u7 a* ]; n, O
ModSecurityConfig modsec_includes.conf;4 K+ C: n( Q' U' R
root html;
3 M! i2 _' i$ M' W1 k" ]5 k index index.html index.htm;2 P* Q' P5 M2 Z1 O$ N0 ]' g
}
" h5 ^; W/ m2 p# H. T9 C( N- h& Z- F3 X: H" h}3 q; h1 K* Y. B7 G8 k
使用动态模块加载的配置方法
! ~3 D: d. B+ C+ ?' F! f$ ]在需要启用Modsecurity的主机的location下面加入下面两行即可:
& o- r+ X* v" }" G! t1 X0 X! f' `$ @2 F3 J7 O0 H
; G4 j+ M. p0 }5 a3 A
modsecurity on;
& w& `+ A% q T' s; A1 o$ y) t% n% Gmodsecurity_rules_file modsec_includes.conf;+ ]9 t8 M2 H9 m! @
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
! B2 K5 ?& Y [4 \; b' p' V/ d: C5 T
* z. K" |5 J9 q6 t+ ~* @ k( H$ vim /usr/local/nginx/conf/nginx.conf' x7 S$ J. t: `0 @8 M) I! C
; X0 N0 l+ g' p( B+ v# \" U9 F
8 {. h" S# f! A* S7 X% f8 U. O
server {
; u/ w8 d/ I ^5 u% s. \8 I listen 80;
& X1 p4 w8 T( o server_name localhost mike.hi-linux.com;/ ^1 p0 N7 ~! a
access_log /var/log/nginx/yourdomain.log;+ P9 U5 t4 }, K
8 S/ X5 g3 b2 N: X- j& Q Q
" D1 r: c% ?; Q0 {1 T2 k8 f
location / {
+ B n- r" v' {, V9 x; o. z2 }$ V% N6 T
& l$ {2 M+ k% ? modsecurity on;5 I6 z* j! [: f" X+ U1 _/ U
modsecurity_rules_file modsec_includes.conf;; h! P6 _% y% \7 B' J
root html;* a6 D' m; p4 L
index index.html index.htm;/ U1 R% T; ~. Y: o; \
}
: m/ f/ d, L4 [# O7 a9 |9 y" I}+ }: ?4 C% f! l/ b$ X
验证Nginx配置文件0 C: P0 l( C* l9 q
$ /usr/local/nginx/sbin/nginx -t
7 A3 k' H2 K1 m% rnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok1 \% f3 e* Z6 N% p% Z E5 k
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
5 N9 b) V# ]9 c# D启动Nginx7 N& k+ ~1 Y; b5 l7 r. o; S+ q
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
7 _) _5 z' F: M9 S3 d& z( S) ]! k- y: s
测试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能够战胜更多复杂/未知/混淆的攻击模式。 " }( h8 S* [" L2 _; N. g
|