找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11895|回复: 0

利用ModSecurity在Nginx上构建WAF

[复制链接]
发表于 2017-10-19 17:34:51 | 显示全部楼层 |阅读模式
ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
9 j' x' a+ o* r& X& O
7 l8 M' m) f# @
2 S7 r6 N$ Q  _' [7 Z在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
! F, l0 }+ H6 i2 s0 i/ u1 x  [3 T7 `. W8 z3 j

) f3 @/ B' n- G# R; f1 L' E什么是ModSecurity
& D0 K, j9 F. j& q$ LModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。6 b$ o3 m2 c* W3 V) @3 K
4 |3 U6 d& o8 ~1 H/ ~( K5 C) p, G

$ J1 a& o/ N* d: X& lModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。& B5 H3 N5 i# `2 i8 Q, o+ Y. C
5 _6 J* G* V5 g/ u
' F% X! J% [: U' O6 W6 J0 H
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。0 f6 {2 X3 I9 W; l: D6 U6 N

  b* z0 f; ?  E8 @5 k8 \2 y7 B# p' `4 d+ \# Z9 X# L9 j
官网: https://www.modsecurity.org/# L' v( C5 ~: J4 o4 ?
8 L* l) J  T5 T# y* B1 s

8 M/ _  |+ ]/ t* K什么是OWASP CRS' z5 R$ {: b7 W' d
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
5 s& ]2 F% w& x, r& n
$ U  a7 x7 \& }6 F; e4 q9 {5 t
, ]' V4 p& {6 X9 I; v8 MModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
4 ?* c7 a, ]1 |0 E4 G
, [2 c" j8 R1 `. ?/ J. }
" X, y0 M( N' O& S  ?HTTP Protection(HTTP防御)
( P& ^4 s# `! F- IHTTP协议和本地定义使用的detectsviolations策略。
% q* {1 F* V4 N* Z  z: \
, u8 D' t% K. @# V; O, I' I. @, I8 k! T9 L
Real-time Blacklist Lookups(实时黑名单查询)
* z2 i+ T! o' g; y( |# r利用第三方IP名单。3 G, _" ]5 R# y5 \
# C8 o- ?+ E& ~7 y- Q

# [' G6 r' }" L! j  M8 _HTTP Denial of Service Protections(HTTP的拒绝服务保护)8 x& A% }5 v( y) |) S6 ?& `: \
防御HTTP的洪水攻击和HTTP Dos攻击。" E) V6 Q5 |: T4 J2 b8 U
' A* Q  v& g7 g! U2 q( k
6 {& G  {9 k% ^- ]5 O
Common Web Attacks Protection(常见的Web攻击防护)
% F0 H* g6 G) e5 V% x7 D检测常见的Web应用程序的安全攻击。" Y$ M' t) S0 L, ]  z5 m$ y* ]

" l( ?: }9 T' I/ f. m$ j% H( e; w6 K3 h; V+ c- \4 B. Y
Automation Detection(自动化检测)' y  U6 V$ j' }
检测机器人,爬虫,扫描仪和其他表面恶意活动。+ h! B1 T( M+ |) e; T. S7 Q5 e
" D" Y9 x* n# Y$ b0 M- C
! ~6 H' Y( N# A0 e% w! f
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)2 ~/ g; C  m- {& E( b/ n/ j/ V
检测通过Web应用程序上传的恶意文件。7 p8 U$ P* p6 B4 @9 {/ ]7 ?

) [% v; a, E- s0 F1 m& f% o
9 {5 g/ H- |; c4 T1 a, M+ |: U+ ATracking Sensitive Data(跟踪敏感数据)
3 L( r9 Q" U& K9 z  y+ l, B3 o信用卡通道的使用,并阻止泄漏。/ c8 k9 H9 [  C" K# Z$ f5 d: G
. U/ v* L4 J1 W5 z3 ]; ~
. `4 S! |. w: f1 }) I+ @6 u
Trojan Protection(木马防护)  t' P7 G  H# n  Q7 e
检测访问木马。( b; @0 ~- L: L8 v& Q  S

' {7 L! c1 I0 |/ ^
. Q: E& d6 o# v5 U7 P, SIdentification of Application Defects(应用程序缺陷的鉴定)+ ~4 r) V9 r' x  _
检测应用程序的错误配置警报。
: m5 D% \/ T/ u% j# B  J7 ?( R! I
2 K/ c. i  w" g  \/ ~! X5 T+ e
Error Detection and Hiding(错误检测和隐藏); S, @  O7 n3 B) C' _9 i! ^/ t0 t
检测伪装服务器发送错误消息。
: J$ ~( D$ R, i' O5 f9 H, o% _" L7 i+ H+ Z8 X$ C: I1 w! I0 @
- ^7 j( s  s- G
安装ModSecurity' F- S/ q1 N8 g  v' y& Z% g
软件基础环境准备
' A" Q0 R. `/ D. J1 ?' O下载对应软件包
$ C. z* ]! g. g6 t( k" y$ cd /root
5 S6 K' q# u3 Q$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz') x& S$ M, r$ T& l" `+ P
$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz
9 Q; z% i' M$ m安装Nginx和ModSecurity依赖包
! A8 ?1 X  F7 ^0 H' X& K0 ZCentos/RHEL# Q! H1 E; t7 H* F( V& L

' W0 M5 [9 k- I0 ^, ~& r; p3 d% p
" {  {) Q: Z( z8 D0 V( n$ yum install httpd-devel apr apr-util-devel apr-devel  pcre pcre-devel  libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
& r- a$ B  I" t0 a, J4 a) d; M4 rUbuntu/Debian
3 ]3 A6 c: u" i! y5 K% N/ o- u9 z, `( n; r8 ]# m' E7 x9 j, E
( T5 `& E0 N& d6 I+ o7 b8 R
$ 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++-dev5 ^4 N. g* G  o! U) K: n& r
编译安装ModSecurity
! a7 ]8 P7 K/ |, i8 F; f9 SNginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。/ a" ]9 p" i; s9 `5 L! j

1 ?5 O( M; O9 X$ H% x9 Y
' U. g- h( a' q/ N. r( j方法一:编译为Nginx静态模块
: E- I/ Y) M' _0 a' z! u1 K( [# D  ~9 y9 S7 N1 l
8 p$ P' W& O; k/ f8 a* c* B
编译为独立模块(modsecurity-2.9.1)
) b( S. n- Q7 i  s# a1 A) ]6 o. ]$ tar xzvf modsecurity-2.9.1.tar.gz) r$ h; Y$ H4 r0 Z
$ cd modsecurity-2.9.1/
( a4 M7 B+ b% r! q- Y. {  ]; {$ ./autogen.sh# F( [, Q/ ?3 w; h. c: F
$ ./configure --enable-standalone-module --disable-mlogc  x' o  T8 c4 v) B0 ~" I* @
$ make
1 ?+ i4 @) T7 i  m编译安装Nginx并添加ModSecurity模块
1 w5 Z9 L5 H- d0 ^$ a0 s- P' T$ tar xzvf nginx-1.9.2.tar.gz& V! n) }$ o8 a& a. y: e/ ?' E' H
$ cd nginx-1.9.2
* [' s# n# q" \9 e8 ]: J# ?5 }$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/  A  s- N9 u/ U0 [0 p6 }; g: m' y
$ make && make install
; |2 n" e' t. m' i0 ^  q( x# o+ C' Y方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
4 n7 `( ~1 ~9 x% j
2 F. @; h- P" M- ~" }* c+ z4 |" z) f5 ^& J) g  f" L
编译LibModSecurity(modsecurity-3.0): e9 K' }& P& L- I
$ cd /root/ h1 ?. F, x; \7 \5 H1 T3 V
$ git clone https://github.com/SpiderLabs/ModSecurity
. r5 O, O! Q5 }0 D" Z9 ~: I$ cd ModSecurity
% I" \* t- [! a! \% D; n. f+ C' F0 K$ git checkout -b v3/master origin/v3/master
( _- }. W4 ~' u4 y: A) e; e* E; a$ sh build.sh
+ m' r8 A+ T) r0 {' ~$ git submodule init: O1 d* A1 Z  a8 F
$ git submodule update; j, {/ u- L! N. I" H; E7 J  e
$ ./configure( A  u$ q: ^) F8 Y! E/ _
$ make% }8 G7 T, [2 P2 t) P: F2 e! A2 a
$ make install7 d, d/ B3 {, [3 M3 |
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
" `8 d' J7 O  c! x' Z9 _* u7 i1 v: I* _4 q

  i" S" M  V2 e4 w$ ls /usr/local/modsecurity/lib2 d$ o! G7 M1 d! h" {, Q4 k
libmodsecurity.a  libmodsecurity.la  libmodsecurity.so  libmodsecurity.so.3  libmodsecurity.so.3.0.0/ b2 P4 B7 T4 |$ g7 C: T
编译安装Nginx并添加ModSecurity-Nginx Connector模块$ P% J1 U9 P; W  T9 B0 a
使用ModSecurity-Nginx模块来连接LibModSecurity
( |. ]: j* i+ q3 u0 m* ]0 f( \8 G9 m1 k5 p. k- s7 ^' e+ Q

* x; `  c, p- t9 E  P$ cd /root! v4 }" U& f- P
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx6 q) i% ?1 d2 ?; D' A* ]
$ tar xzvf nginx-1.9.2.tar.gz, L* l' ?; _# `0 ?% J
$ cd nginx-1.9.2
" I$ f  F9 Q. u! I0 a+ _$ ./configure --add-module=/root/modsecurity-nginx
, k- q+ ^( \$ G" V8 g$ make
* t  t& v0 {! k2 `$ make && make install
3 y8 G0 f) V& @( y添加OWASP规则. R7 s8 Q0 x0 F, D* h& x, ~
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。$ U3 M$ S& E, o
" S0 w; H; ]! f4 l8 o% L: }+ w
# ^- G5 P# j) Y( n) f
下载OWASP规则并生成配置文件
! G) ~. y+ w+ ?  x  g$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
; k+ c, @) p; t2 y5 J& c$ cp -rf owasp-modsecurity-crs  /usr/local/nginx/conf/
; k3 `& z+ D% v1 c$ cd /usr/local/nginx/conf/owasp-modsecurity-crs8 H( S% B4 ^; n. B( b5 @$ K6 Q- P7 ~
$ cp crs-setup.conf.example  crs-setup.conf- S2 F+ y5 {' r2 c& t
配置OWASP规则: \% o6 o9 t4 c1 R
编辑crs-setup.conf文件: G8 i' k# k. Z- o) }# d+ r

& N: u% L  \% @) F! ]$ Q: A- P6 V% ?9 e
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf2 k, P( C3 |+ ]6 g1 i% l
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
& L' F% I) m6 z2 [4 _$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf  s- F& K/ w* N6 Y
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
3 w9 z* g5 B) A! \0 s3 W默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
8 a+ r7 E) j- F. \5 o
$ ]& r/ p6 I' V. R4 g7 x9 l+ d
& ]! d: F5 z6 B- E% [2 i启用ModSecurity模块和CRS规则, t% Z) d+ L7 G
复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
5 o1 D/ [. g& L' C$ l
3 W) d; H" Q! S+ J5 }
1 t, P0 j% [8 W" Smodsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。0 O- i" R3 e3 n* U5 ~
5 X/ ~/ ]( S3 F

; k$ X* x6 O( V& o5 B$ cd /root/modsecurity-2.9.1/+ n: x$ H. `, O# t9 j
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf  
$ k$ y9 j! ~5 K$ cp unicode.mapping  /usr/local/nginx/conf/
  A& N4 J8 {4 j' F9 I将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
0 E! d; m6 T# u: ]
. H, s4 U$ \6 @: L- T. N/ N) B7 s  F1 ]! [' K: n
$ vim /usr/local/nginx/conf/modsecurity.conf7 |+ |) G7 Z3 x. n; T2 u. l
SecRuleEngine On) F% `, P8 t4 U8 E9 k1 N$ @6 S
ModSecurity中几个常用配置说明:3 ]- z3 K' J. u8 q1 ~; C
9 J/ U2 |& R5 e( ^8 K

" N. v! i+ ~$ e; ~# c1 ]5 ?6 o1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。1 m( u, n5 V+ ]5 ^, {

6 }9 \: c" B% b0 i# f( C8 Y* `( s  y/ K! F* \
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。, f* k( A6 Q  {% a+ c" \
) h. v8 `+ L! t" W$ s& Z2 L

1 h3 S& V6 n! p9 H6 A3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
0 t7 a4 E" |5 N  v3 S8 W! y' B1 m% L+ z8 S3 h
8 C% S. a  F* q( B
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。* i* ]7 M9 P9 c8 i

( B* z; d* Z3 L1 q0 u! B9 r4 u( [) t0 m- V; {- x, z" a
在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。8 ~2 w9 `6 W, a) W. @

$ H. R, I2 L5 _1 x, H
* L, e+ T, f) a' K& u7 L" j3.x版本CRS
: ], c/ s! s$ A1 |$ v2 g/ n$ cd /usr/local/nginx/conf/owasp-modsecurity-crs) n7 C: o$ C, N  E+ I  n
# 生成例外排除请求的配置文件9 E1 L: R$ |8 P  }# A- G0 S
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
+ n  |8 l: u1 I4 `$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
/ v+ ~, J  W" d% a+ G4 H' A$ cp rules/*.data /usr/local/nginx/conf" C. f3 n5 |# n# ^9 z% z
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。) O, F/ i- x& G& ?/ F4 |( x

: k6 s3 V$ Z, j
/ y" w/ z3 w8 u5 J) x$ vim /usr/local/nginx/conf/modsec_includes.conf
8 b2 r- i0 P2 m2 ?( z
: O6 _: c/ ]2 e: t  l. L( y
[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
  E/ I2 Y7 p2 A. h7 E( i' [

+ m& Y1 q7 P0 r; f9 |/ U( t注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
2 Q7 J' E, a9 G. u) f$ ^# O$ h8 o% t) N. d$ q$ |% g# v9 d
/ v6 j8 A" {* P3 Z- R" {: E$ W* ?7 Z
配置Nginx支持Modsecurity/ z  _1 r# G8 f4 G) [. f
启用Modsecurity
! N9 R' u2 L8 T使用静态模块加载的配置方法( {5 B* s" _/ X8 n1 i
在需要启用Modsecurity的主机的location下面加入下面两行即可:$ g- ~* j2 R" d+ o8 q# }6 P
4 \1 a5 m# T9 R* Q

6 K: x3 M3 q+ JModSecurityEnabled on;
$ I5 K& {& N. M2 F4 fModSecurityConfig modsec_includes.conf;6 X) ^& r' _0 W& V/ r& m/ q
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。$ D: I3 B" o3 z4 s, }# f
8 R* J: P5 Q! |' c
9 m" ]2 E0 U/ @# E% @+ l7 }8 s
$ vim /usr/local/nginx/conf/nginx.conf
/ r2 y2 M2 L1 i% Z# |5 f8 I; D' m" o+ C

& s/ s( @# v0 D4 `. C  u. lserver {* \4 |7 T6 f) `0 L( \; ]" L( h
  listen       80;" j' x# Z" k9 p' ~' h
  server_name  example.com;4 D: R" J1 _7 \& E4 ~4 I. w- R
& {  c! o  Y2 O% r) _  }' R9 R

# H  j- R; Q( ?* D  location / {: h* B+ x; T# ?# r$ H7 U; I
    ModSecurityEnabled on;
: v/ U: Q7 o+ G! Y3 g1 D    ModSecurityConfig modsec_includes.conf;" I, G- z) t2 e- l' a0 l
    root   html;
) u4 y. B7 t4 i/ k/ f8 B    index  index.html index.htm;
+ Q- ?3 N& m3 N6 Z  }
1 X- B/ c6 k) d/ M9 _# D4 ]% @}
, t" s- u4 m1 c( e使用动态模块加载的配置方法& l% v, b7 E1 D5 I; s+ }
在需要启用Modsecurity的主机的location下面加入下面两行即可:- |% X. p7 _1 @
$ N# x3 t) o& Y/ B+ L3 X" u( `

1 w1 S+ d( |4 f* Hmodsecurity on;
1 t. ^! m- M; Z' }7 ]modsecurity_rules_file modsec_includes.conf;2 Z6 b5 F4 {8 ]) k& [" w
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
# p# r- N- h- a( Y
7 v0 G, U/ s$ K7 a9 L. A( F3 p$ E/ a% l# t* {4 X
$ vim /usr/local/nginx/conf/nginx.conf- J* v: e3 _# ~, \+ n% j
3 T5 U+ c( o& Q( c8 k3 K' D6 p

9 O% c- ]7 \3 h! ]server {7 G9 G& g6 H& [2 |. l# B
  listen  80;
2 Q: B4 Z8 e! b: |* {2 R  server_name localhost mike.hi-linux.com;% x, E, N& Y3 J' G: @4 E  b
  access_log /var/log/nginx/yourdomain.log;8 I. F$ l& y) w: X1 ]$ ]
1 z# m  ]7 h8 Y9 q

: u. a* z1 O/ I  location / {
- s+ Y% e) L# M3 M  r% n
$ O1 ~6 y) r7 S/ j4 @- O/ n
$ T1 E/ w' h- _, a7 A  modsecurity on;
" f- R* ^( V# b) z& g8 Y  modsecurity_rules_file modsec_includes.conf;
' J7 p5 c% p3 I8 m  root   html;7 s- \, y8 k' Y3 ^
  index  index.html index.htm;: h0 W7 o# g+ e5 x
}, ]; a8 k* F+ I/ _3 G2 h' l8 E
}
! E3 }  y/ V, [0 }( o% ?" Z验证Nginx配置文件' s9 @$ P1 M/ W0 p* k
$ /usr/local/nginx/sbin/nginx -t# s. w# k* ^" [/ s; r
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok& K5 C4 n% {/ B$ o
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful/ s9 `$ C" T( e
启动Nginx
2 R8 ^. n# ]# f! D- a$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
7 C$ [4 F; x; r1 A  o5 N- u: _1 t# T1 Q/ H

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


! ^8 c$ D" S3 P! N

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-7-26 17:54 , Processed in 0.080687 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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