找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 12500|回复: 0

利用ModSecurity在Nginx上构建WAF

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

/ o+ o) e+ {. V# ]# E7 ?* _6 S- ]
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
8 o, i' f- N, K& i, w
2 t+ R; H2 d6 @9 U9 Y3 T5 g0 R0 ?: V7 C' |, Z& K( o  ?
什么是ModSecurity
" b/ I6 L% X+ d$ [' \: L" v7 `ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
/ e! c$ q5 M9 V2 _2 r/ g4 i$ s0 A3 N* o8 u
1 Y! H- k8 ^' |( e. P6 e3 W7 H, ]& j0 e
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。. {1 o4 T3 H5 `9 _$ n8 Q5 w' Y5 C
# V+ p5 s4 e+ }" o* L
* o( d9 o4 z4 ]4 X5 H
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
, F3 F7 h# l% B+ T2 d( }, z3 j' U  @' ?* G" i# K  F/ m2 S
/ q1 R, D. ?# Z2 w& Q
官网: https://www.modsecurity.org/- U7 j* h" U# d- z1 P& ^- W
+ b) y! P9 Q' K5 I

4 V3 c& O9 d! P5 i: c什么是OWASP CRS
6 v) e3 B* O4 z1 W; i, COWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
4 k. y$ ^8 P- I! s. s- Z6 I9 w6 W* l" `  J" g8 h8 m( i% c* h
$ ?( k6 }* K6 B6 [
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。- [/ v# B0 M6 S# A: h

+ d' G/ q( I. ^# w2 G
7 X1 Z# c6 V9 e8 J) G4 xHTTP Protection(HTTP防御)
4 W3 P1 m5 ]4 U' p* |8 cHTTP协议和本地定义使用的detectsviolations策略。
/ n1 o; F5 N5 X7 h1 b/ g0 @& n( a6 z+ j0 B! S

  a; d4 h0 b- ]2 N. w2 G& H/ @* J* CReal-time Blacklist Lookups(实时黑名单查询)
8 x% J3 E' [) X5 H3 A( m; P5 E利用第三方IP名单。
0 H! \, P2 @+ P3 b8 z
9 ~' z& i( P; [- l; q" K( z5 {% J1 W& E% v% C$ N; E8 d8 H. u
HTTP Denial of Service Protections(HTTP的拒绝服务保护)
, v0 J. Z" d: F) F9 |1 h0 e5 t防御HTTP的洪水攻击和HTTP Dos攻击。! y* D7 J7 o, N: v6 m

1 y% |5 W! S0 [7 V; E& l
2 j; N) J! |0 k6 b$ k: X1 \! }Common Web Attacks Protection(常见的Web攻击防护)3 \) `8 k  o, M$ o
检测常见的Web应用程序的安全攻击。
; D9 e8 r4 e+ R# T& Z( e! @4 k  J% \
9 d# e. K0 n8 E" g  f4 O" @
Automation Detection(自动化检测)4 A; t" Q. X9 F* s7 I3 w
检测机器人,爬虫,扫描仪和其他表面恶意活动。
$ g  _: _1 g+ d0 R0 ^/ ?1 z( h8 f, m0 P; Z/ v

" d7 X/ \+ l6 x+ {Integration with AV Scanning for File Uploads(文件上传防病毒扫描)8 O7 o; s4 E0 r  f2 d4 i* `
检测通过Web应用程序上传的恶意文件。
% P- W2 X! w, b! j& C
  |! V: B. `% f) X+ o( S$ t, P- }9 H- T% A/ H# v2 s
Tracking Sensitive Data(跟踪敏感数据)7 f; o2 X; a8 o; H/ v3 ]
信用卡通道的使用,并阻止泄漏。
7 z* M' g0 X  c. H/ j: k+ e2 l) Q" r6 C' ^# p  d! k

* b  H" q) ?# o* S* F1 h0 uTrojan Protection(木马防护)
$ [* r! }9 o6 d, _" Y+ i& D检测访问木马。
  k0 c) h: G; z7 B8 f( b5 n- K3 V) k2 N* I; v
5 N  r# f, Z/ W) @3 R
Identification of Application Defects(应用程序缺陷的鉴定)$ V8 j: X7 q% l! Z7 i$ e
检测应用程序的错误配置警报。1 t; G. `6 ?6 p1 ~, b
8 W3 L) t: E0 b6 {

8 S: x; \) r+ a& eError Detection and Hiding(错误检测和隐藏)7 ?& Z9 T5 l4 t) W7 i2 a1 z# t/ @
检测伪装服务器发送错误消息。1 V, c/ ~7 K; T' C1 M0 W0 ?
# S" C7 o* W9 @7 W( c
3 ^1 X7 {' J) s, @1 }& T& f
安装ModSecurity! Q: X. j6 ~" s. b* q+ j+ ^; ]" L
软件基础环境准备
) D: C' V; e6 w. N& [. G下载对应软件包
# J* n" J5 D. P, D/ l$ cd /root1 z, i4 z' H- E5 w, B
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'( h- G& l( N- ]) Z/ M4 a
$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz) v: A/ S4 D8 o5 C" e
安装Nginx和ModSecurity依赖包
# {3 B1 u6 |# }* D* K. K2 [Centos/RHEL: G( b* G! A3 m- d' f# ~! E
4 ~+ U, n: E2 W$ a2 J

: ]9 W$ @6 R( U8 Y; U$ yum install httpd-devel apr apr-util-devel apr-devel  pcre pcre-devel  libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
8 l/ `7 b0 z/ ~2 b! E  OUbuntu/Debian
# S2 L2 ~: ~. q' W
/ {3 U) ^) |9 w) f+ _. j( v7 \1 f
$ 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
" r- L6 X% _% I' I% _3 k编译安装ModSecurity4 Y1 R) ~3 K& Z$ }1 l: {& y, O7 g
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
7 Q, B% o& U$ W( D1 @/ g! \! I
8 }) v+ {8 S: v/ Q- ^5 Z& x4 ~) V# o2 J
方法一:编译为Nginx静态模块
4 d) h: J+ r" M6 c. W
1 J0 E- d9 |: I0 Q8 {; O( _
: _. q/ z6 T+ z  W6 D0 R2 x编译为独立模块(modsecurity-2.9.1)& w: h5 x  ]6 k/ l3 s
$ tar xzvf modsecurity-2.9.1.tar.gz
& I5 T  A# a( V  Z. G5 _$ cd modsecurity-2.9.1/
; P* F  _) g; h. c$ ./autogen.sh1 n' c/ d$ B5 k$ Z9 ^$ l# _8 }
$ ./configure --enable-standalone-module --disable-mlogc
, A; X8 r2 o2 `2 {( r! \$ make* t8 J  O/ f; i8 x. A0 k
编译安装Nginx并添加ModSecurity模块
, X* t( E( j+ \$ tar xzvf nginx-1.9.2.tar.gz8 y. C* n, O4 [, z4 F% Y3 w* L
$ cd nginx-1.9.2
# R$ ~- G8 r9 m$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/
  T) Q) U  x! h$ make && make install
* S0 ]  {  A6 `3 w方法二:编译通过ModSecurity-Nginx Connector加载的动态模块; X" L( D# S1 u, R

: g4 W4 ?2 m& b1 W5 {  x- Q& O2 A" Q/ A
编译LibModSecurity(modsecurity-3.0)1 h" K$ W6 R1 J2 t/ H8 a0 e
$ cd /root, l+ f" ]2 i$ \2 E# A  e
$ git clone https://github.com/SpiderLabs/ModSecurity, V: F& R" Y4 A5 V% P5 D$ @: j
$ cd ModSecurity
  k' t( D* J' `$ G: U$ git checkout -b v3/master origin/v3/master
2 @! }  f1 |& T# w$ sh build.sh: X* N7 X2 w0 B& ], m; [
$ git submodule init
+ ^/ b4 ?1 q% S' g9 `0 f: f$ git submodule update2 F+ {/ Z7 s! X3 k: r- W9 U! o: K
$ ./configure/ U* q5 W: G; E/ N
$ make9 D; g6 G9 ?) S
$ make install
% t( y; O) e/ ]! A! _9 d4 F5 @% r( OLibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。8 y; {! j, J9 [2 J
6 G# x1 x! F" H! O+ }$ @
, d. g8 n4 h% ]* H4 c: }
$ ls /usr/local/modsecurity/lib
1 P  y( l4 ]2 _7 z; F. Hlibmodsecurity.a  libmodsecurity.la  libmodsecurity.so  libmodsecurity.so.3  libmodsecurity.so.3.0.0
/ U' d  {3 B$ E. y' I. ?编译安装Nginx并添加ModSecurity-Nginx Connector模块
( j7 u4 _: l6 p: b1 L% b2 [使用ModSecurity-Nginx模块来连接LibModSecurity
' ^4 ~3 r/ n$ L" p7 ]2 {4 n6 J' ~" y: Z+ R% z7 q3 \
1 w* u2 x6 \1 E: Y+ ?9 _' ^3 V
$ cd /root1 D: g" V: D  A0 G* l
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx; R; ^$ @; w. P
$ tar xzvf nginx-1.9.2.tar.gz
  R: A' H: C  s3 X& M3 e$ cd nginx-1.9.2
% r; L8 F5 m" }/ r1 ]$ ./configure --add-module=/root/modsecurity-nginx& k3 f3 X7 B3 b
$ make
9 Q" a2 _/ J. M/ ?$ make && make install, [; g6 J+ O1 K2 a. g
添加OWASP规则/ Y# P, g" `; z" E: z0 Y, Y5 t
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
3 Y  q% H: W& e+ \8 Y+ `, t1 ]0 y5 w$ {6 N; k3 j
3 \* a; N  q' w9 c, |- Z, p
下载OWASP规则并生成配置文件
$ R0 J( A$ D2 M7 B$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
* ]6 y* P1 Y1 a# z; s" r3 T$ cp -rf owasp-modsecurity-crs  /usr/local/nginx/conf/! U# U# w) b6 K6 y, U+ j3 S
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
, j* d5 O* ^1 F- C' @$ cp crs-setup.conf.example  crs-setup.conf$ o9 d7 G1 T- ^& j$ N, a
配置OWASP规则: x" b" c- \, j8 e- M" U/ V
编辑crs-setup.conf文件
5 u" W* E/ X4 _9 u6 n* A, h+ A5 |8 b/ s
1 r2 ^9 }/ N, y3 `6 G
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
6 X4 F: w7 s2 r& A% V! j, ^$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
' {7 S( W0 e$ Z; n! I  @$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf) `) A  ]6 v1 L1 ~" p& M
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
' ^+ e: R7 p* d默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。2 t/ L2 n: V, T! S( g

: l9 P7 Y$ s. E+ \" i9 |: t, i6 }( D4 v9 Z. F9 g
启用ModSecurity模块和CRS规则/ Z  l0 Y6 u+ n
复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。4 X0 B2 B( D+ I% k+ p/ x. {

$ l. f( q7 K: [1 r6 ~: e1 Y8 ]) ~2 ^0 e0 [$ u( o5 b
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。
6 N1 B! B& ]' S. U  u
' Q* |! }2 {; @% }5 b) N, D6 g2 X8 S4 N9 n/ b4 [& H+ p* [3 e4 u
$ cd /root/modsecurity-2.9.1/
' ?$ Q5 J8 I( D- W) h: D  r! t$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf  $ W* D6 C0 X3 `2 F4 F6 m
$ cp unicode.mapping  /usr/local/nginx/conf/" N5 Q2 p, `3 h; {: A
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
% _: n( t1 A; q: X9 K$ A( _
: g' l- m# J) s, R7 Y9 ]6 F8 m) {9 ^" C) K
$ vim /usr/local/nginx/conf/modsecurity.conf' |+ x$ n- Z# Y4 f  f7 D! w
SecRuleEngine On
; O( w+ S4 i) b. k# r# \' [5 rModSecurity中几个常用配置说明:
1 g4 ?4 g7 f4 B' z8 B9 U- ^0 H, r' L8 W4 C/ |& x9 J1 N& X
7 y3 P" E9 L1 n
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。% n1 I" S0 [7 ^0 v
3 u& S2 }! ?) R2 I3 N; ~* C  W2 Z/ Q
' _" H7 e, f; k) h7 p1 @
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
0 i; h5 e9 f" `4 @$ J& u* m0 R. A
4 N% X; U* @% B1 H3 O8 A# ^" s- _; |
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。, \; {: ^% O3 [: S9 y
) F. ]# j: W- p! E- u

% ^2 ?: P3 b# u- A4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。, y8 z! h9 _7 x6 n7 Y5 |8 p( V

  W, z; i) m& t! @% b. k% z; Q3 z& N- s( k0 j
在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。( S: Z$ a' ~5 F$ }$ K! s
3 H- D3 ~: W" u+ a. e
7 F3 T3 Z9 \, h3 w
3.x版本CRS0 a$ r5 }) g0 }- y/ W
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs- [7 V6 L% |/ V* a0 ]7 B  V
# 生成例外排除请求的配置文件
. v% ~+ a5 a  d$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
6 s+ N$ g+ r8 u( a6 k$ ]$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf/ V) ?+ C2 g# \7 C) s& U6 I$ R
$ cp rules/*.data /usr/local/nginx/conf+ h) A7 ~" g7 V9 M
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
, M8 [: Q+ F5 U& Q  }- ^4 G5 m3 u

! m3 Z* G+ E7 }: {4 y$ vim /usr/local/nginx/conf/modsec_includes.conf# t3 i' r, Y+ ?6 O, Q
: Q4 u7 ?. ]/ |" n* w% B! r& H
[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

  Q6 M6 i' d  u8 I6 S
0 m1 H; G) _6 {* E) o注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
+ a9 y8 G& n3 I& G) d: P, M+ ^/ S, @4 X, }1 X! h. _

* B8 `& X1 h5 q' t% N+ H; b配置Nginx支持Modsecurity
: F$ P3 i6 {# P* y; ^+ H' I启用Modsecurity
/ T* {& x4 u* Y. l% {使用静态模块加载的配置方法( L) y1 {. `8 J
在需要启用Modsecurity的主机的location下面加入下面两行即可:
  y5 K, s) \6 E# @3 `7 E% k1 w" m% g! t' T9 ~, r: Q( V

" @' s9 \8 h) ~/ v, E) Q; w& ZModSecurityEnabled on;
/ B0 z# k' q( Q# ]! x2 l" OModSecurityConfig modsec_includes.conf;
; B( x0 L6 f6 I$ U修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
- K+ m% E) I" U% G5 |& @; W/ |* N
1 Q" |' i( D  Q  |
$ vim /usr/local/nginx/conf/nginx.conf. I  C2 ?" |4 `3 P3 O, Y* P: B$ A
& J* w1 {& b* T- @7 V& G) C
) c) L; }6 u# y2 I, [
server {
' e9 b( e# @# p  listen       80;+ H; h" v7 c' D$ j
  server_name  example.com;3 ~7 r% E0 q. b  e/ q
, @/ f: n  a( ~, ?

% `/ b) y  d5 U6 o  location / {( v3 D$ M8 J( R# R1 c- s2 Z, c: {
    ModSecurityEnabled on;
$ a5 D) N1 ^/ l( a6 c2 y  E8 B    ModSecurityConfig modsec_includes.conf;
) M% q6 b7 h# o4 N    root   html;
9 Z: `5 {1 ]9 ~- y. ?    index  index.html index.htm;
4 P9 V9 s# I* z8 o' I+ @  }
4 K0 }4 t" T. z3 |1 x3 N. h0 K1 j9 N}/ d# o( N+ X. F- C2 q1 v
使用动态模块加载的配置方法) ?0 I0 B3 b. _; Q" o9 {
在需要启用Modsecurity的主机的location下面加入下面两行即可:
' v$ ^5 h# m' Y, `0 y
& W( f' J! D% h' I8 q: Y% W0 x, g, ?1 n. V2 Q
modsecurity on;
; [4 I+ ~0 J7 e3 m# _modsecurity_rules_file modsec_includes.conf;  b% d1 ^3 ~% G& [$ z0 h$ U
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
6 c0 _9 l" _( `: K- i0 A/ v0 B6 T8 D- G' m# V$ U, U0 ?
" Y" d7 x, h, u! k1 Q2 {" d
$ vim /usr/local/nginx/conf/nginx.conf
6 q9 d6 L! d5 q+ G* L' ^0 d" S* P- P0 l- }3 V
9 @$ d; z& }0 P1 V, l( v
server {
# G+ V% Y1 N  F' F  listen  80;
9 u) C/ `+ o7 e4 @  server_name localhost mike.hi-linux.com;9 ^* T: S( w9 [! C* `
  access_log /var/log/nginx/yourdomain.log;: u# u7 m% S* J5 I1 \) O
7 l$ M7 x7 H* {  d: O
$ ~' ?9 N/ W# M# R5 M6 B7 a
  location / {
, D, M! n1 ^+ e1 o# g2 d# k- T% I1 I6 O, ]: q0 A6 f* Y% i5 J

* ^; l, Z  N7 k) r8 e  modsecurity on;
5 l/ ]+ W. O2 Z9 y, [8 e  modsecurity_rules_file modsec_includes.conf;# W6 ]4 m; m/ h+ V& l
  root   html;1 _5 ?0 E! A6 e1 Z
  index  index.html index.htm;
, f3 F7 s- j" ~' W; v. p) L) a}
% o  ?7 S9 c; g0 M: e( J" T+ j}( F/ J: |/ P, q, M# \; G/ N, v
验证Nginx配置文件
/ U9 f. r* l4 G$ /usr/local/nginx/sbin/nginx -t
, ]+ g8 |3 F. H8 ~6 q4 Cnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok; M4 H+ P! y2 ^3 _3 N$ I6 H5 G" `, h
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
9 X3 Q+ }, a0 f; f- g; I  _启动Nginx
7 L3 S. C5 y* `3 j$ P$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
  G- B& q2 z3 x9 e6 K; ^+ }) S9 `4 O" J% M, l; Y, Q

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


/ Z1 z* k* q3 A) d

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-10-4 12:38 , Processed in 0.076987 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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