ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
. b& H! i9 r% _+ m
. {4 Y4 ^0 A! N' X
/ f: c7 W4 c) l+ h$ [8 m8 k8 H在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
, r- T3 A& [2 l; A/ x& p3 Q8 h8 H' V0 n0 g& o
' v9 X4 }- C1 H: T什么是ModSecurity
) o& n5 V3 y9 M- |ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
3 G2 B6 I. g0 `: I4 Y& h d7 X p5 M5 x
: t+ {( x2 b" A% O; H0 v2 o. v2 P1 a
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
7 _$ j8 U$ y3 }0 ~8 F2 f" K) T- s* l' z; t5 g8 j- v9 i
& e( `5 \+ h$ O: z/ G% l0 P
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
# S+ {2 t; x5 d5 U
9 h/ j; h8 q2 I$ j% G# ^( T* G5 g+ \2 {1 t
官网: https://www.modsecurity.org// ~( V. [% @, `. w
% ^! I, M6 ~- R- d, _) D+ t! E
" D. q) i$ l; I! Y7 k2 Z1 W9 v什么是OWASP CRS1 g, O$ f, U/ i+ C8 R% {$ E" [
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
6 S E S/ @" `1 r
* I h; I3 x* {
. d [, [+ r1 CModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。" b" ]3 R M; e: x9 ^) ~7 t0 W1 v
9 ?0 p+ V" F# @! a' q' c0 D
$ Y8 F; Q. w2 }: S% ~4 eHTTP Protection(HTTP防御)
4 U3 |+ X8 s6 c8 @' nHTTP协议和本地定义使用的detectsviolations策略。
& x% U4 D/ \8 r! h: h. f- F) ^1 h. ^ L& M; x* E: L) X5 V
5 Y, x2 f- F1 ^8 e' k7 @- o1 o4 vReal-time Blacklist Lookups(实时黑名单查询)
& S4 C" U b% |8 ^ h利用第三方IP名单。) h# d: ~2 t% z' z
" b+ P2 A8 e+ D" O
, q1 |) {+ T, h. T0 D* y- v- V
HTTP Denial of Service Protections(HTTP的拒绝服务保护): ]! r; x+ [5 S) {$ i4 m
防御HTTP的洪水攻击和HTTP Dos攻击。, r9 K" ~; w5 l+ V2 u
" n. X0 U, x* T' Q+ ?. t$ U$ u' C- K/ ~
Common Web Attacks Protection(常见的Web攻击防护)
% ]3 P# W; ^* U9 R检测常见的Web应用程序的安全攻击。9 `0 @ N7 E/ d! l
$ Q: x( A3 G% C) }6 ?: ~, A8 o5 {; h0 o3 E; Z
Automation Detection(自动化检测)
. k' H0 p+ w+ j# J检测机器人,爬虫,扫描仪和其他表面恶意活动。5 R5 D4 {9 t* o. v, m/ N0 `( C5 Z
1 m9 c6 `5 W, s- `1 P$ `$ J* [- W& p; h/ Z8 B- W) s
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)7 c$ W- Y6 c1 ~- x
检测通过Web应用程序上传的恶意文件。' M1 D* K" M3 B, z4 V' v: `
0 ~& x/ `% `2 N$ y5 Y7 b! F ^0 y# i( q, V* q) ?! u
Tracking Sensitive Data(跟踪敏感数据)$ i( m% K; {$ T% y+ K
信用卡通道的使用,并阻止泄漏。
0 W( t2 F, I" q) G8 [, N# t5 S0 i9 x
5 Z1 ?' A% D! d$ Q1 v+ ]: [% [8 u# ^: k+ z# o
Trojan Protection(木马防护)& F; d! y( M1 W6 l
检测访问木马。5 v& b% i9 v& b7 y! ^
9 _0 D. b; l$ Z4 I- Z% o7 w2 x9 Q& ~5 d% j
Identification of Application Defects(应用程序缺陷的鉴定)
- y( q2 H$ Z5 v& m4 I2 |2 _检测应用程序的错误配置警报。0 b! ^- C4 r- l6 l) e
Y" j& q o0 t/ g. ?4 \; W$ N% s4 d9 P! s( K4 h) f8 |
Error Detection and Hiding(错误检测和隐藏). c7 L% x" { [9 m5 g; z! M
检测伪装服务器发送错误消息。
8 B2 f& Q! `+ V" F" a r+ X
! K( @3 X6 I3 \. |3 Q! }+ O' \' T) n2 s8 u
安装ModSecurity0 B0 i9 K( g F7 Y) s' E
软件基础环境准备
" W) q* R% I, [* @. L/ R下载对应软件包$ v0 t& n1 W3 j1 i4 L& a! z& L
$ cd /root: ^6 v0 `5 u: f. M9 e9 g( |* [ i
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'# N: i7 \, F9 U
$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz% D' N0 ]5 X; `+ t1 y0 ^1 B9 v
安装Nginx和ModSecurity依赖包' ?0 f( u, W/ Q6 g
Centos/RHEL0 r% K- I2 d# h+ |& c! @2 k
2 J1 h O8 J& X0 F
3 _/ h, ^7 l. E1 i B9 \$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
7 K( K, c% U! _& gUbuntu/Debian$ `4 m; l w% [3 x+ `
5 `( V: S+ r4 t% F% n% J" |) Q9 e3 q5 _" b. I8 b- n
$ 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
8 v8 r/ Q1 J. Z- f编译安装ModSecurity
+ e! `0 Q0 o( ]* G, M) tNginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。% z: N' q4 L+ Z% n/ H" Y" J- N
# l- S+ m3 l, e8 N5 d5 C) @ B
- [6 }( u9 W" c% a
方法一:编译为Nginx静态模块6 B) Q o9 e' t1 T( _
% |* A2 S9 `) k4 ^; f8 T& |2 y" Q
编译为独立模块(modsecurity-2.9.1)
+ ]# Q% \: T9 Q' q$ tar xzvf modsecurity-2.9.1.tar.gz! C6 U1 s% z) A! n0 L% J
$ cd modsecurity-2.9.1/
4 {; L' o' e4 A, G$ ./autogen.sh% W; o! E/ \+ D. p9 t, S: s" e! ]- T" l- r
$ ./configure --enable-standalone-module --disable-mlogc5 I- v1 P7 X# f8 R/ ~
$ make
( Y8 d1 w0 P( S6 D编译安装Nginx并添加ModSecurity模块4 C, D0 ^4 Z8 s5 f2 ?& n
$ tar xzvf nginx-1.9.2.tar.gz. t, F& T1 l* E8 F
$ cd nginx-1.9.2
. w1 A$ e& M" f/ i& s' m( D& B$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/- K9 u& }1 l% R8 P/ k3 P* J) r2 f; p
$ make && make install8 C6 C) n$ ]6 f$ _8 ?) [: b
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
% ]5 I) R6 H% L. c( J
0 R$ c/ a7 P/ i
5 v7 X# G5 D& p6 o编译LibModSecurity(modsecurity-3.0)
" v6 O$ x+ G0 `+ t$ cd /root
. x$ u7 O/ k9 c+ R$ H7 b$ git clone https://github.com/SpiderLabs/ModSecurity- o# D) L) ?4 f% f
$ cd ModSecurity+ e+ z. x- k1 t! v7 x6 s0 Z. ]
$ git checkout -b v3/master origin/v3/master
6 V+ x) k2 |8 \$ sh build.sh$ q. [: b( Y7 L- A
$ git submodule init
$ T5 E t! P J' d; o$ git submodule update! r. x) ~ {) W- N
$ ./configure, y8 l' B+ Y$ i9 V1 Q8 L* a
$ make
$ d8 f' @5 w2 D$ make install
0 e* W1 M4 V: ^$ gLibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
& X5 {* r7 ~4 m& l0 p; z- _
7 ?- I# o" C- k: F G% t$ I
, x0 ]0 d, B$ O1 q) `& X" P, @$ ls /usr/local/modsecurity/lib2 A& [2 R4 G( a0 U! |9 o
libmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.0
3 M8 W1 ]- M& g/ M编译安装Nginx并添加ModSecurity-Nginx Connector模块: B% v0 n# P5 U/ R' f
使用ModSecurity-Nginx模块来连接LibModSecurity
5 w! g2 t6 o j0 P! R
: H1 K# h( O9 t4 T, C7 t* Q# z4 m5 h8 x0 O4 q
$ cd /root+ j0 m7 {8 o$ |" {
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx Z& V1 D. y1 n2 b+ f! H2 r3 `# i
$ tar xzvf nginx-1.9.2.tar.gz2 Y3 u. N d- G# e+ |. A% R* M! O& i
$ cd nginx-1.9.2+ \2 s! j' q* _+ a/ d% L, o% B
$ ./configure --add-module=/root/modsecurity-nginx- l. b% q( N" a( W# @# a
$ make
7 z' w$ u7 Z% N- V; }$ make && make install
9 @2 h6 q* G) T( q1 K+ _2 a添加OWASP规则
3 @! L, _- l' B8 bModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
1 v' {( M8 L9 q" E
R: k3 U9 x1 p- K9 a( x7 C# I E9 ~$ z
下载OWASP规则并生成配置文件
^. n$ p5 h" I& y) C$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git) {: R" ]' b* Q/ P7 p3 e4 u
$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/: |! \) ~* m4 L* x1 }9 A/ m- c2 k
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs% G4 {+ N* p6 b3 u( A9 i" [. J
$ cp crs-setup.conf.example crs-setup.conf; N9 {+ g2 i, F3 c
配置OWASP规则- V" x2 F- d3 a2 ?/ R- m" H
编辑crs-setup.conf文件4 I" D: F! x+ R/ L) C3 N
+ L: k; l+ R% G, m
+ C% Y# H8 P" ~3 E+ f4 W; F$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
3 O' C1 \) u& c( k$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
& P- v4 r) p6 k3 J$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
% b! }4 ?+ q' i, g N$ q: u$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf" D( [( U4 s6 A' P1 s: i# R
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。" j# s ^2 q: ]8 y
0 t: [, B( F! W1 o) o! G3 a8 [6 o @; q
启用ModSecurity模块和CRS规则/ I- h' c$ {1 J" I U" N
复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。, U# A* |$ P! V8 R/ v) M9 a/ e' e/ h
' E% H3 J: a/ D7 G6 g( I, \2 n
: z2 K7 @, M9 O' imodsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。- |5 n4 b" M O6 |. O
: }& I3 C0 s4 N( t; A( P
A/ u6 O3 d$ B. w
$ cd /root/modsecurity-2.9.1/% d& W& i, v+ G: W% V
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf 4 U* n2 q" U; r) P
$ cp unicode.mapping /usr/local/nginx/conf/
% g9 C# w( ~4 x将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。- u/ G3 e6 a' P: Z( W, b; c
2 z+ Y F1 y& R! w k D2 d1 x, n
$ vim /usr/local/nginx/conf/modsecurity.conf
$ E# t2 h" R7 SSecRuleEngine On
( S2 D$ ]- @# l% p3 aModSecurity中几个常用配置说明:; w8 i/ g4 h5 X: j* [- O; G' g& @' M# ^
- T9 L- X1 p. G9 F" B2 r* u h
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
/ n9 q* `2 H, q+ G5 O3 n7 v: J2 ~' H- z- e1 c& E+ m2 V# e' h
2 D0 X& ~- O5 u" ]# [7 i1 V
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
& d* v( B8 T! T: @4 |: @0 x; e
& o1 p1 e/ h3 j6 E9 `& D
p8 e v! `8 S% Z& `3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。( s) \' Y3 q& _" |$ `5 Q$ _0 U
" B* @* `0 {( u* x
1 g D0 M! s( E# R7 N! Q
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。
: H G$ s7 U9 m5 b
. L' T4 {& D1 j8 b5 H0 a- y {/ T& ` a3 Z2 ~
在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。7 k2 a" n( P) {4 t% @1 U! z' G4 z
8 S, h, ?3 K L }& r0 W2 d+ s& \
^* Y# k% p& `- |& F* @. h3.x版本CRS; }7 e5 Q0 y* V. ^, x0 H+ ?4 L
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
& Q9 A, @' S1 M F* j# 生成例外排除请求的配置文件
) r, E, m9 O3 x( c0 o/ m$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
& G" n0 |4 p' ~) X2 o$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf4 F; R: y$ `' Y. u4 U7 D
$ cp rules/*.data /usr/local/nginx/conf
" n- o9 R" @6 M% r$ d( |: Q/ I为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
+ j% e$ T/ M/ @4 n# c% ?
" _! x- k% }$ d5 G U8 V' V, L4 i, C
$ vim /usr/local/nginx/conf/modsec_includes.conf
$ f% t( U! g8 ?9 W% n7 |& |/ q% B$ f% `: v; j" C+ W$ ~& g+ J7 f5 L, l/ w
[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 P4 N6 j/ `& E. ^7 S- H
! m' t5 \: q6 x J W
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
: F: @5 [, E! j8 g" h* P
. a4 E( Z5 Z0 d& w) j$ E. O
1 f8 W* u6 D1 K# O- ^配置Nginx支持Modsecurity
7 f; {: ?3 A6 l- l4 X) o4 v- H& O启用Modsecurity
- |) ~1 X: A% S% q! w使用静态模块加载的配置方法8 M# E, U/ N) ?- x8 |
在需要启用Modsecurity的主机的location下面加入下面两行即可:
( n" N7 }3 B* D8 O1 b+ Q$ i- b1 J
' w0 h# i8 @& _. [9 f& {- t
" J5 V$ a8 G. X# JModSecurityEnabled on;
7 @2 U: C+ @4 HModSecurityConfig modsec_includes.conf;
" N; K6 A& H" l; H, s( i修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
. a( e* n6 N( A- l# a# T: ]( l; W0 x8 _* n! B8 j
% _8 l' P6 b1 ~- Q4 O- X" F! F$ vim /usr/local/nginx/conf/nginx.conf Y$ T0 _! q( S) [% `5 k- e) U
5 z' Q( v' C. f4 `! j
& I+ ?$ `2 n2 L
server {
! m2 a8 H* t7 W% t" ? listen 80;
+ \! W5 p [" N8 T server_name example.com;
% B5 \0 O/ N; R a' W7 ?- r$ ^# K$ ~: P4 [! I+ N4 W
$ m& N* V+ {- e* y* _
location / {& w: w7 @5 }+ {& N( U& E
ModSecurityEnabled on;
! x+ C; ?3 k& } ModSecurityConfig modsec_includes.conf;
/ Y" e+ Z6 E# x5 Z; N5 m4 k3 G root html;
7 j6 M( @6 J( i* q( c# D! j4 n' J index index.html index.htm;+ ~& U5 R6 J, x- o9 B1 Q; K% T4 q
}/ r% S1 \0 @1 j6 d
}$ ~) ?6 Y. `" q y! R
使用动态模块加载的配置方法* i2 l( l+ {( x# s3 y ?0 L/ s
在需要启用Modsecurity的主机的location下面加入下面两行即可: e9 R8 X; b0 k0 N8 F1 T$ w W7 k$ g
9 f, S# O7 k# d% W0 M: {! ?2 u; ~: D# }2 y0 V# |4 T
modsecurity on;2 d5 T, z1 c0 q9 V' {9 Q& {0 @# _
modsecurity_rules_file modsec_includes.conf;4 p4 Q. e) q* M9 B
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
8 i, s: f7 ~" g: m! @- a; Y$ D; Y5 g6 y# l7 N, ?5 C" a
% a. A. a# z( J% C E$ vim /usr/local/nginx/conf/nginx.conf4 T6 I/ T# T. j9 [
. ^3 [: h+ A/ l$ `) j3 a
t0 F0 u* ~% i6 h
server {$ r! g0 z. [9 `5 q" p8 x
listen 80;
( N! n* J) Y6 o* x' ` server_name localhost mike.hi-linux.com;
8 f; o8 ~7 n" ]& L; k: c access_log /var/log/nginx/yourdomain.log;4 {6 u! [- L# L. C3 F
& |4 d5 ^% Y1 l6 ~, T% r
1 w6 r2 M. M; J$ @; d( n
location / {
6 H7 N1 i8 Y: p& w5 U2 q7 Q4 h* \, I" X- t0 n& A
* p' d2 E& r. W modsecurity on;% d. Y7 P9 @. F; q( P
modsecurity_rules_file modsec_includes.conf;
' N1 @0 V9 u" h; u root html;- H6 E+ s- v% X7 d6 O" K
index index.html index.htm;
7 T$ h* B- W* W- u4 ?}# ~& i h. ]! B, I! \% Z+ m: S
}# ]/ H8 }1 [1 U- _0 w
验证Nginx配置文件
" Y! P) ]3 Z% O7 }5 x" Q$ /usr/local/nginx/sbin/nginx -t
1 V+ \9 n5 Z/ A. ynginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok+ g" ?9 D+ T/ Q
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
$ }+ q0 e2 O( V9 n: v启动Nginx
( u! W) S% m+ X: g$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
2 z2 }/ i8 J1 h" k1 i6 V
" t4 L: M0 o4 H* 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能够战胜更多复杂/未知/混淆的攻击模式。 . b7 o0 S4 R2 t5 `6 |
|