找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 10258|回复: 0

利用ModSecurity在Nginx上构建WAF

[复制链接]
发表于 2017-10-19 17:34:51 | 显示全部楼层 |阅读模式
ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。3 ?/ U* e  \: M  w7 S2 B; }" G
6 t5 t7 Y& F% }7 d0 d, o
; a+ [! P& a2 E7 D! o9 ^' h. e
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。! a7 f% d0 h* m6 k- Y

/ u" X1 @  M: S+ k/ `0 W( @1 ^7 g+ S6 A3 D
什么是ModSecurity0 c) q) S( l& m) ~8 d0 Q
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
5 _+ J3 L3 `+ M, v
$ ]# Z$ O6 w1 O- d9 b: `$ ~) _2 b' ^( {
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。6 \2 }) \% q* p2 Q; F7 L

3 g( A; m$ k% q7 E
; h0 N# P. v4 \* hModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
6 ?/ ?6 q2 r- }8 ^% f) v% ?* _  T! Z% f# z, [! V3 y) q
3 v) ]+ P/ Q/ c& x1 g- U
官网: https://www.modsecurity.org// |8 u2 R& ^  ?0 K" `/ n4 ~

& c+ B8 F1 L  ?3 ?
" |+ b: K' B" ^5 I1 s- ?  F+ L什么是OWASP CRS+ d& m$ H3 }6 \) q
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。( n* G3 B& y: s3 t! t

% i6 I8 t, N  v3 J' Y0 A' i1 q" V$ d. J8 A: w
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。" Z4 ], p4 W7 I7 M4 f7 E# q
3 S! h) d$ T" L& V' y/ _; f
) a0 J; Z9 \6 a0 ?
HTTP Protection(HTTP防御)
7 k$ R2 j2 ]% B3 p5 D/ X6 lHTTP协议和本地定义使用的detectsviolations策略。' C' M: K! ?6 _/ x0 f0 M  @
. B9 k" S! _9 U3 t$ k) N, T
; [4 p: a; l$ G; ?
Real-time Blacklist Lookups(实时黑名单查询)6 p( l) u6 B5 n6 Y, A
利用第三方IP名单。3 i2 j7 N8 S' Z, A% M

7 s% u/ a" a# b0 m) \. L
& q! p1 Q; `, w0 Q" QHTTP Denial of Service Protections(HTTP的拒绝服务保护); q. A3 F8 a) @, R# q$ w3 O; F8 N) o
防御HTTP的洪水攻击和HTTP Dos攻击。, z6 ~9 l: M2 n* E% G
! o2 A# G' v2 F4 K1 |

3 Q, D5 |1 T; ]* |Common Web Attacks Protection(常见的Web攻击防护)
5 A/ \/ W+ ]1 t检测常见的Web应用程序的安全攻击。* F% {2 z; C9 V& {* J

! H- _+ |8 I- G  k8 T
6 x( G3 Y& ^# ~' dAutomation Detection(自动化检测)) j! @. J# L6 V
检测机器人,爬虫,扫描仪和其他表面恶意活动。
7 ?- j  `+ t# ]1 r5 b+ W3 c/ l  o* T$ U
) d8 s0 s) R- s% D+ s7 ?9 [
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)
4 D6 P) w0 j; Q  m检测通过Web应用程序上传的恶意文件。( N# t7 i: C% n7 Z$ }9 [0 f8 e5 \
1 k& k/ f. ]) a9 A4 [7 O5 E

6 v# S- L4 H/ uTracking Sensitive Data(跟踪敏感数据). e$ f+ M. R8 t+ F0 a$ |, D
信用卡通道的使用,并阻止泄漏。
7 a( q5 @$ ]) G( R! ^
3 [9 d& W9 _- a3 y
/ [2 {, @- ]1 s: b: E5 R  x1 \. jTrojan Protection(木马防护)
: Q2 v/ W- s/ Y9 e& T检测访问木马。& D2 W. `: n( q! a: ]

! n. t% V6 M* M" x9 a
8 A& R7 X7 G& ^# ~Identification of Application Defects(应用程序缺陷的鉴定)
3 _1 t9 T0 [0 \, r6 W) V7 t* n* E检测应用程序的错误配置警报。
* a. l8 a! x3 U' q- h
0 U0 `/ |# V9 `* v7 Q, v3 B# Z
9 [* B# R1 @0 {. p  R9 b+ CError Detection and Hiding(错误检测和隐藏)
( n, {' [  l) G) E检测伪装服务器发送错误消息。! F+ V/ s8 v4 M) T; J0 c

- m4 x$ m. c. @  y# r# E
0 P  U# P, `5 H& K4 i安装ModSecurity3 ^0 g& U- @. Y! c: u
软件基础环境准备3 h8 W- f% d7 V& a$ g! C
下载对应软件包3 w7 V1 `5 r7 X  s/ N6 [# \
$ cd /root6 M& P- F, }6 \
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'# \. X; f" i1 U. E
$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz2 c$ J+ V& }' ~! C: n/ @  z. `. g
安装Nginx和ModSecurity依赖包
0 |( q$ u( w% }8 [& j, oCentos/RHEL( d3 ^9 ^) X9 e0 s

7 b( _- p  J+ \# U3 X# z" [( H$ S/ K5 T
$ yum install httpd-devel apr apr-util-devel apr-devel  pcre pcre-devel  libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
1 b! S# \/ H7 M* o: H2 LUbuntu/Debian
7 e2 b( @! j  ^; i8 R
# N8 x+ [7 r9 Y. n- z/ ~5 d% k* C" ~, Q: X3 l4 ?
$ 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( h: {! u/ k2 k2 g# N3 Q+ G
编译安装ModSecurity
6 ^# h# I, M8 I2 V4 ONginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
5 q5 m* h% h5 n! E. p0 Q$ Y0 S& Q9 s4 ?$ w( D2 K
5 k* S  b# u8 f6 A
方法一:编译为Nginx静态模块- j% Y7 ~; V& V
4 E$ h3 D" i5 [) g5 t3 K" h

/ V+ k/ _3 c5 q  S# ]. \: i编译为独立模块(modsecurity-2.9.1)! c# ]! V; y# A5 t
$ tar xzvf modsecurity-2.9.1.tar.gz
- @# F( I/ e) B$ cd modsecurity-2.9.1/' m- n# T1 P. ^8 G
$ ./autogen.sh
4 Q0 U' Q+ |5 J  @$ ./configure --enable-standalone-module --disable-mlogc
" m7 w' i. G& @3 ^: T$ make
' r9 ?$ G+ N4 t2 P3 j- L9 k& D编译安装Nginx并添加ModSecurity模块
4 p7 H0 y1 t. X4 h5 U$ tar xzvf nginx-1.9.2.tar.gz
3 ]" E8 p+ P  t, E) R5 e$ cd nginx-1.9.2
- \! d3 \# K0 H; h9 k9 I0 M$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/
6 `4 k$ C4 {8 w/ e: g( d- i$ make && make install8 [' W) u1 H$ W' _4 M0 W  t
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块9 \# q8 }8 P1 i/ c
) q; b1 m% p' }9 R

% k; c) }3 ?# s# e- a编译LibModSecurity(modsecurity-3.0)
" ?' X/ {0 J3 |* |$ cd /root
4 ~) b& m. J) L0 `1 x+ X$ I$ git clone https://github.com/SpiderLabs/ModSecurity
' K% J( u9 r0 V( T# N$ cd ModSecurity# ^8 }: X# w- `' E' ]# a8 A
$ git checkout -b v3/master origin/v3/master
' l2 K+ P, @8 H/ j* [$ sh build.sh2 U, f4 `  a9 u8 E
$ git submodule init
( `3 Q/ {( \/ e6 l$ git submodule update
( F" w5 D& N2 E  N' j$ ./configure/ V8 p- h4 V6 s% r; l  Z
$ make
+ k( g, y  N: U  y$ make install/ P  b/ A2 V; F/ o
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。+ N3 F3 s  i* O2 M5 V4 u5 I" i8 Y

. F6 Y$ z6 |& C# t  `6 \5 H8 |, H2 m( n" G9 \5 U
$ ls /usr/local/modsecurity/lib; ?, T, Z: U# B$ q, {$ i3 W
libmodsecurity.a  libmodsecurity.la  libmodsecurity.so  libmodsecurity.so.3  libmodsecurity.so.3.0.0/ ?- K/ w1 H1 [, W6 g& j5 O
编译安装Nginx并添加ModSecurity-Nginx Connector模块
  \( f, N. a% ?, I+ y! h) \使用ModSecurity-Nginx模块来连接LibModSecurity
4 J0 F/ N2 w1 Y1 t' d( A" z$ F- I/ {( \/ @- C/ Y$ j
* U# N0 e1 ~5 x& ^; I0 x3 {% q+ W
$ cd /root
, W  x# D) z2 j( Y$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
3 ^& r9 U3 E4 r3 W+ M$ tar xzvf nginx-1.9.2.tar.gz" Y% S& C/ n5 }$ p  \6 v
$ cd nginx-1.9.2
' h' @1 f* n" |. p* {8 V% _3 h$ ./configure --add-module=/root/modsecurity-nginx
+ ]9 w7 t% m3 n/ X1 }8 b( C$ make+ P5 a8 o0 p5 K
$ make && make install% q: H: }% G8 x7 K7 Z7 F
添加OWASP规则6 M: m/ q% |7 Y; F& z
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。3 q- ^1 c3 i. c& v! t

9 Z# r% @: v' W+ T  p8 i  D& b+ B7 Z8 C) x
下载OWASP规则并生成配置文件
9 y$ i% I. q1 |8 H5 w/ H$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
5 k" U8 c, B; B' a3 K$ cp -rf owasp-modsecurity-crs  /usr/local/nginx/conf/
: I1 H( r6 U5 v$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
0 e* j# Q* B: S+ d, |& L0 V/ P$ cp crs-setup.conf.example  crs-setup.conf
' e' \# f* |/ b9 \配置OWASP规则
. m( o) }4 o5 d2 b8 p; l编辑crs-setup.conf文件/ a, F; y5 S; W) N' k

8 k. e. Q% P# I( J9 d- b, }7 ~1 i( S" ~$ I* z3 e5 K: [, [5 H- D
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf. y6 }! V: E3 N/ P1 q
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf6 G, ?8 G% i/ w
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
8 y8 h6 m3 T; K$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
* Q6 @8 V6 ~) S& a) A- x默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
( W7 D1 p- `. w8 q8 t3 V' [# o2 |. G6 x4 c/ D5 |

5 z# |0 q; G1 @2 o. n/ H启用ModSecurity模块和CRS规则0 n2 _8 A( `1 n# R+ F. X
复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。! L/ |: ^1 K8 `

2 e- Y- F4 g8 b3 d6 [. b2 Z6 U
& U" x# q' `0 h. F  lmodsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。7 a; R8 ?& ]& ~9 u
7 ?1 \1 S$ r' _; T# x4 [+ J4 b
8 k( E& ~% ?1 |  A9 t
$ cd /root/modsecurity-2.9.1/
( P0 g5 ]0 _/ K0 @$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf  
- C2 s2 f( N# t$ cp unicode.mapping  /usr/local/nginx/conf/
" I4 ^3 n! V- v9 d1 X将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
: q9 ^& ^0 A: i) l$ `8 e
" j! n6 I6 R5 ?- p( U, D% G( J$ J3 j# S& h+ F
$ vim /usr/local/nginx/conf/modsecurity.conf5 m- `/ x. ?' T) M+ k- a
SecRuleEngine On
: n3 \) X, j  |0 U# NModSecurity中几个常用配置说明:
2 w; I! w4 f" F! W/ X+ `  i* ^6 G5 h, a5 m# I/ m
, U$ _9 T, s" Y+ i- b/ Z3 v# s3 B
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。1 Y! G# }. c0 E% r- d: f
+ a7 Y! P2 q/ Z* ~: ]% B! Q& [

7 {1 ^0 ?- c# A+ v  S% k2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。; O! i9 F4 n# j$ b
8 D; h1 h; ^0 ~- k$ @& P* o
" }& v# ~- J" J/ t0 t
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
% U* c* I6 L& Y
6 L/ u! h( A% _% U: N
; g6 w* Y4 J/ l+ E) {* _! F1 N* U4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。
9 S1 F( I" j1 K  G$ L( i. o0 x, T% A; b4 U

( L: m2 H2 r9 K4 }在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。2 f: N! L7 i6 s+ K+ y

( A! P- ^% z4 n, G) x$ ^0 x6 E  t2 g3 X( Z. w! B9 x0 H
3.x版本CRS0 w4 a# L9 B5 t9 G0 b
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
9 b2 h! y6 P# p7 T) j2 {- u# 生成例外排除请求的配置文件
6 z" @; c  _5 D0 z1 ?, Z0 v; W$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
& D) V# c# X$ n. b$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf' v. f3 d' I9 ^5 \
$ cp rules/*.data /usr/local/nginx/conf5 W: Z9 }$ R4 {) V' F, z/ O
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。4 X8 @9 D" h& R7 w9 h$ [1 S

- z4 H. I/ E1 L0 D4 i
5 e+ S- ]2 w  G/ e2 ?- {" ?9 M/ _$ vim /usr/local/nginx/conf/modsec_includes.conf
2 w! [9 ?1 _5 a& Q  v3 c0 u" x1 [* i2 w; F7 u9 I5 C/ ~
[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
# v. |8 o5 S3 p) g

1 z" f: K7 w7 o5 d0 h, z" {. z注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。# ]) V4 r6 W8 Y6 W% R2 Z

0 [; l8 L6 i9 w3 J- B  C: W
9 O# ?* R$ e" B0 W& Y) f配置Nginx支持Modsecurity7 Q, }" I" \& c& ]! g, k
启用Modsecurity
& X' S! {, _: ^! H& S; C; }' q% O使用静态模块加载的配置方法
0 j, v0 y% V% u7 p8 g, g在需要启用Modsecurity的主机的location下面加入下面两行即可:2 m4 U4 Q  v' y% [1 y2 a
" d$ B% ^5 o. t  j

/ y. a( ?) S1 lModSecurityEnabled on;
7 a& ?0 m; M5 F% A0 x5 i- M% KModSecurityConfig modsec_includes.conf;
; m4 c' M* Y' f7 I修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。: r6 [4 g6 p% l5 R) G: y

. ~" x8 b# n- l/ v
% m  u3 t+ b1 `, a$ vim /usr/local/nginx/conf/nginx.conf
9 Z! T8 Y# E7 ^  ]# N/ p/ j' G
& {. {  `" O$ ~% F* d
4 k$ ]$ D) c/ Q+ G+ \% Xserver {
) q8 v& i: E( X+ D+ n. K  listen       80;9 T! {+ V/ r, x
  server_name  example.com;' Z: v/ C& v# ^, Q% f1 i& j% U
  M+ R) J& r1 _$ ]9 f4 |2 Z& @

1 s! n2 E5 D* n' [7 B! F) h5 |, }* {  location / {  y1 j4 w; ]0 V2 ?
    ModSecurityEnabled on;' Q9 x: Z  `' Y& M" ?, q; g
    ModSecurityConfig modsec_includes.conf;. j4 ~& |4 C" Q6 l9 z" c
    root   html;* _" e0 B3 D/ @4 E
    index  index.html index.htm;3 F# `: H, S+ z. |) o. m# \
  }
" B0 p) ?4 F6 a' i$ H}4 m" r0 M4 w0 {, F8 `, v, D7 t
使用动态模块加载的配置方法' a  i! ]9 g0 W
在需要启用Modsecurity的主机的location下面加入下面两行即可:  @: t, ^8 d. o* z5 K6 ^$ Y: d

( w" O+ M. b, k. y* h4 L( W: b' S; Q3 L# ]8 \8 A
modsecurity on;2 y6 ]! q* e$ J! v% m& k
modsecurity_rules_file modsec_includes.conf;
7 u( w/ {! M3 f6 P' K, H. R修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。7 w3 ?# T8 D! Y. \3 q

) h8 x" t% j6 ~: |. K* O! ?
! h9 u  ~; b. P/ j( ^* g$ vim /usr/local/nginx/conf/nginx.conf# d$ J$ G9 Y* G, V6 X! t4 w

) x* f6 Q* S; x- s2 {4 d
4 `) \7 j$ Q+ }) C" e& Rserver {; |' a8 C! I: O( w+ X' t
  listen  80;
; C2 b) m5 d  D" p( m  server_name localhost mike.hi-linux.com;0 F! T; q* f: d8 W0 Y9 C0 N
  access_log /var/log/nginx/yourdomain.log;% u6 K$ m" R/ W6 Q0 |9 W  L

- K% N4 h1 O# W5 d. d0 ~- @2 A' v2 O5 {$ B" }# Z$ M* n6 E
  location / {
+ }5 A, O9 F8 d2 B0 Y) r, u
: |4 l7 {1 o7 ]+ p4 N+ Q9 V3 F: l7 n( U  F* `
  modsecurity on;2 j) F! H6 k" W( q% G4 D
  modsecurity_rules_file modsec_includes.conf;
+ q% j) N0 L- N) s1 D+ `" v8 h1 ]  root   html;
0 u- F4 g' W. B6 q! m: j: L  index  index.html index.htm;/ P/ B' H: _/ s  X4 o% F& r: L
}
( \+ H. n* i6 G! j5 i) }- ?}
# o/ a/ W; b& ^验证Nginx配置文件: z0 {+ p& z0 N- A/ {
$ /usr/local/nginx/sbin/nginx -t6 N8 N/ G# c+ V- r
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok" l2 v% T& i. O4 ~1 q- E$ T
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
: @9 }9 _3 Z! R启动Nginx
# A0 I# p7 b& l2 o4 S$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
  v3 q, V& N7 X: n$ _3 R
( a% k1 q: g' g

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

. W7 X, v, N- z$ ~1 O, }3 V( f- o

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-2-17 21:18 , Processed in 0.073823 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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