找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 10016|回复: 0

利用ModSecurity在Nginx上构建WAF

[复制链接]
发表于 2017-10-19 17:34:51 | 显示全部楼层 |阅读模式
ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
1 j+ v' I, _7 k1 x8 n2 _2 G
4 L. X9 L8 [/ k3 f6 I0 ^* [0 {
* ?6 c: W7 Y3 Q$ w$ q) ^3 V# L在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
; b- ^: F* |1 l: g* \
5 ]/ H0 P5 V& |# d" F
& D/ j) f% k- |1 V9 s8 [9 s( T什么是ModSecurity8 R. W  l1 T& Q$ z3 m7 ^
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
3 p$ f6 V3 O3 F$ A9 t$ {& C7 I. @6 {& W, W9 R

/ I' A" G4 Z4 d+ Q/ a3 m) BModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。: {  @+ I4 g6 H. |9 {/ w
$ V8 W4 m. K- Q+ K$ G5 F

; p: }, ?% S! ], HModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。+ l) y+ |# j$ \2 z  _: Z! ]0 }% e
$ |* N% n6 w5 F6 Q/ c

$ N2 _5 [  I  J0 `' |' B% \8 v3 ?, I官网: https://www.modsecurity.org/
4 ~+ {  M( M" C5 }2 x' o6 Z
! c- W# f, }2 D: C1 {1 r8 ~( }' L/ C! g: t( ?5 [
什么是OWASP CRS8 O% P) ~7 W4 N% y# d: M6 _
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
# S* e* W& ]" N' g9 i4 }4 f6 h
1 v1 P& i0 a) {- ?  u1 j; H2 }% W& }6 L, {
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
, g% T- N9 F7 R' Q8 Z/ f( x% ~4 r/ t2 s/ m' B' o- b2 o

& Q9 d/ q9 H- }HTTP Protection(HTTP防御)
7 Y+ t( U7 u- i5 V0 BHTTP协议和本地定义使用的detectsviolations策略。
; R! y# T+ D+ I: R0 y" B3 Z( S* b$ m7 m9 W

% w# h6 Y, i* w, W! D2 M( \Real-time Blacklist Lookups(实时黑名单查询)
& Z9 f* b! v+ k  \3 E利用第三方IP名单。* w: Q1 x4 E; E; C4 W
/ t8 W; O$ ^- A! @* |

7 m4 u! F- N9 z3 W: N% m% u8 ZHTTP Denial of Service Protections(HTTP的拒绝服务保护)8 I5 a4 t+ k6 c
防御HTTP的洪水攻击和HTTP Dos攻击。9 ]- c  S! P0 z; J! I. \6 j
; p) j% n8 W: o7 ]5 L4 E  g' ^9 C

5 T, V2 g% I7 X- ?& y% e8 s& Q- ]9 XCommon Web Attacks Protection(常见的Web攻击防护)& S% }8 T0 L8 v9 w1 o
检测常见的Web应用程序的安全攻击。6 L0 ^4 S8 X- ~  e, `4 Y

7 j5 _7 @' X7 Q6 M9 e
. }0 h! O3 g+ l8 R1 s( T  S% KAutomation Detection(自动化检测)0 @/ s9 j; }6 l. `8 ?3 m2 F
检测机器人,爬虫,扫描仪和其他表面恶意活动。
3 F! L$ V5 i6 t& s* B- |* T* F
5 a! N7 v& S8 P  f( q9 T
' T* b. z4 x/ |Integration with AV Scanning for File Uploads(文件上传防病毒扫描)% ]% N4 K; Y3 m8 U# L
检测通过Web应用程序上传的恶意文件。% |5 H; c0 Y2 H1 F; I
! ~3 A, Y  C# Z/ A& p8 b

' I# `0 B' j  [& `' ?/ iTracking Sensitive Data(跟踪敏感数据). F5 A) H& {8 ]9 M4 h% z$ M
信用卡通道的使用,并阻止泄漏。4 P5 T. Y; S: o4 k) y2 r# F1 U

7 w- D5 I! j" }- \" @, q5 G5 r
6 ]8 x$ a* E9 Z! {$ K, Q. ?# _Trojan Protection(木马防护): L% v. W8 J* l; b8 @, p% b
检测访问木马。
3 `. }. L. B- h' R, @$ {, @; g5 }& {1 K% u: o8 W& c  U4 ^

2 {" m: e3 G# h; sIdentification of Application Defects(应用程序缺陷的鉴定)
+ x8 L1 [# `) n3 W! d# D检测应用程序的错误配置警报。9 d  e4 O% I  O6 ^8 m- O8 j

# h7 Z1 l+ |7 t7 s0 K
/ K" K5 _! y8 r. `) w. IError Detection and Hiding(错误检测和隐藏)' i5 i% \) w! v- |% d
检测伪装服务器发送错误消息。' H2 y& |  ~; k! M

7 a% @- R% `  p4 v3 l8 [. C6 C3 S
" b6 `/ {: @7 b; Y安装ModSecurity6 i, V2 z" J# {- _
软件基础环境准备+ b9 L# a3 \; R* E
下载对应软件包: y. H' G" k& ?5 t. R
$ cd /root& `: |7 v- i6 `% q* x; i
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'; S! Z6 B- `/ ]* N* m+ Q
$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz8 j6 m* R2 G# J9 V3 N! F/ M6 T$ ~
安装Nginx和ModSecurity依赖包
6 r5 I+ ]3 h& E$ jCentos/RHEL
9 G# {1 P  `3 a& U% v5 J& \8 T( l. y) Z! |8 P& f

( R; ]9 T/ o5 H* F! L4 \8 \$ yum install httpd-devel apr apr-util-devel apr-devel  pcre pcre-devel  libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel: f7 c  Q4 H( c
Ubuntu/Debian/ ~% h) a" V- g- F! Y$ A
7 A; [9 s# m: T

0 P6 |$ i, i. C$ V2 W  I3 j$ 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* X+ b7 W1 q& V2 X5 Y$ |+ O  t; x# I' `
编译安装ModSecurity
* k8 C( s+ g& k* pNginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。. ?- {; L' q) ]! i- v* a. D
3 \# v3 i/ a8 q  M6 Y) V

% C& B- Y7 g3 D5 p4 J, e( A方法一:编译为Nginx静态模块  K7 a; j  {! t& h

: g4 u$ @4 E# Z" |& t7 E+ o$ ]" n; Z
编译为独立模块(modsecurity-2.9.1)" |5 E. m$ U8 x$ U  a4 Y/ P
$ tar xzvf modsecurity-2.9.1.tar.gz( _3 f- _% C1 G* G* o
$ cd modsecurity-2.9.1/
5 h  }2 M, n( |- ?$ ./autogen.sh- @7 H4 k8 E8 m7 S# b
$ ./configure --enable-standalone-module --disable-mlogc) W; N  a0 W  ^# H7 R* t
$ make7 i. \4 K6 P1 e) s, H
编译安装Nginx并添加ModSecurity模块
2 U5 q9 x! @6 _/ I$ tar xzvf nginx-1.9.2.tar.gz
" e, A; ]" x1 g3 u0 Y- E: m; g: H$ cd nginx-1.9.2/ E# v) ~, x; ^0 d$ K
$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/5 t* `# ?4 b7 G' D
$ make && make install
  f/ L$ [0 a( {/ V4 v3 E方法二:编译通过ModSecurity-Nginx Connector加载的动态模块! n  Q& h0 E, u" ^1 y, ]5 `
3 E- w5 j. d; E5 ~9 K
( N3 x8 N5 J# u* V3 j% G
编译LibModSecurity(modsecurity-3.0)2 O4 q, i& ^1 p1 i+ E" G
$ cd /root
# Y. m6 c! {6 e4 V6 x$ git clone https://github.com/SpiderLabs/ModSecurity9 I" i3 \0 r0 o' ?( s) O- A
$ cd ModSecurity
) m, {9 z& I# t% k. T2 o' j$ g$ git checkout -b v3/master origin/v3/master
' r* P5 B) A9 i6 S; K) B9 K% [$ sh build.sh
2 ?9 N  a8 A, R$ git submodule init
! J) M% l) I% \+ r* A: t$ git submodule update
; s! p. a/ K/ r, c$ ./configure
  Q. E; i) f+ H1 t$ make
" j7 R) }4 Y" s  w+ g$ G) k$ make install) W1 f5 L4 D; S* A3 @, Q
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
# J5 m$ a& ?  S) V" q1 ?& V! S# j. B0 B5 h2 s1 ~5 F% ^, c2 K3 \
6 x# ]  Q9 g8 {" g
$ ls /usr/local/modsecurity/lib! R: g5 o, ?# l) r9 C7 \( c
libmodsecurity.a  libmodsecurity.la  libmodsecurity.so  libmodsecurity.so.3  libmodsecurity.so.3.0.02 h$ j# M. z% A( B0 i
编译安装Nginx并添加ModSecurity-Nginx Connector模块
7 Q! z0 ?1 k: v; t& O使用ModSecurity-Nginx模块来连接LibModSecurity
8 o! b# b6 l: B$ w' J; B) d* S! H) u/ \- K# Q9 g2 x
$ \7 m( G) R/ E9 @, U  y
$ cd /root
+ Q% l0 z* \0 ^. m$ b5 Z$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
+ H5 r; a  w! x2 o$ _+ U$ tar xzvf nginx-1.9.2.tar.gz' ]$ L3 _9 Z6 f; f& r. y, ]2 g
$ cd nginx-1.9.2
! q7 I( `& ^! f$ ./configure --add-module=/root/modsecurity-nginx! E: H7 A# d9 k
$ make* {0 K: r# [- V. p7 l' D- j
$ make && make install4 v& E% f+ o; i' A  u# z- B' |
添加OWASP规则
; N, u8 R  H# f1 D. FModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
5 i! I" u& N# j% m" L* H8 R
/ {& u3 D* Y+ x' B5 l
* T! v- Q, q- H) N; Z; h- g& ]下载OWASP规则并生成配置文件1 l- A( ?8 Y: H! {  g1 M! {
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
" a+ Q6 a4 N- q! z) P  Q$ cp -rf owasp-modsecurity-crs  /usr/local/nginx/conf/
/ B2 a  T, v8 p( T! U$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
2 k0 ]0 w# T7 X* W- [: i1 v' v$ cp crs-setup.conf.example  crs-setup.conf
# W5 W6 q1 {) A# J配置OWASP规则# |  L5 V+ G  z3 O6 L0 y
编辑crs-setup.conf文件: A$ s! m0 h( o+ ~

$ J! S6 d  N! P. M0 s7 {0 P$ E  u* S
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
: u( ~4 r5 g& ^; t8 ^$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
, ^% k2 h6 V! D$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf: x! b! c- w4 M4 q/ @, D7 y
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf- Z% V1 D% ^; N& M- y: i
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。* T$ i: P" s' Z7 A) X; K0 y  K
; B# H8 N" V1 U8 E/ P

/ c- b3 U2 O0 s  O启用ModSecurity模块和CRS规则
  l) }. ?9 W' V6 [复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。* o1 R! H( d! Y
% {; \, i* i- p: x# {( q9 y

* ]- n: ]$ C. d& T' `modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。
7 T$ ?4 f4 s( C" s
/ ~$ d1 @& ?7 _$ v! o
) m/ S" H8 f3 M! y8 w+ ~2 w$ }" Y1 M$ cd /root/modsecurity-2.9.1/
5 E% H7 `2 E# U8 J2 v$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf    L; e. ^( B7 ^$ T0 O9 I
$ cp unicode.mapping  /usr/local/nginx/conf// h. x( h+ q, e" E# P: _; B
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
9 a% ]+ P! p8 Q5 z% G( N! z+ K, J; l

) v, |* P+ Y1 Q: \, L# i; S$ vim /usr/local/nginx/conf/modsecurity.conf
1 _1 m% C7 T7 |! [# C5 Y2 ?SecRuleEngine On* g* K4 ?6 r. H0 `
ModSecurity中几个常用配置说明:
( Q% ?7 s, O# U4 _$ Z  a) r% ?+ ?2 A

2 ]" ~. L" H; d( y; J1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。: p8 Z& B; s# ?9 z, w# p4 W: g

5 w( k. @0 u$ [+ r' U; u
* W4 B# b" Z% o7 I' s5 x- w2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。/ U  S2 U8 t& {2 F2 b! m3 y
( j( G+ `# ]( C# h* J

9 w  l: v2 x. o0 j7 [3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
+ s# v" A4 D. [* ]0 R8 h
6 n  }* N, \3 U$ l& U* A
) D9 H1 q' _1 T# ^. j& M4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。
; Q4 t* X$ e/ G* Q% F. q/ R( o1 W* W7 q% O. F

) e8 z# H3 w, ?在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。  S. o0 t. H8 a* `

8 Z" w- |6 ^/ v2 w: \/ y$ A+ m6 J4 o' N$ W
3.x版本CRS& H* ^) F; [& p& ?; Y% p) ]: c7 Y9 E
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs' ?; W0 s- ?  }+ x, z% W
# 生成例外排除请求的配置文件
! z5 D; {# D$ o) I- ?5 u- o% V$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf* o# |3 T8 y. F
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf8 {8 i! B+ O. [3 I' g3 Y. p- [
$ cp rules/*.data /usr/local/nginx/conf
+ P& _! c( C5 c0 t" ]为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。: @3 d, d( r" r1 r/ X' F/ H
: E) k8 c/ _; {; \

0 _9 {3 V/ |0 Z: \% t+ r# I, a) k8 ]$ vim /usr/local/nginx/conf/modsec_includes.conf
8 U1 ?" R" E) b6 V4 R" V& o" w- z% {
[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

! w3 J& B  R; M/ \1 q% k- R' J
+ a) J! S8 d: E$ B% o" z5 |注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
% G6 w; {: |- Z. R) C$ M' q
( r" B+ k& D* h" ]
( f! w1 T2 b7 w; |2 l0 Y  r配置Nginx支持Modsecurity  i& J% v* V( H: d, A2 a
启用Modsecurity
8 @' s* E6 b: a; C+ H使用静态模块加载的配置方法
- Y& ^; s- }% x在需要启用Modsecurity的主机的location下面加入下面两行即可:
6 n0 b! p7 W6 r0 [3 D$ c1 _
% H5 U% W+ {$ g5 a; F. x& Z! J/ q$ g6 j) t. ^4 l9 F
ModSecurityEnabled on;
& E" D0 m( U7 ZModSecurityConfig modsec_includes.conf;5 P  d6 K0 s  o6 A6 M- ?# E7 I
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。& W; I5 b0 Q9 Z

1 i! `- }- H  ]9 s/ m7 b1 t: |. h+ C$ L; x! {/ |+ r. W# |
$ vim /usr/local/nginx/conf/nginx.conf2 V, I: J$ `% [

3 c/ i0 |3 z# {9 U6 ]! H( `1 ^
4 n2 z1 x  `5 Q. F* ]/ f2 q0 wserver {, h0 }8 s9 g% P& n3 a
  listen       80;) R# H" o3 H9 N+ M, _
  server_name  example.com;
. }/ C6 R% S; f# o0 c( t1 }" [- |$ D8 E, n+ j% E7 S; C5 ^
- I0 F# |, o  O7 I" o6 G
  location / {
: _& G8 |' a7 y4 G7 W  w    ModSecurityEnabled on;% N6 _8 d& \7 @# Z9 W+ I: w
    ModSecurityConfig modsec_includes.conf;% N( F. Q! e% j" R; t9 f* l# Z
    root   html;9 s: L8 C5 W; P' J+ B
    index  index.html index.htm;
3 U' E6 }7 U' M, Z+ Y9 W' j  }. Z# O) H% B; }# N
}. a4 E8 v4 ~" t' A
使用动态模块加载的配置方法( ]/ p/ ]% ~$ Y7 c% n
在需要启用Modsecurity的主机的location下面加入下面两行即可:
# _9 N2 {9 @/ _9 j8 Q- T
3 f0 D: m2 U) F: _* _9 N; x9 G5 w. C  |1 U$ g6 [
modsecurity on;' g9 ]+ e* e, q% j- ^$ K
modsecurity_rules_file modsec_includes.conf;" Q# k; U2 ]/ ?1 i, |
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。+ y0 z' k' y  G8 n0 [

. m6 b2 d9 S9 }. s
7 X" H7 R# {* _0 p! C/ R1 T- J8 a$ vim /usr/local/nginx/conf/nginx.conf
% I- z7 ~0 @- J, W/ d$ A
; u! e3 V4 t4 n" f& S4 d' o0 {' `# ]
/ d) l: ?. o0 r2 d7 p% oserver {
- M6 X0 K1 e7 {/ Y" I$ Y  listen  80;
  h& f# ?1 g8 c: P& f  server_name localhost mike.hi-linux.com;
; ?) ?  I/ z4 z" C  access_log /var/log/nginx/yourdomain.log;( w. x6 K/ T; S- Q+ I  P; W
7 U6 o1 _/ ]+ {& C, i0 n

# [2 q: J& U$ q3 \9 U  location / {1 A; q% s$ U$ o$ y4 m2 n6 e

& [: Y: c- p) z3 y! k/ h# D* ]; M: ~% |- B. m7 j* O
  modsecurity on;
* U% z; @& `# C+ q: M4 E1 H) X  modsecurity_rules_file modsec_includes.conf;7 ^) _: d9 q, S! F; P6 E; O) [
  root   html;
$ o, `+ M6 a7 l* }1 C  index  index.html index.htm;  X- V" v; _! X' {
}
3 J4 q' v) D5 o& K2 I2 E}
) i7 s  Z# N2 {2 P* D验证Nginx配置文件$ X9 B# L2 ]/ `1 m' a
$ /usr/local/nginx/sbin/nginx -t; T* d0 s) L: i4 W" c6 F6 q2 ]6 r7 H, Z
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
: R' ?  L3 i- `1 B' O1 onginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
  f$ X4 C4 E% A启动Nginx+ n" g& `/ }$ t' A! B4 Y" B" g
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf. m  F6 M$ m' i5 `' U9 G

" E5 G& i$ U: @- \

测试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- h7 ^3 f4 n: e% K$ K

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-1-23 23:54 , Processed in 0.071566 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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