ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。' l8 m9 G3 b9 n( L% ]- p
7 P5 g. k9 G4 Z$ `5 y% T
8 c9 W; l8 q$ |3 d/ n/ \) B
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
( U: p. L; \& O2 w b$ X* | t
/ C% j+ m. w0 p# A p
' J! x) |7 q# V! Y. f) k8 D0 A) F# ]什么是ModSecurity* P3 N" m/ [/ J" X) n6 g
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
3 P* e: c& {1 ]' }0 X# O) @+ |2 S
5 }5 O* q! ?# y9 B5 C- A tModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
* C0 A% l5 [" F: D7 s* C5 c0 M c i# L
( j1 W; Q& {, n& F
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。$ B4 a) D4 J' @
7 H; f7 N9 E5 o9 Z; K, U' }
1 I8 H$ p& _3 r/ x官网: https://www.modsecurity.org/( v& }! s, f2 M) }: J. m9 p
3 t# B1 G, L. g! S% [" o7 w9 e& X' T- J& A
什么是OWASP CRS- j0 t) e; P1 E# Z" y! y
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
% M6 J$ c2 i% j3 d5 a, L" Q2 R4 M
; ], ?' P K" S/ t+ [5 t
" I! Y. l7 B9 U# N# J: q, RModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。& a) S4 ]5 m8 g/ [
a' x. y& b$ X2 ^, [+ _1 i: I- ^+ ]
/ |* R+ ?- g* S" HHTTP Protection(HTTP防御)4 |! E0 P* r6 s2 l% T
HTTP协议和本地定义使用的detectsviolations策略。
# H6 [! _2 {; i! G
# W# q q% t% g- K% ]; H: H
8 X/ j T+ G% w2 b+ c3 ]9 ]Real-time Blacklist Lookups(实时黑名单查询)
4 N3 t! e& p: D7 X: W利用第三方IP名单。, Z0 \$ S0 r9 V9 \5 z0 X; O
5 I. ]; _/ ]) [1 [9 {
+ ]! k: m ~ N/ e2 v! ]HTTP Denial of Service Protections(HTTP的拒绝服务保护)
) E$ A2 U/ |6 f; U4 j: g$ r2 O防御HTTP的洪水攻击和HTTP Dos攻击。, o+ {! B+ w; g4 ?
: ?: Z6 W# o2 {, l( S' p3 Y# G m8 p% N7 U+ W) {6 d+ C. o
Common Web Attacks Protection(常见的Web攻击防护)
& h+ p3 N) |, i7 n检测常见的Web应用程序的安全攻击。
. e7 n9 H4 p" I8 H+ y$ e, [4 x1 S
6 ^1 C3 A2 _7 x) \% O8 B9 C) @8 \
! z* V: K* ? S- t, ~/ SAutomation Detection(自动化检测)
' _" e4 b: \" ^检测机器人,爬虫,扫描仪和其他表面恶意活动。3 K+ I4 M0 \" k/ Z
3 I6 T5 s: d; b+ s) F& g
& G1 J3 U9 U' o+ \7 k" ]Integration with AV Scanning for File Uploads(文件上传防病毒扫描)! H) L, ^. b) m7 R3 y& ]6 }& b. |
检测通过Web应用程序上传的恶意文件。5 N4 \8 l" c. @$ ~2 _
, j: E( ]3 f9 ~
$ K! j0 M! p* n% Y
Tracking Sensitive Data(跟踪敏感数据)1 R9 s9 T9 n0 Z( v4 F$ C
信用卡通道的使用,并阻止泄漏。6 W- j) c; W$ n' h/ S: w$ h
4 G& j/ Y6 J( N% c7 q/ B
# x8 T4 X8 u# w) q" P: jTrojan Protection(木马防护)- W/ t0 o" ?1 l: X' B
检测访问木马。* L! Q' P- C9 o! H6 i
' A/ h" {6 K' I5 g/ H, h0 P8 K# l. a7 X ]4 G) I% I
Identification of Application Defects(应用程序缺陷的鉴定) M0 p7 c1 {+ h" W- V
检测应用程序的错误配置警报。
+ |3 ]$ q- V1 o0 k: u( P4 {0 y% e* [# S
6 O) E/ G* h- r- e5 t
Error Detection and Hiding(错误检测和隐藏)1 {& V% ~+ J8 i* s$ w# B1 s2 Q
检测伪装服务器发送错误消息。" Z* L% ]$ W7 v8 Q- `: m: v
& F U: U; i" _4 |- }3 l
) E8 H1 F0 T. O1 C3 N
安装ModSecurity
" C) U6 @$ B3 h软件基础环境准备
4 r7 I, x; u4 r下载对应软件包
- Y, Q! I- c0 B: Y* J5 d! [! G# D8 l$ cd /root
! ^2 }# V2 k! T: y3 S$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'1 P7 C/ z1 B# [! a
$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz1 a. e4 [% @' ~$ \0 v9 Q* j
安装Nginx和ModSecurity依赖包
8 V8 |+ V; e* Z) q% f- S dCentos/RHEL$ G; Y- s# b/ g0 g3 v- ^
8 x2 v* s$ t; t3 H% {1 Y9 i! C9 O7 R6 {
$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel5 \4 Y" x1 B/ n0 T0 k7 f
Ubuntu/Debian. A3 [" C5 _# n
3 T( N0 f% i4 ^9 f
4 U7 g, _( o: \$ 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
1 k: V$ W% h! v编译安装ModSecurity
( ^& b& [! q0 e1 U0 [0 T, B0 aNginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
' V1 {6 t, f# c0 M# C' y6 S
5 }) O- e: F. z3 Y6 t6 p
1 V m8 Y8 b( p3 x) B( l; N方法一:编译为Nginx静态模块
: s. b4 P2 d9 t$ ?( v
& T* E) r/ W: A2 I) R& u& o1 l- H- Z W" [$ h
编译为独立模块(modsecurity-2.9.1)
* p8 t% w0 ^) T! `$ tar xzvf modsecurity-2.9.1.tar.gz+ \5 o& o6 P' T" X5 R
$ cd modsecurity-2.9.1/
( X: {' w( v1 Q' y9 {$ ./autogen.sh) t( [) y) V# ^5 {/ N0 J
$ ./configure --enable-standalone-module --disable-mlogc$ A0 e/ A' M/ G) E4 n" [- N
$ make! T; n3 Q( i, e! `
编译安装Nginx并添加ModSecurity模块
; a: D9 v; M, F$ tar xzvf nginx-1.9.2.tar.gz
0 y; O. y! Y9 r. J& |% V$ cd nginx-1.9.2
, y7 e k/ F9 O1 ~! a4 }$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/
4 h, a& x6 x0 A- w( ^2 O4 a$ make && make install* b9 w( v; w/ \
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块& \3 ^; X) g7 |2 Z8 O
$ G/ F2 G. {/ L% ~5 H0 e% c
8 R9 g3 N; E+ o* @7 p编译LibModSecurity(modsecurity-3.0)
5 Y! d8 |0 p. i K5 k$ cd /root
# x/ v- Y: }' C$ m. m4 Y$ git clone https://github.com/SpiderLabs/ModSecurity! M! ^5 d% Z& @+ {
$ cd ModSecurity5 K( v3 n6 O! [1 U0 Q, N8 Y
$ git checkout -b v3/master origin/v3/master7 m% B& i$ R& V9 E; k6 c
$ sh build.sh# t/ j( b3 h" b# ?% D2 ]" D3 n* S
$ git submodule init4 D7 R* o. t4 Y1 y
$ git submodule update A9 C% P0 k) {. D( ^" _
$ ./configure" _9 R4 Z% t8 e+ w4 x
$ make
$ n2 g" V% d4 m" d: {$ make install
8 j& P3 O/ O, g2 O8 }6 C; tLibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
, [+ ^9 Z0 p+ b5 x0 w' j1 H
/ C% l- C( ]; F( h4 L$ o( b/ _$ X2 P- Y
$ ls /usr/local/modsecurity/lib
C4 g2 M0 l3 b4 N* elibmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.0. J' g) @6 r- q7 v3 W7 H
编译安装Nginx并添加ModSecurity-Nginx Connector模块
, \: }4 S1 |3 U# y. S2 u5 J9 G使用ModSecurity-Nginx模块来连接LibModSecurity! h r& f5 ^- ?( P# t( O! P
, ~8 j: {$ v8 z
2 Q# ~. w6 R* e+ p6 r1 y
$ cd /root
7 m& l2 ]4 E. S- e$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx+ n+ h2 N( z& e( E( z5 N
$ tar xzvf nginx-1.9.2.tar.gz: S0 `9 {: f4 Y6 s: b/ T
$ cd nginx-1.9.26 @' Y$ \- D" ~$ W& R8 ^
$ ./configure --add-module=/root/modsecurity-nginx, b* |6 V6 ^1 F8 Q: R* X
$ make7 ~% W& X3 {8 |8 G
$ make && make install
+ N8 w. o: c# n- w) n& C$ {: e* U添加OWASP规则
7 D. X X j1 C, y3 o6 f5 r- qModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。% V/ e5 m- E4 j% N0 D+ m; s: U! H
9 Y; _% g( ^3 p* T! m
6 F$ t: H+ }% f: t+ ~下载OWASP规则并生成配置文件9 W: R* ~7 S; o. H, p; J
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
, m) S2 R- p3 y. r- G$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/; F- g! v o( @" t( @& r
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs# X: M4 j& i, z4 Z. X; i
$ cp crs-setup.conf.example crs-setup.conf
2 g' U3 o* q' x+ H: `6 q# S配置OWASP规则
+ `. v) ?: g. h7 R q' F编辑crs-setup.conf文件% W7 l6 R7 Q; d) @2 I! e
( U" L, Y+ |' V, D
0 A& g$ G {2 y5 S
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf7 \. o6 D: W! K2 O/ m1 x" O
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf$ o- E; p& D A- A v
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
' K" p( y- s8 E1 C0 F9 D1 @2 V$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
& }* X" j$ @( E6 ]8 Q默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
. s% |* D4 I* d' @6 y- C) S g8 X9 R! p+ W5 w- m
2 F6 s. A& P! \4 d2 N启用ModSecurity模块和CRS规则8 b* ? ]2 A F7 b
复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
! P, t/ M' Y7 C/ z2 N
7 d- u3 a0 p z) u, K) V1 U- |( w% H1 e
( L- L+ h l/ V, b4 omodsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。5 K. e1 m6 j" n; `0 q: F3 Q" y2 d
% k% [& N1 M5 R1 V( z3 ~
) g _9 u% o) p1 y" Z
$ cd /root/modsecurity-2.9.1/" U8 H( a+ x1 G0 t
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf
1 M; y0 b7 R% J# S# Q+ l$ cp unicode.mapping /usr/local/nginx/conf// y' F' V$ I- T j
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
7 u/ U& w( V1 K! @: }6 l0 U2 u% K' G
" E! a* z6 I+ j; J( `: S. C6 U) ]! B5 R% S7 _$ {- _
$ vim /usr/local/nginx/conf/modsecurity.conf7 B* L S$ w- h j- T
SecRuleEngine On6 [+ ~& ^' z9 e, {
ModSecurity中几个常用配置说明:$ t* c+ f% x4 E
6 R, F7 k" c( j" M1 H) h- H/ S/ N4 t( I4 x9 u0 j
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
+ ?& }1 B# d2 ~3 U% g& w1 `7 @
( t. K+ a+ ^" {! b- ~' l' H' x% w' c' p; r5 W; ~
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。7 n+ c; Z( J3 X+ v4 Y
8 t, Q0 \; ^' A2 U, @$ B; Q
8 d; ^$ s; b5 s F- j3 x3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
! ?: x: W2 v( }1 P/ w3 e8 \; u* v6 k; g+ k* M
@9 w2 K# @4 R" N, x/ x Z6 v4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。7 _. E9 n: r2 D0 L3 y9 I: c
8 f/ H; i9 ~& L0 x& a( j
& w, |8 U) y0 a$ B: H& Z在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。" S" R9 i$ v, n R* C+ R
: Z# I9 h! f# i3 u" Z0 @ V! \
3.x版本CRS z" r: B# v5 U% T8 I
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
& T$ b6 L/ U3 a# 生成例外排除请求的配置文件
) Y e6 J) L5 C% O: T/ R$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
1 Q" B' ]. ]- y4 X `$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf0 P5 N N" G' U& ^; m8 i
$ cp rules/*.data /usr/local/nginx/conf
! `/ C2 K$ _3 ^7 _/ f1 D' Q9 m+ |为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。9 s' I( Q( w( d3 Y+ c. o
( f. B X0 K0 U; _5 `) z) e# N+ _9 T
% B# M4 j4 P) X! h* _/ n$ vim /usr/local/nginx/conf/modsec_includes.conf# R: T3 c7 l" ?; V+ f G, q" Z+ V. o
0 z5 j5 k- X* x" K2 l1 H% a( q2 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 7 e5 v/ P( ~2 j9 h5 C5 f/ W/ u
3 Q$ ~# B$ _1 l1 [6 {注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
/ R+ ?6 J! Z6 V5 T* ^) {
3 f9 s/ S4 O& X. B3 k4 Q# Y2 O8 J( X& T; O- n) |% [* A
配置Nginx支持Modsecurity
/ J4 R3 O( l3 V4 h& q8 c* l! ]启用Modsecurity. ~# |+ ?: u. }/ h& j' g: h1 Z7 D# [6 x. L
使用静态模块加载的配置方法& J- ]; q- g- ], h+ O- F; T3 D
在需要启用Modsecurity的主机的location下面加入下面两行即可:
/ J/ n* @, a' @/ | A
" W" e% u. B9 f0 \7 P) {$ L% A) U' H5 k- g( U/ C; k; X+ K6 i3 ^8 Z
ModSecurityEnabled on;; J A: b4 I# b) A. Z
ModSecurityConfig modsec_includes.conf;. z0 a) z0 U) u9 u0 `
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
5 m5 j+ L3 R/ N. x$ p3 N" v6 c$ o" L* ]! w4 n' C0 ]- ?, `
' P) N/ e# ^' X8 ^" j9 e4 t% |
$ vim /usr/local/nginx/conf/nginx.conf
" y; j' o7 w" Z) Q% _8 h5 B/ n/ `7 V: g- Y
8 C/ t: s4 W+ V% }. sserver {. R. f# i" C; l. `# P) ^- q
listen 80;
! ] F$ `% v' e' t* V server_name example.com;
^* x! \* o( O0 F* e% W
5 k" q- {% J& a1 m% K7 c+ p) p$ ]$ N9 J& f* s5 q, ?
location / {9 O. U) y' O. B' M
ModSecurityEnabled on;/ s5 @# V, b* r0 c6 @, z
ModSecurityConfig modsec_includes.conf;% ~! j d' Q- e0 F) |% X
root html;5 J( K! q a" K# Q8 W; [2 e
index index.html index.htm;
9 @7 z, O3 V" y& g: C }
& M5 [ s* {2 t9 b1 _}
7 U. }: J: l- x! i使用动态模块加载的配置方法
4 j R- {& n2 E. v& V1 y3 a( P- m) d在需要启用Modsecurity的主机的location下面加入下面两行即可:( ~5 N/ S2 p" T/ ]
: v, v7 Q8 B! S+ I4 t* Z' N1 u
1 p- @7 ^9 Z1 J4 Y# vmodsecurity on;
( d( p) M8 ~9 m& H8 amodsecurity_rules_file modsec_includes.conf;8 l2 `% B2 s9 J' ^1 q( M
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
5 d( ~0 O; u& ^+ ?# G: e" _
2 L- j' w* Y1 |8 k7 T6 K3 L; I9 M- D. v! o ^, R6 T8 o! C
$ vim /usr/local/nginx/conf/nginx.conf
% C, Z" ?4 q6 m( h4 L+ O* T' q1 g+ ]; b+ H5 N$ z
: t8 ~- I$ z+ _server {
$ M y' k3 q3 B2 P listen 80;
4 V6 v$ \5 Z. J7 d: Z server_name localhost mike.hi-linux.com;
% h# Q' p8 M# B% V, \ access_log /var/log/nginx/yourdomain.log;! a' Q$ E) p: M! E3 p
2 m0 ?8 v4 U3 L1 L K1 {* z$ f
, o |* v0 @6 Z( h3 a location / {
8 U7 d4 q& x0 x3 |* y' B. H: q/ A7 x1 T: ^7 i# k# x
. K0 `6 I" H% m2 w/ W) T1 Y modsecurity on;
7 L2 Y8 x0 m* D& D4 U modsecurity_rules_file modsec_includes.conf;
4 S2 ~! M. _- ?! s ]! H% w root html;
: `' Q5 K# ^+ W8 y/ L index index.html index.htm;
' {2 n# K3 r1 N+ R7 D4 D7 T}6 Y- @+ H, ?! d9 g
}
6 V% `6 d. G# C" h7 v验证Nginx配置文件
$ q7 O: O7 |8 v8 \- r% X$ /usr/local/nginx/sbin/nginx -t
- B+ \% [0 `+ _$ c# f1 vnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
( ?# {- k/ p3 s% r! knginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful5 s: K5 ~; p2 y. G/ \
启动Nginx
0 O3 Q1 ?0 }! L" l& P. m v# z0 I3 p$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf9 z0 c7 f+ Q7 v& ? Q: D5 H- n
7 q& ^1 o( u" @+ M) L6 o7 u- l( m
测试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能够战胜更多复杂/未知/混淆的攻击模式。 6 N: u4 d5 z, a$ Q2 b
|