找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 12409|回复: 0

利用ModSecurity在Nginx上构建WAF

[复制链接]
发表于 2017-10-19 17:34:51 | 显示全部楼层 |阅读模式
ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。3 ?0 ?7 v8 C: k
4 P& z% u  t, w5 F3 ~

  w5 b* j4 y3 N9 \( {在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
: ^+ s4 w: V* a
, u" X% u* w* R  j  D4 a( w( ~; U  {, ^% _0 _4 a+ D: ^
什么是ModSecurity
3 H: A% _4 L( VModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。9 Y* ]2 k- K1 r! A0 @

2 V% l$ j3 d4 Q/ _/ ^! x/ b
0 a& G, J% S7 B$ B% sModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。5 Y; u1 v$ c0 {

; S# p# ]: a0 R( T" e7 N
7 _: L! z3 a% r7 w2 Y# \3 bModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
& G4 P2 i/ R, C) u$ _& O
' w) i- ^) m8 y/ p/ i9 u  g: R0 R" X) v& O# a, F. Q% n
官网: https://www.modsecurity.org/4 N( q8 k1 c6 U) [
. ?6 Z; }. f0 d' ^( ~0 G" X7 Y' i9 i

# s1 L- M) S( b8 N- G! Y* g; X5 b' k什么是OWASP CRS
$ p" ]5 J" w; r& l: [OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
% f, G# L; O7 e1 h% a7 T3 v9 j1 k/ {) ?
- i$ t7 f$ Z9 c
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
. d. i1 X6 T) X3 s# O; P$ N
" U  u# y: ?) Q0 A8 Y: W4 u1 G# i
0 e' q9 B, l. f* [, [* h) G) r( @3 NHTTP Protection(HTTP防御)
0 I7 Y1 ?( h  {/ c, s% ^HTTP协议和本地定义使用的detectsviolations策略。4 C1 V4 G7 n- Y
( `6 @4 h. z7 G8 X) ]
' u5 P& g* o" X# g$ {
Real-time Blacklist Lookups(实时黑名单查询)
: w; b3 w* @, J+ B利用第三方IP名单。
# R6 ]  a6 J8 ~# Y1 S2 d' g- N
+ k) \+ R) Q  R$ i0 Q
& P' a: P9 b3 B6 h- c' V* t9 jHTTP Denial of Service Protections(HTTP的拒绝服务保护)
4 ?! \+ \5 x, Z6 d  x防御HTTP的洪水攻击和HTTP Dos攻击。
% m/ ^& c# b- N  z8 y( T
6 S  E) ~2 I2 E
. o  l+ e6 U6 A  dCommon Web Attacks Protection(常见的Web攻击防护)
7 e& M' `! o8 W% Y: K检测常见的Web应用程序的安全攻击。
, U0 f  f8 o, s' c3 ]/ }* g
& C7 S5 r: l9 S
0 ^4 l6 p  W- i" O, l! TAutomation Detection(自动化检测)
. b0 C& a' Z5 G# h0 q; ?检测机器人,爬虫,扫描仪和其他表面恶意活动。' v1 p4 D  d+ ^* h, s0 M

$ q2 h  D0 ^- {3 I
( T; Y* u6 e0 AIntegration with AV Scanning for File Uploads(文件上传防病毒扫描)
% @( t2 T/ C8 B: l3 Y* {/ y4 D+ @6 ~检测通过Web应用程序上传的恶意文件。* v) M  a. v' P6 a
3 E0 Z6 t' ~! J3 I) p! y

4 ?/ v1 W- F. YTracking Sensitive Data(跟踪敏感数据)
3 P# O0 D) N+ C$ H/ Y5 S- M* L; {' }信用卡通道的使用,并阻止泄漏。& L. G2 k0 M  h: [4 R  n: c3 O

: {/ j6 z* {6 R5 K- F$ a. c" T2 i& y" T2 H2 g
Trojan Protection(木马防护)% }4 \$ I! i# f
检测访问木马。4 x3 R8 Y# q% {" _" }" M- a$ A7 n

" ?, R2 o$ A, x! ?7 D& n3 V3 q
3 g, D& ]$ f. ?8 t: yIdentification of Application Defects(应用程序缺陷的鉴定)2 m' R$ k: D! g6 _6 O8 j
检测应用程序的错误配置警报。
% |# Y; u0 A$ [
. z1 O  o8 z( c2 a; E
& r; M8 e9 i/ s+ K0 P# vError Detection and Hiding(错误检测和隐藏)' Z/ q' B7 U' `0 Z3 C' D
检测伪装服务器发送错误消息。* n+ e* {* q5 p; {5 T
! q5 f0 F0 B! u5 D8 `* T

2 a+ r- B0 ?4 r) u7 w, |/ c# r& ~安装ModSecurity5 w4 j! R; q# `, |3 l$ ~
软件基础环境准备1 z$ G) G2 n' c# m% G- q' u/ y
下载对应软件包# v6 w( F+ r. {$ F8 u. r
$ cd /root( _( X* W1 {6 y
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'6 G7 P% P' ~: k2 S, h0 Y) \' o6 _, 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
- E" R% x9 a* ~! u安装Nginx和ModSecurity依赖包$ E' y  q7 T/ T# Z7 o) Y
Centos/RHEL) v2 k1 S$ `4 v5 t% ^) h; |
  s$ J& P! `6 y. Z

8 C* n7 D5 v$ r1 x$ yum install httpd-devel apr apr-util-devel apr-devel  pcre pcre-devel  libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel: o! B: |( Y! `
Ubuntu/Debian6 ^" ?& K. o- M

8 P: Y6 ]( o. U- J1 E0 a9 }* P9 V% k& v& }
$ 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
; u6 T, I) r5 M+ _/ b编译安装ModSecurity- n9 ]: S; f8 A/ q6 @
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
8 d6 v2 q8 P; e0 d( G) n, l0 R9 o; Y7 n# q

: b* `9 O' D- t9 a2 x! T8 `& G方法一:编译为Nginx静态模块  j2 C9 j& @4 k- }. J
0 r) O, Q: y$ {% {
/ Q. U. n% i1 N+ ]8 Q! Q: U' f
编译为独立模块(modsecurity-2.9.1)
- H7 U4 E1 Z1 p1 F4 Y- A, K$ tar xzvf modsecurity-2.9.1.tar.gz
6 C4 t% z" Q4 u, |4 b, h3 w* ~$ cd modsecurity-2.9.1/: E! r; f& I# z2 B6 N
$ ./autogen.sh9 c0 z, b! W/ v1 p( T& v- o
$ ./configure --enable-standalone-module --disable-mlogc% ?+ ]9 q4 f) I3 ]6 p
$ make
* X% p* n3 z9 n+ h6 K编译安装Nginx并添加ModSecurity模块
2 l, \2 v: e0 _/ J( R0 x8 I; W$ tar xzvf nginx-1.9.2.tar.gz
( z6 y& O$ ?/ \% E- D5 J& E$ cd nginx-1.9.2
" k" p8 t5 R# k$ d% s0 C$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/
' R8 \1 A# S. p7 u3 [1 Z$ make && make install
" {- a* \- G$ B5 g# E! I4 P方法二:编译通过ModSecurity-Nginx Connector加载的动态模块, Q, J% {$ W  [0 y

4 y# l$ @4 g( T: J* w
( |0 o; M9 s2 F& `" g7 D& q# F. r编译LibModSecurity(modsecurity-3.0)
  |' M/ }: H( N6 Z6 g$ cd /root
7 O" i6 Q9 M# {- ^+ W$ git clone https://github.com/SpiderLabs/ModSecurity/ S" u/ W6 k  k" |
$ cd ModSecurity
4 X  V3 d) v4 j( f6 E; N$ git checkout -b v3/master origin/v3/master5 L+ ?7 ]; ~6 b. Q4 ^
$ sh build.sh
- L2 X# d/ ^& x& h$ git submodule init8 k2 N: P) q' ]& a
$ git submodule update
, N1 Q: V: [3 v$ _9 N3 j/ x$ ./configure
% g: ]9 H1 l+ g: [* G2 I' S5 P4 V$ make# m( e  t* }$ Z3 |
$ make install% ~& k9 D4 k2 V
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。  C) D5 C% n, A$ o) j/ f

  C4 P( t7 A- \3 G& ~$ q% y
1 N, S" f" F& k' T0 r$ ls /usr/local/modsecurity/lib1 u3 b7 o; p3 {. U
libmodsecurity.a  libmodsecurity.la  libmodsecurity.so  libmodsecurity.so.3  libmodsecurity.so.3.0.00 W, w& ~( h& S/ m! Q" u" u
编译安装Nginx并添加ModSecurity-Nginx Connector模块( D0 h7 }$ r/ |# }- j- E
使用ModSecurity-Nginx模块来连接LibModSecurity
# N! j( t% x* k" K$ G6 B
  |5 p! n) E# p
7 u, o# j5 C+ a& J$ cd /root
. k+ Q; n8 @  B5 k0 J$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx+ ?" c- S- O( D! ^3 J& Y3 V. d' L3 S, h
$ tar xzvf nginx-1.9.2.tar.gz
) Z" l/ X  K" e8 N9 t  }5 U$ cd nginx-1.9.2
# O! y+ g+ v! ~7 I$ ./configure --add-module=/root/modsecurity-nginx. `, v! ?! g. J% \' u
$ make
3 W" L8 P8 s  ?+ P8 o4 o$ make && make install
4 q& X( x1 E7 @, h7 U9 S添加OWASP规则
# Y0 J& J2 P0 |0 g2 a7 l+ y6 R; VModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
; _. j7 _: {: @" `
" f; q5 S9 B' w% C6 A3 P
- U. P9 `" a! t5 t7 b5 c: l/ j; ~1 C下载OWASP规则并生成配置文件
5 w$ T2 t9 U9 H% k7 i! W$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
, C: _0 j8 v6 g- j( j! e0 X* o$ cp -rf owasp-modsecurity-crs  /usr/local/nginx/conf/& q+ m. S8 D* K" u2 O6 F: ?
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs7 L% a4 ^; v" s1 I0 p
$ cp crs-setup.conf.example  crs-setup.conf9 e+ }% I* i* q. I9 l' K) }0 M9 i
配置OWASP规则+ X/ |! y, Z6 l3 }" F* I) d
编辑crs-setup.conf文件) Z: j2 H1 X3 x* j6 j4 |9 U

# D1 r; C' s3 j& Z8 R3 f* U7 B- ?- C( n, H2 k4 l
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
* y5 u$ _0 f+ X0 r4 D5 d8 l4 o$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
* r$ Y5 }! W4 Z; D: U$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
- v- k! s: i# S+ s2 b1 N$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf7 m6 B" K, q6 h" q8 d
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。% p( Z# C8 K5 r; E* W6 Z( ^2 @
% a0 q( e% `: [5 |6 o' c0 g- }
; e% {( [6 `+ \4 W- q/ F3 J& r
启用ModSecurity模块和CRS规则
4 Z; e  S. t$ P6 \% q复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。  b0 K5 A0 s* E( G" `9 |& F
/ Q9 E/ X" S3 z

# T) \6 `* m6 M: e4 lmodsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。% ?& @* s. I3 t2 u* G8 c
, c& e/ n: o0 T9 L6 A
% J: S, h9 g) F& k
$ cd /root/modsecurity-2.9.1/2 O: ~8 h0 n7 Q& e5 `
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf  ! U5 `: G! W* O6 h4 t" s- ^
$ cp unicode.mapping  /usr/local/nginx/conf/
4 U( E! o- D. L$ T8 Q将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。3 [1 U# D7 W6 H; X
" e( [; l; k( g* Y4 J

- N: l. V3 B" \7 d, P8 C$ d3 @$ vim /usr/local/nginx/conf/modsecurity.conf( _* R4 X+ n- Z: ^; Y
SecRuleEngine On
9 z) A( y" w; X( l; b  x: ?ModSecurity中几个常用配置说明:
- T1 o" Y  w8 C2 l1 G
" r: o' Q& j% _# R" l1 @7 g/ S1 h
, W" I; ?/ u0 G$ }! A, w1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。# q: X' j, o/ d/ m
: ^. O* `: z0 C

5 |' s" q! q# m4 R2 a' D3 X2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。; J0 s* Q' r" ^
) ^6 r, S& n! Y5 N  i
4 M+ o0 Y9 L  z9 J+ l  r# f
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。+ Q: u' u4 F0 C: T

: b" m! ~  w1 d' B8 o) R/ R
6 U% g( O# f7 K' F8 d& T# J6 e4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。" D; O& i& K/ z- h* ?/ y: S# i

& V( _) k. k8 s! y
3 U2 M' N4 `( {3 V7 Z在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。/ k  @8 W5 b1 Z) R! ~8 w$ G; j

$ R& b# M' r" [6 c% t& x
$ I  t, ?7 f% x3.x版本CRS
# _5 l: ~) B$ A. X$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
" W1 H2 l+ J" [" w# 生成例外排除请求的配置文件
1 O5 x5 R- U  A  |" n* m" |3 ~$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
. W& _: l9 U. m& y$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
3 Y+ L- p* @" S9 G% a0 ?* X/ ?' U8 e- l$ cp rules/*.data /usr/local/nginx/conf
/ X* b5 `( d' Z/ t% Z, \为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。  c, r: M$ f2 q; e5 |
# b4 Y5 n5 N# x) K* V

- ~3 z1 q0 f* d8 @* W% m0 M$ vim /usr/local/nginx/conf/modsec_includes.conf
. w! s$ a" @/ Z! I
" `2 _% G+ q+ c: y  \
[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
8 G! m0 R. K8 W- i" O

0 N: k# n9 L& ^7 h1 [% ^" {4 K; ]注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
5 P+ R$ ]* m1 z7 `/ a. t
, G' H7 {% ]0 [% {6 n
- F# I. W6 N2 y. Y& a7 }配置Nginx支持Modsecurity% n& v9 ^- {/ X3 g2 W
启用Modsecurity4 R' `' B5 {1 E  L2 Y+ o0 k
使用静态模块加载的配置方法
! Q& ^5 c. W7 e$ \- x4 B在需要启用Modsecurity的主机的location下面加入下面两行即可:; R  ~9 K6 U, D( w9 {# o

) Z0 ~2 x3 Q/ d) t' [0 M' |- H  f- `
ModSecurityEnabled on;
7 ^, b. F# a; J! q# ^5 A- ]ModSecurityConfig modsec_includes.conf;
  d( |' l6 \/ S7 t( V修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
7 Z8 s9 f4 N" ^( R' F* {  J" e3 ^+ r% i- u9 l  q5 c7 M

( L9 W6 k" D2 _/ [9 A/ P% P+ p$ vim /usr/local/nginx/conf/nginx.conf' N% f; X7 u+ i. r' Z

4 W8 X3 d+ R. {! [! b; d; V/ f% [( e* {- A1 W3 j; l! j
server {
4 d$ j4 J  S$ z& T  listen       80;
8 U* D' N% D* f. A3 O  server_name  example.com;
9 N8 i# C9 _- W0 o6 I+ @3 r3 n0 K. x. z  }) `
- C+ p1 t. n. B* Z% Q/ A
  location / {+ E: R. t: A, h5 \& L. m. k
    ModSecurityEnabled on;
( s0 _: x3 E, b& v' T    ModSecurityConfig modsec_includes.conf;
0 c! X+ E) m$ c) a* p& T3 r' B    root   html;
; f4 a+ J6 k. A  N# |1 d3 I+ w    index  index.html index.htm;
' ]' n2 h0 t8 ~4 p  }& D1 Y* P( W0 M
}7 y" b& F& s( W7 ^$ q+ P4 h9 Q6 v9 x
使用动态模块加载的配置方法" ?; }: ]7 n5 a5 d
在需要启用Modsecurity的主机的location下面加入下面两行即可:' d) S: |" f- y( h0 M
8 a, w2 u, V, F. g; y0 r

6 p& Y, O6 [; F1 U6 e/ i4 }! gmodsecurity on;+ O3 o- i" U! `. x
modsecurity_rules_file modsec_includes.conf;
& G* f% Q+ E# X9 j/ W修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
( k. j( x  f; p7 E: q
. s+ J0 K# x3 U1 t" O8 O$ \0 P, u& w
$ vim /usr/local/nginx/conf/nginx.conf, K& X: p+ Z" M* I" |

# [* t: C1 f# Y0 V) F* q- ~* @+ i/ X# i* y2 I- B' w) L
server {
+ E4 C  E5 i! j: w  listen  80;$ M7 P/ N9 ?# |9 c' P0 N$ b
  server_name localhost mike.hi-linux.com;* x8 E' ^5 i6 U( G7 u: g, x
  access_log /var/log/nginx/yourdomain.log;. `+ S% y( p' E: o

/ R3 h: |6 a- B8 {/ v# ?( \
4 |9 C8 Y1 I( t1 K, c' G  location / {9 P7 o1 t  ^: }4 W9 w. L

3 H+ D+ w5 ?" a& e+ H8 p4 n- h8 R8 {( s3 z- P
  modsecurity on;
" n% W1 y- w( `( h5 M/ }) x  modsecurity_rules_file modsec_includes.conf;
4 I+ q' Y) L) |9 l  root   html;
* w$ ]. f& x6 t  index  index.html index.htm;
$ g2 u' y* w( M/ N4 U+ W5 ^3 ^4 E1 I}
5 F: h" ?0 `' N4 }}* `4 u9 T% L$ s! }, s# k0 C
验证Nginx配置文件
, h; I. ~& A$ E( p$ /usr/local/nginx/sbin/nginx -t
; ]! ~6 Y. e% {nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok: }1 a8 y! W( r2 C  L7 P% x% D
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
* x0 e* ?5 D  C$ r启动Nginx  L* B9 T$ {$ i0 `, o
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
9 \  P+ b7 G- z$ O9 ^5 G
; b. I, T8 `; ]; L" C2 V: J

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


: I3 R) {: n4 l

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-9-20 17:29 , Processed in 0.064696 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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