找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 12581|回复: 0

利用ModSecurity在Nginx上构建WAF

[复制链接]
发表于 2017-10-19 17:34:51 | 显示全部楼层 |阅读模式
ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。. Y: l* c7 I$ {
$ E$ q! Y9 @9 C6 c. W. c
0 {9 b& b" `/ U/ T- a. R
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。8 M' R0 u, D( R, f5 l( |- \+ x& Q
- `( u6 I: A* t; G
% k" s6 r7 z) r& h+ U
什么是ModSecurity
# k% a" y$ Z* E% v5 |) mModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。, u( [# H' _4 p; @# `' g/ i# W7 m4 D

3 c3 p( t) I" }# B: H
  G# @: g* i3 L5 f$ P! E: OModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。9 n4 M5 T( e# o

* q, X8 Q; D4 a* z0 D3 o) I! t
: ^; O2 E; I3 T9 }  W  s5 OModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
9 ?3 e0 I8 ^3 u6 {
* b9 ]$ Y1 o6 V, a/ n
7 N/ N. T0 |- a  K' }+ P官网: https://www.modsecurity.org/
2 S- K( Q: b( }9 l8 D2 n6 z% s3 v1 o; W

# P5 B  v+ H" _0 E* s4 k' G, m: v什么是OWASP CRS
, w8 r7 X+ q5 [, p. m/ y3 o9 AOWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。- q: W# N1 J/ y3 l3 J7 t, K

0 k/ f, ]9 L- n# F0 j7 y. g( [, G, E1 c7 E5 b3 G
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
6 t0 n! t8 d0 Q8 |6 n3 s% l+ Y$ M7 L0 ?( X

0 {8 [, ~( Q8 T9 F; YHTTP Protection(HTTP防御)
3 y; o+ V7 k+ |& A$ ~; _- f  yHTTP协议和本地定义使用的detectsviolations策略。# e; \% M- I) F/ [' w7 C; e6 h

- k) J! h. n. d1 I
$ s2 V% y2 Y' X- vReal-time Blacklist Lookups(实时黑名单查询)
# \/ i. U% E* y  [利用第三方IP名单。* ~2 x/ a9 }8 n; {
* Q+ x: {! L4 K. c

7 q$ H4 V! V1 `3 L; n( z; [HTTP Denial of Service Protections(HTTP的拒绝服务保护)! M# z4 I6 O. {1 A+ Q
防御HTTP的洪水攻击和HTTP Dos攻击。
! D) K$ ?: q! O6 z6 J  M
" S' o" @* R4 k! a2 A5 Y$ [1 J; e' f+ D; w) C3 s8 h0 j7 L
Common Web Attacks Protection(常见的Web攻击防护)( p3 N* u: C' z& t& l' S
检测常见的Web应用程序的安全攻击。1 e: E; Q7 R! U- {+ G, ~# e
' E" S) [- C  Z& X

6 Q* @8 W6 X# A- o* TAutomation Detection(自动化检测)  ?/ ^0 H' e; ~3 U! H
检测机器人,爬虫,扫描仪和其他表面恶意活动。
0 M5 z: H) y0 }/ K& I2 C! f+ q' c& \
5 f+ @: S; Z: L/ s- F6 g
6 k- {+ P+ d& p& j. r$ FIntegration with AV Scanning for File Uploads(文件上传防病毒扫描)
& O; z# f  |' M9 L检测通过Web应用程序上传的恶意文件。
, A2 u" K( E  ]2 y' w! T* Z
' L9 Z, J% U5 b) f: B5 n* a7 G) d
Tracking Sensitive Data(跟踪敏感数据)9 U0 k$ e0 T- o  D# Q
信用卡通道的使用,并阻止泄漏。; v% p$ l$ e/ t: X

' H$ H( h: U3 y/ e$ R$ h  d# G# C+ o+ x  W: }) ~  N! {
Trojan Protection(木马防护)$ i  N9 `" E' C& [& d6 T! _
检测访问木马。
5 T1 k0 j2 D" T8 M6 O
/ T5 ^$ }- b1 i6 [: @4 K
5 W: X7 V- Y/ N: E1 GIdentification of Application Defects(应用程序缺陷的鉴定)& M5 C7 ^9 P8 f4 z  X& h
检测应用程序的错误配置警报。
1 V, p# E- Q" T1 s1 r$ {( P+ X' f. I* d: l4 s
! o- s1 n  v1 j; r7 C$ E+ B
Error Detection and Hiding(错误检测和隐藏)4 F+ ]% F6 ?# M8 T. S1 P
检测伪装服务器发送错误消息。, }, U( {2 E" u
8 N# V6 N5 Q3 y8 l% H" r/ ?5 \1 H# V3 z

7 N% T/ x& a* F安装ModSecurity7 d7 x; H6 I; S
软件基础环境准备
- x0 m* a: Q9 Q& X% Y$ I- f1 Y下载对应软件包
! \$ D7 k1 L$ Y3 E$ cd /root
& A8 I3 `8 H+ l+ ?% [$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
: U) F# S& ~& \5 O  g$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz) a9 Z* ?) C% g7 @$ i
安装Nginx和ModSecurity依赖包, s8 F" _+ }2 X+ ~: N8 m
Centos/RHEL
$ _6 C6 ]1 J3 A0 ?6 u) P% n7 z6 o5 X2 @! r7 Q

% [6 ]  f1 v, R* c8 q4 V$ yum install httpd-devel apr apr-util-devel apr-devel  pcre pcre-devel  libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
# @4 r+ b% B4 |7 n9 ~Ubuntu/Debian  }6 R; q4 \" x; {0 k6 `2 N
3 V& H. F  u0 l7 k2 C% Y

5 y) ~! p' \  U- M3 o9 w& I+ ~$ 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 v1 @& l. G- r编译安装ModSecurity1 A# `# v' d7 }
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
0 K! ~7 \% O" W" A
' @( }. \1 m/ }
8 H5 ?7 n6 A7 R( ]方法一:编译为Nginx静态模块! x. }) C: w6 q+ g8 e: k8 J

, [- \2 U) n* Y* I
- L1 b! F9 }3 o% B' D编译为独立模块(modsecurity-2.9.1)& S6 W  ~! @2 d8 `3 }
$ tar xzvf modsecurity-2.9.1.tar.gz( c; V1 b! y/ z, l$ r/ v
$ cd modsecurity-2.9.1/) b% A8 t9 R$ I0 A
$ ./autogen.sh$ \5 g! j# u$ O' @( R
$ ./configure --enable-standalone-module --disable-mlogc
, t$ v. r, ]+ c( c3 Z% _. E# `$ make8 {4 y( U6 L& D( n8 c1 H0 t" Y
编译安装Nginx并添加ModSecurity模块
' z0 Q! z! G4 M9 k$ tar xzvf nginx-1.9.2.tar.gz. {6 m3 D8 p' P5 Z
$ cd nginx-1.9.2) W2 e7 Y) ~1 l1 e' g. E1 v9 k
$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/2 V2 m/ M, {9 Z! a
$ make && make install3 `" r& X* z, R6 o% M7 m4 J
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
3 S) a' X! j" \: q" n2 C
9 m6 v3 f9 |7 m6 P, Y
, D- g6 w9 J( V3 ?0 d# y编译LibModSecurity(modsecurity-3.0)
6 i9 p) A1 a& [$ j9 Q$ cd /root: ^& J' C0 x- }' W- u
$ git clone https://github.com/SpiderLabs/ModSecurity
; I8 _# I* V9 N: r9 s$ cd ModSecurity, v$ B, s' }. Q+ ?0 D7 O3 d6 X8 t
$ git checkout -b v3/master origin/v3/master9 ?6 H$ R# a1 o) X
$ sh build.sh
3 }( {7 w  |3 c7 q- _+ [$ git submodule init+ ]) W2 Y- C0 N( Q) T$ P1 `
$ git submodule update6 s+ f% x9 c0 Y4 c
$ ./configure( [4 c* x. S4 S( w0 s
$ make8 r9 [7 _$ I# y3 k7 F
$ make install
. \, h! w+ I* S: aLibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。# R2 f" A% M. Z1 V/ ]$ d

+ `- X( d1 @0 |" U# A6 [! b5 {7 t+ |, T$ M
$ ls /usr/local/modsecurity/lib
( v0 w" G1 i5 Mlibmodsecurity.a  libmodsecurity.la  libmodsecurity.so  libmodsecurity.so.3  libmodsecurity.so.3.0.05 h; Y5 W' d$ A7 I2 Y' A8 `
编译安装Nginx并添加ModSecurity-Nginx Connector模块* N* h8 C+ p& j
使用ModSecurity-Nginx模块来连接LibModSecurity) ^2 w' z9 X2 J/ ?+ ?

: C7 J( R5 \3 S! O8 U1 p/ U( [& [4 t9 Z& l
$ cd /root+ U1 e4 ?: C" f: Q- ~
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx0 i- n) e% U/ t- H# A
$ tar xzvf nginx-1.9.2.tar.gz
# K) X1 K) ^! G$ cd nginx-1.9.2
. I+ L3 w# a+ c. P" }" `( z: D3 E$ ./configure --add-module=/root/modsecurity-nginx3 j0 v. g! |! E; }8 {" f! ]; ~: m
$ make$ `1 h! U3 @' p3 J- j
$ make && make install; l. W7 g5 E% x% d4 y8 N
添加OWASP规则9 O( |+ W. x( g5 J0 w
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
3 k( W" B1 M4 b0 N/ P% J
' {5 u+ k: B6 t) X/ J
! B! U; j( g: x+ V下载OWASP规则并生成配置文件
# _, Y% `# k( N) F  J5 a8 P% j% [$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
2 Z6 s$ W% ?' p% w$ cp -rf owasp-modsecurity-crs  /usr/local/nginx/conf/
: f, H( I6 @- {, ]; E4 J6 I' c$ cd /usr/local/nginx/conf/owasp-modsecurity-crs& d/ t$ v7 m( C. P
$ cp crs-setup.conf.example  crs-setup.conf: N4 F7 P# v) _* }+ \- u
配置OWASP规则
) z- G1 O9 R( x0 q编辑crs-setup.conf文件
. g6 M; r5 {* R6 W+ }7 W
: A- @# G2 M% o  r2 R8 p) a; j, {* K0 G7 q" ^
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
7 P0 @+ c  b( h9 C% s' {7 v7 k0 L$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf& h6 Q+ A' w4 G
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf! B1 o1 S) B: }" V( u+ P
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
0 m  X  H3 V2 \+ ~; s# J* g' m默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
" [) M* r2 ?" \6 Z" ]9 F+ X
( a. g0 v- X! f8 n7 v6 Z- p  a, A/ K+ B  i- A  D: C7 b
启用ModSecurity模块和CRS规则4 L; P8 [! |% N6 R
复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
% b$ E2 Y' e  D* i& S0 q+ {, G6 N3 _

" D+ L' |1 y; N+ N" p+ vmodsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。
; `+ W# q  r: C5 \( w
: N" l$ S$ s4 r. T5 W7 f% j; ]  ]
$ cd /root/modsecurity-2.9.1/% a, t0 h( ^$ V+ `' h7 ?
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf  $ g3 c7 |+ ^* O
$ cp unicode.mapping  /usr/local/nginx/conf/9 N4 a& {5 I8 I, h: |7 F0 f0 t
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
7 D( t" q' M8 }6 B! F
  p( E& [7 `% H
( f$ o2 u  b( H: y4 E4 H$ vim /usr/local/nginx/conf/modsecurity.conf
0 A& ]6 P( o3 g5 e; ~4 [2 l5 ~SecRuleEngine On
9 ?0 ^7 Q7 M7 zModSecurity中几个常用配置说明:# }0 C) E: g6 t2 {( ^

# S0 l, _( P  U7 J8 L7 C. R5 L* {5 W6 k/ m# h5 ?. g+ a( \
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
1 E# e; Q. D2 n2 H) }0 ?; p! }" \+ E2 z

2 n! t8 A& |, L& h' f# A8 T2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
% j$ k9 i% }% Q* s
8 S. S/ u0 k" I6 M2 }
- x, K5 i6 i% i+ J+ y* Z3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。! k9 W, i4 C" m3 N" W! B

. @! p6 O- U7 \2 B( P
' M: g  h) h+ q$ j. n) |% ~0 N; B( \4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。
! t3 C/ ^+ S. `5 E& c) i4 }8 Y
6 X5 Z" J  ~) s+ n, Z% X; V. H/ n3 h' p1 g9 V
在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。! @. W4 F8 {5 R$ h
' o- Q: M! j- R! E$ o- J6 E0 A1 T

, t& }  x9 K- ~7 q3.x版本CRS
+ ]' _, }* B. A6 i+ U  p$ cd /usr/local/nginx/conf/owasp-modsecurity-crs# N0 L' _0 R% P/ Q4 z
# 生成例外排除请求的配置文件+ x* u2 e: G. }5 X4 ~- E; k- H
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf$ t5 }1 K7 }; E7 h0 e4 B
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
; R8 h0 C$ t% O; U$ cp rules/*.data /usr/local/nginx/conf" r; ^( T. i7 D' A' }- m: y
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
$ X) |  E6 f, q( U; F1 v7 h  x/ [0 P6 R' i! P, i/ |4 y

6 S8 l2 r" g7 \' J/ b$ vim /usr/local/nginx/conf/modsec_includes.conf
% v& d1 c" A9 I' A) c- U0 h/ v" x, Y$ u5 b0 N5 H0 Q# L5 h/ e, l
[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
- _" o- j, j7 u/ V/ l" L# V
- u4 F3 X9 z8 h2 \) n+ N: _
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。, K* q7 Q, C8 m

: ^: O: R7 t# j" M3 K
  q: N9 j; V( l. y配置Nginx支持Modsecurity
- c6 X- J7 E1 e: w. U1 P  }启用Modsecurity
. j; T4 h( ?, M! k2 s( I# X1 n1 j% O使用静态模块加载的配置方法
  K7 B, L  @* K* Z+ O0 |在需要启用Modsecurity的主机的location下面加入下面两行即可:6 _2 C$ ~1 S4 G5 S+ P, o1 Q6 C
$ T6 R& B" X6 E) T4 x
* H( G9 w) H" q3 m
ModSecurityEnabled on;
7 N) O5 S4 u! x  e! `; ^ModSecurityConfig modsec_includes.conf;
" {1 w: G0 x$ s9 N6 h, c& v修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。# G. m; v- p& \

5 h+ x8 N# v; t5 f$ t1 X$ I& I2 |: L
$ vim /usr/local/nginx/conf/nginx.conf
! J& N5 O! j6 |8 _! s7 s3 R- f! t1 T( w! B/ l  t
2 q( ?  e% z8 h; b
server {5 Q* x7 q  n- v2 B2 r  b- ^
  listen       80;. S0 V* C. L$ {0 e" ^1 v6 E$ d
  server_name  example.com;
" D9 ?7 b* E& N/ ^4 p, x: I  L# H

0 \* _' `) s* I; C  location / {" L  m. U8 ^! f" k# T
    ModSecurityEnabled on;: G; p) H0 R. n+ e$ V
    ModSecurityConfig modsec_includes.conf;
8 _- U, ~+ w1 ~2 [& T8 n    root   html;
- m  y1 f4 U+ B9 R. H    index  index.html index.htm;
/ x' H( J  A: C+ Q  }( B4 s- I) d& w5 _$ f9 E
}
: R) H/ F* u  i2 M* V. ^使用动态模块加载的配置方法
' {" \. O3 m/ S! `" d8 b: e在需要启用Modsecurity的主机的location下面加入下面两行即可:
0 z0 p* }( d' i) O' v0 T( O( y, N9 _# \/ G
2 ^9 ~" l' l7 L
modsecurity on;; `0 |' u# R+ S8 I9 |' n
modsecurity_rules_file modsec_includes.conf;
2 f* N* ~& q4 y1 K3 \1 v, F修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。  L6 {0 W  w2 h# z9 A# `' K. t1 n
7 L+ s5 p; \) t+ Y& d" \& v' G' C
8 O. Q9 j% L) b: Q
$ vim /usr/local/nginx/conf/nginx.conf9 ^% ^4 A8 u( o1 @& r
& O; G! p0 {& i; _

4 Z- y$ p  A/ ^) v/ @server {  q) U) v. C+ R2 K0 ^& Q6 J8 G+ e
  listen  80;
9 K% w6 a: w+ k7 a4 E  server_name localhost mike.hi-linux.com;$ Q  V6 c0 j) O- V6 B% a
  access_log /var/log/nginx/yourdomain.log;" Y! L* w5 `: s' C
6 ~; q5 @2 T( e

6 V2 V; N6 ]+ j( a) z) c$ y  location / {
$ b$ \* `/ `" _- ~
$ H: n, e& `/ p& F& A- G, |' b# b1 [6 t5 S- y' F! \; v+ `3 j
  modsecurity on;
4 [# \2 f9 P! E( L' N  modsecurity_rules_file modsec_includes.conf;3 H# K( r3 z: S
  root   html;$ q0 x; f& j5 H$ H
  index  index.html index.htm;
+ f% }  q5 b6 A0 H3 j" \! g}, k3 N. s; C0 ~* Y
}
. n) H% ~6 u( f" C验证Nginx配置文件
6 N$ c4 a. U! B3 N$ /usr/local/nginx/sbin/nginx -t4 B! n/ {& o& V8 K8 V
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
4 D, v+ p( t- Y" v/ P5 G! ]+ pnginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
! k, q- {* X9 T# ^4 X8 T启动Nginx
& y+ ~" F. j+ S9 ?& b# Z$ N$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf- v4 f5 Z8 C5 P0 y% ]

, ~8 z9 c6 c. a4 x  [

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


( ^7 D  R6 a5 \: D  b/ K1 v

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-10-15 01:42 , Processed in 0.093765 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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