找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11917|回复: 0

利用ModSecurity在Nginx上构建WAF

[复制链接]
发表于 2017-10-19 17:34:51 | 显示全部楼层 |阅读模式
ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。7 Y9 S! h- O' w3 w1 L- T# i1 |; A

4 T8 [5 t3 D( G2 L( z3 D$ z4 [' J/ e, P) o
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
/ ~( F! _6 P5 S; _9 Z! A/ @/ V  Q  H+ R- {$ e) u- [  g$ b
$ q. v1 G6 G( k5 ^( {* z' e
什么是ModSecurity5 w, m* P! c% B, [+ f. S0 V
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
# O  e; G1 l/ {- o9 b  `
- F( A3 s3 F: G' w* v6 C! _4 q' R# H$ p$ B5 [# ]6 g; J4 ~/ {
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
$ n5 H& m* T( v( t+ q* l
2 ]/ S: {' x: Y0 T) z9 u) j
/ d$ O9 F, z0 ?* U# E% TModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。1 L) m5 H% o" r+ Z7 {- E
/ l4 F% D( {- S  {3 F* H. y

. S# k5 c. d1 [; L官网: https://www.modsecurity.org/
. I# t; ]  P) n) g5 p# c( f' ]& I, K& I. S: g! l- {: |
: J. ?2 c1 `9 ~/ F: q5 T1 s; {) R
什么是OWASP CRS
& c5 p6 Z* O" E5 {( @$ Z8 y8 pOWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
! h; l9 n/ M0 y6 H& }' `( t- F$ \4 {
4 H. v# \# Q3 x# ^0 {, ?" ]2 s1 E. t# v" z# F
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。% [. ]$ q6 M8 M& R/ z

8 B! C9 v* q9 Z  ^
* h1 j# r* i- N& p# GHTTP Protection(HTTP防御)' A5 e2 e1 m" U; ]4 I% t
HTTP协议和本地定义使用的detectsviolations策略。
3 Z3 E7 l/ u, N$ N
1 ~, ]2 J' D% j% M1 W* j4 w0 E* x" b7 |9 P: B5 k2 ?
Real-time Blacklist Lookups(实时黑名单查询)' i* f  [) R7 E/ V  t$ ?! W3 }
利用第三方IP名单。. ~; A9 k$ _$ z9 W* @' Z

: a1 Z. f# i' t6 z5 N. ~! F  @( q3 Z2 V8 g
HTTP Denial of Service Protections(HTTP的拒绝服务保护)
" n* \) |$ P. Q# E# t# ]4 a' z防御HTTP的洪水攻击和HTTP Dos攻击。8 [# x2 N: y/ C6 c3 |
& `3 `2 b9 H4 V* w
6 ?& s8 Q0 I( f1 p- w
Common Web Attacks Protection(常见的Web攻击防护)- \/ }6 u( k3 G6 y; a& g6 g
检测常见的Web应用程序的安全攻击。( f( b& E6 _! P

7 A5 {; m4 Q# N" I7 {! ^! Z5 L' m; C# R5 D
Automation Detection(自动化检测)0 M0 G1 r/ |: q; p* i
检测机器人,爬虫,扫描仪和其他表面恶意活动。
# d3 J/ _% L, V& E) D  E! q7 E7 ^1 K$ _$ l! S, s
' |0 Q( a) @; D1 Q
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)
1 |' C3 D  k( b% |& m# S# n6 b检测通过Web应用程序上传的恶意文件。. u3 R8 a1 z5 t. }6 I$ ^

0 x5 M0 G8 P( L8 T( m4 \" l4 x( L2 P5 B4 Y1 Z0 r
Tracking Sensitive Data(跟踪敏感数据)
/ U$ Z2 A+ d% Y. ^信用卡通道的使用,并阻止泄漏。
. i! f+ A" C" o0 R1 c% r5 W) U" D4 x
3 [& F6 E. `4 b# j6 {7 v
Trojan Protection(木马防护)
- M  X5 S7 ~7 p$ H6 a2 h检测访问木马。
. g$ n$ p1 b. g# r# {8 m
( L( ^& ]6 D# \, \0 ~
' S, F* z7 B; N( j1 zIdentification of Application Defects(应用程序缺陷的鉴定)+ r4 s- p1 G+ a
检测应用程序的错误配置警报。
% W8 r$ z/ `* t" d9 A! S
7 Y/ ?4 p6 Y/ Y# U  O
$ {2 s4 A( N/ F6 Q7 `0 cError Detection and Hiding(错误检测和隐藏)7 [% r1 U( o) A
检测伪装服务器发送错误消息。
* W% u0 t  }  |  J/ d
: N+ g$ n7 `, l  o4 d$ q
/ j9 R2 p8 J4 Z0 y: O安装ModSecurity
4 g% F) I- w. X* a$ D2 @: B软件基础环境准备) r% p* |$ y/ D% k( C6 R6 j
下载对应软件包3 z4 ~  z+ n  p9 ]4 K; m9 X2 L
$ cd /root
" l/ v) y4 l8 \1 {3 ^# c' e$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
$ E" ]. T) [, K7 _$ J$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz
  E2 s* w* S0 n/ u& X  n3 H5 z安装Nginx和ModSecurity依赖包5 |; R1 h3 H" S! C
Centos/RHEL
& P* J6 X9 n' u- g7 U# ^$ r; b* D
  T9 D- w) M" I; L1 x7 ^3 H; s! G$ g- `3 x5 i: J2 L- u
$ yum install httpd-devel apr apr-util-devel apr-devel  pcre pcre-devel  libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel9 b. o0 f/ x) X/ G  T) Z& k
Ubuntu/Debian, q5 \. B* H9 g/ \. ^

$ d: p9 j5 M7 k( l% Z( m7 F7 J% s
$ 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++-dev4 S( W; N1 z" g, [
编译安装ModSecurity
- l6 `4 v2 V$ f2 K) K1 XNginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
$ r# l0 {# i: r0 w" ]/ W4 y
% M1 O& V8 H  Y6 d6 `9 D5 {/ P4 R. _" J! u! D% Y1 k
方法一:编译为Nginx静态模块+ s. W; q3 P& C) Z8 h( s

* O) e+ B7 c4 `/ K! b+ z! M- ^$ Y& K+ r
编译为独立模块(modsecurity-2.9.1)6 d* Y. B* y. a. R% T5 `
$ tar xzvf modsecurity-2.9.1.tar.gz* X9 i. A; b! P9 f/ F+ E
$ cd modsecurity-2.9.1/
# ?3 V, h  @, q  J, ^$ ./autogen.sh
- Y/ b1 s4 _4 I% c" c+ t' ~# h" m# p% d$ ./configure --enable-standalone-module --disable-mlogc
- o9 C! B! b$ g" P& K* i: N$ make
% ?9 n! A6 X) }! h- |0 M: p编译安装Nginx并添加ModSecurity模块8 d( L7 {5 Y3 a$ |. Z' W
$ tar xzvf nginx-1.9.2.tar.gz
% l# K  O6 m' [3 d  k+ F$ cd nginx-1.9.2
# [0 J# Z- h# I7 [/ ]# i/ p$ [$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/
% e/ R  f$ C3 y( P$ K' ?' P# J$ make && make install2 M- y  X2 V5 e/ F' |& p
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
! p& t1 h$ G: P; G! H$ I4 t8 q2 l
* L+ S  I  `) t5 N! t2 T2 Q
编译LibModSecurity(modsecurity-3.0)6 X) O8 a+ [* Q" |+ k, j
$ cd /root& b  J. P3 v8 |% T0 x6 E
$ git clone https://github.com/SpiderLabs/ModSecurity, D& c; b/ r6 ]) n
$ cd ModSecurity5 Q' N& u& u6 \# m4 m5 M0 P
$ git checkout -b v3/master origin/v3/master: y( I, S; E- d2 n8 l3 \
$ sh build.sh; o0 M4 \0 ]$ B  p- {2 T+ H6 P
$ git submodule init
2 }- j7 F/ T5 _: l; k9 {$ git submodule update
" h7 l' s# w. V! A$ ./configure5 [: S9 C! P' |8 V- E
$ make0 y" a+ i; x; T/ k
$ make install1 R/ I$ d. V$ X' U# z5 ?. Y
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
% d, C+ a& s# m0 d+ a- |) U" ~
1 F/ b" V2 c5 W$ V) s1 ?3 y% {/ q% g5 }' |: O  x# a
$ ls /usr/local/modsecurity/lib
, H7 _" V: u, Q4 klibmodsecurity.a  libmodsecurity.la  libmodsecurity.so  libmodsecurity.so.3  libmodsecurity.so.3.0.0" k+ H; L1 A  w( W  u
编译安装Nginx并添加ModSecurity-Nginx Connector模块
/ A. H1 z# x7 C8 U6 S3 G- s) [使用ModSecurity-Nginx模块来连接LibModSecurity% a) ]" Y0 C; z  X$ h+ [: s5 z

8 ^3 H0 }+ J7 m$ e2 R, W1 r+ o* w# n! m& u! u7 o2 ^
$ cd /root
) v5 D9 N+ i" j. i6 [$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx4 h- o, _& I: f& D
$ tar xzvf nginx-1.9.2.tar.gz4 J, T& r, v' O1 I& d
$ cd nginx-1.9.2; C9 G1 D2 f$ J
$ ./configure --add-module=/root/modsecurity-nginx
# _% {( R- u3 q- j& e9 G$ make5 V2 X, |: [9 b: @
$ make && make install
/ f& f7 u2 M4 Z1 d. ]3 n5 J/ W4 w添加OWASP规则
) G7 w8 H1 v2 T2 z- Y, P& I7 VModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
" n/ L' G! W( S( D7 v" ^0 O/ S
% \( v# R/ ^  J! |
4 K, ?! Z9 D8 `  m. |0 g- |4 g下载OWASP规则并生成配置文件% R0 E8 w0 ]; y" x
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git) r- ?8 B6 [$ E" x% Z0 J
$ cp -rf owasp-modsecurity-crs  /usr/local/nginx/conf/) z1 h) r! i) j# _" p% B5 i/ S' H
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs$ L3 a: L% {( {) o4 \2 o  X& r
$ cp crs-setup.conf.example  crs-setup.conf5 s3 }! l  D' d/ f1 K0 M: Q2 ?
配置OWASP规则! o7 u* z( B# \
编辑crs-setup.conf文件% r. Q  r* j" Q5 |

; J6 p, X9 o! I. U/ Q8 [7 I2 @4 Q2 B) E1 e1 @
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
7 W, D: ]8 N% T$ E/ Y3 a$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf) J* F' k* T' F
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
% [# S# r) j" O. [: P  N' l# a$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf# f) K8 }" }' P- Z7 D
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。! A& ?& b/ t/ P; p# V& y/ g

. @5 ]; O3 E; r# H- ^
& P2 x& O6 j/ L启用ModSecurity模块和CRS规则# B& C; q- R- m0 t/ C/ s
复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
& O, V* s* f6 t+ y+ O, e4 K0 L: b( M
9 u; G6 [5 r2 z3 H1 R/ {
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。/ _, y4 d0 g7 y+ H* D' K& ]
$ k5 T9 A' i2 B+ h6 P, A2 W

* A4 E# H4 K+ F4 `2 ?$ cd /root/modsecurity-2.9.1/' }, }4 G: o5 x" l
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf  
1 q% u2 f* E& s* Y7 h$ cp unicode.mapping  /usr/local/nginx/conf/
* \# I- |" f. ~, x) n0 Z将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。* Z' A: _: u: f: Y5 U6 ?5 v1 @9 k  O
" `! b% S3 O- h; b, @! @* C
1 R0 N1 z7 q3 O+ A9 L/ A
$ vim /usr/local/nginx/conf/modsecurity.conf
8 N' |9 W+ ?9 j8 lSecRuleEngine On# u' `0 r/ R2 Q
ModSecurity中几个常用配置说明:* @# h. s- x) S" L& Q
  i6 \: T; o, |
: S. y! O- P6 v: X0 `. N- Y
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
2 `; h9 H! i5 `5 T! v1 F8 l+ T8 t/ f! i7 l+ Y
2 r3 x8 Z- {% _' t. h" h
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。' a0 b( l% Q( t9 E" K

0 z& d3 t8 R" @8 \. F" h7 k
- a% h. F8 g3 H$ U- W& H1 I3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
, q6 h$ m9 N- L6 Q6 k% b, g& u$ F
* j/ n1 C4 a! n* Z9 G2 m7 \
% r' V; f6 ^* ?. Z6 n4 t1 o4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。
1 W" b7 j, J+ x: {* E6 `" |; v
3 f5 Q% Z) r# s8 c4 Z7 f2 h* M
, A( A' N% F/ v7 K) y9 Q在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
  j; j) L% [7 a6 o) G' o& W
; D1 Z8 L7 S! {/ s8 |$ S& |, {( {# i. r5 E
3.x版本CRS' X* I# P, \7 W0 A7 c
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
4 \' D7 \) v0 ^, h" j$ e# 生成例外排除请求的配置文件
6 F" Q7 K. d: z- C% ]: H2 M$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf; }$ N; M1 Q5 ?1 B: r$ y/ T
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf( T- @2 L! g' f/ B1 A. E8 A8 a1 U
$ cp rules/*.data /usr/local/nginx/conf2 z3 ^- v" v2 ~# i  c9 s
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。/ b: O3 o7 m6 {8 T; s% A# T, D
" L% v1 S( T1 f. {) C+ T* g

7 [; Z/ l; H5 F$ i( F, s$ vim /usr/local/nginx/conf/modsec_includes.conf+ [3 f0 U; }( a2 N5 J

8 y5 j& x% J+ I1 ?. x+ J
[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
" \1 X. [" q5 Y& {* ~, A: g
5 \8 c: }/ F8 g( |, L% A* J# K
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。  G  y1 x6 M$ q7 P& Q# o3 q6 L
7 e) L* W- W  O( u/ b: d/ z$ L
# ^7 t) ]; o* H, A) V# U3 f5 x
配置Nginx支持Modsecurity
& d# W# U! q6 W启用Modsecurity
% d: H2 p# c3 w; M$ S9 G$ X* h使用静态模块加载的配置方法
5 V# I  n( c. e7 l/ f' H6 o5 \# w, M在需要启用Modsecurity的主机的location下面加入下面两行即可:
1 C: _0 U6 H- o+ [4 Y- ^4 p; t2 w
& [1 @  A2 ?' _1 B
  ~; ]6 G  i* y% f& c: [3 y1 FModSecurityEnabled on;( r4 |+ b- y7 j+ W, W) [
ModSecurityConfig modsec_includes.conf;7 _% Q+ b+ n# V. p
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。& x2 ?$ |  `6 F" [9 u  A0 V# F
" G" L& u+ t% }* }3 S5 }5 E
. N4 V' w# P8 u3 J8 W( ~
$ vim /usr/local/nginx/conf/nginx.conf' j) ~" r: K# m5 m5 T! z
7 ^, ?4 H3 \1 z6 K
  U( A7 S1 o! `9 ^1 n
server {
8 i% A6 g, R& L3 @/ {  listen       80;8 f  N/ i; {* v: X5 N/ u) T( X
  server_name  example.com;
, [" _, a9 W6 o4 N" Z
( r. b6 V5 l2 S5 p
9 I7 b" \0 M# X2 q3 A  location / {
+ R: i' k2 v4 m! o& K    ModSecurityEnabled on;
* W4 n0 Y4 e4 ~9 j+ W    ModSecurityConfig modsec_includes.conf;
& j5 @# L+ F- o1 ^    root   html;
$ q- X+ q2 A2 x    index  index.html index.htm;
, C9 |2 ^! h# I2 z  }9 F) O  Y  J; G1 Z1 D
}8 j& p8 O- V. h6 z
使用动态模块加载的配置方法- S! W/ l5 R! b4 {' C, A- o; c
在需要启用Modsecurity的主机的location下面加入下面两行即可:0 t7 J# W1 ?( ?
/ a+ b3 R7 G# B8 U6 _

# R: w& @3 B' W" Z; t4 X) Emodsecurity on;' k0 a' W" h4 d' g5 \
modsecurity_rules_file modsec_includes.conf;
; U4 N4 @& v* Y6 h5 h6 A; }修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。4 G# Z" I% A9 I' e
) Y% t0 g% S. L# i9 R
4 N% r0 Q* D1 X3 ?2 x" i0 R$ z
$ vim /usr/local/nginx/conf/nginx.conf
) k4 z4 v0 r5 q5 h. B( w4 d: h2 c9 I

. i+ `  |# \" |& Userver {: s; R/ s  B0 f4 i3 ^/ F
  listen  80;
9 q+ h: w- l" ~: Q. h( S! m  server_name localhost mike.hi-linux.com;
1 p* F6 G7 D9 ~  access_log /var/log/nginx/yourdomain.log;
6 Y7 O& d- f" a% u" a) G
% H6 o0 Y* G$ \3 Z2 D( Q! ?! u
' [2 ?( O# d" @7 s  D# \/ K% @% Y  location / {
% G! V& x, T" S, y6 T- r/ `: e! `
3 h) c0 U+ T. S+ m* |) {5 X
  modsecurity on;" l, @* y5 t" l& R$ A+ d- j$ O& c
  modsecurity_rules_file modsec_includes.conf;
9 V. V. {* ]/ v( ~# A) X  root   html;' L3 Q$ L  @5 Q' V) J$ J
  index  index.html index.htm;
# O& `" R$ D! [) S}, @6 b3 e- B7 Z7 @$ j7 \+ ~9 \
}3 T+ V: T# f! _: m1 ?# l$ S0 E4 Y
验证Nginx配置文件" ^# H0 o* e9 i5 s
$ /usr/local/nginx/sbin/nginx -t2 \1 D+ e  L+ A7 j! i
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok% P! }# Y& `! k) A$ Y5 \
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful, A8 d4 |% _# `
启动Nginx
0 K  T* h6 V* x9 I5 ], x  q7 f- M$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf8 C4 X: X0 G5 H
3 k1 ~# l' X) r6 I

测试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能够战胜更多复杂/未知/混淆的攻击模式。


7 D! F: C1 {7 m0 d3 [

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-7-29 21:30 , Processed in 0.065646 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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