找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 10419|回复: 0

利用ModSecurity在Nginx上构建WAF

[复制链接]
发表于 2017-10-19 17:34:51 | 显示全部楼层 |阅读模式
ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。+ u7 N9 p0 L. |# U. z! }3 C( F
  ~2 ^/ Z8 Q# J$ T

% ^  z  |& |3 q3 x/ P在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。, r8 Z% p/ i7 }. p" `

9 R& b. r: R* p; b* N, I5 f" u( F! F- s  _( w1 l  l
什么是ModSecurity4 x3 A- d4 t% w9 W3 \
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
- p' g6 f4 d- y4 u) Q7 @+ r5 z
$ H) \% Z; _& a4 q/ W' N. I8 R7 Y- r" [  |+ K7 L3 w
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
$ l( q7 x8 _* }( A. ~
9 K( Z7 q3 Y! p7 L( Y  V/ R3 Z! \
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。# _. S' ?3 U; l) j! P

' Q6 v# @4 g5 a$ e* X: H- V; m5 {& U1 |, v* ?+ }
官网: https://www.modsecurity.org/
- ^9 W) Y' W4 O0 j# |  {- `
# w6 n) Q2 h9 H7 i0 q0 T6 H
6 P  Q, C+ A* |. L/ F什么是OWASP CRS
: Z6 ]! E. h6 u2 W- TOWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
" P* U9 l5 @( r# b) S# G0 Q0 u- v3 w3 p( _( H1 a, s3 f7 M. l

  b; u" P  Y9 l  N5 o3 \& ?ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
6 X2 [# ^# ^/ i& _# ^
' M6 q& T, }, i* N
) [1 ^2 ^+ G# |" z1 _3 n5 \$ cHTTP Protection(HTTP防御)
% c: z( a+ h+ \; [HTTP协议和本地定义使用的detectsviolations策略。, Y- \  X% e* L% Q
9 Y! G/ X) X' T5 ?& L4 t

% V- c8 `- F8 {& D3 O; zReal-time Blacklist Lookups(实时黑名单查询)
6 _5 v$ W! }& M; T. o利用第三方IP名单。& C; x( X3 z4 x1 Y* B5 w
% d& S: i! I$ t& U

+ g/ C+ S- K: HHTTP Denial of Service Protections(HTTP的拒绝服务保护)
$ o3 x* A) _, L+ K$ [1 N+ T! c1 K( F防御HTTP的洪水攻击和HTTP Dos攻击。3 c0 A7 c; }  w. o* r3 k
# [" ^( t: O. p' G9 G+ t2 C/ D

2 Q9 P5 g) v. ~- wCommon Web Attacks Protection(常见的Web攻击防护)
0 E0 }' V8 `$ H0 N# w- P6 ^2 `检测常见的Web应用程序的安全攻击。& H5 n: O7 g3 R+ h% h+ q

9 c! W  P5 ]' m. @4 c# c' \4 C' n" D  n' B3 D* e  Q* |
Automation Detection(自动化检测)) O' Q  m! y; C  x- L* X$ N
检测机器人,爬虫,扫描仪和其他表面恶意活动。3 `. ?, C0 i5 S' k
& M+ J. [) n1 X, M! R

0 e% k. o) A4 l  PIntegration with AV Scanning for File Uploads(文件上传防病毒扫描)
' @2 _7 M: ^  P( P- a& p" J7 C检测通过Web应用程序上传的恶意文件。
/ ]2 Q8 V' I2 }! O: q- s; T
. [& d3 C% ~# Q+ R5 T; a; I- V' p7 y8 s: a2 T: Y  v" y
Tracking Sensitive Data(跟踪敏感数据)! F1 ]3 W- e' L% `+ z4 ~* R
信用卡通道的使用,并阻止泄漏。
2 W) P) j% f' Y7 d% V  a9 D4 X, F. L7 e) u3 M4 l

# I( i; o' e. r7 k9 g" ~1 n" }- lTrojan Protection(木马防护)
, e% R2 x% P& i: u" G* T# v检测访问木马。
9 w! B' N1 p+ ?3 e: r1 `% ~+ x( u* L/ S  L* T/ r

; ~3 t8 z; @8 B8 C  q5 b4 dIdentification of Application Defects(应用程序缺陷的鉴定)
& s5 m2 B9 o) I' A# m' O检测应用程序的错误配置警报。
8 a1 J+ x/ w5 s- g
; l6 v, b' W+ w3 ?8 b  r2 G' V9 o! ~1 H
Error Detection and Hiding(错误检测和隐藏): {0 N$ L: \2 Q9 j, I8 I# E
检测伪装服务器发送错误消息。# z3 \0 x  L. Y7 T# n" P5 N

9 I0 }; G3 @* F; q0 X# k$ Z: Z: b% }- R9 \9 F5 I
安装ModSecurity; @2 s. _* E! ]9 h- {
软件基础环境准备
8 n  |/ x% o2 T4 f下载对应软件包! ]7 i' t8 V' V0 S! V; F
$ cd /root( p  `7 Q% i% q' \
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
& q. \# g- |5 c$ 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 r+ y% u. L1 K' G  P$ Q  Z安装Nginx和ModSecurity依赖包
7 H- B$ S3 v) C# \4 l* l* XCentos/RHEL  P0 m( d8 w+ m) t7 {! ~

7 h) r$ _3 U" D3 y* N
( e0 j( S0 t, x) e/ L  `$ yum install httpd-devel apr apr-util-devel apr-devel  pcre pcre-devel  libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel' q0 Q4 t5 ?7 Q/ g- ?% S
Ubuntu/Debian
7 s; J6 ^2 i- n) N- ?) Q
3 R7 z3 T/ |5 O/ B, b7 Y) R1 F7 X8 s) q
$ 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% L' @% {+ `0 Y5 y
编译安装ModSecurity5 x. W- E5 d. O0 ~+ F+ @' t- Q) c/ e4 P' s
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。( u% L) H4 N' z1 g; G( v

6 t% b  x( _2 R- ?
9 O& {, O) Z( y2 o方法一:编译为Nginx静态模块
0 T. e3 r( ~  T4 d7 M0 U( y* `- A4 W

" F3 H( s4 Y. E  n( m/ q1 F编译为独立模块(modsecurity-2.9.1)& K$ I. m* c9 {0 N. H# G
$ tar xzvf modsecurity-2.9.1.tar.gz" u" [2 X2 S( {
$ cd modsecurity-2.9.1/
- ^" K# `" g, [9 p2 v* y$ ./autogen.sh3 @, N: L7 g& y6 X/ e* l% b& ~
$ ./configure --enable-standalone-module --disable-mlogc+ Y9 |  ]. N; q% v, |. r
$ make
: _# ~3 m1 o: d3 Z编译安装Nginx并添加ModSecurity模块
; z9 i6 c$ i# R) [8 ?) u$ tar xzvf nginx-1.9.2.tar.gz
- m6 k8 g5 X) L$ cd nginx-1.9.22 v- R3 l8 Z% \
$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/
6 ~7 n) p  o* u- O1 e5 p# V$ make && make install5 R/ l4 g- g! L+ }
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
6 |; t! S# s" U+ |6 e( m
& [& ]3 g5 n/ }4 ~! F. q. E  ?# w% P/ n
编译LibModSecurity(modsecurity-3.0)
- _' L- J- o, B$ cd /root8 p3 v# t: |2 ^3 U
$ git clone https://github.com/SpiderLabs/ModSecurity$ c4 H) T! I. b' W5 {$ C  g: y
$ cd ModSecurity6 s9 ~4 u( t: k
$ git checkout -b v3/master origin/v3/master5 D6 x- H2 e  D# G/ H* i
$ sh build.sh
8 m# I2 U. h: D: A, j0 J  z7 k$ git submodule init/ h  P9 R8 A$ D3 V
$ git submodule update) n) |  y! y6 H4 ?5 c
$ ./configure
- |& R, s. b% a5 C: ~. S$ make
0 l( H) `5 G) p1 E. s$ make install$ f1 ^  K* a5 g8 d( Z, ~  t
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。% N2 Q) ]) H6 z( V8 k9 c5 t4 Q
1 I2 _1 _; K# j/ O+ ?

( w+ J4 N6 R, b& B: M# f6 m/ i$ ls /usr/local/modsecurity/lib
7 [# e1 S. E9 j# b& Xlibmodsecurity.a  libmodsecurity.la  libmodsecurity.so  libmodsecurity.so.3  libmodsecurity.so.3.0.0
. |3 L; L! x: m& C& Y/ r编译安装Nginx并添加ModSecurity-Nginx Connector模块
. j2 E5 |1 Q, n& I' ~( K使用ModSecurity-Nginx模块来连接LibModSecurity" e9 \$ O: h/ a& _2 Y

+ z7 j' u. C1 H! Y! X3 _& _3 P" K
& V  \+ Z+ _8 |: M" c) N! ^$ cd /root
# I# k) O, q% `) w. }$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
$ F7 T/ v( V* S# p4 ?1 Z$ e) ~$ tar xzvf nginx-1.9.2.tar.gz
# o$ W2 b' [3 z$ cd nginx-1.9.2# F2 [" q. `! s
$ ./configure --add-module=/root/modsecurity-nginx
" ^1 b+ ~/ O/ ~  d+ l1 N$ make
/ K  }; F6 R/ l( V/ g% q$ make && make install
% [1 }" Q! p* s! V+ B6 \, o4 Q/ r  f添加OWASP规则& M! T- K( z" \$ t9 V" R
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
$ J: O$ G* c& B4 f, |7 D! k1 ]; ]& {. E  t* t1 \

3 H. H  P  K. s  O' I& _0 d下载OWASP规则并生成配置文件
8 a" r: M: a6 J: S8 m. i; C/ J  Y$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
6 M; i0 ^" c2 A, u$ `6 t; b$ cp -rf owasp-modsecurity-crs  /usr/local/nginx/conf/
% ^$ b; o% e' n6 E% V$ cd /usr/local/nginx/conf/owasp-modsecurity-crs3 d0 o, k) Q! Q* @, T6 s7 U
$ cp crs-setup.conf.example  crs-setup.conf6 o6 N! i" I: u! i! B4 w( _& f
配置OWASP规则+ W1 a8 w* ?! f& C" N0 G
编辑crs-setup.conf文件
' t; Z* o9 n$ b9 @0 A
0 i4 i* g7 M6 U1 R2 K" ~7 K
  [3 H5 w' d, N% D0 _4 _$ N* e$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf: M+ W& k6 T6 B; M" G: Y7 u
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf+ u$ P( t* i3 [% C. m2 f
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf; G1 x, Z" N8 p9 i; a4 a6 }
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
4 O$ a1 w: g8 ?默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
. v1 f+ ]" a/ e- b! W2 |- x2 t
. ~" E% Y) W/ ^: Z4 X5 m- g5 ?$ @5 V& c) p5 y$ ?
启用ModSecurity模块和CRS规则
3 D5 }( W# Q# B4 _8 r+ ^- N6 f复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。7 I8 Z6 o6 ?! s8 j/ A, x7 h0 A
/ x% m  A( o5 w. w  [
$ B- j/ p$ @% x8 S! a8 v; ?
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。
, ?% c1 S; x2 j7 R5 @; d4 y% I
: V: i" d  a6 M/ Y
3 I' i5 c5 y0 u# }5 D+ S: y5 x$ M$ cd /root/modsecurity-2.9.1/) @! N2 F" _+ T' u& Y
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf  0 A7 t( U" e3 C+ Z: A' }5 }
$ cp unicode.mapping  /usr/local/nginx/conf/
  v3 D+ t" h  [# @将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
9 a; J6 V7 S5 T& p5 H: F; n7 U- H6 t

' S  F0 s3 B6 Z; a$ vim /usr/local/nginx/conf/modsecurity.conf
* u: k/ e$ S' w$ qSecRuleEngine On
+ l- r( x; {- ~8 lModSecurity中几个常用配置说明:8 A& q2 q5 P, |: Y6 p( ?

: }3 c+ \: f" t( C* |6 ~( w" T7 ~0 j; O5 R5 ?7 N
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。. ?+ d2 V) d4 {
/ P9 P0 k# j5 T( Y  d- }

: o0 S& J- {( ]9 O2 [2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
) ?) H8 ^4 Y# y& N) q1 x! o1 m6 b
6 E+ _5 E* U' N/ H3 Q5 s
1 P) K1 N) ]4 J  Y' e+ o3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
' l' @8 V5 v) `3 D+ X. E# H& V0 W/ Y0 |: s% H
0 n9 ~5 p  L! ^6 @
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。5 `" f8 Y2 q& N$ d/ F! d  ?; m
+ H! O1 y  P3 w% _8 y9 [! z

  F( {7 @$ J5 v在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。) v+ z- b9 h; Q0 X' c7 F9 f
6 x4 V! ]- y2 Y0 C* C! d5 i- M
1 L/ i# L* N1 n% z! \% P2 r
3.x版本CRS
* H9 b9 _% L* A$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
$ O/ o: S/ P; l8 W# 生成例外排除请求的配置文件
2 n& l2 r5 m$ ?" \/ P- T; s! U6 M$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
; J  q: U3 P: x9 ]8 Y: u$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
2 C' o$ Q( w0 I( ^6 U$ cp rules/*.data /usr/local/nginx/conf
! D5 B7 s9 d/ H! F+ e为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
/ N# w: _7 t7 j$ G% C5 r; f
. _3 X' P; ], R8 ~7 Y% m8 f% |0 k) a8 }: O) T' x, G% e0 d2 B$ ^! M
$ vim /usr/local/nginx/conf/modsec_includes.conf' v/ s8 [. S, x- y) G
5 r% o# ~% N! E; r, u. 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

3 Q% S! @+ _) t5 X2 i+ v& A( j! i# c- H! p6 n% f
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
4 ~, v: @6 [( Q- j  m
: _+ l- q: w( p' ?& V7 p# o. j% Q4 G4 y( a' N
配置Nginx支持Modsecurity) S# K4 @% @  U# K: S
启用Modsecurity
. \3 {- @1 }# h8 T  Q使用静态模块加载的配置方法& R0 D) c* b& f2 B( K: @
在需要启用Modsecurity的主机的location下面加入下面两行即可:- l/ L  c5 @* \; Y
+ U/ l5 u/ v! P2 J, z5 ?
; r' c1 p* z5 L: n* @
ModSecurityEnabled on;
/ u: Y) ]* b" S2 H) l" x) GModSecurityConfig modsec_includes.conf;
* i. [, |, {% R7 |3 f5 D9 z/ [修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
) d, l6 g+ ^+ G+ _% p& i; H
8 @$ d$ a+ F; q6 t: g- l# j, p
' h( j, ]3 q5 N8 F% o7 o, J- k% R; H$ vim /usr/local/nginx/conf/nginx.conf/ R+ U: B, X/ c# Y! H

: A4 i9 I, h( t4 J3 I/ _# m! s# ?" c2 R+ i- n  @7 X7 Z4 k. ^. s
server {' e" i: i, V8 C+ l
  listen       80;
9 [+ Y- }! m3 b7 Y$ T3 c/ @  server_name  example.com;! ]5 \; q' i; s4 D4 `
' C: [2 V. A3 R' X2 b" ?
! J) t' j, G2 g) s* _1 y; i. o8 K: [
  location / {2 v5 B$ |/ i) F' w" s/ |3 }8 a! a
    ModSecurityEnabled on;
6 B1 ?; L! E' O  n5 B0 j    ModSecurityConfig modsec_includes.conf;
$ ]" x* G' |3 Y9 o: [4 e% u4 V    root   html;$ q1 A6 ^3 D6 Q9 ]# h1 V
    index  index.html index.htm;2 V  z& `& {3 u
  }
1 m3 Y8 M0 d% \5 J' \/ E}" \8 R! A. @  L: S/ t: Q" X
使用动态模块加载的配置方法1 |7 q2 f* F$ {( W8 K" Q
在需要启用Modsecurity的主机的location下面加入下面两行即可:8 R6 R2 _! ]0 S) p- h3 y# _' p
, s  E; [. g1 ~$ t* G' C; q# h

; e4 j: J# O" f  emodsecurity on;
5 C* [: ?( O' r6 wmodsecurity_rules_file modsec_includes.conf;1 j4 ~: z% [' ?5 J
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
: @& E9 |7 O- D! Y' ?2 G8 e; p8 N# Z' i1 s- h
8 k$ s$ I2 p8 m/ I
$ vim /usr/local/nginx/conf/nginx.conf
6 N9 U. t6 F" [$ _3 e2 o" C4 g" v( D: [* `

0 z% \% d# \# M# `1 ^" L6 tserver {
# {  e# k# Q7 N: z& j% D. L  listen  80;/ _+ A2 b. X/ m4 p* C  f
  server_name localhost mike.hi-linux.com;; b) u" V' V+ C( w
  access_log /var/log/nginx/yourdomain.log;
4 O3 s: d* l5 A
4 ]; l; r- [* q. T$ O9 V. w
  e" N. o$ G7 K5 h, d  location / {
( C9 Z; E# h1 H6 w0 j
! ^0 U( N: n. L8 m: {" k! X' m8 I- W+ n' o& V& o6 I* O6 p- P7 J
  modsecurity on;+ X7 y7 `0 \3 p/ M3 N* y5 B& h
  modsecurity_rules_file modsec_includes.conf;1 N' h  s; \9 @# R
  root   html;- ^7 G" N& m% c& Q8 G  P
  index  index.html index.htm;. P. A/ k/ u2 D, I0 K
}
% C( q/ l# y/ `7 S9 ~0 ^5 b}
4 @3 ?$ V9 T* K4 d验证Nginx配置文件# J1 e4 G' o/ d: T5 p
$ /usr/local/nginx/sbin/nginx -t
: L! \# G" F; Z0 }nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
" Q/ \7 c4 `$ e! O$ p. M; L1 {nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
  C" e' L' M3 Q+ w启动Nginx* x6 M* x* B* [$ c4 j  U' W
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
" M$ }: _7 i1 B5 O- f7 g3 t6 q
! L& F  P5 N' @1 u3 M) @! 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能够战胜更多复杂/未知/混淆的攻击模式。


  t; q4 R+ R" d# N

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-3-4 04:26 , Processed in 0.116508 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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