找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11242|回复: 0

利用ModSecurity在Nginx上构建WAF

[复制链接]
发表于 2017-10-19 17:34:51 | 显示全部楼层 |阅读模式
ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
2 M" x0 z% I1 |( ~$ a: x9 [- b* ~4 w: Z4 O$ u6 I4 B
9 X$ x) S& I7 k' M  R/ o$ M
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
9 i; a, \6 B5 ~8 W2 T* {, s8 O3 ~4 M4 u& y: @0 L1 O
. K+ a0 V; ~+ Q
什么是ModSecurity" W8 R' u; F! @* e. L; G
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
0 O4 V1 ]) e0 y" w
2 }! x0 K( N/ ?  P
( K. V  i: V7 b  }  \ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。2 |8 c& y' S/ y" b
6 J5 q3 ]$ S7 h
9 K/ f8 D/ F/ I: X5 ^3 t. ^5 _
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。6 f$ X  o  _! B+ M% g9 J
9 u! P. Z7 L0 Z# f6 P  ?. T
% l9 R) H; W/ L% s3 R( e' h
官网: https://www.modsecurity.org/
/ G- v  V9 B6 Q
, ^7 M1 s: d& y* P* D1 i* F* _! O( I6 }( A( K# R
什么是OWASP CRS
1 A  U4 H1 t& s+ gOWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
) }4 l3 h7 I+ \" G
4 \" B7 O) G) w0 q. ?, l" m; k' Z  o- S( Y/ ?
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。& s% P& S9 U: |; ?  [6 a

8 I  k( ]) i! ]& x( `& \; F0 n: {. G2 n, ~8 l/ B+ P! x( k+ E2 l9 ^" e
HTTP Protection(HTTP防御)
1 y  @* ~" W1 gHTTP协议和本地定义使用的detectsviolations策略。; H+ Z8 a$ e2 a' ^" p/ M% p* t
2 N$ q) U+ Z0 D# G. S
0 e& G2 y* r+ ]: o( d
Real-time Blacklist Lookups(实时黑名单查询)
9 s& S' p: [' r+ c- P0 r: Q0 r利用第三方IP名单。" D1 c& F8 E# Z7 |7 Q/ J) M
8 v' }; g$ z7 W. @2 Q) @3 [
! `& m# g( c% r) t3 m: u8 a
HTTP Denial of Service Protections(HTTP的拒绝服务保护)
' \. p. X! ?, n* Y8 T6 l防御HTTP的洪水攻击和HTTP Dos攻击。9 K$ Y+ g* n+ d$ P7 q9 f7 _9 @
- ]. q$ T0 |& H. U

+ ~1 U: D2 i0 \( F& A( r# [( c6 qCommon Web Attacks Protection(常见的Web攻击防护)
4 i, h# `- b/ {1 j- {; V/ x' X; s检测常见的Web应用程序的安全攻击。
* u2 m) ~+ g8 T3 h. s
. o% _' k+ Q1 t6 L9 `: ~% ~5 s& `3 R% v; i+ l* ?6 t# o
Automation Detection(自动化检测)
3 ]# m! y0 g7 |; a/ {检测机器人,爬虫,扫描仪和其他表面恶意活动。
- ]1 u1 R6 h5 a2 J' e; B6 F/ X- d6 U& ?3 r# I8 }1 a; G
$ |# Y2 u) Y$ d& t, {, v
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)' m6 k5 _6 S' C0 H
检测通过Web应用程序上传的恶意文件。
) U" k8 s( j6 r( u) D$ o+ f
' f* @* M1 ?0 c( @
4 a3 J9 X3 e3 q# |6 `Tracking Sensitive Data(跟踪敏感数据)
6 W0 }3 i! E0 K& G信用卡通道的使用,并阻止泄漏。
2 w: Z5 m1 I# D' R  V
1 `$ A' H2 u& _" Q1 ]* a4 _. a$ v" D/ A% _( C3 W
Trojan Protection(木马防护)
/ ?: j& {! q+ C6 C. i& \' N检测访问木马。
. l/ l4 S4 D$ l/ v/ E
0 R3 }: Z) ~+ B$ j/ R$ \& r4 G0 k' h2 u& i% l9 c% c
Identification of Application Defects(应用程序缺陷的鉴定)! [+ ?3 Z4 W/ V5 d/ d6 s( p
检测应用程序的错误配置警报。
. }  q: ?, d+ D8 D
3 }! l- K9 Z& A6 j9 l" w, c$ I5 R7 w: r
Error Detection and Hiding(错误检测和隐藏)# ?: e5 O3 ^! ?6 f7 I6 z( R* b3 n
检测伪装服务器发送错误消息。
* \6 i2 M/ |' j) {/ [5 D5 Q2 c7 d! I7 ~# g/ x* F
0 b, |( P) J& ?, G7 z
安装ModSecurity+ j. k6 M4 W; S0 f: ]8 C
软件基础环境准备& ?: F" ~- D0 ]1 _8 R4 N
下载对应软件包! o) l0 x2 Y) n. x# q4 T) v& x3 f
$ cd /root# \# r7 }0 N" z# l
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'1 q. V6 v3 K0 j1 `4 C, C
$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz
  J  ~5 P7 N4 w% g# {% R- q安装Nginx和ModSecurity依赖包
2 I8 B+ q0 W: F. c- MCentos/RHEL1 R1 K0 J" C! D2 q- X& {

1 A% `# }2 f8 H- t/ u
5 U  g9 @+ a3 S$ yum install httpd-devel apr apr-util-devel apr-devel  pcre pcre-devel  libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
6 m- n8 R! M# E" i4 {7 ?4 d. wUbuntu/Debian8 l$ Q& j6 M8 g& a0 W4 f
. n* w  h! T/ X! }

) x; z# P: V( i. 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
1 G) S# K2 _1 N% J编译安装ModSecurity
9 @5 z6 X3 Y1 ~* P+ p* J* ]) e1 _Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。# P  a' x+ d" i5 F! w. y1 z
3 h( ?% G  n; ?! P
: X% q2 s& q4 g0 M* \( T, }0 s
方法一:编译为Nginx静态模块
8 D9 n" d4 a1 g4 B' B
- T1 d$ D* L) J6 G! v0 `' D" J7 C  ^  ?5 s' B. e0 e
编译为独立模块(modsecurity-2.9.1)
7 l9 o  U1 m. ^' J3 Z+ p- T# ^1 m9 p$ tar xzvf modsecurity-2.9.1.tar.gz! ]" }% n" n  M# _
$ cd modsecurity-2.9.1/. d) ]- b/ Y  L1 c
$ ./autogen.sh
3 [4 o4 O& g8 I% I1 z; k: A- @$ ./configure --enable-standalone-module --disable-mlogc
. F/ p/ B5 E, P; G$ make0 J$ m- L8 H: P7 f/ p" B
编译安装Nginx并添加ModSecurity模块
$ v! Q  X2 B! @$ tar xzvf nginx-1.9.2.tar.gz
. c- b, a  H/ I- w' U& b/ V$ cd nginx-1.9.2
( ]) O' `* ~+ o* T% {3 l$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/
, C, J& @8 ^4 K0 R7 r$ make && make install8 E5 s4 B2 F1 w1 V( k5 m
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块! `, s" {% i) r& C/ U3 v
- O/ L# Y! e- Y
8 E! G" N5 T! }* C
编译LibModSecurity(modsecurity-3.0)
0 Y' F& m- K0 O9 \& w$ cd /root
/ l; K% Q" X. B2 [! c" }$ git clone https://github.com/SpiderLabs/ModSecurity) t; l5 u% c1 g/ ^% L! y- X2 l
$ cd ModSecurity
9 [) ]: g3 [3 x% N$ Q# x$ git checkout -b v3/master origin/v3/master
. s9 m7 B* D0 J, B% B, t+ K$ sh build.sh; K9 _  A- }" {7 Q- U4 d
$ git submodule init
, h# S$ Z9 r6 o; D! b$ git submodule update9 t! Q1 e% l$ P" h
$ ./configure5 M1 B5 M% y! w0 A  l8 _2 d7 x
$ make
" q" T( d$ y0 g( ]# I3 p$ make install
$ }0 C; W% _4 @: v' b* H  B7 f3 H. tLibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。9 I' P. r) Q* o5 [& u

: ^: ?+ [# n) z' `5 G# @; Q. j# A. D0 ?$ w; a; I* M
$ ls /usr/local/modsecurity/lib
, J1 C1 T* u' t% {libmodsecurity.a  libmodsecurity.la  libmodsecurity.so  libmodsecurity.so.3  libmodsecurity.so.3.0.02 {6 ^) V! G& C, J
编译安装Nginx并添加ModSecurity-Nginx Connector模块- L. o8 Q% J3 f3 U: f8 a
使用ModSecurity-Nginx模块来连接LibModSecurity1 n' @5 K* [+ |/ n( `
& [  p1 X# m" [1 V0 a

- k% q  Y( R7 u! M$ cd /root
: I. \- ]2 u) D5 g# e1 U6 r4 u$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
# h0 ^& j" k# T+ l+ u: k6 Q$ tar xzvf nginx-1.9.2.tar.gz1 q4 i; B# I' [
$ cd nginx-1.9.2/ f: U$ U8 `8 H& z! ~+ D
$ ./configure --add-module=/root/modsecurity-nginx
. @+ [! V+ I6 W1 d% H$ make5 l3 W6 k' G3 D* C! u
$ make && make install- |( G- b: D: W7 V4 s* ]3 J1 F' z
添加OWASP规则
' g: K& k9 [8 h. K1 Z2 ^ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。. {. V0 ?0 A& F9 E7 f& I" k% e

: X, x9 g4 \5 @0 I7 T, |: m/ t+ @  c, {0 L; Z7 ~2 T  f0 [
下载OWASP规则并生成配置文件: N/ i3 K0 P7 o* X) ?' V: D
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
& G9 V2 D$ v1 F$ cp -rf owasp-modsecurity-crs  /usr/local/nginx/conf/7 b. D( Z! g  K- f  i4 e: m
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs0 l1 l1 {/ d& w9 J/ C% P
$ cp crs-setup.conf.example  crs-setup.conf
2 f2 i  r0 \+ h* _配置OWASP规则. G5 i8 O5 A" w! Q" {2 |. K
编辑crs-setup.conf文件9 [" d* E0 u6 [4 x' B* }
6 M; U" h0 W8 v: k* {

. P: I$ B5 P- Y' c- m& f7 }: o* z$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
+ L" e0 U; i% C0 R& D4 Q. ?8 [$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf. w' N8 E& k8 A' S. ]
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf' d1 ~! B2 w$ W' C2 u
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf4 K0 E4 Z; k* V$ }2 g7 v* s
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
. [$ u+ Z; k  h, V5 i' u8 m) d* }9 L; }. Q2 _/ j+ O6 l
' ?5 m8 [8 ?+ {/ V
启用ModSecurity模块和CRS规则
+ O5 c/ y3 ~+ s复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
3 y% r, l, A9 {/ n+ z  k  K; S0 F! e7 [2 R

5 _) }: m: V* `3 o4 d( O; lmodsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。
% n: [$ a9 L, F$ `, M$ s, _( z3 ~

# E9 z6 B9 r- e' _3 X6 `# D$ cd /root/modsecurity-2.9.1/2 `6 I; p; e# K; G0 f
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf  ) L9 P/ U) {% p
$ cp unicode.mapping  /usr/local/nginx/conf/
- H+ `  l& V, F  v5 }( v将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
* z" F; v- T5 \4 l8 I$ T0 @
$ m$ @9 W( y$ Y$ H5 E7 b$ x7 p+ E7 y1 I
$ vim /usr/local/nginx/conf/modsecurity.conf
2 v' f5 h5 {2 Q5 y+ ^SecRuleEngine On1 w! s$ f" _* i" Q
ModSecurity中几个常用配置说明:
" F5 g& r) \# G& t9 l2 K0 R# I( V+ R0 n& D% @1 {
6 K. F5 q2 o/ |2 R
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。1 v8 X. f; o" ]% y6 e
9 ]) e% c) T  h
  P+ E! L- G: _% c
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
+ N! m, m6 U8 x- N9 g3 }+ b. J$ }! A1 E# U+ e1 b8 }5 `  t7 \( U' e6 ~
/ s# W3 ]& I. B- X0 N; r" {
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。4 Y3 b0 b4 l/ `$ d. v% }

& T- U( Q* Y. B1 O
- k+ h, h/ d5 k5 `- }' _4 S; i5 u4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。
7 N) C$ y- b- Z! g" y
& x" t! o; C0 N) x: C
4 e( P- X8 g/ S- w+ E在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。+ [" y2 W, f. U. V' r8 @- Q
7 J6 b4 _" `* D1 U

% l# o7 ]1 C7 p6 I3.x版本CRS- U4 _& @* H" D; }6 W( j
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs; I5 Z6 G( @9 E
# 生成例外排除请求的配置文件) Q5 R. q% S) v
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
9 {0 z. U* e4 C2 _4 z7 Y$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
! l/ N% N( U  O% |1 n2 t$ cp rules/*.data /usr/local/nginx/conf( u& W" E9 k$ c  l  B3 N: u# G+ `
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。4 `8 i* Y; N3 p! j& F
+ P: R7 d. S5 W) e. C: R
5 {, `8 t! f8 ~7 t% j; P9 f# F
$ vim /usr/local/nginx/conf/modsec_includes.conf) Y3 B; {/ X/ c  \* I# Z" |
4 r7 a! |+ H. A# p  q
[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

: z% h1 u/ t) R
3 m0 s: S! ^$ N" i- {8 t. S: \5 [注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
+ E# Z) C. I* o0 A* u# r1 u
- K- K4 q- n8 u9 V, `/ O
# J- _% t% c, g; k" K( b1 n配置Nginx支持Modsecurity
6 [1 ]. C# E5 [启用Modsecurity9 j( G) D( Z- ]7 ^5 u
使用静态模块加载的配置方法
! f* v  C) J# k, l) O9 b在需要启用Modsecurity的主机的location下面加入下面两行即可:. ]2 r/ h4 _) Y5 H$ b
4 d$ D0 l6 s+ O' r; s" |
7 S5 w# i* ~0 |5 J# O- a& K  A
ModSecurityEnabled on;
! }1 P4 y( a* O* |& Q0 ?; L& sModSecurityConfig modsec_includes.conf;
( c0 u' L! M) T修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
. t/ i/ Z" \. J
) H9 |$ s: h  e( H3 g: Y9 Q
& o' ~3 {4 L" b# `$ C( ?$ |$ vim /usr/local/nginx/conf/nginx.conf0 y! ]  |/ V& C2 k/ d2 B

- ~) X0 O, P. y
! R* `4 g- s2 L# Qserver {
# A9 M% A) E: }  listen       80;
0 s7 a/ C; e. Q+ B! L( w! B  server_name  example.com;3 t6 K- \3 `4 B& @
4 U* f* C- X& K4 i: x3 l

" U+ s7 c6 C* w* i6 J4 \  location / {  G  A+ S. F8 Z0 T
    ModSecurityEnabled on;& k. z( u/ a4 M9 h8 X: @# Y  G1 E
    ModSecurityConfig modsec_includes.conf;
3 ]: \7 x+ O' y  i- F  H    root   html;
! ^. l; N3 |6 V1 V3 ?$ }: c$ v8 ^8 s    index  index.html index.htm;, a- j5 H8 c3 a6 e
  }5 \- [+ O. n2 l+ g
}
9 k( I4 G! ~! x/ R7 r2 [使用动态模块加载的配置方法6 |( y6 j; A8 H) F/ ~! ^6 e
在需要启用Modsecurity的主机的location下面加入下面两行即可:
4 }9 Y8 l$ r! ?8 W) Z7 R7 {* c, k0 A' K# n

* N  l6 |, n. A3 @. cmodsecurity on;
9 R; v. b: x* h$ {, l: \* Qmodsecurity_rules_file modsec_includes.conf;
" }$ k! p  i, y& G. W# Q修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
: P% r' y. ]9 R) |# m+ {. _
$ t3 u+ Y) y% B) L1 `8 ^
* b8 r) [$ o5 `) X( I( h$ vim /usr/local/nginx/conf/nginx.conf
  M+ T2 i' a: X" }7 {6 |
  q0 g; @; j7 K# |* K5 Z; _% R4 E# m0 l( R: N- m. x1 ~
server {
% d) y1 ?8 n" P! T& ~7 c% a  [  listen  80;
. a8 z( H, Z' ?0 q5 \( p6 s6 s  server_name localhost mike.hi-linux.com;1 O1 j" O! i/ s! h/ x
  access_log /var/log/nginx/yourdomain.log;
1 r/ v( R, r0 z/ _9 k& @/ U* i8 P; ~7 E! e  _2 N& N, E
' p* f, ]) l* j- T
  location / {
8 W# m' |) b0 E7 |6 v  d# }' p9 g" {+ k! N1 v7 G

% M4 q& i! O3 J, c  modsecurity on;0 u4 C* ?& O+ x! b/ I
  modsecurity_rules_file modsec_includes.conf;- B1 m" i3 F' L
  root   html;
& I9 y$ g  {0 k/ r) a, c5 ~  index  index.html index.htm;
* O7 {: j+ i9 w( Z' D8 _}6 q4 y# F1 M% P
}+ T& a! r# }3 `/ x, M7 b. {- T
验证Nginx配置文件! J7 w- L) `7 E- d9 S. x8 S
$ /usr/local/nginx/sbin/nginx -t
9 v5 n0 g, I  @$ F4 q1 [8 Vnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok8 |1 b9 g* Z& B% D
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful. i: O8 O  B4 D
启动Nginx" f) G" a* j8 z* i, P3 c* g
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
- x! C7 r8 e% s1 n" O* x0 t& E0 R: r9 y0 i( B3 b: w

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


$ z* S1 a3 w( m! x3 B

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-5-21 06:51 , Processed in 0.078936 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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