找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 9933|回复: 0

利用ModSecurity在Nginx上构建WAF

[复制链接]
发表于 2017-10-19 17:34:51 | 显示全部楼层 |阅读模式
ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。& N4 z: w( z+ T( |. _, S: h- M" l

0 H$ J3 n- V4 ~- k& G& b& F4 U! d& B9 [% \' A& v8 ~
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。8 O0 W/ A' {0 N6 W3 K9 o
  I* r! \* n7 W

, `  z) C8 m6 Y  ~0 U什么是ModSecurity/ B( [; g% `/ H
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
3 A' a5 R4 O) g9 n
  I4 G+ n7 K) s* k/ h+ A
8 \1 _( @# ]/ l5 k+ KModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
7 r" Z9 u9 T$ J. _$ v6 x# W5 K+ N6 U+ Y8 O; W" i

7 p- j! O" X) ~: @) z/ UModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。+ o: d& N! g& s# H# z) X. J! w
# Z) v8 ^% q3 G0 |# \
, K* U; W' B4 C: h$ n
官网: https://www.modsecurity.org/
) R4 G$ x! i; Z. V! g1 K6 J, @
, E5 T4 ?! s, {7 v% f  \, T
3 e* P& C: n/ _什么是OWASP CRS2 ~' r, A6 \! R; i. l6 b  h
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
' e3 }; i1 H0 i! J) L/ n/ o, D' X# w" [* z, T( J0 M! J

4 ~+ F8 v4 ~; ~ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
+ E, t- q3 t+ \7 J  M( j. n) M8 P+ a% W
) n( }! A- Z; v' x
HTTP Protection(HTTP防御)
  E+ P8 `# }  h- fHTTP协议和本地定义使用的detectsviolations策略。
$ N. D8 d) }( g# [
% {. }7 x& t7 |$ \& Z
) h8 n. K. H$ e" ^9 a0 ]Real-time Blacklist Lookups(实时黑名单查询)) u: Y* ?( q7 ^+ d0 O- D4 P- u
利用第三方IP名单。
+ t& _/ P' ^2 A1 @/ M
' {' L+ M9 f# b: b& m# l& b+ Z- |$ g9 l4 p* z* y$ Y- }& W* q8 ~: r
HTTP Denial of Service Protections(HTTP的拒绝服务保护)8 }) K/ U, D/ V5 u" I
防御HTTP的洪水攻击和HTTP Dos攻击。
. _& y( R. S8 ]0 x3 s% q2 L5 N
$ Q1 m6 l) O* q8 |, @9 _' y4 b# W- B: e4 S! W" G
Common Web Attacks Protection(常见的Web攻击防护)4 j  T( D$ S% x' W+ w
检测常见的Web应用程序的安全攻击。' p, L/ g5 q# c% u. U- i9 j6 F3 V" h  r
0 e% E0 h9 D) {* p

; \) G0 r7 ~5 ]* N1 ~Automation Detection(自动化检测)2 u% w# C0 @) N3 e4 j& i
检测机器人,爬虫,扫描仪和其他表面恶意活动。7 I- c. ?$ }+ j$ V3 G( G

4 A" f: h7 Z7 A- R2 |2 }7 S# i7 T* Y$ v  e' M
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)
4 Z" F+ Y5 c$ o" a: `检测通过Web应用程序上传的恶意文件。  j  \' l  N8 T( K

/ n# H( {4 l) X8 v% b
, Y" }) i& v1 o/ b" h& RTracking Sensitive Data(跟踪敏感数据)
7 w/ W6 j0 K9 @/ D信用卡通道的使用,并阻止泄漏。
! s" u9 r$ M: ~; o, c9 l/ W
  _6 P" l9 j1 ]* H" C* T* G4 O2 I; q+ ]
( ?7 c) B( [$ M* F0 s9 XTrojan Protection(木马防护)
6 y/ B4 `( S9 a. p检测访问木马。6 |8 D* D8 c6 d: K( i: L/ K

! ?# l* b. S+ K& O  b) r+ H) [$ L) N  W9 a2 I  h
Identification of Application Defects(应用程序缺陷的鉴定)' o; M6 O9 H" W- |
检测应用程序的错误配置警报。
$ ?, _' E7 d! z& L- D) Z4 L* k; s) `  F, e

4 v/ m1 c$ U: c! S% QError Detection and Hiding(错误检测和隐藏)
  Z6 Q$ H! t. ?# B1 a检测伪装服务器发送错误消息。+ a4 Q, ?! V  i6 G
# C$ U& j: o% H  V. |: t( h# `

# L# }; r# s7 A- @2 h# M) Q6 H2 |安装ModSecurity
- ]# z+ a" f2 Q软件基础环境准备
, V( K( p0 [+ U% h下载对应软件包
' V+ G, L1 k' E& b, ^9 M* `! l$ cd /root
& g- b/ X7 _; Z: N+ z) i$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
, A0 c" M8 X1 s  `5 d1 x8 T: s' G8 k9 d$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz9 O9 h8 ]% }( O
安装Nginx和ModSecurity依赖包
! q8 ^: S3 F4 |% \Centos/RHEL2 }9 Y# y" M  p; L' q
" @/ ]' e5 m. B
& |, s1 o  N: M6 V- g
$ yum install httpd-devel apr apr-util-devel apr-devel  pcre pcre-devel  libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
4 I: w, s2 ~- B+ {# {9 |1 J# p3 @6 I7 a! }Ubuntu/Debian
. m8 [. k( K1 }1 ^: t( ^3 O8 x; y/ V5 x
2 U* ~) X( ?0 o& q1 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% Q6 @2 S* z) i) d& e2 ~9 n* o
编译安装ModSecurity
4 t9 F! N- l* i$ T; o5 Z* T& VNginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。8 S$ R8 t6 j8 v4 R- _4 ?* U

, K( U. B4 \1 M/ y/ v5 Z% ?- k- W* M4 Z8 C( c
方法一:编译为Nginx静态模块
& k! _: h9 y' m8 P* S* E: T, |8 C9 z6 g7 Y

  f" Y  G' _: ~编译为独立模块(modsecurity-2.9.1)
5 P- f! u2 D- G; [& z3 O$ tar xzvf modsecurity-2.9.1.tar.gz
6 h8 {, ]$ B! {5 ~$ i4 M3 w- l$ cd modsecurity-2.9.1/, Y! b* Q- Y* A: B+ k
$ ./autogen.sh
3 y! o; _5 `5 N, e. s$ ./configure --enable-standalone-module --disable-mlogc+ R+ t& T: m' a/ f
$ make  o" j& A) Z. |% U9 i- r$ Y5 e
编译安装Nginx并添加ModSecurity模块
' L' D6 Y7 u2 E$ tar xzvf nginx-1.9.2.tar.gz2 |4 {" M7 P( V: f$ C$ M
$ cd nginx-1.9.2
" h2 f$ P: J/ e9 N& P$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/
8 m: Y/ @4 M/ e! ?/ R$ make && make install
* n) B3 f# S5 s7 g方法二:编译通过ModSecurity-Nginx Connector加载的动态模块' ~* {6 I# U/ P! G" M: P
2 T# [9 K9 e1 w& N; }: p

7 Y  T- J, s+ |+ C( X, e编译LibModSecurity(modsecurity-3.0)
: z5 }/ o" d# E; [# C5 h0 M/ }" v$ cd /root' Y5 A! F* |% P9 m4 x
$ git clone https://github.com/SpiderLabs/ModSecurity
# J  v7 J6 q$ O* y( T$ cd ModSecurity
" z( x- h% E8 U$ p4 I$ git checkout -b v3/master origin/v3/master* x* m" }# ^, N: y( e8 t# F/ H
$ sh build.sh
% @8 f6 a( E- u8 N# Y  P+ r8 ?$ git submodule init
: v1 T4 h0 M: t3 U( I0 }$ git submodule update
4 V! ^* I+ M1 M; S! ?4 t$ ./configure' n7 _/ e$ R+ ]7 Y6 W5 v8 J& I. L
$ make
+ ~8 |/ ?# K! k" Y5 B3 B* a+ w' Q1 h$ make install
  E3 V4 ?! J  _LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
+ n  Z; N/ `# d5 j. x$ k4 o4 h+ Q+ d& w: \( V

8 T1 j/ P/ u3 P: \1 B' g$ ls /usr/local/modsecurity/lib. Z# L) k3 t. u9 ?
libmodsecurity.a  libmodsecurity.la  libmodsecurity.so  libmodsecurity.so.3  libmodsecurity.so.3.0.07 Z8 a: X( O& g& p& E" m: D1 @5 x
编译安装Nginx并添加ModSecurity-Nginx Connector模块
. h( v, e. _  C) o使用ModSecurity-Nginx模块来连接LibModSecurity
6 P7 {6 G) x, W6 @9 \8 |2 M+ \( w) e

* _  b1 G, B0 o$ C' v+ o$ cd /root. y8 x. T2 s# X- C
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx  L0 ?9 y8 _! p( b6 C0 [* F! K
$ tar xzvf nginx-1.9.2.tar.gz
$ H, y3 F$ G' h) z3 W, z3 e$ cd nginx-1.9.2
, Y1 \% U) [0 ?* n# `$ ./configure --add-module=/root/modsecurity-nginx, B  F) t9 ~7 a9 O
$ make
' M+ O0 Y7 i7 v7 Q8 H( l, M$ make && make install
; v1 X1 \7 D( g, I+ i添加OWASP规则# H, G- f8 P1 L/ B1 u
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
" }2 j* a: t* f3 C) T* m( y3 q- }0 W7 Z4 k! T. r2 B( O

- i9 ]" {0 R( }) z+ u  M/ J下载OWASP规则并生成配置文件# a. g+ U- C% N# d
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
6 y* m1 p6 f& ~' ^* l) c; T8 Y( K9 \$ cp -rf owasp-modsecurity-crs  /usr/local/nginx/conf/. W1 t" `7 j3 W* A
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs( h1 ~5 m" G+ w4 y
$ cp crs-setup.conf.example  crs-setup.conf8 y5 r- [  q2 {
配置OWASP规则% W. l5 e( a, W7 Z. B
编辑crs-setup.conf文件/ k( V0 E; n; _1 e

# u0 V( O: Y8 K6 @0 R# ~
$ X7 e% Q- H! K4 l$ [$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
* D$ P% @" R( I. D$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf1 a; b* S7 `: M1 k8 g9 u
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf# E6 P4 Y7 Z5 b; N
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf: \4 r$ f7 b1 B6 {
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。  u3 M0 ~3 a4 L' Z* v0 u

( y" O( O3 o9 H; |6 u9 W- [5 Z; r5 ]
$ K% ]' A3 [) r+ o, q' R启用ModSecurity模块和CRS规则
9 [, ~" F& w0 n9 M: z, ]" ?' h4 n* y2 W复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
" y0 }0 q- n" E9 l2 v  P
2 f  ]- w& J' f* m" b+ n( c, K8 }9 w4 C1 q
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。
0 B5 s1 `# ]8 ?& p: f# M- S' n- V  @6 C

( v: I/ Q" x$ c+ k, C! N! b$ B$ cd /root/modsecurity-2.9.1/( G/ X, c2 ^7 B( e) t" S
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf  
; z0 _+ [9 M/ t8 Y8 _' b+ A6 t; J* C$ cp unicode.mapping  /usr/local/nginx/conf/, n1 a- l! _5 P/ P+ l
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。/ Q% h1 g& G0 l# o
; P) ]4 J, q1 K( s
9 P3 P0 T( }6 t
$ vim /usr/local/nginx/conf/modsecurity.conf
1 M9 L' T7 O1 s+ OSecRuleEngine On
# {9 G8 ~/ x! Z( A  hModSecurity中几个常用配置说明:9 @# d# O( X/ G

& N: X" G. A2 D3 C7 Y# I9 z$ s+ G4 i' `2 x; \
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
% X5 ^$ O- \% ~( G- F) G6 V) S% T% u1 C

/ y, C6 p+ X. R& O+ ]( ?0 Y# O  e% N% o2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
4 r1 h) Y9 m3 R* h- g# P( A7 I+ x
1 v/ ~. u- r- s) I
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。# a7 K+ j9 I) w/ F; a. u
3 C9 z4 s& r$ o5 C4 ]3 N  G

8 U% n) ^1 m/ ]3 |; I4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。' d, o# D9 N- |7 Q  ~2 R9 N
0 ~" A- u8 i& P& Q

/ E* G0 M8 O, s" D1 V: O9 E' g在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
' q. Y- ]9 q- c0 a" P3 a# V
# P2 U& R7 u% p
6 |* q+ K5 x0 A. m; n' t" S$ Y3.x版本CRS
0 y# b* U4 Q' Z4 i; g7 C* K# s$ cd /usr/local/nginx/conf/owasp-modsecurity-crs, h# D7 |9 i. o, h! {/ U
# 生成例外排除请求的配置文件
: K: C2 B$ R" c: K7 \$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf$ U& y0 F5 K+ @( i; [7 P
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
6 Q4 Y% c, t4 v3 o$ cp rules/*.data /usr/local/nginx/conf
# c, W% Y0 z: a5 r为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
8 i3 d: C7 ^4 n9 D0 J; T4 a* q, l8 ]

8 p6 b: y! c, A$ vim /usr/local/nginx/conf/modsec_includes.conf, P0 r" Y) o+ U3 t" N6 X4 m+ B, v

( Z2 w# E8 L' q. e" z, u
[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 x5 C" X- O5 z3 n" t' s0 I

$ c: [  B# Q+ |3 e8 H' p" D- G注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
; c% j9 O. M5 ~, m1 @8 |5 v% l9 G
) _/ B1 o" ^* j/ R/ x. t- u% u
2 N. C$ r/ \4 Z, K9 }6 a配置Nginx支持Modsecurity$ t0 s; Y' X& P+ Z* M/ U2 Q
启用Modsecurity
3 v/ [) v6 R+ P' [. [6 c使用静态模块加载的配置方法" b/ J& Q. b- u
在需要启用Modsecurity的主机的location下面加入下面两行即可:
6 B+ [' D" s) Y/ [8 X: \/ S
9 k3 R" N/ E: `! n+ ]: t) J6 S) c1 B8 k$ L2 w
ModSecurityEnabled on;% O( A  j" h/ ?" D, ]4 x7 |  w
ModSecurityConfig modsec_includes.conf;
! w4 X; ~6 L7 f, G. _7 w+ p修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
, b/ @/ f( @: O2 S7 v/ [$ O6 F7 K6 H( f
$ J6 P3 c# D, Q9 x+ _
$ vim /usr/local/nginx/conf/nginx.conf
  p3 d4 f' ~( D( a" J) ^+ Q3 d+ }) b9 _4 O4 T# e4 m5 o1 o
: o! M# {9 u5 h7 \" D% i
server {
- Y2 ^, L. @1 w% Q* K  k  listen       80;
5 g. M  R" X: T8 a2 D# n: `  server_name  example.com;
6 W: p2 M5 t+ F! R2 g
% ?' W( L  c8 b- ?. B
6 ^/ @* L: t; z  location / {
; H( F* w& L7 @    ModSecurityEnabled on;
- f+ c; _$ a: J3 a3 j4 n. ~$ A& f: K    ModSecurityConfig modsec_includes.conf;  y" ^# Y. N5 z, g1 T
    root   html;
% B8 z3 H7 P/ P* S. f    index  index.html index.htm;2 j. a$ E5 N/ v$ `5 d
  }
- g9 X/ z& r6 U. A+ L0 h+ v. J$ t}# j$ c. R+ e8 j) Q2 ?) Z& x% ]
使用动态模块加载的配置方法" u! K9 O0 u( @% l
在需要启用Modsecurity的主机的location下面加入下面两行即可:
4 d6 h' _! X- t5 k, N' g- C% I, r! m. X5 z
2 ?" u4 c6 M4 W- `2 Y
modsecurity on;5 b7 Z& M& L- o/ V! ]
modsecurity_rules_file modsec_includes.conf;
9 K, J; k1 |1 i+ Y修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
; a+ `8 s! E$ ~! V/ v1 k7 ?5 r2 K+ O7 \

; T3 S) r8 ?1 z& K5 j$ vim /usr/local/nginx/conf/nginx.conf
$ G/ J+ y0 Z0 d! c& @1 v( n. i3 A% }7 [' X. @0 [
- f# m6 t; G( w" r3 @
server {
5 N8 H: F( r* a: m2 M  listen  80;) h; z1 B$ Z5 V: s$ Q
  server_name localhost mike.hi-linux.com;6 C1 G3 J8 e) q
  access_log /var/log/nginx/yourdomain.log;
( X" O" c/ ]5 j5 |  K, t
! ]0 v) g( s6 R- J/ |0 G* I% \6 C; X: Y; X8 e! Z7 ~
  location / {9 V: L& P7 o- s2 ~

) K7 X! F9 }( F2 w2 n& d- _$ z- N- ^2 i1 A$ F( S9 {
  modsecurity on;8 d  v3 [. v2 F* G9 I* T( g# J
  modsecurity_rules_file modsec_includes.conf;! p  Y( {, b. {" b0 o
  root   html;
% T( T& U: c( [' d0 C" A  index  index.html index.htm;
% w" q1 ]  O- D- q}7 o; i8 `4 h& ]  T0 k8 O. Y2 _
}' s5 M3 p) K0 w+ ^+ E
验证Nginx配置文件
: D% m! X, K0 b% I' }0 W$ /usr/local/nginx/sbin/nginx -t
% z- p: `- M( b3 d& Y+ c. K& anginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
7 e6 b/ Z2 p- O5 Q5 p- D9 fnginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
7 X- K" Y( o6 I+ Z  W; h启动Nginx% y1 Y. m, l8 a* U1 V$ c2 K9 h
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
9 ]7 s& t9 Q* j3 c" e% B) N% u3 u9 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能够战胜更多复杂/未知/混淆的攻击模式。


4 Z# n1 t- m, a7 q- G0 C

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-1-12 07:12 , Processed in 0.060918 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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