找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 9804|回复: 0

利用ModSecurity在Nginx上构建WAF

[复制链接]
发表于 2017-10-19 17:34:51 | 显示全部楼层 |阅读模式
ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。% ?6 O" B7 `3 B+ e  q2 r7 _
$ q$ K( V) L) V( S4 q" Q5 D1 N
: v; L' r( m3 [& H- t
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。/ b" O' I( {& h$ H
8 A) |% [) u) n5 C. |, R4 q

$ Y1 H- j* X9 {3 t  B什么是ModSecurity
' K/ F  i3 \: H) fModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
+ |7 ?5 [3 g! w% v/ }) Q" d* [$ r  o1 d% V! {! p
, a6 v) j# g5 v2 l6 ?) z
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。& B. M6 G# |; |/ M! m" p
8 c) O) A; _" M( F/ V

2 M; G7 t* ~& n1 C1 cModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
& l$ _( Q0 H+ D3 x- r6 O, B( N; ^' ?; U2 u: Q! r

$ F3 w4 t' H# M; F0 \; u官网: https://www.modsecurity.org/
  G, [& W4 Y: j
5 m& Z, p# ]# L! P( o- ~8 x6 w* u5 w* x. U" D% u/ t
什么是OWASP CRS
) q: X8 V. Y" D6 D4 \( X, J5 COWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
0 \# w  r: W: R8 i% Q/ D3 Q6 j, f( d' ], j7 I
# J7 @6 C% r$ K! X  d
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。  q+ C& w: \: v% K/ N

, n9 @5 H  x! K
; W# o* `9 g9 O( E/ Z  U" ]HTTP Protection(HTTP防御)- ~* U$ `8 E2 f6 ~, y' \
HTTP协议和本地定义使用的detectsviolations策略。
0 E# j' I$ y" U( K3 N
9 k2 G2 y' R' b! z! ]0 u4 Y$ \* M
/ r2 A6 V& m+ N8 d: Z, l, UReal-time Blacklist Lookups(实时黑名单查询)
2 V, k0 |0 z. ]' w; i3 L* g利用第三方IP名单。7 e: n$ G- ~6 z% }5 x. U

) x8 j; ]2 h2 P0 V3 n8 X
8 l; y$ U3 k) K7 ]  k, MHTTP Denial of Service Protections(HTTP的拒绝服务保护)
" l3 A8 X5 f" o8 ^防御HTTP的洪水攻击和HTTP Dos攻击。; ~' u2 J' B) [. q* G2 j

; J/ f+ w1 Q- {: C( V$ |, y  F# g
5 K" G1 k  E# _2 ?Common Web Attacks Protection(常见的Web攻击防护)
6 v  b1 O9 S% k1 L& M检测常见的Web应用程序的安全攻击。# y$ V% x. L. M
4 S/ h0 D. S0 i. w' H

- j* w: L: t& x4 A. h: G8 N; Z5 OAutomation Detection(自动化检测)
; n! ]7 H7 a6 ^) K5 Y/ o& n检测机器人,爬虫,扫描仪和其他表面恶意活动。
" O. T$ U$ K( \; q0 V4 P
* R, ]" E7 H8 ?4 D* L% k7 ]" b+ L! K. C2 N
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)
3 {/ H% y0 m9 J# `; {: p/ }检测通过Web应用程序上传的恶意文件。
. ~" K8 V$ e( A' B' I
. _) l; O: P& D* T# m
( e+ a. M/ e3 ]. W. _7 jTracking Sensitive Data(跟踪敏感数据)  c  ?3 L2 n# w; [+ {; G* P
信用卡通道的使用,并阻止泄漏。& t' R7 h# t+ y4 A# F0 I
* n3 M, k7 i, r( _4 d! B3 |2 t

6 `3 {( O6 p1 W+ r' D- m0 c: Q% ~Trojan Protection(木马防护)
2 Z' Y7 C+ z6 ^( K. h; ]6 e0 c检测访问木马。
, X- u5 I. o) [. |- l) u" e. L$ l' w9 y$ m  A# v

: ]3 a5 Y/ a+ ^5 `+ Z7 z# O3 x7 rIdentification of Application Defects(应用程序缺陷的鉴定)' m6 F3 J+ C; ?  n0 R* M/ ?
检测应用程序的错误配置警报。; Q, n/ R' z! b* L
& ~" o; x' g. {2 g/ _4 @

' _  i- k! f5 s1 aError Detection and Hiding(错误检测和隐藏)  [% V/ {& Y) p5 Y
检测伪装服务器发送错误消息。
: Z/ K; A: {  E. R7 `0 o( Q  V  i  d! Y
( u$ K3 Y: X1 Z/ e% ~
安装ModSecurity
& V9 S6 V- @4 Y! O软件基础环境准备- m$ L& a8 `- B4 ~8 t! l  q+ V
下载对应软件包
% k# k) \5 W! E- [$ cd /root
: N' n$ P; J- Q3 q5 R$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
1 g3 L6 {7 J9 z$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz, `4 {& K$ P/ Z' R$ X/ u% j. `
安装Nginx和ModSecurity依赖包) V. x1 O# R5 ^
Centos/RHEL$ U" v7 x- E+ O# K' ]

! v6 i/ ~& S: w8 |" {8 ?* _( G& ~! z8 T2 x! h
$ yum install httpd-devel apr apr-util-devel apr-devel  pcre pcre-devel  libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
- T* e6 f' A5 a/ J6 A. V9 J; J4 KUbuntu/Debian; @8 }& d- U' ^9 E) o
* A0 Z5 Y2 z$ u
$ r8 f' i' X# @8 u) @
$ 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# v0 S& c4 x/ z
编译安装ModSecurity
4 w# a9 F3 ], ^  q/ ZNginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
2 c5 b0 J6 g+ [4 _4 H
+ e2 \* g  r. F1 R+ O* S& y' k7 @  R3 E1 Y9 I4 B  z* A+ h, b
方法一:编译为Nginx静态模块+ K# {/ o# i2 U
4 g% F6 z/ d- p) T6 e* m

, H9 q8 f7 A6 w- l) U$ J1 A$ {编译为独立模块(modsecurity-2.9.1)
, \8 Z# P" C( }: k# b: q8 M$ tar xzvf modsecurity-2.9.1.tar.gz
" h* }2 P+ F% c6 J$ G- ?$ cd modsecurity-2.9.1/1 P. _( X) o0 ~  Q( ?. r
$ ./autogen.sh
6 c; ^9 |( E' y$ ./configure --enable-standalone-module --disable-mlogc5 J& N( x5 z( A" l
$ make
  [7 q; l2 l1 c/ K编译安装Nginx并添加ModSecurity模块  @; ^+ d( c+ A& ^1 i1 H
$ tar xzvf nginx-1.9.2.tar.gz) o) b* l+ r0 F! N
$ cd nginx-1.9.2
& O# Q! ?- H% K; }5 `9 k* j& a/ r4 S$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/
8 \& @7 s% d" W1 Q0 i7 {! F7 W$ make && make install
, ?) e/ Z  L2 _: v- J方法二:编译通过ModSecurity-Nginx Connector加载的动态模块' y) V0 t7 r8 P* m8 l

* y4 O2 I9 P, s$ N7 N2 d9 J" E- L& u
9 [* l& Z. e( N0 k编译LibModSecurity(modsecurity-3.0)+ m# |. D; A" G
$ cd /root
3 o) ?. b, b: A  Z2 j$ git clone https://github.com/SpiderLabs/ModSecurity
" o+ p6 K6 d; I1 K9 y( d: L! I7 i$ cd ModSecurity
/ U9 m) D; p% [8 G4 _$ git checkout -b v3/master origin/v3/master# Z# B/ W1 j- C
$ sh build.sh
7 X& N4 ^$ y1 i9 V/ Q) j9 O0 n$ git submodule init# z- S0 C9 X) k/ {% _1 [1 ]2 L1 a
$ git submodule update
: y9 x& D$ B: x. V( A& K6 @8 ?$ ./configure6 t) J/ \7 {& u8 ]* F5 H) c
$ make0 W' U' c6 c* J# q8 X, w, w! Y6 Y
$ make install- P  c4 E* ]* @8 k! I
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
3 m- J* ^7 Q% T$ a8 k6 J3 l
& ]7 w' g+ {0 Z3 P3 A. j: {- e  Q( o& C+ O1 K3 Q
$ ls /usr/local/modsecurity/lib
, h- N4 M: y/ S* K# V6 ?libmodsecurity.a  libmodsecurity.la  libmodsecurity.so  libmodsecurity.so.3  libmodsecurity.so.3.0.0+ a! [) i0 p4 C6 x
编译安装Nginx并添加ModSecurity-Nginx Connector模块- ^9 ~- q, ~) v' H. f; |( @: e
使用ModSecurity-Nginx模块来连接LibModSecurity4 V* @% J+ J$ b3 v& T! B
2 j, |: p) G, y9 t. Q
8 R* k, P3 }) S% p( N: a% w
$ cd /root
6 |2 v8 v# j9 \& z. C% }1 @$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
: ?3 X: q' a9 S1 T2 @8 _6 [9 Y$ tar xzvf nginx-1.9.2.tar.gz
" R9 @% T2 a+ u$ i: p) F6 }$ cd nginx-1.9.2
( b, H: m: [# Z$ ./configure --add-module=/root/modsecurity-nginx
: h# y. n, Z: P: R7 M. o9 K' c$ make+ Y' z" C4 X2 X% L& W0 m
$ make && make install! I0 m/ |( E# }' w) m% v3 K
添加OWASP规则
: v' a5 d7 X) m3 YModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
2 _8 t2 g+ Y) s- o6 p' M: k5 n6 o* n! v1 P( n
7 ?1 {) m" N/ j' Q% ?' v3 [& |* K
下载OWASP规则并生成配置文件
3 o0 V2 w% W) k( m$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git: |0 A9 c  [- f) d
$ cp -rf owasp-modsecurity-crs  /usr/local/nginx/conf/: M1 _5 v, I$ y4 d  h- f, `" M
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs& {6 n* a2 t! f# l" L$ ?
$ cp crs-setup.conf.example  crs-setup.conf
) t  V, n% P) q0 x! ^配置OWASP规则
0 H9 P9 |8 w5 E; b1 J, _$ h% @; z: p编辑crs-setup.conf文件
3 w% W  Z/ |7 P2 I7 L% m3 j, S
0 W" E6 [$ }  Y7 _* ~* P) T% w
; `/ G7 V% y3 W8 w& I5 Z; T$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
$ h' l2 l7 @% N9 J$ `7 F2 L$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
/ C; m9 H. V) K6 r$ Y3 M- h& H$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
6 B3 i: {9 ~( O1 G" W/ `5 a' O$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf! j, ?% q. M; w: }, t
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
/ _$ D: C6 z% ~' H: J4 }' g$ n& e8 K: Q) z+ I3 p* \

6 l' s- J, F+ \' ?8 y启用ModSecurity模块和CRS规则
# Y7 _8 p2 N& S0 j  z# C复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。  N# y, X" g; [: m0 g6 b
6 t7 Y; H( w& M1 [( T/ @) Q7 _

2 l' @- G. u5 J% w3 q  z, Omodsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。- [3 X. G: {* D

. F; N( G. u% U" x, m
1 p* l1 q: W5 ]$ cd /root/modsecurity-2.9.1/% E7 H# E' [# g8 ?9 J0 r
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf  9 U4 I" Q2 O- {. ?( V+ c
$ cp unicode.mapping  /usr/local/nginx/conf/! L6 H2 G! u2 A# I8 ?3 R
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
3 h$ D( X, `% D
7 w: {) h% X7 A' n
2 Y4 a  u" t$ K% {* t$ P! B( K$ vim /usr/local/nginx/conf/modsecurity.conf# l. H5 |$ N1 \7 z% F* X/ d
SecRuleEngine On$ G$ h# h* @6 z" W. C# b
ModSecurity中几个常用配置说明:# {# U; |3 y3 ?( g7 O$ s
# T, A# a4 E% z3 J

9 u/ s9 j/ [" u8 [1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。/ ~9 a& \( }' v7 k6 H( u

- ^$ `) h* o: p$ T$ @# M8 B/ p7 @! C& z- O/ P" D7 \
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。! `# i6 T0 O' L/ O- K
) M9 P" q$ s( X

0 G7 Y0 \' b) L% F" C( O3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
% K7 i' L* T' C7 i- \" T
2 w5 _; L  S" Y3 M# H( m0 K
4 I, E; }4 S% W$ k: L4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。
" I6 u. Q% ~3 k/ C8 m3 p" G; p, ]

6 G+ [5 `' X$ K) N' m3 l; s在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。# k5 G! f+ W: y0 ^

) c( h8 a" O, Q4 l$ F6 F. m
& b# N* d9 D: [& M+ A- t3.x版本CRS
. V; J: a% P. S$ cd /usr/local/nginx/conf/owasp-modsecurity-crs2 {. b4 T) r( F2 c4 x
# 生成例外排除请求的配置文件  c% d4 I' }- j& A  f
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
& o6 i* a, e+ e/ a4 D$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf$ `8 u# M7 [, e$ z- t
$ cp rules/*.data /usr/local/nginx/conf
6 t% F+ U  m* R7 @$ K6 U: K为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。' D: w' D. _7 z8 s2 j( |

& T; @8 }4 F' p8 m+ V- c" N% u/ ?8 b
$ vim /usr/local/nginx/conf/modsec_includes.conf6 W( N4 I0 ?( [+ p) V( |5 ~
6 Z+ [* ^, v5 ?$ z1 k( k
[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

: B8 Q4 l5 O  L  [. Z: E: j: T" g7 Y: ^( e5 _
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
" v0 ~  @% w( V' o
  q2 ]$ I, y/ _5 a; U
! j- V9 p' Q& T7 o; e* k配置Nginx支持Modsecurity
) E6 J% q+ _$ u1 D( r启用Modsecurity
" Z& ~2 {+ b. B0 C, Y$ Q使用静态模块加载的配置方法
  p& \- Y* h5 v1 b9 i. U% S/ K% ^在需要启用Modsecurity的主机的location下面加入下面两行即可:3 q3 w( n) y5 u* [, }2 [
' P9 D2 C7 ?  f$ I4 H6 U4 W

* y: q% T, V# {2 QModSecurityEnabled on;! c. Y. \" n+ g+ [
ModSecurityConfig modsec_includes.conf;
$ p7 t' H: B, K修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。* V; u- V6 A7 @+ \* A; s
0 z% I( s2 q  S  s8 q6 |, o; l
+ O* ]1 r2 w, I7 R" A
$ vim /usr/local/nginx/conf/nginx.conf
3 j: |& b# }; j' p2 ]/ w1 ^- }7 G% F/ ^! N" a& i

5 H. {* R0 E7 _6 T2 H/ C& }" b; zserver {6 _. C$ [2 w. q! C
  listen       80;* b9 f/ O* ^0 n9 j9 u2 N. {
  server_name  example.com;
3 i( k. H: w2 C) [5 W; \9 s/ \1 |6 I% ~6 z
& D4 V$ T9 D) z6 Y/ y$ X( N
  location / {
; i+ s6 O7 S  |- o7 [    ModSecurityEnabled on;
8 u3 S  O7 X0 a: j- j    ModSecurityConfig modsec_includes.conf;, Q& Y0 J' j8 B! X) Z+ h) n
    root   html;0 V/ J" }3 X. A2 T: c# R: D+ E. k
    index  index.html index.htm;- l: r7 O" B6 D6 w8 M
  }
+ e: C$ v1 y7 r4 Q}
4 O/ K5 r6 g7 m使用动态模块加载的配置方法
9 P' k/ q2 \) R' L& a) ]在需要启用Modsecurity的主机的location下面加入下面两行即可:- R* S% r/ _! `! F4 \

3 P6 X3 t# j5 h! Z/ V& {1 t! j1 T# C
modsecurity on;
  U' w7 `5 Y2 n: L8 g5 n4 H9 Ymodsecurity_rules_file modsec_includes.conf;8 ?+ M3 k# G* J. J
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
' y. w% Z6 p6 b! J2 |
2 Z' x8 b' T; i* o" R4 P- q, J9 {
$ vim /usr/local/nginx/conf/nginx.conf
" Q/ j7 R! x& i' r4 S
4 E: G7 p6 Z' g1 E( w" t& f5 A8 i" A2 ?
server {5 V$ P* l! I/ S$ L; z. x5 @0 ~$ B+ v% i
  listen  80;/ Q3 S! t- S6 q) _3 }
  server_name localhost mike.hi-linux.com;, U+ t! V' g  ^
  access_log /var/log/nginx/yourdomain.log;
: @$ a4 {: o$ B" U# k% q' w; e, z2 G" y3 B$ q( U. M2 A
; N8 t/ b$ u+ v$ `" {
  location / {$ X) j. ~7 y' X
: ]- M1 H+ ^5 S$ x/ H9 a
/ \! n  o* k2 F. f* H0 W
  modsecurity on;
; @& P" _) ]7 Y) {* O( T( O" S5 B  modsecurity_rules_file modsec_includes.conf;) N* O5 c. g" G8 \% b$ y
  root   html;
: h" L- K- f8 m  index  index.html index.htm;
7 ^* W- y/ ?8 v* O}8 v- V+ C3 w7 @* Q$ [0 _, [" s
}! F  r+ i7 b$ L- A3 u. s6 P
验证Nginx配置文件
8 i% b/ t9 ~7 S7 |# o. P; t$ /usr/local/nginx/sbin/nginx -t
; s% x" ?0 g5 h0 ~' y# j/ E8 [nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
; }- q3 s: g+ _  Knginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful5 w& n# X* K( Q  s* Y
启动Nginx6 z- f. B! D2 g5 Q
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
  W# q0 r9 b% K7 g' M3 f$ P! b1 M2 l! S( Z( e

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


- I6 G* ?# p/ ?+ z% T* b; _

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2025-12-26 00:07 , Processed in 0.041238 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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