ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
, N2 Q. I8 S$ p8 {
# A* I' q* V2 V; m6 U A) I& l$ w! h# Q4 T, M# W- [
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。3 R( R2 y( L, t! h4 H( l
/ w) _- |& g/ K" p
7 `4 Q$ x" [- x# h- t. u7 J什么是ModSecurity9 g& j- m( |+ z3 H; t" F& ?
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
6 ~6 b3 Y5 E- B! d
9 k# U2 a6 W/ Q8 b, h, R' S2 h" `3 {
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。+ ]- Q+ b/ C# g8 m4 d
( ?# H) E# o6 O) v& Y' l' o6 v$ h, N$ n$ o% A$ [- L& e6 I
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
( F/ A6 s0 z5 ]5 Y4 g. H0 t
" N2 {2 k; l& z* d, z% A
. r: M1 a0 A/ ]" K" r: W8 W4 E6 R官网: https://www.modsecurity.org/+ v( ]( x! m# k9 S' J7 {
. s7 u$ X$ D: z$ b4 |5 S* z
& I- N6 a6 x" L什么是OWASP CRS4 I3 h% i$ {- e _# B8 \. p
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
* L& I9 n0 ?% N7 b; G6 \/ b J# n: f' `# o
6 k' @% N; m* i6 z3 zModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
6 _0 I; c0 n. O& u' q5 h4 m* X& Y$ F. k* \
) E+ Z; U- h, R
HTTP Protection(HTTP防御)
, Q% v* Z7 j: b3 hHTTP协议和本地定义使用的detectsviolations策略。
# ]& l: H q5 y! I- k8 }8 [$ }- w* I6 S( K: ?7 Y$ E* _, j& _
" n w* I: C# z1 h: Z& |Real-time Blacklist Lookups(实时黑名单查询)$ ?9 Q$ \+ n& B
利用第三方IP名单。
/ {1 ~: r; y8 D$ q A Q$ I* x; H6 t0 E; k/ n' X8 R1 g
0 }% }5 X* G+ ?, |3 W: _
HTTP Denial of Service Protections(HTTP的拒绝服务保护)) {5 T- H6 d" t% U" n
防御HTTP的洪水攻击和HTTP Dos攻击。
4 }( G! F3 L. z
k0 \2 r' a4 L7 A# z/ F& P$ S5 c0 X" H7 s! @
Common Web Attacks Protection(常见的Web攻击防护)
?" [1 s6 {! O6 u1 I+ Z( v检测常见的Web应用程序的安全攻击。
* F3 A, Y1 g$ v' r3 V# j
- {# {: h f. t0 k$ }! z2 z. n0 @2 F' B9 `- H6 t5 h
Automation Detection(自动化检测)
( g5 ?" e+ X/ y8 h检测机器人,爬虫,扫描仪和其他表面恶意活动。
' s0 E$ h# m( v; H) D$ w- M6 {7 j% r- ?- m! H1 ?3 @! s# h% W
$ O" R! Y( z; t1 i3 p
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)8 h) {: ^% M2 Q3 M/ @
检测通过Web应用程序上传的恶意文件。. Q& V, u% `1 D: L
1 c! b [ |2 \) ?. i
8 v% M4 |4 ~8 ^. q) A# V) _6 K& \
Tracking Sensitive Data(跟踪敏感数据)- w1 G6 a' Z$ w, J
信用卡通道的使用,并阻止泄漏。
7 h' {' ?1 t+ H7 R+ Q9 y: O# {+ I- y6 D9 M; J; T N! I5 X
) G u5 Y! C6 Q: p+ g9 V; ^* w# XTrojan Protection(木马防护)
9 ^1 T( j9 o8 Y, I P检测访问木马。
4 Q) s$ g% X7 N9 J* f2 R# l/ R- Z+ Y" g |+ z- q! B
M/ m+ r$ i( o. m+ f% SIdentification of Application Defects(应用程序缺陷的鉴定)6 |3 T% E: F- {" x3 {# x& b
检测应用程序的错误配置警报。
3 R5 p: q4 t- ]
, f+ O3 M$ m5 u+ {) @% c7 W1 |" ~* y% v% [
Error Detection and Hiding(错误检测和隐藏)
: `' `9 r0 @/ e检测伪装服务器发送错误消息。7 t8 \6 C0 R" E9 x% b$ f9 m6 A4 T" h
* w% r) b$ O! ?. t' F5 J) V
4 @& A5 X% Y$ I1 S- h* ^4 P |% A
安装ModSecurity# Z j0 ^- G4 U6 b& ~$ n
软件基础环境准备+ o2 j- M5 i: r, n: ~
下载对应软件包
$ u# Q! |8 ?; _. r$ cd /root
! h. f" H D) m# d k. H. M$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
) f8 E" F! e; P. `- n |& N$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz
+ _; M) u8 y' q* `3 q5 [安装Nginx和ModSecurity依赖包
9 ~+ m3 |8 i7 m) s; H0 X! qCentos/RHEL
4 V; M+ n" H" [* p: b8 a! |5 _3 r* R' q8 z2 u: P5 T$ L! d Y
% N- A4 a3 ?3 k0 C
$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
1 a# i& e$ u) {4 n& v( ]Ubuntu/Debian
7 h. M& z' i: i, H7 Y0 @) |
. G% u2 D9 D0 X
! L+ a( }3 e# Y0 @& p& K$ 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* o' D) \7 B" k: _; _, t( l
编译安装ModSecurity
2 h" E& v& O! {5 K! o" `9 cNginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
/ t- a" \) x i; T3 ~$ \
- ?' t$ _9 p+ @" k/ [3 t- r/ M
( X* K. J$ [& {方法一:编译为Nginx静态模块
K. c, A( D" _( s3 p; f
) ]; O( p; r: V5 D X: p$ U
: c2 M* L( m& D& d3 z, s编译为独立模块(modsecurity-2.9.1)
- m* ?2 W" |/ M# h+ k$ tar xzvf modsecurity-2.9.1.tar.gz
9 ~' u' I" b1 E. O, ?( t# [$ cd modsecurity-2.9.1/
0 m$ H% ]* i& t$ ./autogen.sh
2 q+ B" u2 X8 E$ n G. ?; F$ ./configure --enable-standalone-module --disable-mlogc
8 n z2 B8 d; e- D$ y$ make' x- v( z& u, U1 K, C
编译安装Nginx并添加ModSecurity模块
$ F0 @0 M; V% ~+ \2 b2 Q$ tar xzvf nginx-1.9.2.tar.gz* Z+ O, s3 ?8 B4 K- k
$ cd nginx-1.9.2
# \5 ]- R' {# b$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/* U3 ^5 r6 l T
$ make && make install1 `8 G' O2 A8 }% G X6 f
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
( I: H2 q5 c7 P
3 x W* b3 M! s- q9 G8 g/ i3 Y3 q( G' [
编译LibModSecurity(modsecurity-3.0)
: N3 r, Z7 y4 ~2 u$ S$ cd /root
\0 a; Z+ o9 M$ git clone https://github.com/SpiderLabs/ModSecurity: m: u B" [+ d# |7 v2 v
$ cd ModSecurity2 P: V" S$ Z$ {, F( g( u5 K
$ git checkout -b v3/master origin/v3/master
# c* S) s* K, w0 \# `. h$ sh build.sh
6 B0 L V" b+ K" m; P$ git submodule init
( e; G1 o, G6 q7 a3 R+ c. X; X$ git submodule update3 e0 z( N( l ]& p+ a8 ]
$ ./configure0 I( \, O) @( ]) M8 H2 o$ r
$ make2 S S# k0 d' x5 d5 l
$ make install
- j6 F8 N: O& s; uLibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。. S7 ^8 u3 R* s7 L# r$ r
: W+ M, X! A% @. A6 O
, M6 W; d% I+ m$ ls /usr/local/modsecurity/lib
6 @/ c0 S4 p ?3 P; [libmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.0
' H$ ^, P9 A+ U: ?0 O+ ~7 h编译安装Nginx并添加ModSecurity-Nginx Connector模块
~1 ?3 t# Z1 w8 n* n9 R: ^使用ModSecurity-Nginx模块来连接LibModSecurity/ x1 V# G: I6 t" v2 B6 X0 s; n
& Q1 O) {, o( [) u
: l0 J; f+ x- r2 F- T4 @" w* F3 b$ cd /root0 |7 Q; ~9 L4 D# I) v. h$ Z' U- {# a6 w
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
" }8 x# G# C- Y/ c4 U: L( M* Q" v$ tar xzvf nginx-1.9.2.tar.gz$ A& B( G% N5 z$ r
$ cd nginx-1.9.2. E+ u; }" m4 k" t% N& \2 _2 S% e
$ ./configure --add-module=/root/modsecurity-nginx
; j" m, }8 y! `- \6 Q; v. _$ make7 v* w0 l( J5 D f6 q, ~& P
$ make && make install4 b$ m8 e7 j* d1 e z6 C/ V
添加OWASP规则: V/ o& `6 T7 d- b5 v% Z" j
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。# l- G. o. |: I1 x7 Q0 J% b( r
1 Y) i U' x7 B% r. D# G7 |. I" Z% p4 V* h& O( u9 F6 y
下载OWASP规则并生成配置文件
; V8 R# T, ]# v1 [* f$ Z$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git) v( X* u+ q+ _4 a/ a
$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/
2 [8 a) p! s& m. ^) s2 j- i$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
) u- G( H/ D' M: G3 m2 _0 q$ cp crs-setup.conf.example crs-setup.conf
4 Z' m+ t* |! R) \7 l6 Q+ v$ ]+ V配置OWASP规则# Q, V( r2 P; v( a& t3 t
编辑crs-setup.conf文件
, n- n: _* v b7 m
) W5 T: ?- a* y' ?
( W; b, h/ ?* `) g9 l$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf2 U" q6 M3 t% \5 X& S# _
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
: o, }, C, v L. y( \! p1 @$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
2 l2 N5 n o7 N w9 c. m& }$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
" h! r z7 c+ l默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
5 Y! ?1 V$ D: A& ?: _9 H* K' p- k4 J9 ]6 O8 ^
* D5 Z, l# E: Q# x! z9 j: j& ]
启用ModSecurity模块和CRS规则/ B$ k. f/ s' x9 X7 n" x
复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
+ ^* |0 {. [% e1 I4 _. s+ z+ y9 g% z# y; @
" o4 P3 R7 K/ _4 C# d7 p. Y# I6 |modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。
9 |) ?( V! L& C* r( z6 z6 O/ L4 y+ a
& s5 r; v$ h# Q: U( t
$ cd /root/modsecurity-2.9.1/
2 r$ F; R3 g s7 G( [: Z$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf ' B# F6 _. c; p) N8 \9 E7 X% B! V" g
$ cp unicode.mapping /usr/local/nginx/conf/
6 I! m) z0 F5 V; M9 p将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
/ _ x, w, u2 Z* `; Y* N5 z5 m( Q( ?$ A$ v7 J& d
! N C% @1 q+ l7 u; t# N. A4 ^
$ vim /usr/local/nginx/conf/modsecurity.conf
7 o# B) ~3 u# e( N" m$ W: J& Z; lSecRuleEngine On1 N: g; v: K2 z- C5 p4 D Q+ X: V
ModSecurity中几个常用配置说明:' |2 H/ C: I, o! G* l
9 z. _# s u- n+ T" T5 @3 Y& V
7 _7 A9 O" d! O- C! l/ r1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
; t; F% s& i W8 t$ j( w/ {: W" k. O5 ~" Q C. X
2 w* d4 c; ? B8 W2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
5 P* }0 R1 m8 t# t0 ]: H1 [+ R2 {: F4 s+ h8 T1 W1 o
" \5 U I+ C) j+ h
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
) A8 s# k& M3 Z- s, X" a: Z8 K1 b' N0 [2 n9 N
/ x4 C. D- g$ E8 _0 `1 K4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。 L$ @) m2 g- q6 O# _* E% w/ n
' E7 O- s: I+ W P5 R
W' {0 H8 y6 w: c: ^; W/ T在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。! y/ X: t: H: \! A5 C
; M/ E! ]- D/ `
, `# ?# k% K' u1 m! B y7 ]" @- ^3.x版本CRS8 k+ [- J: ?9 M' {9 [
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs9 u1 y6 G/ S$ u" s+ n& {7 \
# 生成例外排除请求的配置文件- ~4 W( [: u4 _! A8 g& m; }
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf D7 I1 O7 ]3 W9 s
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
4 N3 A! ]8 B4 e5 p8 s; [$ cp rules/*.data /usr/local/nginx/conf+ F! w- C2 E V4 a1 s5 P
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。9 `; Y S0 z8 u2 ^ [3 \ M
A2 {$ ^# G" e! O9 Q0 g; n" z
2 z1 U5 r7 p7 x: L$ vim /usr/local/nginx/conf/modsec_includes.conf
6 d( ]$ D0 r/ ]9 S5 {; l7 ]
* g7 z* l; F( \" U4 j. L[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 ( o! B2 p" X! _# y# z
# @- d. J4 ?' g' f" }) `
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
$ \8 H4 S7 B" g0 q# {' V5 o% e' ~0 h% F. K; u x
, j* r8 U2 \1 {
配置Nginx支持Modsecurity
( J( Q' N2 u4 w% V3 x# T7 ]& H, N启用Modsecurity5 V! ]( o2 i7 r1 ^
使用静态模块加载的配置方法2 [4 V4 G' e- K! g- _& x! |
在需要启用Modsecurity的主机的location下面加入下面两行即可:
; b! S" i3 P0 `: o. r
# g* U$ ~7 x7 P4 T) A
0 u$ G$ Y, @4 X9 q5 ?! VModSecurityEnabled on;/ _ j+ a0 Y8 g$ R6 H/ J
ModSecurityConfig modsec_includes.conf;& e6 W$ v1 z5 @( \
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
0 N2 C& C% B6 h9 u M9 S6 [4 P! c8 p) x: x" g
3 G6 n: L4 @, g! H$ vim /usr/local/nginx/conf/nginx.conf
& S# M9 t, ?3 @. L- E! ?1 G
. W0 u3 U* \; ]3 f* u N
" n& I$ w. N eserver {
- U7 J/ s0 v2 @ B( a listen 80;
( F0 S# M& d; g, r7 S6 i7 m server_name example.com;
+ W8 J& M& c3 @% x& i- P; y% y2 F# j% ]# n; @8 g( R
2 h) z* {6 X+ ?3 s* O9 C location / {& k5 _# B" r7 F) X
ModSecurityEnabled on;
! \; i! n! f& j( B" Y1 r" n ModSecurityConfig modsec_includes.conf;
3 B K1 ?/ M) r. G; _- z9 a root html;
/ z4 w. \0 G- [$ y7 y1 V5 l _ index index.html index.htm;
& t' q3 E, x* L: P4 x, i% [+ M }
: ?1 ?% a$ \& v}
" O- O8 Z; t% R) B0 ^" |5 {2 N4 o使用动态模块加载的配置方法
0 Z# U$ D6 K# G& X* Y( R在需要启用Modsecurity的主机的location下面加入下面两行即可:7 R( ?: ]) _5 p7 d: |2 @4 ?, a7 J9 f
1 M% {3 A0 i- U
5 p) v3 V4 ?" E) _" L9 umodsecurity on;! P6 C9 o1 p' ^3 f% V3 a& N
modsecurity_rules_file modsec_includes.conf;# Z& z5 z `. v
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。6 z" S6 v5 \6 j4 ]# d9 J+ }" H
$ Q; m' Q8 W) V% F9 L' g$ a/ v' P0 j% F
$ vim /usr/local/nginx/conf/nginx.conf
2 [. ] J* c# e
: o- }3 b* z/ l2 B+ p) A3 R, `
, P4 Z5 E$ y- \ j; m% aserver {; o7 [8 O8 K, T7 f2 o; r- q
listen 80;7 J+ ^! O; M* L! U0 D9 ~5 p% o
server_name localhost mike.hi-linux.com;
. p9 B2 M, r2 N access_log /var/log/nginx/yourdomain.log;0 M7 @2 p7 n- h7 b: _) d' e+ r: ~" \
. W" k( ]1 N& I C
1 i7 {5 U+ H$ E location / {
& e9 W$ o3 Z* ]2 c# a
h3 f- I' e' }
/ J$ e! L6 t9 X6 ^. g% w modsecurity on;3 `7 K0 e' }9 G* I2 k( V+ ?0 P
modsecurity_rules_file modsec_includes.conf;
7 q. e7 A2 U3 X7 G2 `4 A7 W root html;
. U3 q# x: b7 ?1 T index index.html index.htm;. F, q) O5 P/ B# i0 {1 S* W
}
* U! u( l( y X/ N# k}
, w. w& @% D* B! K. f) y验证Nginx配置文件
0 n6 ]7 g' R8 I6 j5 E7 D$ /usr/local/nginx/sbin/nginx -t
; X4 C& @$ s( v4 p3 ^* Xnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok' y7 P* R4 _1 z+ f/ C& x
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful4 y! K. P( ^4 n& ~( A) z: H
启动Nginx
0 [2 k, q7 @9 s* H- |$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
( y, e1 s' v) o% m) U2 C% t. A" p2 I* T
测试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能够战胜更多复杂/未知/混淆的攻击模式。
+ }# a0 W% y( l& o |