找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 12210|回复: 0

利用ModSecurity在Nginx上构建WAF

[复制链接]
发表于 2017-10-19 17:34:51 | 显示全部楼层 |阅读模式
ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
7 Z/ e/ r: r/ V1 k9 j" U1 e) x1 V9 C( O

5 h' s* w2 ^0 E) E: l- n; {在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
! k! j1 e# n# r
3 e, y4 h  {9 O
7 l, U2 t5 W5 b# z( F/ ?什么是ModSecurity
# ]5 p9 i& @6 M+ UModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。/ M: p0 V) _" U

; X! F$ ^; B" s* K- Z" m. _3 Q- f* u; @4 Q
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。; |$ B0 k. B, t6 t1 z' c+ k. C

& d: b/ O" D* Z" E2 {2 W) o3 A5 O1 d8 _/ s
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
1 _, @+ I' O9 k8 O- v$ e; @1 D5 e6 |# ]+ g9 K4 {. }" I

, v* r3 e4 O+ Y# J! _- v6 ^9 z2 h官网: https://www.modsecurity.org/
8 _5 l1 I& b' k% w% A. b: K/ ^# i, M

, o0 c4 Q% }, v7 ^; Z4 I什么是OWASP CRS
$ C: R( g( k- |OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
/ Q( w/ S% N/ V& h. C) o+ D# K- l$ ~% j* v; N
, X. U$ w; d' a3 H! ~" b
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
+ u. u  U8 `# f( S! e2 F; M7 |$ M  {. v$ F, K/ {) b, D
3 W/ T. Z8 c' u; o+ P# a
HTTP Protection(HTTP防御)
. J( a2 R" ^$ a  Y) PHTTP协议和本地定义使用的detectsviolations策略。
6 E0 ?8 ]5 K+ I) O: y2 Z
8 f/ f4 {; }$ E3 m' H, H& Y
- T% k# m6 E. s' kReal-time Blacklist Lookups(实时黑名单查询)
* }! A# B- s( J! N0 k  L8 M利用第三方IP名单。2 c5 |$ e- A8 v& J

0 j7 g: s, W9 W, F0 C2 L  h! e" p4 I* C! F4 Q8 x
HTTP Denial of Service Protections(HTTP的拒绝服务保护)8 L/ d. Z; a$ p& f% a# ~7 c
防御HTTP的洪水攻击和HTTP Dos攻击。# ]# Z( P: L: @* K% E
  _) R1 k* Y+ I5 a- X( W
' ^, s, l9 c5 M. z
Common Web Attacks Protection(常见的Web攻击防护)
" I$ j4 V( i3 [3 w. _, U检测常见的Web应用程序的安全攻击。
6 D" D0 l! V; V$ G: q
# D  s2 Z! R5 ~/ g% B
, Q" H  ~1 _( F5 V$ SAutomation Detection(自动化检测)
/ s3 P( `& f3 j. Q8 _检测机器人,爬虫,扫描仪和其他表面恶意活动。
+ J5 f" E+ B: X( ~  k% u- _7 }  ?
" N7 }9 R! X4 S* {3 ^! p; `+ `6 y
Integration with AV Scanning for File Uploads(文件上传防病毒扫描): D/ ]9 K" t" ~2 S! T
检测通过Web应用程序上传的恶意文件。
/ v- ^- u6 a/ C3 ]1 [* r+ n6 w6 ~
2 P) Q8 M* H2 Z
Tracking Sensitive Data(跟踪敏感数据)- M; @% w% v, n' U/ T
信用卡通道的使用,并阻止泄漏。/ y" M0 ^6 l0 w  o6 U% [" O

/ b0 m6 k9 S7 A( {
8 e7 E; d6 p, A9 p) Z' j7 VTrojan Protection(木马防护)9 Y  y' @5 M+ V2 M
检测访问木马。
! k& [5 i7 C1 m) D
) \, {$ J8 u8 T0 L% d! N
! V# Y+ ?7 o1 ~9 M7 m. WIdentification of Application Defects(应用程序缺陷的鉴定)
1 x, a& i+ {1 F& K检测应用程序的错误配置警报。8 U. P8 c1 H& X$ }/ ?8 T3 T8 o
2 e2 K( x  y7 [9 I
; z, ]/ G5 u; ~
Error Detection and Hiding(错误检测和隐藏)# o7 o. P; F3 Y4 G8 _6 B: n
检测伪装服务器发送错误消息。0 N: s; r; W) C  u/ d

3 x. b' c- Z  U
$ ?- |/ ~; N# i4 k% m& L  J& ~安装ModSecurity
- q; T* t& T2 ?* k+ n2 K& h' A软件基础环境准备
0 Y) s1 }+ `; F* w$ W2 l: D下载对应软件包, k/ k( K, t" [8 Z8 T: ?
$ cd /root4 ~- _7 V/ x! G- W$ l+ Q
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
* h5 Q7 E2 ~0 Y1 d$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz3 y$ N) \9 N* D; f  E  @
安装Nginx和ModSecurity依赖包
0 K% \! y) a% t7 I6 _Centos/RHEL. u! L! X( G, j$ @" o+ [

! \4 y7 `3 K6 {
1 ?3 M8 l9 g, s/ P$ yum install httpd-devel apr apr-util-devel apr-devel  pcre pcre-devel  libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
, E) Y& F4 o* O, J6 R! b' F1 c# GUbuntu/Debian  Y3 h# L& k2 [: r. u; @) p
/ b* P: s2 h% n! y) L; v: G
8 `+ L. Q( q9 d
$ 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' e% E  V2 ^& J0 d6 z9 s8 x
编译安装ModSecurity9 h4 X+ K1 y7 B$ w' h* x
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。* f9 f$ E  \% r9 J
: W$ Y0 ~+ u3 p5 s1 O5 Q& Z: b" Y
- N  @/ b/ {3 h/ m: g
方法一:编译为Nginx静态模块
( B2 Z8 V# C+ x0 Q; v* m8 v2 P2 ]' m5 `

5 v; P# a& e9 }4 r编译为独立模块(modsecurity-2.9.1)
8 v, c. v8 V9 G; t8 Y2 U2 D6 G$ tar xzvf modsecurity-2.9.1.tar.gz
1 o% c$ F( Q! b5 s0 H7 N$ cd modsecurity-2.9.1/6 Z+ M/ S3 |+ B( m4 G
$ ./autogen.sh9 y1 G; z/ W6 I2 t* T4 p
$ ./configure --enable-standalone-module --disable-mlogc
: l# ^* B$ P1 V+ l% d% Y% Z$ make
9 B( R% S  l; K9 D1 k" }  F& E) ~' g编译安装Nginx并添加ModSecurity模块
5 ]7 T( B8 B# Q1 \+ M2 H' F  D) m$ tar xzvf nginx-1.9.2.tar.gz
5 J& X# z9 F) O5 `, A& H$ cd nginx-1.9.20 V( ?& O+ r- J% m; b) ~
$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/3 r: r+ p5 I  |" A, i
$ make && make install
3 K0 v- n; `9 b+ m, y% H/ m* D, M方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
8 W( {* Q. U, G: _7 R2 l8 k3 z1 u7 c$ X
" \4 N0 L2 V( n1 \1 p
0 ]: W7 `4 O# D/ w) S) |, G编译LibModSecurity(modsecurity-3.0)
8 P* T& n: H2 K$ cd /root
8 E9 N6 {* N2 m$ git clone https://github.com/SpiderLabs/ModSecurity( k1 \& q$ W- Z$ B: J( n
$ cd ModSecurity
5 [1 B2 ]0 Z) ]" u$ git checkout -b v3/master origin/v3/master+ ]7 n# r6 b0 p8 k. T" _
$ sh build.sh
2 ?* K# B  v8 j( R$ git submodule init
- k4 O% T( O: [; R. o# @$ git submodule update) F9 h' s! \- ^# F0 t% ], |- c! n
$ ./configure0 X) q/ A" W' {$ I" h7 D
$ make, A+ _1 ?) ~' \0 A8 p/ O
$ make install
" n( [/ h3 b7 ?% g9 YLibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。& g. m9 n' v+ D: `* ]" B$ Q3 M5 C
: Y& ]& P. N& y, P8 c

: s" o$ m8 G  r7 H* o& N$ ls /usr/local/modsecurity/lib
' f( H7 ?) F  O4 A2 X' r/ }0 B" Jlibmodsecurity.a  libmodsecurity.la  libmodsecurity.so  libmodsecurity.so.3  libmodsecurity.so.3.0.0% J" w  M: p" b  v0 _5 }% Q+ ]5 X
编译安装Nginx并添加ModSecurity-Nginx Connector模块# W8 ^# l+ H& u$ Y! _# J, b
使用ModSecurity-Nginx模块来连接LibModSecurity. [, f/ V) W0 g& X! K

+ {5 y: w7 c0 `: `  T
* B$ d) L( }/ N; G- `: V* c$ cd /root8 h2 O3 G6 h; B" S" V
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx9 S9 n9 Z9 p1 T% T7 v$ P
$ tar xzvf nginx-1.9.2.tar.gz4 x4 ]& T4 i/ X2 J6 C
$ cd nginx-1.9.29 o4 G! {- `- h% a9 ]
$ ./configure --add-module=/root/modsecurity-nginx: i# q* D! k# }3 o8 a0 i0 ]4 [1 E
$ make! H. b- C, e, ^0 ~
$ make && make install6 P" P1 Z$ u) N. p$ `8 @7 a& l5 u
添加OWASP规则
2 N1 T" h. h0 M7 `ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
6 g- \9 F7 B% k' g% N, t
! {1 F$ J- }. i5 _7 X/ Y
& |  {6 u0 [* X% k; Y2 Z下载OWASP规则并生成配置文件
7 h/ i! B( c2 O9 X- x$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
! C- g5 H$ a/ A4 M, R/ ~$ cp -rf owasp-modsecurity-crs  /usr/local/nginx/conf/
" j. n$ k: o+ `/ N7 d; {3 ^$ cd /usr/local/nginx/conf/owasp-modsecurity-crs9 A8 M0 i+ }' E8 ^$ h9 t
$ cp crs-setup.conf.example  crs-setup.conf7 n  c3 K8 H: {- Y
配置OWASP规则( D2 Y" y9 L1 a% u
编辑crs-setup.conf文件8 o  |9 ~* C4 w8 f9 {: Y7 J7 d$ `0 B

5 P( D0 V  [$ O) J( A6 _5 {. v. C# _6 o$ o, m
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf$ x9 v# l1 ~5 t) v  e
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf- c% O2 d2 H4 X, e$ ]
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
4 o$ f( N' ?  I+ s. d0 x7 k& W' A$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
% ?5 t) F. M* C; {* D0 R默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
1 t7 `9 ?; c9 v# _( B) ~4 R- }6 }+ U, k- O9 e& m& f7 W7 Z
8 }" m& C& v* V! r
启用ModSecurity模块和CRS规则
+ B9 w  [$ A) C复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。" R. o% V2 K8 p, K( P9 I0 K. w
. Q4 _% N. O! B6 t2 j* k

0 S' O5 y+ _4 P. g6 umodsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。4 M+ G& C& I  f! h3 L" ^

, X( X) s% ?) e. ]) J0 ]8 c! K
& _: |( t; A7 H8 p& J% o: y8 R& `/ s$ cd /root/modsecurity-2.9.1/
* l9 Z+ ?* K$ j$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf  * t2 h) T# g) x
$ cp unicode.mapping  /usr/local/nginx/conf/
4 A# ^' f2 C' {3 P" v& z9 m( G将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
$ I) P( z3 h$ h: Y3 H
* Q) I* v! V3 N7 g  v7 \! _* g" f; u8 z8 B& v! E$ A; X
$ vim /usr/local/nginx/conf/modsecurity.conf4 v$ {0 V# t# [& F# X) N
SecRuleEngine On
. a7 G* b5 ?3 vModSecurity中几个常用配置说明:, v4 Q: V5 w  o# Z  o: C

) f1 V. v5 Y  Q/ b; A. X. r. x7 P( L# D5 }) w2 r6 J4 ?; s
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
& O! U4 G, v9 C6 N7 }6 ~% z. l# u2 m" f: E  V7 k( J; L# ]

  r9 ~  D) R- h2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。7 B/ f  g- _6 W
, @1 C  E8 [9 b" @& A7 A/ ]
$ w3 W* z& v! y9 H* B3 F! X
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
% w) w( c% l8 `' ~. Y; @8 {
& V& H" P; Q9 O. u" {; V4 G9 f' D4 G- y8 R6 d: I
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。
1 z) L! S5 ~( [+ h5 i6 t+ {+ x: t' y% f! Y; m+ Z' a* y

1 {. s5 m* ^, K. r  F( d( w在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
/ _- G! b( |3 ?" z; b- W1 G9 A" |" p2 d6 a3 W

3 H. c5 v5 N( ~9 O4 ]% Y5 c( U6 P3.x版本CRS
& n4 K. T* l9 U2 F: d5 X$ cd /usr/local/nginx/conf/owasp-modsecurity-crs: j) f7 X6 G; r& }  A! ~6 B
# 生成例外排除请求的配置文件+ ]1 p4 O2 v0 Z6 p4 P, O) E
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf+ e* q# d, M& a
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf/ w* t& u7 D% L, A4 [& v" S+ {
$ cp rules/*.data /usr/local/nginx/conf8 I4 q0 `' a, \
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
6 v% t* ?) u2 u3 O4 N. N. ]. x( u. ]/ {0 X% p  U/ W: I3 o8 Y* u# F
# `9 F# B4 _) L: C) V2 y8 V
$ vim /usr/local/nginx/conf/modsec_includes.conf
' m5 A  ~. v. p. F! U/ y! K8 k" C( o1 Z' }( Z% K( R! a
[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

* y0 T6 i9 O7 R
8 B# o8 L% A8 q* y注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
3 b1 R% Q: S2 {1 ?. X) M
) G6 F1 I. [/ k" O6 m0 h" r5 g& K' j- g
3 \4 I) g$ d& l' u" a  P3 O配置Nginx支持Modsecurity
. v; w: {' F6 T. s8 |( _启用Modsecurity
1 U' ~9 f- c6 x) j9 n1 {使用静态模块加载的配置方法7 x! M; L7 d* B* W. y) q* |, X" t
在需要启用Modsecurity的主机的location下面加入下面两行即可:  o3 q) I$ X4 ]( z; _( c: `* X

2 q3 I" D, s# S* z
- b/ O0 q$ k0 v5 g6 l0 wModSecurityEnabled on;
, T6 b/ W2 k; a9 [- G. o) dModSecurityConfig modsec_includes.conf;
  _. l! o( \  |" q2 N7 I修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
9 ~4 E: r3 J# P, Y  K' H6 |% u9 y: m+ k9 w, @' F) h% `

) w. ^$ J, K+ M  t& ?+ y$ vim /usr/local/nginx/conf/nginx.conf  ^' p: m" S9 D8 I2 u9 i( r7 I

' J* ^! i% V8 C9 L9 Q1 @6 w6 ]/ t. \/ G7 R7 d: h, R; Z
server {
+ S$ _. ^" y4 ~# K9 K% [  listen       80;
  M/ g6 O/ m* T' j  server_name  example.com;
5 s9 z( M3 }0 j2 f: V& v$ t' W1 J. f9 V

; k7 H' L3 Z- a% V  n4 ~/ D$ F- ]  location / {8 `  ~: J" z9 i) d
    ModSecurityEnabled on;: v) c% U- M5 U, Q0 P
    ModSecurityConfig modsec_includes.conf;8 a: f' g, `3 t+ C) _
    root   html;+ l! w- L' B+ L8 [! R6 O
    index  index.html index.htm;
# Y$ X$ O: T2 p% s7 D  }+ c8 g+ N2 t( G$ y/ Q' i' g
}
* \: ?, M4 V# b" [; w# M" X1 a使用动态模块加载的配置方法
6 ]8 U  D8 O9 g  M; @在需要启用Modsecurity的主机的location下面加入下面两行即可:8 X8 H; O3 |. A0 R- C
1 m9 }  S$ J3 V) o! `6 z6 Z
( \9 N; Z6 E5 b! L' V+ v2 q( V
modsecurity on;
. T. h# |; F: P. n. Umodsecurity_rules_file modsec_includes.conf;
9 ]; H4 w4 n$ I# G修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。0 K% N! {9 H: t4 j' S/ s8 t! O$ l

8 {4 w( \2 B% U+ i* u" M1 A" n/ G5 j9 |, n
$ vim /usr/local/nginx/conf/nginx.conf
+ H; {+ b2 w  A1 S1 \5 P7 @8 b. x- }/ U) T+ @" z0 B3 e

1 o5 v$ V& Y. E5 v3 X$ rserver {
6 }- C4 G; Z( {2 _* n% X+ O  b' |  listen  80;4 _% S+ r0 x) \: b9 ]
  server_name localhost mike.hi-linux.com;
- o2 U9 l/ S) {5 P  access_log /var/log/nginx/yourdomain.log;
, H4 r+ k2 l0 F* k: g5 V# k8 |# e9 z. o3 b9 c

- N7 E5 i1 O) \+ I! s  location / {
+ g: p! A; z# k4 r6 Z( v! N8 y
1 K9 }: k) E. Q7 b+ M, Q' H( \
# k/ F5 f) s# Q" D* W" K  modsecurity on;# N9 _- e& ?9 ?# T. Z: [% Z
  modsecurity_rules_file modsec_includes.conf;/ w! C, \' e. Q6 h  p; @2 Z6 j
  root   html;
$ ~0 P1 _6 m; t% G, w1 y3 C3 b6 g  index  index.html index.htm;
% o, O( M9 a  z( r! r' ~9 u}! A' Z! V; R7 D& y0 Q: X: G/ o+ {
}
1 N$ _+ g  U+ q( \% x) K9 S验证Nginx配置文件
6 B' M* D# A2 [6 D- X5 e$ /usr/local/nginx/sbin/nginx -t
) M# T5 M; b. ^. D! i5 Wnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok+ ?2 @4 v3 r2 _& ?4 E  m
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
: G- t* B3 E- n启动Nginx
) T3 D/ L. ?/ K5 |/ ]  f2 A) w$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
1 V3 @8 I% p; q+ Y% z/ l. O; I4 `% |5 y" G3 O* u6 x

测试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.log

Modsecurity主要是规则验证(验证已知漏洞),Nginx下还有另一个功能强大的WAF模块Naxsi。Naxsi最大特点是可以设置学习模式,抓取您的网站产生必要的白名单,以避免误报!Naxsi不依赖于预先定义的签名,Naxsi能够战胜更多复杂/未知/混淆的攻击模式。

) P/ X3 @0 t3 k. d1 G

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|第一站论坛 ( 蜀ICP备06004864号-6 )

GMT+8, 2026-8-30 22:03 , Processed in 0.077986 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表