找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11023|回复: 0

利用ModSecurity在Nginx上构建WAF

[复制链接]
发表于 2017-10-19 17:34:51 | 显示全部楼层 |阅读模式
ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
1 t( {" v! \+ \6 v: Z# `+ a9 u- G; @. N/ `. W  L
' y, E% G% g8 L
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。1 U# ?) ]+ {" E0 |  F2 r

! ]2 y( K1 N8 }* K0 z. s2 k+ m( L# [0 J2 [7 {/ m
什么是ModSecurity2 o1 c& ^. e+ G& |1 `: Q! H
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。6 Q1 [) Z; O" X9 p
# G* E- M" l4 j1 p8 ~/ C$ y+ @9 c

0 l5 P, x- A3 W6 w! hModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
+ N; j$ U% `5 S
+ S- [7 J9 F# L8 D$ U$ @1 U9 i$ x* J
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
  B3 S  i" a" ^  r1 ]5 e8 G( \6 ]9 J7 X& `' S
5 D/ i; A7 y( _% s. C# D0 X
官网: https://www.modsecurity.org/
% {& w; U; ]( l0 F5 C  d- g5 V" n% K  \! n2 a2 w& C4 w$ p& B

; [; L* |; t. [什么是OWASP CRS+ F( y3 W# d9 Z* d: ~. L
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
# h. w" y% M, _" W" w$ i9 l
, d2 s! L! ~- b/ K) S
# y% n- R3 S+ `' z2 }ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
- ~6 P) N, U2 w0 ]2 A
, @: \: ^& `1 x
7 e* j2 H* K; e9 R+ a$ W* Z* k5 RHTTP Protection(HTTP防御)* [! w8 A) H% Y9 J
HTTP协议和本地定义使用的detectsviolations策略。; @+ Q! l4 W3 T% m& s9 I
# u5 k' p: y! i9 Z0 `) u

' j# Q3 L9 L  V& t. ]Real-time Blacklist Lookups(实时黑名单查询)% Z) f, v( O+ f" p, j
利用第三方IP名单。6 B2 Z2 A2 q1 U* B5 _

) y& |. O) t: D4 S2 d+ Q) K- s
HTTP Denial of Service Protections(HTTP的拒绝服务保护)
2 ]3 G) Q! a* ^) Q7 \& d防御HTTP的洪水攻击和HTTP Dos攻击。
9 }6 c/ {. ^# ]' N- {" T: v+ x# ^; A' V# I6 M
9 b9 Z7 _9 n, c( m* T; v# h
Common Web Attacks Protection(常见的Web攻击防护)
  ~$ p4 `5 M3 N# ^# S检测常见的Web应用程序的安全攻击。
6 v, t, }! f6 Z- N' k
# Z5 z- d* G8 C1 N0 O4 {: W
+ t7 j8 [/ Y- A  t2 X( |Automation Detection(自动化检测)
+ n" {3 C- y7 Q8 U! o2 N% W检测机器人,爬虫,扫描仪和其他表面恶意活动。1 X7 }8 M8 m! g, m4 t; I: R+ f

! E! v, u3 x* j+ e3 w5 z  H4 ?% a+ S0 J
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)) A& }7 K6 _1 s8 o
检测通过Web应用程序上传的恶意文件。
- C% _9 B0 A  c! {3 \: ~7 e
! [4 ]' E& J! _' s, @2 y0 D" m' {2 r) F3 t
Tracking Sensitive Data(跟踪敏感数据)
# ^0 H7 h8 p6 v1 \, [0 o信用卡通道的使用,并阻止泄漏。2 j3 L3 D- j4 p& a2 `4 E% h
# c$ h0 }" A- H

* F0 I; N) @8 p, I0 l3 F; S2 ATrojan Protection(木马防护)0 `. e; E/ w+ h/ R( b
检测访问木马。
7 }3 {; Y! ]/ ^0 a4 u6 T2 u6 v
; b8 W1 L! A9 d+ E
& f2 z5 U, V3 Y9 j( cIdentification of Application Defects(应用程序缺陷的鉴定)
$ }. U! l* @, N% @检测应用程序的错误配置警报。6 h9 [; e! B: [+ O! U
1 }) I! x  z3 @) {

8 }: y* z+ d5 `+ P# nError Detection and Hiding(错误检测和隐藏)! y% p$ a" V0 h4 H0 W; T4 _
检测伪装服务器发送错误消息。
  `* S2 e" V; i5 w8 x
! u( |) k8 i' G* P- E% Z- n+ U! p$ _8 @/ X  ?: U: _' M" l
安装ModSecurity; S7 T( m/ `9 X. D  h5 i" |- ], n
软件基础环境准备2 i3 F2 s6 O8 c0 k! A# s
下载对应软件包( w* L! g7 I5 M/ e* a
$ cd /root
8 W2 h; o4 E4 S4 Y. {0 X) H+ \$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
7 a9 ]$ w( x0 f* Z1 n$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz  S) O* C  {; p# s; P# B# n
安装Nginx和ModSecurity依赖包
1 @8 V/ I7 B! QCentos/RHEL( y2 M6 w5 _: t8 b

% r' X( P% x6 w1 j, m( g. I
3 b) Y0 T/ a3 Y/ E- u* B$ yum install httpd-devel apr apr-util-devel apr-devel  pcre pcre-devel  libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel% v( o4 i. K! z& a" x1 l
Ubuntu/Debian
, [/ B9 Y* I& T1 h0 U  X3 e
5 X; n9 N; S! o$ d9 a9 n) S0 F/ A( G: k- ^$ K
$ 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
7 V  B  e9 W, J1 n3 x编译安装ModSecurity5 ?! d8 E7 C& n* v' R
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
: L  S" i. A3 N/ e. K* `
6 `$ W5 {& [7 |+ q" [
$ N0 I) }) O# u方法一:编译为Nginx静态模块7 Z$ @. J1 Y. T1 `$ v

! h% _2 e4 X1 P9 r4 k6 ~
& t+ [9 U* M6 [% O编译为独立模块(modsecurity-2.9.1)
; g1 Y8 f5 w) S7 ~1 i/ [9 I$ tar xzvf modsecurity-2.9.1.tar.gz/ o4 W) x# k' Y
$ cd modsecurity-2.9.1/
1 D$ o: F" C" W& ~/ N  y$ ./autogen.sh
* u$ N! ?% c0 v$ ./configure --enable-standalone-module --disable-mlogc3 ]0 I* b, J' Z* D4 ^' `
$ make/ R+ Y+ W) r8 P+ f- {# U$ {; f5 k
编译安装Nginx并添加ModSecurity模块
' p- T0 @9 p6 D) v6 C/ W/ m* M$ \$ tar xzvf nginx-1.9.2.tar.gz
  _' h/ H- S. z$ f0 K2 h- R$ cd nginx-1.9.2
. c4 @( N6 l4 u" A1 I9 e$ f$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/
. m* G/ z: V# V) w! K; ~$ make && make install
3 s) K) B& m5 |; T6 Z方法二:编译通过ModSecurity-Nginx Connector加载的动态模块2 p# T( j, d) C( J) J) j! G8 V

% n% {* @- S1 Y& z6 P6 ]3 w7 j0 G' `1 [( e
编译LibModSecurity(modsecurity-3.0)7 x4 Z" h$ \6 Y$ t9 l% J
$ cd /root7 `5 ~& G0 Y$ Z: N) R% h9 H
$ git clone https://github.com/SpiderLabs/ModSecurity( F& t% u  c" o, z$ n8 A
$ cd ModSecurity9 b3 [: W  U9 T7 k
$ git checkout -b v3/master origin/v3/master
9 `5 a7 u" M5 {8 v$ sh build.sh& v5 P, _$ P/ P- O
$ git submodule init7 g4 e, g  \  i& X
$ git submodule update
/ u/ M- Z$ @% l; @: m$ ./configure
: `, s% c3 t; q( q# Y. U$ make9 J; k5 M' Z# `! m! L8 o
$ make install
0 F1 Y1 i3 J, PLibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。+ A) y7 o! ]- P3 z

, T) i. v$ D! Y+ j! q4 ~* [4 O! z/ Q1 n& m  B3 N( a
$ ls /usr/local/modsecurity/lib# ^( ]+ t# q% k6 w$ W
libmodsecurity.a  libmodsecurity.la  libmodsecurity.so  libmodsecurity.so.3  libmodsecurity.so.3.0.06 [) L) A. _" D7 l) r# i
编译安装Nginx并添加ModSecurity-Nginx Connector模块
& X# J4 R; h( ~1 I( I0 t6 [使用ModSecurity-Nginx模块来连接LibModSecurity* c3 r& o) A- Y/ K% S0 d

0 `$ ^7 P. R- t
  A6 Y" g2 ~4 Y3 C/ x2 n9 ?2 Y$ cd /root9 u" t* K" l! ^5 D7 e4 c# B
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx0 D) D) x! O0 ~: m' Y- G
$ tar xzvf nginx-1.9.2.tar.gz$ `" r! w6 K/ ]% F( A) ?
$ cd nginx-1.9.2* }3 [7 E1 `- K& c
$ ./configure --add-module=/root/modsecurity-nginx
& e" z# d8 L5 G% A$ make
- {' l2 Z  U9 _% I: L3 ^! i$ make && make install, C7 n1 X" B% p7 g4 o% w
添加OWASP规则: ]9 Q% v1 g* E/ {4 w
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
) X& r2 V1 p1 `, g; @4 M1 @. s; R* k7 K0 ?+ p: y/ n

' f! \& g# n3 s, Z7 c, z6 f下载OWASP规则并生成配置文件) [' F' d5 c: k3 T/ n7 e: o
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git7 b2 j0 ^) ~1 d8 Z
$ cp -rf owasp-modsecurity-crs  /usr/local/nginx/conf/2 X* c6 |2 ~' B0 d3 ^8 A5 H
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs) y) L1 N6 t, }" |! {
$ cp crs-setup.conf.example  crs-setup.conf9 [4 N; I; s# P+ m1 l2 F
配置OWASP规则: P% N  u) u2 ]4 h- }- ?
编辑crs-setup.conf文件+ w% B5 f* u  `* W! N6 O5 t
6 m; Z1 j* o( \* _- e+ }6 e
4 R! R. j4 K1 e% E, F) d
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf# x/ ^. G& i( k2 a8 u
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf$ ^+ ?2 K, E6 F/ b/ I
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf6 J" L- \9 R! @; f3 M- ^# j: W
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf6 w' D) f& s" R  i$ t- q8 a
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。; `( b6 v! a7 Y; h/ C% e3 }9 n$ }1 I
, i/ H' q+ j( r, p8 s
, d1 F5 {  }( k
启用ModSecurity模块和CRS规则
! O, I  E/ o6 \7 k7 }4 e2 M复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
4 ^1 P. Q& @9 U! ?* s. H+ y  ^& |( E  j, S$ r( f* F4 \0 r5 S: K

# H' j; ~# f: xmodsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。( n/ `+ U5 n9 a2 H& F4 `

* O- T% U+ Q$ r; B6 X
+ D/ \0 `* F3 h) F$ cd /root/modsecurity-2.9.1/
, n$ j/ e3 y6 P$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf  
" N+ f9 W* j+ A& k, o: l+ j$ cp unicode.mapping  /usr/local/nginx/conf/) @( R, c/ }7 \. X
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
! o, ?, X+ ?/ r6 j
* c# c9 c  h5 l; U9 m3 @' j8 v  \$ P  _
$ vim /usr/local/nginx/conf/modsecurity.conf
% O; m# M, g) b+ rSecRuleEngine On7 [" o" g% X# s. H
ModSecurity中几个常用配置说明:
$ }: m. ~" Z0 G; C! s1 q3 J3 y1 o# W3 u5 Q" t, `# q2 L) w

: p& }! ^5 o/ s6 Y  S) q9 Z1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
7 v& t" g7 l* L5 T$ Z) b& L/ N+ l6 {2 I, q: s
) F4 d: ~$ w& E" K3 _1 l
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
+ B8 [1 n8 Y% d# E' B7 J- `8 Y8 I5 s$ w5 @7 [
; J$ ^9 T& w1 W2 d' e( U0 Z( m. D5 K
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
( f9 }* m, L. E& G/ r% D( `" t0 `6 n8 B% Y! Q5 k" C0 H: r6 z! I* G, f' b
0 s! Q8 k/ D; I8 J% ?
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。
! C1 j% M1 F" v# w
. |7 w) f5 o- `$ T, k
3 g) r+ S. O# I6 {( s8 K2 d) `' n0 d在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
& G. h4 T  W  A9 j. x' i
" R0 S) N* l. t7 D: [8 J6 X; Q+ F1 {; y/ D9 _
3.x版本CRS
+ O; X2 [2 B2 i( D  m& c$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
! i+ B6 M7 ~% ?: t$ w, C% T8 {2 q# 生成例外排除请求的配置文件
5 A7 U( h& v$ a% L  `- Z4 K/ f$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
* |1 Z7 n$ N  m$ {% e" Q$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf. D- I* X# p9 Y0 J, y  M+ H$ [. X
$ cp rules/*.data /usr/local/nginx/conf! D4 ]! h% d: D. u5 V/ R0 g# w% u) M. u
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。4 g+ u6 a5 }; n2 c. [

, b2 }% i4 i# M( _% b8 ?) J) }5 H0 R/ X: T: l: \
$ vim /usr/local/nginx/conf/modsec_includes.conf
4 U% Y6 L$ X4 L% u7 k& }& g+ ?/ ?, N; r6 P3 a' e: x( D% B2 m
[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

" H- N8 i! g! C3 {7 Y: l0 B. z1 ^2 v( F% a( M2 ]
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。, K) r, r7 t* z( h

* G0 K; N) }, H
1 W' q( o; x1 j7 D$ m) `0 m配置Nginx支持Modsecurity
4 A9 D8 _( ?% b) q2 ~$ `启用Modsecurity  p- i4 v8 }! {$ y$ k; k
使用静态模块加载的配置方法  G, d/ y* ~- ^% \, X
在需要启用Modsecurity的主机的location下面加入下面两行即可:
) A6 |+ f; b6 c* ?' ?$ ^! f+ n$ }' {
5 c- X8 l" E# v6 ?  e$ s; _% T! o' \% O$ l1 A" _
ModSecurityEnabled on;$ G5 @5 Q$ `; E% Y6 N8 t  B
ModSecurityConfig modsec_includes.conf;. u3 }' t5 }( _6 V
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
4 r# ~: {* d6 v8 ]4 ^' W
, S7 S8 h3 r9 V& Z: k- N2 q  |8 G
! E; Q* ~7 [6 \0 d2 C$ vim /usr/local/nginx/conf/nginx.conf6 Z7 Z8 E( G% l5 @

% l' p  t* g% Q+ D
  k9 v: i& G( l% B3 Z& O1 pserver {
5 S5 p0 i( C( O1 K! v; J  listen       80;0 ]4 P, [; n- P7 x2 M5 A; U4 ^% N
  server_name  example.com;( I0 L8 M. L# a* x

9 \8 ?+ ^0 R6 K
8 D( t2 U) W0 [2 ^( [+ ]- w  location / {
4 [, Q! }) G' N    ModSecurityEnabled on;
7 C7 u+ M: ^& V; T    ModSecurityConfig modsec_includes.conf;
/ T; Q: K6 t; X7 \8 o( z    root   html;
. V. g: C- Y7 h: b  g    index  index.html index.htm;
+ C* F0 ~; T% l$ l# R4 t: ~8 e7 b  }
4 t$ T5 v$ ~, ]1 ]! }}/ L/ m) M3 [! B  U
使用动态模块加载的配置方法" a6 @# m+ n7 C$ |/ a; e4 ]
在需要启用Modsecurity的主机的location下面加入下面两行即可:
0 t: M$ W7 X, D' k
5 m& o+ v. X" F! U1 H  }+ X- S
3 g  h! l% H9 y& _modsecurity on;
$ D0 G1 o  `8 ~modsecurity_rules_file modsec_includes.conf;) ]+ X# ~  ~( R, w
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。& r; d$ x' o+ m" B3 q
8 H* g  ~# {0 W+ {; {) v+ K. u
3 h7 [6 S" }: Z+ `/ k
$ vim /usr/local/nginx/conf/nginx.conf, X+ c$ G7 I% y6 a( m, V- f
$ R# W) x3 J' a& @$ j% x

/ U6 F8 K2 P7 B5 Oserver {
( u" j/ D! {6 _; f# R& }  listen  80;  Q3 N8 O& G- z( G2 x2 Y8 w
  server_name localhost mike.hi-linux.com;+ e0 N* W  |0 T( L. B* k' j
  access_log /var/log/nginx/yourdomain.log;8 _1 N8 ]& y$ v, A
1 n; V2 `" E8 ?6 g7 d1 q6 N2 c- E
' b* l* d1 _2 ^5 A( [5 ?7 a+ ?9 k
  location / {; v, b+ l% l% I9 t) C  G

: q8 a7 d5 d* I5 n% R# m6 L; o5 [' q
  modsecurity on;! c2 E7 M. t4 r) l; P
  modsecurity_rules_file modsec_includes.conf;( H' b4 o# A' z6 u. _6 L0 L, w
  root   html;
+ z# S) v6 M, [0 z( P  index  index.html index.htm;7 q# n( c, N2 a, G5 h; L
}& g# D* {* j4 g+ q( S1 P
}) M4 _$ `  \, L) g% U5 e/ p
验证Nginx配置文件( e: _, f# a% Q0 v$ k
$ /usr/local/nginx/sbin/nginx -t. X/ w3 M+ q! u7 W5 t  F' Y: X8 ?8 q
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok5 b9 |) g7 k) E% w# P( X
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful* q- z& V7 o7 \* W; `: {
启动Nginx' Z9 f2 x2 R3 w3 K" X5 c
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
, r- b+ l* \1 W: h
# f6 A0 v+ v/ k" i, b6 k. l. L

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


, R% k) a+ P- {. j

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-5-2 16:14 , Processed in 0.081047 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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