找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 10829|回复: 0

利用ModSecurity在Nginx上构建WAF

[复制链接]
发表于 2017-10-19 17:34:51 | 显示全部楼层 |阅读模式
ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
/ c+ _$ R5 D) h1 Y3 I: E* n' a% n' V/ `

& S2 C! B3 N" L在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
  N% G4 w) |0 w5 }3 o1 D
% C6 \) D, Q% ^9 J$ P
; _. [0 t9 M8 }' Q; H( ?, p什么是ModSecurity) N$ |& U0 U( ?" l
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
' z4 q5 x5 A" O! g& N
' r6 f- U% g9 y; ~: b
  ]6 D" L1 a6 F4 |& U) w$ }5 p+ l+ X0 `4 SModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
. e1 Z% g  b0 @% V1 |8 I- Z
2 w" E2 [" Q% [" `0 v% V" W+ y% b. j: n6 A% N: Y2 z* e
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
  g4 c( b$ c) t  I0 d7 K, R  E" i4 ~4 u

) X7 w2 X. s0 W5 I, s, E. ?* d官网: https://www.modsecurity.org/, t9 g8 t' z/ r
9 x6 [1 D: ^1 Y$ X. w( E# `
9 q0 b, g0 s  Q. W$ t
什么是OWASP CRS
. s4 e5 D5 m& y  f* q* z' b1 TOWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
1 I* F" e" r$ z6 F9 o- T! C
5 Y2 R6 J7 O6 u  t' q$ d3 c* F' E& M( \  D) c' n+ R
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
' r$ P* X1 M5 ?2 p0 x; y# p  a* _0 l7 E1 P5 Z

4 r2 E% _! ^. m- z+ OHTTP Protection(HTTP防御)/ Q- e4 ]! Y, i- S( ?+ u& s" w
HTTP协议和本地定义使用的detectsviolations策略。
# _( H; T2 w! z( M' J+ {$ ?! R
& e. _) M4 C/ k- R, ~4 j# E# B" k5 d; a7 A1 K+ D, Z3 J) t' p; b+ J
Real-time Blacklist Lookups(实时黑名单查询)% _9 @- Q' S5 j0 ~" G$ h  Z# G5 ?) ]
利用第三方IP名单。
* q/ m4 C% |: ~# ~$ }/ y
7 T; U2 Z3 U: N7 ?3 z7 t" ~9 S2 h1 z3 ~8 D
HTTP Denial of Service Protections(HTTP的拒绝服务保护)9 h- t& z' X; p* `
防御HTTP的洪水攻击和HTTP Dos攻击。
. w7 a7 E: f( {7 V. d+ v
# j- Q+ p" j6 Y7 \/ }
3 |% Z# P- H9 j$ ~7 z- O- [0 xCommon Web Attacks Protection(常见的Web攻击防护)- u. \& Z5 H+ E0 b8 q
检测常见的Web应用程序的安全攻击。
! t' C8 F% Z: v& x+ h) X
8 K: e+ {% K$ _9 T9 E# E
7 {, p3 l) K; m7 PAutomation Detection(自动化检测)! V9 @) q- L" n
检测机器人,爬虫,扫描仪和其他表面恶意活动。
( Z" c! k% u1 B+ F, m: x+ ~" b; {0 O" k  ?) w" e' V  P" Y

5 [8 ?7 n, ~( fIntegration with AV Scanning for File Uploads(文件上传防病毒扫描)
2 m2 ^3 o  G3 x检测通过Web应用程序上传的恶意文件。/ c8 e- h' M7 y
9 {2 a, J4 P9 c

! ~* r' ]& B0 y  {$ p; z+ FTracking Sensitive Data(跟踪敏感数据)
# f6 g! V7 Z( [! t信用卡通道的使用,并阻止泄漏。: K6 y4 a5 _* X  r) Q7 E: _1 L
/ K8 H: ]. u$ @% Q  V) ~  ~; D! `

5 q4 q. E4 w" VTrojan Protection(木马防护)
9 }+ y& K: R/ ?( w  I4 D检测访问木马。7 d& T' N$ I0 v

% n. f+ O- Y7 Y8 h% }( F' p* J( f0 a
Identification of Application Defects(应用程序缺陷的鉴定)( z9 [* b( L$ H3 |6 V
检测应用程序的错误配置警报。  y) U. E, G1 S& O
, Z* D% O: m4 ^# p
  Q0 r1 _. i) k8 z- J+ s
Error Detection and Hiding(错误检测和隐藏)! H7 V6 q( ]( C. {$ k: \" f
检测伪装服务器发送错误消息。+ l( e5 y1 {- _! B& _  E3 d
6 s- n, b9 p2 l: d- e5 S
; d6 t- X& r2 Z5 Q* c: [; F
安装ModSecurity
# J# X  {6 z3 B+ @8 p2 T' e软件基础环境准备" M% C1 L8 Q+ `# x( u
下载对应软件包7 @- k  q* i* A# U5 H+ Z
$ cd /root
) V7 F* f5 K' b2 t# X$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
! `$ h# Y: b* _1 M/ v& T$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz" n2 j: k$ }0 |# ~% u5 k0 z0 ]
安装Nginx和ModSecurity依赖包
; }$ h, b, _# R" l$ R# RCentos/RHEL3 s7 k/ ]8 |* i: I2 Z4 T: O& o7 E' O
" F% C' {4 x- w; V" O
4 N' p+ _3 I/ e
$ yum install httpd-devel apr apr-util-devel apr-devel  pcre pcre-devel  libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel- t: `: p; \7 Z" u
Ubuntu/Debian$ l6 t* \$ R: \* V" k
2 _! t" w( l+ t" ^0 H
4 q: a" G5 V6 r: W9 j/ P+ J4 T
$ 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( V8 {" R% e' x  P
编译安装ModSecurity$ Z; f8 o7 A1 V& M% ]2 A5 v% z
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。/ F( A% Z. \7 a) z% K+ o

; F# z( \4 x* F! x: v2 k$ `, ~; e2 I0 s% K  c" G
方法一:编译为Nginx静态模块0 B; z. o8 ]- i* c3 p, E1 ~
, k" L$ Q: |/ l

7 r( S8 X" O& Y( p! I( R, i编译为独立模块(modsecurity-2.9.1)& @( u  g% ^! y1 S$ z$ D/ J' j+ {1 r
$ tar xzvf modsecurity-2.9.1.tar.gz
5 X9 X5 ]. |& E' s$ cd modsecurity-2.9.1/& @3 i8 V; s- E4 D. j. C: I) w6 \
$ ./autogen.sh
7 I: {9 I# C- P4 O0 D5 X% R$ s$ ./configure --enable-standalone-module --disable-mlogc  S1 P, [5 M' `* {
$ make
4 V' h( |7 ?* b( S/ A编译安装Nginx并添加ModSecurity模块
8 F* y, `- D) h$ tar xzvf nginx-1.9.2.tar.gz
: Z3 e7 k$ J3 q) D* G/ T& v$ cd nginx-1.9.2
9 [8 [; X$ c( N$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/
6 j! p$ ?' ^5 y: I$ make && make install
: s( @" m/ t! m( v! U方法二:编译通过ModSecurity-Nginx Connector加载的动态模块9 k# r/ W# f4 N

! b6 m2 e/ Z+ F. q5 l
' l8 b* d6 o4 z1 N编译LibModSecurity(modsecurity-3.0)' p$ e  [. f& e
$ cd /root4 z0 W5 X8 o6 q% E3 C2 c8 `
$ git clone https://github.com/SpiderLabs/ModSecurity
7 z( T& z& t; W8 |7 o" R$ x& a$ cd ModSecurity
4 W8 F4 k+ j3 X5 I0 h$ git checkout -b v3/master origin/v3/master% `) E3 u. c; M2 w
$ sh build.sh; l1 p7 r+ |3 w+ Z8 B1 [  }
$ git submodule init! D4 _3 y& r) k+ ^' v0 d- L
$ git submodule update
! W2 `( t/ I3 v0 d; g9 d$ ./configure
3 h6 L  I8 _. c! W$ make
) Z# p% O3 e4 K7 |- K1 H! h4 V$ make install* J/ u. A6 t: G0 Y8 Q3 K$ ?& D* A$ t
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
2 q; w3 ~; W0 K0 P, {1 N
9 U& \0 g7 m& O; A5 C! I  n1 C
$ x7 Q/ |0 }+ J: `: O5 \6 W$ ls /usr/local/modsecurity/lib
+ e& y9 y% b  m; D5 Nlibmodsecurity.a  libmodsecurity.la  libmodsecurity.so  libmodsecurity.so.3  libmodsecurity.so.3.0.0
5 m; B9 h6 }5 u( e7 U编译安装Nginx并添加ModSecurity-Nginx Connector模块
. N( |9 n9 L. F! t0 q8 P使用ModSecurity-Nginx模块来连接LibModSecurity9 T) b  T) ?' Q
3 \/ L/ Y( a  p+ @7 F3 o
( C+ K% X+ U; @- B% Q& W
$ cd /root
" ?! H& c' j$ M* _$ Y' ~3 O9 ?6 Z$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx/ A3 j; v( d- h. Z5 o
$ tar xzvf nginx-1.9.2.tar.gz. f. r+ t1 s# U1 f* E# O" K
$ cd nginx-1.9.2) Z, f/ P' I: f
$ ./configure --add-module=/root/modsecurity-nginx
4 o1 Q& v1 X' o( y# Q# v$ make, T' p8 W1 ~" k8 ^
$ make && make install
! F) F" [. D4 \' @添加OWASP规则
9 g) D: m+ H! K2 j+ z6 H* sModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。+ ]2 U4 n. o! ?  ]0 ]0 i" q. G

7 c  \: Q9 U, q& ~
! F% S3 {. ^7 |下载OWASP规则并生成配置文件
# X+ H2 S. g7 g9 w  v. i9 `$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
/ L# R- T/ f4 p- d$ cp -rf owasp-modsecurity-crs  /usr/local/nginx/conf/8 |1 E+ O  E- v; l/ i, j
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs+ [2 Y1 n0 M* P2 A* b
$ cp crs-setup.conf.example  crs-setup.conf
2 H' z0 q7 z0 k* @1 }, M配置OWASP规则
, f. Y% \& K1 t* f/ p编辑crs-setup.conf文件
8 ^0 P) T6 {6 m) ?
6 e7 e% r8 r4 q8 j( e
, R4 f. O9 G# V7 x! [( }2 p3 N$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
6 J- n8 K) D: V$ y2 B$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf4 ~+ m. K/ l* S: f! h6 l" H7 O
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf( Q' @# }) g6 N7 S
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
' |" k( S& [, t/ i; R  c; \" J默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
0 H  }/ u% b, h1 B6 ]! O7 A
9 K' g$ t( `# `5 x& H8 t+ t
2 s% c5 Y" T' s# z启用ModSecurity模块和CRS规则
. @2 U& B1 o: H" F2 E8 M复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
& u, E# \( l2 k1 j
3 q6 F5 H6 o# \. ^; O6 q) Y6 S2 g* w) M6 h. D, T6 s! \
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。
2 j  G6 y% C7 n  a& ~0 O# c9 E- ]  V5 c/ S7 R) l9 b
, ~: n, T/ w- A/ d$ p5 J
$ cd /root/modsecurity-2.9.1/& r( Q+ ^" W6 W0 U' ^* h
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf  . n8 m- ?! u9 C% c) X% K
$ cp unicode.mapping  /usr/local/nginx/conf/
6 c! k. e5 B8 I6 ~4 ~% I将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
' s2 e: H7 r4 n
2 W' G4 T( K" R7 O: G/ H; |0 b5 G& p- Y1 \- W4 S
$ vim /usr/local/nginx/conf/modsecurity.conf
2 ^2 o5 H0 a, ]% ]4 R# GSecRuleEngine On  C- Q8 \$ A" L! I, _$ ]5 \0 f4 c
ModSecurity中几个常用配置说明:( a  N+ n* F! [0 N" m8 |
; l- c" u% |# m4 U) J8 E, K' r' g
% d9 U* D2 U1 s- L
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。5 |+ K" _" @4 c% d8 V
+ c# n/ j# }( J7 |) I
  P) \3 Y' n8 c5 F8 [+ K
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。) X6 ]. I) j1 C0 u- I
0 e1 O9 ?4 ~7 T- b0 @$ R- |! }5 J" a

' A% h' r' d! q5 F4 b  z- b3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。7 C5 q' N0 z  F' F/ p( D7 L5 V; c2 n
# T( Y0 f. N; p/ f3 S* T
+ g- Z1 ]* ~3 k2 y8 I8 N9 E
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。' D7 c5 \7 k& \  D- P2 h) {: g9 e
$ @3 D8 h/ H( F' u- u0 F9 s, B

* r; R3 I  Y( _% Y在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
' p* R* Z* d" C/ f6 O& u  g# H/ {, }8 `4 i& o6 r& x8 }

) f: k# j1 {! P% _  _3.x版本CRS
6 e- b9 E8 r' J% M" t  o4 i$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
+ R. p& `$ @" u5 v5 s# 生成例外排除请求的配置文件
8 k" J; X. T5 A3 r$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf' ^' m7 N4 ^) |# Z# t
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
2 a, Y/ P6 b& G& i# `  Z. `$ cp rules/*.data /usr/local/nginx/conf' W5 C: U; \) x: a+ a
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
7 }- W( y) R9 j: @
/ O! e) l) i7 N7 Y8 D6 w; U9 c' z# x/ X# {
$ vim /usr/local/nginx/conf/modsec_includes.conf
3 T' J6 W4 T  E0 ]: b& y
# d$ u4 A! M0 O1 L3 `0 S
[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

1 g8 f3 v+ `/ \
7 V3 |) G' f/ c$ r# T, F2 R注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。; E) |6 w% n2 g% u" L1 ?6 h4 m2 V
6 F* o6 z7 u% s. P' j# o: R
" f2 U& w: \6 @" E0 E' O
配置Nginx支持Modsecurity
8 _9 J. h  q& e* ?* {3 C启用Modsecurity
' L/ E; G6 P+ g; l使用静态模块加载的配置方法
) d6 ?0 F. e& J在需要启用Modsecurity的主机的location下面加入下面两行即可:! k/ }) B% K5 d- ]8 b3 |
* ]. g! C3 y" z2 _) @

4 |" w3 M: f4 z2 sModSecurityEnabled on;
( o6 L9 }$ g2 |, VModSecurityConfig modsec_includes.conf;
; I  T. j* f  q* c' ]修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。# `0 ~0 O9 M/ m- |% `
" {: H4 [1 z1 `" O

5 I2 `7 n- p" w! S1 w, N$ vim /usr/local/nginx/conf/nginx.conf+ i- W3 B0 Y, \
/ d( t3 w4 v7 U8 D0 L, {9 m
5 v7 @# ?( g/ o7 n2 e. R# t, |! n
server {
4 E  V! C% I: Q  listen       80;. _9 ?/ i3 p% l
  server_name  example.com;
/ W4 o8 B7 E1 }' \! X  f* r' Y
9 `. t9 I/ g, h6 A3 f# O3 I, W$ o! z3 z4 v5 j9 i5 O5 R
  location / {
' F' m/ n6 o& i( x' y4 F    ModSecurityEnabled on;
' Y$ ?1 Q' Y1 j( S- m    ModSecurityConfig modsec_includes.conf;
$ U% a* ]% r* I5 d( Q- m; ]" |    root   html;
) s/ T. U/ w0 g5 [8 K/ W  S    index  index.html index.htm;3 I$ h' A4 ~' n( i# ?0 l
  }
" L3 S( t. {4 D0 F}. i$ Z  ^) n% T, D" C2 m, ^" e
使用动态模块加载的配置方法
0 ?" h9 i: Z0 ]& ?& I& z  ~, w  c* M在需要启用Modsecurity的主机的location下面加入下面两行即可:
6 I6 K; \. |# ~0 S4 h
$ m( Y0 D# X2 A
$ d; Y% O7 d: h7 ^modsecurity on;
& ^9 R# s( e) t! Imodsecurity_rules_file modsec_includes.conf;
+ ]# T: e0 U- X: m修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
+ z5 f* b: F, y4 Y+ N! S
+ ?7 T* m/ G- _( n9 w
5 ]' T" N8 l3 `8 s6 u$ vim /usr/local/nginx/conf/nginx.conf
( P" Q' t7 _' E( O" `  E5 d( l5 b4 L, ]# q( U7 \& f! M+ e
7 e. R: @0 r: `3 b
server {
2 L8 W# ]$ B: \, m- o8 x- x7 {$ ~  listen  80;5 b1 ^, I- m; I( d) r2 W  i
  server_name localhost mike.hi-linux.com;: ^% t: h" x3 s- V
  access_log /var/log/nginx/yourdomain.log;
( T1 x$ D6 @% g' ~1 y- E' T* o, v
4 ^, m4 U1 ~. G( r
" c# l# Q2 K+ g/ [* X" V" k! Q" B  location / {
8 p& U# D" L! e& T" J5 C& E: y' ^. l* m) }

1 A2 \0 Z9 c8 f. B' N5 |  modsecurity on;
6 E. z% ~" |# s' S  modsecurity_rules_file modsec_includes.conf;2 I6 J. t# F7 O8 K1 n
  root   html;
- l8 s1 t; z) s/ f: s' R  index  index.html index.htm;! Y2 ?2 i* p$ s! x) a
}. p2 P) E2 y& `1 k0 `" E
}
# J  S, |1 Y$ L验证Nginx配置文件" B( S$ g3 E+ k! ?
$ /usr/local/nginx/sbin/nginx -t. k7 Z2 i0 ^( Q+ d2 I
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
: x0 b9 [) `1 S! h" y$ d  g$ x0 Rnginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
1 |# a0 j# b, s启动Nginx5 i% `- w; G$ {. y
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
; Z0 q( M, n$ m$ X% N% P7 I8 L4 [1 P

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


9 {: e; Z- D+ d% g

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-4-13 23:10 , Processed in 0.076862 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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