ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。+ Y4 [3 x' h" V+ A7 Z6 ~9 J
$ j+ {# q+ s s: e! `2 W$ U
8 I8 G0 d; Y# F ]在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
- y- t" \% W$ h" \1 ?+ j% x5 z, U5 ?! g
+ G- n) B% Q0 y1 a* J+ x什么是ModSecurity
9 _5 e/ ^) ]/ l9 u7 ~ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
0 O# M" h4 O. w$ k) d( {& Q' r; A8 x9 e
* b0 P8 z8 z- V2 ]
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
: h' q! T. v0 I$ k- t) O
# K* n6 i2 F" D' z+ u; w# K1 J; \( i: L+ ^6 F- w! e) }$ n
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。3 r, c3 o) l" D! Z8 { c
# Q8 {* ?: y: c3 y) x d
) u+ S. r% v2 E; X
官网: https://www.modsecurity.org/: D7 ~& D0 W% U5 x7 D
! {# V4 M! Z' _+ Z
' u& O0 J1 r N4 {7 r% [ b* e2 v# h什么是OWASP CRS7 Q" G8 F+ D/ K5 P
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
Z6 H; `5 y# Y; I9 r" A
- Q: h; }) c6 z) L3 d0 O' r1 Q. G9 W. u- C0 }" n A
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。" {2 |+ R' A7 A( @
9 I5 a6 M! s" `
) D6 H% `/ o+ `/ G' k
HTTP Protection(HTTP防御)
/ Q8 W$ P% w" l9 r; iHTTP协议和本地定义使用的detectsviolations策略。2 y. u- G- `& r S) W( T
6 K" c- s! }& P% m) N& B# M0 |6 Y! _ k( q- Z) f: M
Real-time Blacklist Lookups(实时黑名单查询)
& n% W8 X) r* s4 S' H" {% p利用第三方IP名单。
7 P1 @) L+ x" L4 S
4 k$ w% W# f0 \
; e- U+ m4 J; v" W6 {8 z$ eHTTP Denial of Service Protections(HTTP的拒绝服务保护)# o: b1 ?8 `4 @, Y
防御HTTP的洪水攻击和HTTP Dos攻击。
1 }* G, ^5 `; j* z; o/ Q6 T# a# r; ~' U2 }' y, O
5 i. p' y# e3 v. Q7 DCommon Web Attacks Protection(常见的Web攻击防护)1 V6 O. k' I8 _# x& q8 @+ W! d
检测常见的Web应用程序的安全攻击。0 F( {& d% D/ V' }
7 O3 D' t6 ? g; E
I$ R3 F& o0 m1 u
Automation Detection(自动化检测)
6 t2 [2 u& o5 ^& Z检测机器人,爬虫,扫描仪和其他表面恶意活动。# T" T$ G1 G! T# O" t9 x% x8 f
) I" k$ \5 `' @, U% d; Q* W" E0 U) I* I6 S, F
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)' f1 {+ p* f) d3 M1 A# l
检测通过Web应用程序上传的恶意文件。7 `2 l; ]8 a- S6 g! Z
% O& S- f4 p( G. z" \ j
0 A: G$ z. U! zTracking Sensitive Data(跟踪敏感数据)
$ K/ l' c' h0 @* N& Q信用卡通道的使用,并阻止泄漏。+ A5 t$ L9 `8 a O
* Z8 y- P ]' m6 y$ x6 S _
/ F" W c. z. o% w r# ?
Trojan Protection(木马防护)
9 g. q/ O+ i% G+ b2 e' A7 J检测访问木马。
! i' z2 t. F) ?
: s1 Y- {' L# ~9 V' w( X8 O
- E7 S! h1 @7 { K; Q2 d+ t0 h* XIdentification of Application Defects(应用程序缺陷的鉴定)
* M' q4 g3 _" }6 y& p+ r! p检测应用程序的错误配置警报。; k. b2 ~& l2 O' ]! ~/ _
4 o p5 N/ q) E% K# k( S" ~+ C8 X9 f$ [4 n/ }- ~$ x' g
Error Detection and Hiding(错误检测和隐藏)1 A& ^. K1 A/ O; n' W7 K1 s
检测伪装服务器发送错误消息。/ e# \6 x: i6 ?$ d1 H
! ?- Q4 L5 o4 ~: N" q& ~1 w0 c; O
) N2 {7 W+ d; e# c. Y安装ModSecurity, i8 a7 B5 ^0 |/ m3 o4 a! u
软件基础环境准备0 n* k/ m) {4 I4 V; D
下载对应软件包 C7 D# u; E+ b1 d+ e0 ?
$ cd /root
9 i! x! P$ J* @/ |) F5 Z( X$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'% K" O8 R$ ?" @+ y4 z8 _
$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz$ ]3 |' K3 y- }$ k& @
安装Nginx和ModSecurity依赖包+ T( ?9 w: P2 W1 t
Centos/RHEL
, c& S8 p$ @, v2 B+ v. P, |9 O; E5 ^6 l
. |3 a; o; [% J/ a. N8 T$ K$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel& G' v1 F$ A7 c2 N
Ubuntu/Debian0 U2 F+ q/ F# M
; N0 F! L/ |( @+ O
; e7 x& K: G2 F1 [. _7 {, ~
$ 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$ ]) w, x3 @; O% o, p8 k: ~: R5 V! S
编译安装ModSecurity
% B8 k" ? M& p4 w* ?, X8 [; I) R; dNginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
, n( m. E$ r9 _
$ D9 I. s' J) e4 W; N- F+ d. f) M. n1 i- F8 J u9 D3 L) s; Q/ b7 Y
方法一:编译为Nginx静态模块' M# ^9 l9 y+ N4 V; h
" o, @" g! z1 C! t) P Q' q S0 E/ H8 W0 z/ A, h
编译为独立模块(modsecurity-2.9.1)
% p6 g6 e; K5 W, P7 S* e. J$ tar xzvf modsecurity-2.9.1.tar.gz
, J- ?/ L: g6 j, V% c/ }$ cd modsecurity-2.9.1/' {6 h. C, r5 [5 n/ `' \
$ ./autogen.sh! K( m' q; {0 F; Z9 l- K0 N
$ ./configure --enable-standalone-module --disable-mlogc
+ E3 A2 a6 \1 U8 a2 \7 w, M$ make9 g7 N8 }+ n) q' T
编译安装Nginx并添加ModSecurity模块
( ~8 K1 S( r/ Z1 M6 u& h B @$ tar xzvf nginx-1.9.2.tar.gz
& v$ D. b, L/ r9 V0 @4 X! Q. ~$ cd nginx-1.9.2! Q2 \- E m6 H! x5 Z6 S2 Y) T
$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/- |7 k2 P3 y# b! ]5 A$ l
$ make && make install
1 u1 H. n% H$ i) `4 k( g& B: Y' X方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
4 o, r2 H- x6 S( {, h! K/ u& }2 E/ C. Q7 s# p
4 K5 T+ L/ O, y' Q
编译LibModSecurity(modsecurity-3.0)
# U+ M) n l+ G5 K5 N$ cd /root3 H( ~3 q l: z$ b# J
$ git clone https://github.com/SpiderLabs/ModSecurity! q7 x* g5 N7 O5 N& p+ z5 A5 F
$ cd ModSecurity" `8 u1 d' f1 J K
$ git checkout -b v3/master origin/v3/master7 [" m3 D5 N; j6 t& x/ D
$ sh build.sh7 E! a/ `0 P0 }
$ git submodule init$ l/ q! p8 \# X2 | U; e2 d
$ git submodule update8 O6 }/ n7 s/ F* s( V# N
$ ./configure& s- Q& }/ ~& z* c4 ?: d$ @
$ make6 I7 I7 B* k* J
$ make install
2 b H/ D ?4 x ^1 xLibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
# j) F! t, f8 ^; A, a' `: N
& ]0 w' v% K. l/ ]1 ?" {8 a" h' k# n- A# n( q0 L1 N m }# {
$ ls /usr/local/modsecurity/lib o ~- b3 J8 F+ b2 n! f- f
libmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.0
* o1 R/ w% [" Y) J( Q编译安装Nginx并添加ModSecurity-Nginx Connector模块3 \5 O. O2 n9 M6 U/ O
使用ModSecurity-Nginx模块来连接LibModSecurity
* y2 L; H: r7 ]8 T! {6 l7 ?7 D3 n; {# ^
1 U+ N. j0 k1 o: E* m
$ cd /root+ [# H0 U8 ^# t8 g# c
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx9 z+ S- x' n$ E
$ tar xzvf nginx-1.9.2.tar.gz
( t& ^6 m3 @( _! e4 H7 v5 D5 q$ h0 a$ cd nginx-1.9.23 |1 S# S+ Q R
$ ./configure --add-module=/root/modsecurity-nginx
+ C; R9 g2 ^1 G# a( p3 Q' V$ make
+ t+ D/ | ~3 R$ make && make install
9 o/ `2 J9 S, U0 c添加OWASP规则4 R( }1 {; d; B) H6 f& B) m$ Z4 ]
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。" ^1 W1 }# \+ v; E% |5 ~
0 z, k. c& e7 \+ I8 C& W. h; H/ ^8 [# d5 E
下载OWASP规则并生成配置文件# @5 ^+ I. V3 P4 x% S2 o$ S
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git4 A' n& a" u) A8 q8 z
$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/
% g/ I" v# }" N/ p$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
8 B/ U0 g5 e$ O* D- u( B$ cp crs-setup.conf.example crs-setup.conf) q; N5 a# _% @! a# |
配置OWASP规则1 u- E* _! }* c* ^5 \
编辑crs-setup.conf文件& n6 N: @: i2 Z: Q
. S0 @4 @' [0 \9 M/ n0 X
7 {, d( n) [! A/ T) T$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf, I) M: |( Z/ R' S' d
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf) j/ q/ T- A& Z" _4 Z# g: d
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf: V8 i' {+ y# r+ G- {( @
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf+ ~! a. Y% c5 u7 N r$ U: G) Z {
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
6 X8 X9 {& z' ?9 c4 j r8 Y
* e7 `! X, d0 v2 |
: B4 v; {$ M3 E% ]3 ]5 E1 Z9 T! H) i8 s启用ModSecurity模块和CRS规则
# b6 x. m$ {$ I, n0 {3 o: D+ Q复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。) B0 N7 y$ u5 ^
1 k) l5 h8 j/ N: R% z! t y
( E$ Z# {: P5 {$ r) {3 u
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。
# Q; {( B5 S! } ~
9 H8 ?. b* e: R+ {" w1 s; g1 _/ w" n# w- k/ G& }! \; B1 Q
$ cd /root/modsecurity-2.9.1/4 V% W G7 z* ]" d; x
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf ( i& r8 n6 t" _$ s2 @
$ cp unicode.mapping /usr/local/nginx/conf/' X" B5 X* y+ G0 D3 ?5 Z' U
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
6 |5 }+ J2 N" {+ y. Y+ j: f7 N' }1 ]: K2 @2 u( [
9 W; |: j1 x% s/ ]$ vim /usr/local/nginx/conf/modsecurity.conf7 d# P8 d( @ a* }: ?+ V7 j
SecRuleEngine On4 I% S% O9 s/ J5 N9 w. _
ModSecurity中几个常用配置说明:
% i: w! R7 ~" I( E% F) @
1 W) l( \! m. r- R( x+ u
9 ?+ c' B9 F, C1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。) i$ U( i) o' K6 Y! P
6 A1 G3 y: ?6 F
3 `4 R; Q; y2 l
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。4 S6 I3 I3 S, Z1 X" G5 W2 u
, a! M" z" u" q9 ]. g. O" \. o! u& T6 ]! Y l# O0 E2 X8 P
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。/ |. C k. U0 E' ~. ]
& N( f, c+ s+ o- F' K5 v) o
. K( \: G; J, W! r* K" o
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。5 ^5 O# x* M( R9 A. g J
' {5 c1 v5 n3 a/ a* j, d
2 p/ @- i) e1 u在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
5 u8 }" T; i5 h# | {
3 U7 m+ ], G' v% l: V2 }# P
6 B; q; L0 h1 {6 u- J3.x版本CRS5 c+ }/ T% n4 Q6 _
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
$ J2 D( t9 S) `9 k# O; }# 生成例外排除请求的配置文件0 l- U: ]9 @9 D6 E2 k
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf: P0 Z1 B0 E$ |% I Z% q
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
, D. s6 ]' _/ U$ H7 s$ cp rules/*.data /usr/local/nginx/conf
8 M. A: a' p$ ?; w+ W) _为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。4 P7 O4 E6 f3 T: ]# M% N2 i9 V, M( W
, w& [: ?( o6 e$ ^, B7 ?3 [
$ l( a/ K5 L# N3 _$ vim /usr/local/nginx/conf/modsec_includes.conf/ {2 U+ k0 b7 I- V" y
3 T/ x5 e/ Z+ g7 ~5 j1 u[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 6 b1 O* ~# R) S3 ]/ `
) N& c2 ~+ U/ k; t* s K! _, n
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
4 y2 H' w) s# X8 F+ ], u5 k7 c* j8 l- t0 [6 N) b& Z
' A6 L4 V! \* a4 f- I5 ]( l/ K配置Nginx支持Modsecurity
" q8 T9 |: N3 M1 {7 z) p启用Modsecurity9 K/ ^/ x+ x" ]1 c
使用静态模块加载的配置方法
! T) O6 v2 I6 x在需要启用Modsecurity的主机的location下面加入下面两行即可:
) H, Z+ m, ~8 u. g! S6 T: ~6 B% s" t! d+ ?3 t
! F7 h; }1 a* u$ u6 r
ModSecurityEnabled on;5 u- W2 H" ^5 j7 W2 J1 I! n
ModSecurityConfig modsec_includes.conf;
7 [3 s2 i$ F( A. V8 O. Y/ f C8 H修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。5 Q( D" E$ o5 ]& r* S
$ y/ U( h; g# \; \
7 a1 X0 O& R# J8 e4 u+ M; @6 m$ vim /usr/local/nginx/conf/nginx.conf ^0 ^6 ]( D2 B2 l. K5 h
! m7 {5 v# i; E3 T# O4 \) V
3 ~/ X2 `, q0 f' fserver {
" \3 H! S* k. \ \" B$ \' { p listen 80;
) x$ X; i( Y+ p, h server_name example.com;
; Z8 t5 S( l) m7 O) v5 x4 k# l! c3 t; X% p
, g0 }. M6 P0 ~& o1 @7 @; e location / {; x$ N" l; j9 \4 I* R4 q, ?+ i
ModSecurityEnabled on;4 F9 M4 W7 S3 D) ]7 ^+ p
ModSecurityConfig modsec_includes.conf;
4 Y& {1 U$ o- }; s7 W root html;: e1 z# K2 Q" Z
index index.html index.htm;
. W2 p" {% v/ E7 K" V }5 ~; I8 L6 T% p% V/ Z+ Z
}
' ^3 u) g% j! \使用动态模块加载的配置方法8 I% j: u# X1 J2 q
在需要启用Modsecurity的主机的location下面加入下面两行即可:
# u0 R! K* ], w+ |: t- V- X0 m; u
0 N1 l+ n3 Z0 p' V1 a+ V9 O' |
/ v! G7 X& V b8 V r4 amodsecurity on;
# D* M( k J' r! Gmodsecurity_rules_file modsec_includes.conf;' z4 k, q+ K8 f5 H7 |" D" ?! u
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。 c1 m0 A: ^$ r; p! N
3 ?; i2 A1 e- f- f8 ^% L: s5 X# G# d0 [) j* N
$ vim /usr/local/nginx/conf/nginx.conf
( h+ _, i! [4 @ S$ I% d7 T: \3 k7 r( @% c2 r- W; w
, p1 D0 M: x6 x
server {
: P* U/ a+ l% Z6 U6 E* w listen 80;
, t- @7 G) t( m) ~1 j! [" j server_name localhost mike.hi-linux.com;
N9 w' o3 ]; L9 B8 q, b access_log /var/log/nginx/yourdomain.log;8 z9 U7 C) L% ?
7 W, K4 B5 X q1 A" q
5 H; K3 M7 P/ }7 e& G. H! ?* a, b& D location / {+ y# `# D2 q( L0 V
; h2 P9 _# l, }: K/ m4 b
9 W7 B7 `8 G/ f$ x7 g
modsecurity on;
7 Z* z _4 i n7 x1 { I3 _6 t. h modsecurity_rules_file modsec_includes.conf;8 i3 C' u1 g0 X: V* Z
root html;
: Y2 `* d& w' r; S" o! \1 X index index.html index.htm;! x/ O6 A' N1 P
}' g& S/ o7 D+ F9 |: P4 o: s
}
- _# v( r: i6 J8 z" F验证Nginx配置文件$ ~- b' X$ ]$ ~0 B3 r8 q
$ /usr/local/nginx/sbin/nginx -t
) L7 _1 @7 V* V6 j# tnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
0 ] ^' U9 G: B# q4 ]2 unginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
b4 F1 E2 k0 b- H1 v* [" ?! I2 n启动Nginx/ \. [( f4 \, y0 J' B3 y
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf( O$ A' q' b+ @! [! U
( D* f& B! ?2 D+ Z: e; Y4 d7 V
测试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能够战胜更多复杂/未知/混淆的攻击模式。
# p9 f) B/ q5 q+ e/ n6 [0 ~ |