找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 12200|回复: 0

利用ModSecurity在Nginx上构建WAF

[复制链接]
发表于 2017-10-19 17:34:51 | 显示全部楼层 |阅读模式
ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
) f# _& c. @5 B# C" t9 Q6 o  c3 B: Q

) c& O, R! g& a* `+ A; E在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。( n0 G5 L5 {5 y8 A4 F# V# c
; b! t7 J3 a% R/ v

- q2 E2 ~7 Y9 j什么是ModSecurity
* o6 D) e, G! w- N# hModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
" P4 s) i- G& _" m4 P3 ~2 \8 ?9 f& O( v9 M- O% z, M
  }# V/ C6 s* y0 L" N& ?
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
# z3 n' V/ v( L! F3 z9 J- E  p
$ o; R( p2 w7 R  m5 @
) o9 y: f. [% a) p$ a; FModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
2 i! {4 v7 E. g
: x+ S, H( ^. E* m8 w& g  ~5 H
9 g( y. X/ O. U+ Z官网: https://www.modsecurity.org/
# y& y  P6 K( M' _; S3 d1 \# c! }! Q+ f! E
( U- H6 M% r5 b* M$ O  ~
什么是OWASP CRS7 p6 ~) |. m: d/ b3 I' a
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。9 J4 _3 ]# \% P* ^, |8 `* E9 N+ ~* g
+ G  x- _. U) F5 ?2 Y& V

3 }, V- o. K# p! R' j: LModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。7 @/ W3 J8 ~+ }8 j9 e( i

# V$ ~- r/ w# E- u" t- ?" k& S
, g4 Q. O9 ?$ b5 Z  }HTTP Protection(HTTP防御)% u! g# O# \( p7 [# d; x
HTTP协议和本地定义使用的detectsviolations策略。. X% ^: K  U3 V8 a) L! k1 W

+ d3 ]- T0 ]+ C# f/ p8 R! Y6 [! b, t3 p+ ~6 \
Real-time Blacklist Lookups(实时黑名单查询)
. R4 K, O/ P) O利用第三方IP名单。
( ~! \5 o: a  K
8 u: W' b% ~7 c( g- \
- Z  X& s; f  [* U! s9 N# U3 ]HTTP Denial of Service Protections(HTTP的拒绝服务保护)
  v( G8 {$ P; C  f/ @防御HTTP的洪水攻击和HTTP Dos攻击。. G3 R; [7 B3 f  z

& t; \# o$ |2 ?& e/ Q6 `, E. k! Q. Z% o3 ^4 D* I
Common Web Attacks Protection(常见的Web攻击防护). O3 C$ d1 P. z
检测常见的Web应用程序的安全攻击。/ r; n- z; q& T# S( ~! K
- `1 Q/ u$ k9 R' H( ]* \1 `

: }7 x( ]# \# ]! u4 UAutomation Detection(自动化检测)* n, Y1 o" |! l; a
检测机器人,爬虫,扫描仪和其他表面恶意活动。  Y& y) v; H7 o5 c* x) n
9 [& ?# _! S5 ^/ {3 o, ~* K

; w) f: L. [2 \3 y1 Y* i. hIntegration with AV Scanning for File Uploads(文件上传防病毒扫描)3 F! w! B. x0 q, A8 m
检测通过Web应用程序上传的恶意文件。
, [: @) |/ ^& q1 j7 @- c
# L0 L- Z# Y" S; x
; Y- A7 I% B, n. `Tracking Sensitive Data(跟踪敏感数据)
* Q. y+ M' w; `4 d" x+ u! |0 m信用卡通道的使用,并阻止泄漏。" R& ]( |9 I9 f- {& o
9 ~/ S  u  p" r/ `" p2 ~
. a5 d+ v( k, C: R- ?6 V
Trojan Protection(木马防护)
6 a; z- {) a  ]+ q8 ^检测访问木马。9 C/ A6 V" L& t! \- l
, z. h. o4 D7 z4 D* f, N

+ [, V1 X# |, e- i1 l: a5 DIdentification of Application Defects(应用程序缺陷的鉴定)  m; K' O4 Z/ d4 n) J% M
检测应用程序的错误配置警报。
0 F/ k2 s# a1 }" _* m7 U  f" W+ f* U6 X# }. I( P5 F7 e+ ]
) O' L5 R7 t* }
Error Detection and Hiding(错误检测和隐藏)
! @& v9 h* x2 k5 \! ?% Y检测伪装服务器发送错误消息。! z8 W) u+ V# [+ J" Z9 ~4 ^

5 D/ f- x" p0 n9 |9 }$ `
7 ^7 C/ r* b+ v/ O1 F安装ModSecurity
: |. }5 A4 j/ v2 F- n& l/ N6 \+ r% p软件基础环境准备
& i1 M. L# U3 @' \0 t% G  c- o下载对应软件包
$ i, J: ^0 q+ P1 a5 P/ s$ cd /root0 g4 H+ A1 b% Y
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
5 ^- n* H5 g0 p. p) N3 ^; @$ 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- y, @4 p* k5 W" g* f安装Nginx和ModSecurity依赖包7 B  F( `: H! s- K
Centos/RHEL
( U: L+ B8 E- X: S% h
7 x! ]  ^) k  g* R9 \. ^8 U4 @  S  U+ f! g4 e0 s2 Y$ |
$ yum install httpd-devel apr apr-util-devel apr-devel  pcre pcre-devel  libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
1 u1 V6 H) f$ P: W' \* {2 L. jUbuntu/Debian0 v5 c  P; j4 u/ F' u

7 @  M5 U" U/ N: F' [
: ]7 L& f) V) }% [* m  W$ 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
& Y# Q7 p& n. L8 f! k( [编译安装ModSecurity
+ \5 v. w/ J! r, K* ?Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
" y* {3 ~3 O. w: ~' E5 M0 K6 F
( d+ e1 D9 ]( y: l8 y0 v' z' }; I+ @" z# a- B  s! C4 L
方法一:编译为Nginx静态模块' e; A1 Q+ {1 ^# N: E+ _, {9 Y; T' F
( @6 B8 O; D  h+ l
& t, [4 h, }! j+ |& ^+ T" G3 e1 W1 `
编译为独立模块(modsecurity-2.9.1)
9 v- T+ s7 Z; t& q) |/ s$ tar xzvf modsecurity-2.9.1.tar.gz! W7 k9 o  [& A
$ cd modsecurity-2.9.1/. v9 `- N+ E  J, j) g; P
$ ./autogen.sh: {2 a4 G; c; Q
$ ./configure --enable-standalone-module --disable-mlogc! q- L2 r) I. s0 n6 v$ h6 m
$ make
2 b; B5 S3 ?8 R! k4 y编译安装Nginx并添加ModSecurity模块
% Q6 V9 @- p; i3 B4 L3 a$ tar xzvf nginx-1.9.2.tar.gz
6 r) g4 v" d2 {' A; b: w$ cd nginx-1.9.2
3 L5 Z" I1 h" U- l: b* u0 x$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/
! b/ m/ h9 A3 A3 [# n8 R$ make && make install
1 o  q* m  g+ V) d0 ]) u, f方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
& s0 }" h) T4 u2 c: |0 B8 M9 A- u7 r' N

4 r) K$ t$ c4 E, c. Y' G6 e编译LibModSecurity(modsecurity-3.0)$ v$ u1 k0 r+ a* G1 B
$ cd /root
: {/ l5 q- u: N$ git clone https://github.com/SpiderLabs/ModSecurity7 F6 J# R. Q: {( P
$ cd ModSecurity5 Y4 o2 r8 i1 G1 w$ B' H; Y9 v: d
$ git checkout -b v3/master origin/v3/master
3 ~( s( M/ [1 B% j9 K- S( g$ sh build.sh1 F$ o. e7 t! R2 q6 y0 l
$ git submodule init
5 P6 B" g, }+ h4 k- l$ T$ {  s/ j$ git submodule update4 g$ N- G2 g$ m* c4 R
$ ./configure2 `0 N7 C* _" Z# Y5 l, z- N1 m/ ], d
$ make0 y/ Z+ v: [6 T8 e# I; h* S
$ make install
% m+ a; _7 L' v- v) A# s8 }LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。. E+ G2 P5 ?. w! ^5 a8 p

$ l. s; c! a- }/ W$ i; o; h; q& |
& u6 u/ u5 |- A4 K5 q$ ls /usr/local/modsecurity/lib" u9 m/ Z: o' f! ]) I
libmodsecurity.a  libmodsecurity.la  libmodsecurity.so  libmodsecurity.so.3  libmodsecurity.so.3.0.06 ?' p7 N" A! M2 n
编译安装Nginx并添加ModSecurity-Nginx Connector模块6 u5 S& N3 ]/ ~" }) \) c
使用ModSecurity-Nginx模块来连接LibModSecurity
/ h6 A; `* Z4 W! e5 D8 w4 x: b9 w! E) s; o: A6 g- p4 Q' }
) V! t8 R' @0 y; ]  L) y
$ cd /root/ j: L1 q: G+ H, ^8 s3 q# @
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx/ D0 |7 V+ t0 x1 H0 {. g9 a
$ tar xzvf nginx-1.9.2.tar.gz
- B" j  U9 U! l# W$ cd nginx-1.9.2% y) @1 X5 E) H) ^' G# Z/ z
$ ./configure --add-module=/root/modsecurity-nginx; G$ n. a, s, ]
$ make
4 X# M, u" _; T0 E! H$ make && make install
( U0 |2 w( ]) L& V! h* Z  f添加OWASP规则
" [7 z; x. N4 C6 a' `3 DModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
2 y# S& z0 K! s* B
1 i6 J% U' y. \
8 c: \* T6 w+ c下载OWASP规则并生成配置文件  T, \& f+ v* }  ?% f
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git6 n: H' q( |! p1 t+ m
$ cp -rf owasp-modsecurity-crs  /usr/local/nginx/conf/" h' z3 c6 U9 _
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
* y% v0 t/ J6 \: r- T' X$ cp crs-setup.conf.example  crs-setup.conf+ x. j/ ]/ D- S( d9 K- }- {
配置OWASP规则
9 i9 @( o2 ^5 G! O编辑crs-setup.conf文件
2 k* W% g" ~' i! a2 M
1 g/ T) s4 {! s
  [: w$ t5 e% T2 ?) Z) ?' u+ C$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
7 O# r# y$ ^! u/ W' y3 \' \& m" o$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf9 Z# |& @$ e6 \" q/ w! S  G$ @
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf4 y# K5 \3 i' N
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
% h) |4 D! t0 O3 J- K! E' K默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。. {  E/ L( {( r: ^" x; F

/ v3 @: M+ |5 |) v! M' L5 x- ~. ~$ J* J
启用ModSecurity模块和CRS规则
- u- @' b' P# j复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。& u3 _/ \; O, d% y, q& c4 G3 ~/ z/ A
1 o: J* H* w8 `  F3 v! Z! f
4 T: ?9 O( {, R1 |  C* S: S
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。
3 _3 A1 Z4 U" ]% \3 ~2 n
% e% ~7 n& ~. b, t
6 @( a& {# G$ Z1 v1 ]1 i$ r- l: u+ t9 A$ cd /root/modsecurity-2.9.1/
3 N+ z' Q$ {- \% m% s$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf  
- Y$ L8 |: t2 f$ u* Z8 O- I; a$ cp unicode.mapping  /usr/local/nginx/conf/
# z3 ~2 m/ T* Z0 [5 P$ }+ W, p将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
$ a) b+ x: P8 e: ^% ^
; C2 Q! q. `& R5 ~3 L
' B& \& U+ Y) m1 }3 K$ d$ vim /usr/local/nginx/conf/modsecurity.conf0 i) y- i: A3 ]0 \% ^2 b8 l
SecRuleEngine On% |/ }% a- p$ i+ Q2 M- F: O
ModSecurity中几个常用配置说明:
) ^( m4 Z) |2 ^$ g5 b5 e8 f5 d2 J3 w; `# E- R
. ?  r1 {) @0 K5 ~! G5 j
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。% C) n+ U; v0 m2 _2 X; B/ g  x  T! c

- c8 B' m( v6 g% N. }, A6 S& k7 b3 u. j7 d
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。3 K% S$ c) {1 n$ Y7 m. a/ m; V4 ^

% w9 V8 g# X2 O0 [+ |( I, ]+ G1 s7 z! \3 _& X
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
: y# U$ s, l5 B1 J! k
9 ^3 t6 Z$ y" R# j3 @6 i
' D0 g( g$ U% w2 e4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。
: w" M, t, [7 U% r! A- G/ T2 L( M3 ^! {
; f7 [$ _# t+ O8 t
在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
  x8 y# E! w; C$ S7 `, Z# X/ {% h0 r' Z; o$ Q

: J( \% f5 }2 }3.x版本CRS0 v7 P, b  \, {; x
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
- T' X* E$ o& F6 Q4 l$ j$ Z# 生成例外排除请求的配置文件
8 b7 N2 F" X& r+ T$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf4 m/ q1 S5 J. G5 t% D' G
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf5 J8 T9 `8 e8 c) G3 Y; w
$ cp rules/*.data /usr/local/nginx/conf( N/ \/ P5 o8 M  `: @4 A' @3 ]
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
$ ]8 h- q3 N5 e  m6 c; x& O, ]" m2 Z
: X) i( y6 d' \
$ P0 m3 E/ k- h+ z$ vim /usr/local/nginx/conf/modsec_includes.conf
$ U1 h% p' A3 ^* C1 d- i% P7 {0 \4 |1 v$ z7 t) ~2 O
[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

: J( |3 ^( f8 M6 L* g
- Z$ B- m) `, g注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
# Z' m6 E, j% l3 F9 o0 p7 o+ U& a  A9 b$ f6 Q
; C& \4 I$ d( g+ [
配置Nginx支持Modsecurity8 o1 o9 s4 u  @) O9 K9 B
启用Modsecurity( ^& `5 S7 b) b7 i* l6 S% y
使用静态模块加载的配置方法
0 o& p7 l% u* R* Z6 @在需要启用Modsecurity的主机的location下面加入下面两行即可:- K8 O9 Y  v5 d5 L" j
) V5 H) J* W- ^9 [9 Z* S
2 \4 F7 b  W% m) k0 m3 L6 J
ModSecurityEnabled on;
8 e. t8 @* ?0 S; z4 v# x8 B1 xModSecurityConfig modsec_includes.conf;3 Q6 l0 n: v' d& D# o0 h
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。' K( T# h5 h# H' A+ E

9 `' C! ^# h( `
, l. }; H7 D$ y6 n$ vim /usr/local/nginx/conf/nginx.conf
% I- ?6 H* _. l) N# D3 c! C4 `) ~9 X
: f: y; d* @7 _  R! l) |* J: f
server {
! K0 X' X4 Z' b, a# }  listen       80;$ L& C+ @' g& x2 u: z
  server_name  example.com;) V& [2 v: B+ I5 u7 j
6 q0 o/ I- l$ k0 B6 U
# R3 |) _# W6 U1 ?
  location / {
) h' L! r4 ^6 Y' ~* O, b6 [  b    ModSecurityEnabled on;
9 ?, L* p2 A( x! r8 G) N! e    ModSecurityConfig modsec_includes.conf;
) Z" i2 u6 [) b: j4 M    root   html;
5 `" R. o- p/ d2 D7 f    index  index.html index.htm;
- E; o) B/ k: ~1 n+ @6 t! _9 S  }( c+ z- u, O( Y2 M4 D' j
}" f& J5 B5 b( V" h
使用动态模块加载的配置方法. z7 B8 A# O; K- c* K
在需要启用Modsecurity的主机的location下面加入下面两行即可:
: R: p6 F3 ]$ X" w5 J% y
, I1 T6 K; c3 T- j! t! j* A6 Q3 O, K
modsecurity on;1 V2 h( u7 L) \# Y8 Y
modsecurity_rules_file modsec_includes.conf;# a# V# u+ E1 t3 ^0 k+ `+ b8 v3 [! ]
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。8 e- c6 y7 e; V; @( z* a; v+ U
, G2 y$ J" Q& C! Q, `" h
+ F* Q+ G. u2 P, k2 M; M
$ vim /usr/local/nginx/conf/nginx.conf# R, M, p7 B! l5 q0 D% ?# ]6 U
, {) T2 R; Y8 o& d: _4 y: u! ^

$ L5 {% y6 Q- }! @# \server {
: Y. d8 n/ b# o9 d0 q. G  listen  80;
/ S( y1 l5 P5 [  server_name localhost mike.hi-linux.com;
3 g, c$ e$ x8 Y1 f3 z& E$ }. P  access_log /var/log/nginx/yourdomain.log;
. ^' ?5 I" b; M; v; [2 s, T0 T% ~. _

  k% B5 M8 m: N' I( E! R) ?  location / {
$ Y- C0 o/ `, F$ w: P
+ |& f7 r* ?) \7 K2 C5 Y. L4 @3 |+ ^% E; J
  modsecurity on;0 u, a5 I) z2 T, O
  modsecurity_rules_file modsec_includes.conf;
$ k6 ~8 ]2 l8 Z  t3 Q  root   html;
, c: v! q9 Z9 ~7 i4 ?. _1 Q+ p8 e  index  index.html index.htm;( a2 @+ c2 W& t
}
. ]" z: u* c7 k1 Q}2 t6 u7 _( O4 U8 ]2 ~& _
验证Nginx配置文件: S- K; D0 E5 R+ r; C* V$ }* \
$ /usr/local/nginx/sbin/nginx -t/ J: s; w/ k) |- M  B. j6 }4 x% A
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
' e) Y, Q+ i. l, [4 p: inginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful' V& O0 Z7 G1 p9 Y; G/ @
启动Nginx
) Y0 H9 k* v) Q, y, s! M. G$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
( R$ }, o5 A3 H- X! `, A, b# w% I) D) \1 |1 p' I% _& `/ N

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

  W5 l$ [5 b0 ]% A9 c) Q

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-8-29 21:00 , Processed in 0.112743 second(s), 31 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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