ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。; a( z8 m1 o; z3 Z' I1 y- {, G3 [6 H
8 \0 `' g9 G3 v
: d/ e! L6 O" z6 B
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。 v/ L7 E/ J# s3 Q' v
: b5 s' l7 y# w @/ X& s# ?; f
7 |4 W+ \/ W, @6 f0 J什么是ModSecurity+ U. V& N. T3 i+ ^* N/ d& T4 o
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
, B% K0 s6 Q9 h% b6 H2 {; O' L7 }* o. a
, ?6 O6 k* [$ iModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。9 L# A$ G1 e* `0 x; Z# X' l- K" P; ~
) _' o1 G8 D4 p1 G
; Q2 T+ y2 s/ V: t& K9 m+ _ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。- t* a1 t1 K- X: n
3 m3 h/ {9 g2 r
% q6 L- E6 d& p官网: https://www.modsecurity.org/
) {2 q/ w0 }1 X- \8 [, n# S$ r4 I+ |0 |2 T
% K. u* ?8 S4 R# u0 A
什么是OWASP CRS
# ?! O3 h1 G" J5 n$ v, D9 AOWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。( z) _6 K$ n1 D$ O- Q0 N
. i' } `& Y }1 N- H' y( T
& q9 Y0 n0 E3 e {, A, o& ^9 a
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
8 j0 z) R/ X; G0 y6 B) }/ g8 k# o: p* M
: Y1 r" t0 p5 E. i9 p+ Q9 ~2 B# t
HTTP Protection(HTTP防御)& }0 |+ ] P; s1 l
HTTP协议和本地定义使用的detectsviolations策略。
+ }8 b) Z& J( g8 d T
: b8 D( m+ g* e0 i
, {: K( Q5 p1 {9 f1 ]2 vReal-time Blacklist Lookups(实时黑名单查询)8 {/ J7 v6 I4 r9 I
利用第三方IP名单。
6 k& x1 Z0 O, I; O" L8 {1 u6 ?: k6 h( s, }; K& [) A
3 S. S6 {% ]( C, `' ?4 P
HTTP Denial of Service Protections(HTTP的拒绝服务保护)
. {9 M1 N3 P$ S6 e ?, r! j防御HTTP的洪水攻击和HTTP Dos攻击。8 v# I7 ~" C$ q+ F3 D+ n* E' {( r
) z5 b( U9 P9 G5 y2 U8 Y! x; E1 k& O$ d+ [# E5 Z$ u" v$ Q
Common Web Attacks Protection(常见的Web攻击防护)
0 E( {3 z" t9 f3 P% f: ^2 o2 |检测常见的Web应用程序的安全攻击。0 p' i8 P% j! J' \3 y3 Y
1 ^2 ]. A2 A; R$ s- P' K4 q3 P
1 n8 q5 F# g. {3 j8 H+ f8 q# G( AAutomation Detection(自动化检测) l2 _) `1 |/ n1 p( @- @& y8 }
检测机器人,爬虫,扫描仪和其他表面恶意活动。
; Z6 V6 W+ _! x0 }7 N5 g; K2 J/ c( x
8 X2 S$ N8 M0 z5 f, ~! b( j, h$ x9 i' L6 b
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)
6 v5 v7 |; t) @' K检测通过Web应用程序上传的恶意文件。
8 i. G" B) w2 L1 L8 A6 A
* l5 _5 n R5 w- F
3 {7 k! T( Z/ K2 f, [ z2 z, \; STracking Sensitive Data(跟踪敏感数据)! n2 K# Y7 x( m/ e2 E
信用卡通道的使用,并阻止泄漏。0 y/ e) h/ c7 ?: h4 b9 [( a
: N, F+ d/ x8 S9 V
$ t* Q# M1 u0 t/ \7 xTrojan Protection(木马防护)8 C: N' i3 W+ n; p% K. z" I
检测访问木马。
* n1 d- c8 b6 v4 h
* s/ t7 y( Z' S: h+ X: j/ P( m
8 m3 G- K2 d1 R1 k& d: PIdentification of Application Defects(应用程序缺陷的鉴定)
; k$ R& v8 y e6 F' X; d4 [1 h; l检测应用程序的错误配置警报。, A8 A0 F3 t2 X* o* W3 u7 |
; b- B# E/ Q. P* d1 G6 U* q. U
% C# G8 a Z6 h6 yError Detection and Hiding(错误检测和隐藏)+ @5 a: O1 M7 y! A- Q1 ~8 o; g# L
检测伪装服务器发送错误消息。' ?: u' w! s( `7 K9 F" S# d
1 u; m5 e. U1 C& K% F# Y" v% Y" l' J3 i& L. D% U2 [
安装ModSecurity1 _1 }8 [: Q- `0 W7 h* q2 A9 h- b
软件基础环境准备
: b; i( b( Q: k. e; \5 ~% m2 K, U: c下载对应软件包" m: [: Z2 D5 ]# V8 J0 m5 F
$ cd /root
# d& W8 N+ b! ` `8 ~+ p+ D$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'2 @6 k6 O1 u4 G" c
$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz
( _; H9 ?/ ^( J3 z, l9 ?安装Nginx和ModSecurity依赖包1 D0 D$ f/ C% M. i: I
Centos/RHEL
" Q0 t. }8 Z$ m8 K' i+ n* N# s. ]1 [ ^4 G
3 M; E2 {4 N0 v) h6 z9 v$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
' E" P) M3 P8 w6 MUbuntu/Debian; {+ S7 s3 {. _) B
8 g7 T1 c) t8 t0 {: }* H' p
8 j4 @9 l4 b: ~; m; S; W4 T6 }$ 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 F% A# j8 N4 l7 [
编译安装ModSecurity }! V& p4 {5 a& z* k* t2 f
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
/ h2 z! ?/ S- M) {
! @' m# A: r1 v1 m0 n. b+ w
5 l# Q" I0 X, j' U0 y' A方法一:编译为Nginx静态模块
* A" O, U* ^" }$ X+ F; x1 [9 v- W, K# _
! X" B0 N }, W, S r! M& a% {
编译为独立模块(modsecurity-2.9.1)4 x! V+ m7 Y' {" }# z( M
$ tar xzvf modsecurity-2.9.1.tar.gz$ w2 n$ q) \7 L; Q4 x0 H2 k
$ cd modsecurity-2.9.1/- ~+ T8 n9 s2 i: W
$ ./autogen.sh
, U; Z& t" e4 F, R; N1 V$ ./configure --enable-standalone-module --disable-mlogc
8 D2 [6 f. m: k0 }# ? b- z) p$ make" a6 n z* H) Z
编译安装Nginx并添加ModSecurity模块
! X& @, D4 z0 J& w* z' s% l) s$ tar xzvf nginx-1.9.2.tar.gz6 s# J+ ?: C$ L7 z* H
$ cd nginx-1.9.2" w7 Z4 z! Y4 ?: Z/ U2 v; K* q
$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/2 N7 |4 P2 w( q; u5 z
$ make && make install( X( n, Y; q/ Z4 A8 [8 C
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
" b* E- Z7 T2 o4 U# J' e
^: e+ R, h+ q1 y0 P) l2 n5 r. v6 I3 A% I/ r9 Y4 X
编译LibModSecurity(modsecurity-3.0)
/ A& Q' f) Q- S- k5 ~) k3 V0 M! C$ cd /root0 P4 ?8 W* ?3 P( O8 r! v
$ git clone https://github.com/SpiderLabs/ModSecurity2 `$ o, W0 p" T0 y" W' u
$ cd ModSecurity
# [; |1 J7 V6 w9 o, }1 E5 O6 Z$ git checkout -b v3/master origin/v3/master
: r' L6 A! v) h' K$ sh build.sh7 h& | Q; K# J+ {( d
$ git submodule init: `3 t" @- H9 C- q: v. z' Q
$ git submodule update, T7 l2 m. p, f3 ?' h
$ ./configure/ z+ m- h$ d9 l: @' y' L9 _
$ make
E+ g& H T h4 p- H/ T$ make install
& b2 e0 M m/ U$ r/ CLibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
$ N# t% k0 Z' F2 h1 a
$ h" R0 P5 s$ G* T0 L( Q5 L9 D# k2 H
$ ls /usr/local/modsecurity/lib+ |4 K7 H1 y! V ?' k* o( I* g/ a; Q
libmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.0
3 {$ L4 Q- n1 {! [* b) Z编译安装Nginx并添加ModSecurity-Nginx Connector模块/ O4 G& J @6 ]+ y, N
使用ModSecurity-Nginx模块来连接LibModSecurity5 w" y7 i! s* `4 E& s2 u
% [; E' k2 |% L; C1 t1 M D( N6 T% M
8 }* d% `# ]- E% E% b$ cd /root9 K) p# _" v- x
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx3 a4 G5 G4 A4 M# r$ I
$ tar xzvf nginx-1.9.2.tar.gz: o8 H/ V8 F! g) {$ ~4 X$ G
$ cd nginx-1.9.2
& b, o% D+ I6 I" k# \$ ./configure --add-module=/root/modsecurity-nginx
9 v; ?4 }7 A& M$ make4 ?- j+ C! U9 b" L. @1 @
$ make && make install; n8 k2 S3 |5 u5 t
添加OWASP规则
. f" ?$ _6 d) r3 x: R2 Q( W7 t; \/ xModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
9 D( @" G# L1 p) z! P* y' \" ~% d% s
- N7 i5 O! F. y0 G
下载OWASP规则并生成配置文件 p3 x, \& F' |2 K3 K* Q
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
- h4 P6 J4 t5 \# s. P @$ u$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/$ s+ D! U$ [; m, V& p: a i
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
' e" x. i! N/ M. t0 g) X$ cp crs-setup.conf.example crs-setup.conf
0 S7 X ]6 M/ t$ r7 T配置OWASP规则
& u8 c7 m7 E/ Y" Q5 Z; c编辑crs-setup.conf文件
, y) w {& H9 M1 v/ A' ]: E: Z6 P9 A9 ~+ R# ^, I
- z' D2 }6 I. S# i
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf! f. Q' N4 `7 ?5 }2 d& L
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf+ O! @/ e* `, [) a% `3 w; B
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
# c1 B. X' M. E- f/ k! n! O$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
q7 k" m* M7 C c1 D3 ]默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
3 |" L' w" O) r& y
: W s# _4 t; Q6 V2 i8 }6 |# Y. x9 O- K7 O
启用ModSecurity模块和CRS规则
- ~* E A ~2 O/ Q* [9 G6 F" p复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
6 y8 i4 m6 H: q7 v \* A: [8 q. v$ w, h* j6 ?7 c
" e- P* e) s3 [3 G/ _4 \' z2 n5 e
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。; G0 ]# ]4 n2 H# \' y5 m% C
r3 `$ u5 g" s& a, c: }9 I$ {# s4 s" g4 j
$ cd /root/modsecurity-2.9.1/) t/ P7 v+ `* C0 i
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf
5 q- j/ `! J$ I4 q' ?" S$ cp unicode.mapping /usr/local/nginx/conf/9 V+ V& f5 G8 P. s2 o+ Z
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
( O3 T/ V: G0 d. _/ ^3 l: `# S7 k0 p1 L1 b ~7 J
, V, i2 }3 |: V. M3 j7 r p
$ vim /usr/local/nginx/conf/modsecurity.conf+ r) t0 |! H6 \$ Y) v$ \' m/ k
SecRuleEngine On; p2 c4 F# {) y
ModSecurity中几个常用配置说明:; X4 f6 z, W7 _
2 U: _, g/ G3 x8 C% r" C% I& f: A$ e
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
9 a4 G/ i6 \/ w6 s3 Q: Q+ P9 R6 O+ m! S' n' r
) L0 ?+ F8 r" ?2 w. K& S
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。# g2 @9 C H5 R# G9 ^7 b9 u. P
' ]2 A4 C7 H4 d# D
: @' G- C, S H3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
# n* u' F/ W" ]. \- o" C: r6 k8 X" q; E4 k+ c: v8 W- D
5 `. |, E: U: K( A- a2 {
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。
0 t% i5 R( R8 Q
: K3 d* i7 I7 F) v* d9 }7 G1 c) _2 X3 ?0 F
在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
% u# C, O+ c& r8 Z* }. x3 [4 ` T. h) a/ f
; _; i) B$ \7 D5 I6 t* ]: X7 K J3.x版本CRS: ?' U5 ?1 t8 s0 b
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs/ Z& \" e, P3 \! B% s
# 生成例外排除请求的配置文件4 |3 |3 J# ^3 f- u# Z
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
8 b: X+ x' p% O, Y$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
/ B; N: |$ f/ O. B4 r$ cp rules/*.data /usr/local/nginx/conf/ U K9 s2 Q7 x% H7 E9 B h9 m
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。" Q, L { e) Z ?- c
% a2 e: g0 X" b$ A2 \0 g$ ] P' u) b" V
$ vim /usr/local/nginx/conf/modsec_includes.conf
P7 d/ D+ @/ k' R6 m, x, Z
9 Q2 W. `- d! ~( L1 l3 X X5 s[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
( Z) {2 e9 ]2 `, e& @5 X$ j z. B& l! L k
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
7 r' r: b& ?" v+ ?% r
* D/ J! V) v' G/ X2 S3 E4 X* b
' E* Q" B( s/ Y. V, i% _# C6 i配置Nginx支持Modsecurity7 b; {! x: O, k$ T! S ?7 c3 F! H
启用Modsecurity
" |+ s# j: y1 n3 B, _使用静态模块加载的配置方法( N8 k, z% t1 X5 |
在需要启用Modsecurity的主机的location下面加入下面两行即可:
R( b# L. b. g+ ^; J' T
: Q. a/ [3 e+ u8 e) n# z6 l$ ?2 z# Q7 V" x! z
ModSecurityEnabled on;2 a9 C7 A* g# l3 _4 x9 E. I
ModSecurityConfig modsec_includes.conf;
1 B. m7 M1 X/ q5 L! _修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
4 S- t9 o- B( K2 ?
0 ]4 [3 |. `- T2 m2 B/ `) i! { T3 i# \
$ vim /usr/local/nginx/conf/nginx.conf$ g0 U% d* V L2 q- k
& y) @1 E- K& n0 k" e9 h" S! i
: y ~$ C; _) a4 a: userver {
$ ?0 ?0 o# i- R+ F. M6 T$ l listen 80;
0 X _7 Y% Y/ E0 R8 K: n' t server_name example.com;0 J; m' l$ m2 q) C F0 `
3 _; x# V& r4 I: @ G+ U4 q% k! q5 |; z) B1 }
location / {
% \, V" z$ Y. u* a m( m ModSecurityEnabled on;
b9 g7 @3 x: I% ^ ModSecurityConfig modsec_includes.conf;
' @9 o$ H% n: u root html;
( D4 y; j; u8 z2 R. }! G index index.html index.htm;
- w5 M1 z5 K5 q }; k: G A5 Q1 s6 ?
}
, Q" f0 j; ~$ F+ Q$ w; y. S使用动态模块加载的配置方法! e: g, D: Y/ X4 P
在需要启用Modsecurity的主机的location下面加入下面两行即可:6 j6 p6 K- W* a+ F( i5 {% y
2 d; U' ^0 w* o9 ^& b
3 `; d: I& N4 V
modsecurity on;' l# G7 B; b) \, S
modsecurity_rules_file modsec_includes.conf;
" t% Q9 A9 C+ a c修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。$ A$ i$ f7 q3 Z8 ]
" a1 ]" b1 G' z4 ?
) w6 {+ y9 B6 q
$ vim /usr/local/nginx/conf/nginx.conf! `/ x7 w. ?2 m; x" k0 h$ Y8 ?
& T3 \4 c7 B4 Y/ K6 Z2 K ~
- C e- G+ Q4 i% r# F: Aserver {% |: O0 M' W: H
listen 80;4 g( b4 J/ W; b" |/ i3 |! e
server_name localhost mike.hi-linux.com;+ v( c* |% d9 n% h" w7 L
access_log /var/log/nginx/yourdomain.log;& I4 }' L5 d0 e+ g$ }3 P8 z
% F5 K8 K( W9 ?& V/ q* E4 w8 K- R9 V$ c0 A, _3 K* C9 R
location / {
: R: j3 O C! B ]$ C4 V: {% i( v
5 Q5 @; j4 P$ H
modsecurity on;
) V2 ^% x6 U$ T4 ?' [ L8 E modsecurity_rules_file modsec_includes.conf;9 X/ p; Z% s) b" p
root html;
. l. A3 F( s2 a; E1 n* K/ { index index.html index.htm;
, m- P) H' Q% X" C; d2 B}
) R: L8 o0 b! k; F3 _2 D& [9 s1 }}
, v1 D. R+ c3 j; o+ A1 m9 v验证Nginx配置文件8 @1 \9 s3 Y6 v- w) N. s
$ /usr/local/nginx/sbin/nginx -t
# m( ]4 r0 I% mnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok0 |2 j9 M) n8 ~+ D% ]2 v. o/ \
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful! q1 \( U5 p# |
启动Nginx
# X3 S% D" I+ e( i# X$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf$ L9 Q, a p* `( B) K9 x
8 \! \1 b8 J/ C7 \. a( w4 o
测试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能够战胜更多复杂/未知/混淆的攻击模式。 , ~+ p$ G3 B [ c: ?* _
|