找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 11697|回复: 0

利用ModSecurity在Nginx上构建WAF

[复制链接]
发表于 2017-10-19 17:34:51 | 显示全部楼层 |阅读模式
ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。$ T" g% J, ?% S/ I- e" A( ?. a
2 a% l1 w! k9 D7 E% F

) C% \/ `" x/ L4 ^5 J在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
3 b5 V+ I; U1 T0 f- p+ O* y1 x
4 T; `$ D9 q; O, B- [4 r9 L$ p: u; p
. U- k7 ?8 }; P& o' ^什么是ModSecurity7 B5 |7 }% x! [6 S  ~2 q& z
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。; i! O' J6 q. t4 t! g

: G2 V" d5 V( g2 u+ m/ _( a" \) c1 R* A, \7 v, c
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。- f0 S8 E. u# w) v% V

; q3 d! v5 r5 n- M7 ^7 b9 h  L1 D, K9 H1 W3 D2 v) I; Q
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。% u: {3 I! K4 w7 D

4 d& [9 z( t2 G  [/ d" Q0 |
& N# Z) [: j6 K, I$ S; E) W( Y官网: https://www.modsecurity.org/
6 l+ X3 E1 _* J' K4 n9 w
9 o7 E1 D. w) [  U# W: f$ S% b6 f7 o0 L1 n
什么是OWASP CRS2 r8 [4 Y) E1 @2 d' z
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。' ~7 c0 ?2 t7 o0 e) @
4 X( z5 Y' A9 l
' M/ ^: G1 G6 e9 l& C
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
7 _$ S( {0 l2 [) L- O
: @# E- I1 y; l+ _2 ?
3 \4 |0 Z8 r1 B$ }9 }& `HTTP Protection(HTTP防御)2 |$ Z6 v' y+ f* o' s8 j
HTTP协议和本地定义使用的detectsviolations策略。9 L* P# s, Y4 m7 g3 n% l
' Q% j4 N* D0 }" r- y

1 @# e: c8 S4 w3 |3 XReal-time Blacklist Lookups(实时黑名单查询)& }0 d1 L! I  c6 P2 d( [
利用第三方IP名单。7 |& ]; L9 F- Z' k) S
# v- D% I3 s5 P
" @7 z# V- \. m: t2 L; J8 I
HTTP Denial of Service Protections(HTTP的拒绝服务保护)
# X. {5 s0 W' z5 J5 f7 I$ K& }防御HTTP的洪水攻击和HTTP Dos攻击。( O7 i) F4 y5 S( g4 ]& n

$ {, `  k% N. \9 `2 o" W0 q. p; ]$ @
/ A3 \3 O1 {5 zCommon Web Attacks Protection(常见的Web攻击防护)
9 J% a8 t: D0 }  H3 k! _检测常见的Web应用程序的安全攻击。
& c' K, G, T3 L, u. V! O- N" X. m3 \, f0 A1 ?
1 |9 t& c% [$ h& N3 j
Automation Detection(自动化检测)
6 Q( E1 i% H& B, D- v8 o* {检测机器人,爬虫,扫描仪和其他表面恶意活动。
  M* c  S& [0 `/ {+ w: ]
, Q% R( q  ~! f( S+ z4 o9 K; s$ |+ s7 d4 o' y
Integration with AV Scanning for File Uploads(文件上传防病毒扫描): K3 K0 }( ]/ A( `; R+ r
检测通过Web应用程序上传的恶意文件。5 G! G, W3 e6 h# d; Z  p$ d
/ d" c& V4 s1 \  t

: s6 ?: ?& e3 q* RTracking Sensitive Data(跟踪敏感数据); v/ Y% `- ^) B8 n1 N
信用卡通道的使用,并阻止泄漏。
" @9 S5 I1 ]0 L2 p% h
) U, F! p6 X% B/ D7 n
( {( W! {5 g9 C! T2 TTrojan Protection(木马防护)4 O0 k, u1 s1 d
检测访问木马。! c% @* G: y2 N" r# S$ A$ c
% f7 W; w6 U& I' L
% R% L0 Y" z  s7 ^. s0 |/ B
Identification of Application Defects(应用程序缺陷的鉴定)0 q7 d2 I! A& s8 B, _& ]2 x
检测应用程序的错误配置警报。
/ h  C% {2 J" O3 f1 L0 g  @
" o% E( o4 \9 e7 p( O9 V. ~8 }! K$ K2 W* N/ c% H: m8 }3 D: e
Error Detection and Hiding(错误检测和隐藏)+ B" M! W9 R* o7 r. G/ T
检测伪装服务器发送错误消息。2 o) F1 O3 {; d, K

# ^, w! X; u  P. u4 R% [! G# E
$ F$ b- d# A  C/ v1 B/ k5 }安装ModSecurity5 p' z9 o. D  B7 \9 l$ ?8 @
软件基础环境准备
1 O; _5 H/ C5 E, A9 Z6 r下载对应软件包
% E& D6 v0 o$ h$ cd /root
6 z2 s+ n+ v) z' [2 I5 f$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'4 n: ^. a2 z- w  _$ d) d
$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz
& ?! L4 o" O' y* R安装Nginx和ModSecurity依赖包5 N' k2 C% S$ ?" P" R
Centos/RHEL! n' A8 L9 l. U* M+ Q

1 l: @1 S3 {) q4 F
; A& x( h; u: I5 p4 Y4 Z$ yum install httpd-devel apr apr-util-devel apr-devel  pcre pcre-devel  libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel. d( @& a0 K7 t2 \3 Q
Ubuntu/Debian
. Q+ p/ F* \3 Z. U& L8 i# ^4 Q7 H  y- K; y

  d) L$ r# S% f# O4 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/ M' i# \! u9 ]
编译安装ModSecurity
4 _; Y# O- n! V. k  B3 F1 F8 P" j8 x) ]Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
7 l$ v# ^" z" `- @" |' y) [* \9 ]3 X& R- X
2 ?* U+ T- u# K- F$ v
方法一:编译为Nginx静态模块! f4 q) S/ R; l# ]* Q; X) l

6 [  q- z) j$ b
3 F& F; a  P% [6 j编译为独立模块(modsecurity-2.9.1)" D7 S# D7 u% @/ }  O% [
$ tar xzvf modsecurity-2.9.1.tar.gz# Y( v1 L7 t, m" b! t6 ]. F5 D
$ cd modsecurity-2.9.1/7 q$ k' q6 |/ E% ]: u7 m& ~
$ ./autogen.sh
, k& J# j4 ]! N1 _, c* p+ @$ ./configure --enable-standalone-module --disable-mlogc
* ~+ _3 ]! o5 \, R, ^9 B$ make3 u+ Z; {3 y2 a
编译安装Nginx并添加ModSecurity模块
& I$ v& x0 G- y& {$ tar xzvf nginx-1.9.2.tar.gz
3 M2 E, @. Q$ J; t0 ?$ cd nginx-1.9.2; a+ I' q8 c* W3 @0 C
$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/4 {1 J  r8 H5 N
$ make && make install! l6 }$ |8 Q+ S2 d" s  p
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块1 w' J! A2 Q7 v. m) F2 i8 U% e9 X

4 f9 H% u  _6 u' ]& |5 P% Y- W, D) U
编译LibModSecurity(modsecurity-3.0); N; k& l9 x* k0 o1 I% i# d
$ cd /root  ?0 t  s. h1 e- o
$ git clone https://github.com/SpiderLabs/ModSecurity  v6 |: Q5 x- P" u8 M
$ cd ModSecurity
8 p; R. N& L) f. b$ git checkout -b v3/master origin/v3/master5 p; Y! k" G& ]: h5 S7 v# g
$ sh build.sh
; k6 C5 @) f. L$ git submodule init
# @9 K& G' }5 @3 X$ git submodule update% t6 t9 U( Z- u* o) l; @
$ ./configure
4 S4 A% \0 A+ v$ {6 f- G& C& ]  s$ make; j% x( K! A9 W/ ~) X
$ make install
8 ]9 t0 s/ K, W* y9 z" lLibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
3 A! T+ {( x, [" T8 m8 D: x" J! S6 ]/ D0 u' o' i/ ?5 X9 D% v
5 Q9 J* E7 g$ Q: L# j) ]% n& V
$ ls /usr/local/modsecurity/lib5 E, y& D' ]) I% ^) ?9 K2 y  e
libmodsecurity.a  libmodsecurity.la  libmodsecurity.so  libmodsecurity.so.3  libmodsecurity.so.3.0.0
$ q# h4 {  R4 b5 x" ~编译安装Nginx并添加ModSecurity-Nginx Connector模块, I: T/ T6 o2 j5 y  [9 L
使用ModSecurity-Nginx模块来连接LibModSecurity
' N2 ]0 Z. F' ~/ M+ G
0 l  [( F# Y* L- ]" w9 x
  D3 M' a1 f: B, g' Z6 @$ cd /root$ a% C- ]1 p3 v4 l
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx" c7 p: W- I! w) @, ^
$ tar xzvf nginx-1.9.2.tar.gz
( v0 p  n& q8 `  K$ cd nginx-1.9.2
2 z% C! D& H2 X$ ./configure --add-module=/root/modsecurity-nginx
" O+ R2 f( D$ @$ make6 y5 d# [$ C( W
$ make && make install
& Z3 _  Y4 Q! Y( m& M8 O0 m添加OWASP规则
1 }5 R: C: V1 `1 L1 m% S! mModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。# F. O% B0 l+ K0 k- ?# p0 z
6 O7 V# w, x+ [% E2 n

/ X: S% P8 u7 y2 m; V! P3 o8 O8 a( i) o下载OWASP规则并生成配置文件6 c; P7 h# Y: w, q% E) v
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
5 E) ^. Z+ j  l; e& j* b5 ^! T$ cp -rf owasp-modsecurity-crs  /usr/local/nginx/conf/2 k$ `/ B6 R$ ~3 F( Y7 ?- ]# y
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs8 F! ~. e2 W; _) E) ]. y
$ cp crs-setup.conf.example  crs-setup.conf
8 K- N  S) C; d  _# y+ a6 U配置OWASP规则% n$ F# v" ~, n9 L4 H# p
编辑crs-setup.conf文件
' ~& H: E/ @4 @! O: ?3 M/ K3 Y
! n# Q0 s) q7 k' c7 n1 R1 P7 _
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf  P, r, N+ x( B  C- A2 _
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf% u, C8 y4 W3 d0 J* `' n9 u
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
6 e; d+ x: g$ ?) V" z0 B$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf4 e* W0 c" X( v9 F& I
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
5 Q) d8 s% b  b$ R. z* y# X7 m$ H
; C+ |- Z) M( A  \& p% E% f0 q2 B
启用ModSecurity模块和CRS规则
! y; }- ]$ t# ~' m$ M$ @5 t3 ]复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
& M, ^) H8 w' G; `4 F
) k9 A4 N% s$ q  m; Q# p& o0 W8 ^. U
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。
: W" Q  G& i. N' j4 E3 Z! }1 E8 q$ f: `: K7 t% Z; m
% P; {# w  Z+ Y6 {
$ cd /root/modsecurity-2.9.1/
4 {; u9 y* A: |) e8 A( B* w$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf  
& }# p, S7 ~/ v& E- t1 x% c4 ^- l$ cp unicode.mapping  /usr/local/nginx/conf/" X, W8 o/ d8 H# c% k
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
* v! m/ X8 a! T# `2 c
2 t: g- l2 ]5 |* M/ h& R& a3 O& [4 z; v  v) {3 h5 K/ T' v
$ vim /usr/local/nginx/conf/modsecurity.conf9 k5 |# r% B, E1 o
SecRuleEngine On
9 J" n; C9 L6 [5 H7 ZModSecurity中几个常用配置说明:
' l. ?6 A# t* d
: a/ z- s# W5 ]
/ ~2 F! i' ]- U; z9 V, I2 Y/ k# w! U/ n1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。3 q; u: |# s" z' V
# |- `/ H1 I; b9 R
, n* x9 p& F/ H% O& o( d' H5 g5 I
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
" t9 O/ H+ B8 d% h1 c$ |: B- t5 A* Q# G

* |. _6 p1 l+ u3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。' ^+ k3 E- V$ O* g$ o
  W3 {7 D% @. Y0 i6 b
! v# q+ f2 D0 F, F
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。4 x1 M6 ~2 S. q$ ?$ H" I( D0 u2 f& f: T
: L0 w. c9 t3 n+ @* ~( @7 k

4 V9 v2 L4 K& a' y4 a9 e在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
( J: C. `) V& h9 q5 \7 R. _% J1 F! C- M" @9 r
2 D1 O$ ?+ Y9 `! f
3.x版本CRS
/ ^" H; ~) q) E0 y/ z0 R' c$ cd /usr/local/nginx/conf/owasp-modsecurity-crs5 t/ S( @% Y( i; {5 t
# 生成例外排除请求的配置文件2 }" L5 k( z  R8 k" G& m9 W
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf, `7 Z' \8 i9 q9 F
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
. q  o- z- I5 R$ ~$ cp rules/*.data /usr/local/nginx/conf2 s# j, r! P# G. P3 D0 {6 C$ d
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。6 X, ]+ T$ o. G
' l9 T, F, D+ F' {
, x7 g; j* E3 n9 g* ?4 `, \% b
$ vim /usr/local/nginx/conf/modsec_includes.conf
2 P) t6 G- C9 ~% L! p$ r, F  w3 i" E5 I9 {+ e- x6 g
[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

' F* H1 ?; x5 m' L8 l9 M2 P6 H* a5 ]9 y
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
" U: H2 X$ }- [
5 D+ j) b: K$ T; L' |# \& z7 z/ B$ v$ t
配置Nginx支持Modsecurity
: ]' W. [+ ~) O- e# W/ R, B4 q. q1 G3 X启用Modsecurity
5 q" }) @. G# M7 ^" R使用静态模块加载的配置方法
, g4 m" m" F" R# r% B在需要启用Modsecurity的主机的location下面加入下面两行即可:
/ Q) V0 n1 g- r% r6 t, {/ }/ M: o- C) _+ {( Y  y
+ O! T0 l, e  p  \* E
ModSecurityEnabled on;! `, s: B: h4 O6 S
ModSecurityConfig modsec_includes.conf;* d  n/ I$ Q( F9 A$ o
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。" |' |2 L. `0 {; p. I

8 `) g3 \6 u) k! I! I8 v6 \, |5 O5 q
$ vim /usr/local/nginx/conf/nginx.conf: p; B& d; G4 _! _+ _
6 S9 I$ U+ @+ t) l
$ b3 x9 P. D# X. O: P
server {9 _- S2 j) U1 G6 F
  listen       80;
% |* ^' G) q/ F7 c3 h. y0 C& R  server_name  example.com;
1 n) U% t# R! e4 H# z; J
, y" c, G* B, |
7 a, T' k" k, k# B3 ^0 G  location / {
5 K* @/ q, t* N    ModSecurityEnabled on;
8 L; y8 _4 ~6 T- `, w, @0 c( g3 S0 p' t    ModSecurityConfig modsec_includes.conf;
9 S( V) C* \2 B* T- q6 @1 O- s8 C3 _    root   html;3 M7 |9 t0 _: @% U
    index  index.html index.htm;
1 h! g0 g4 k) J/ `) o1 k. `' s( M# A  }
' s5 [7 ~5 l; x7 P- L1 W6 N}4 R9 r  u0 p$ t% s9 D0 t7 p
使用动态模块加载的配置方法
5 x$ Y9 Y( i6 I在需要启用Modsecurity的主机的location下面加入下面两行即可:% Y- d& I$ D2 y7 u( v8 {
! Q) h; f8 P/ c
3 O" h( Z4 E6 o
modsecurity on;
8 J$ F6 Q3 z4 Nmodsecurity_rules_file modsec_includes.conf;; q8 @% [! `( _3 A7 p
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。' P& e3 k. ?' i  R, l( @4 \5 v! X
. n/ e6 f2 W5 h- X

, E# t% v' f/ A: Z6 v$ vim /usr/local/nginx/conf/nginx.conf/ U7 ?- i1 S6 N

* \% Y( b2 o( O
" W( N3 n1 E5 E  {' pserver {
7 O7 i  g5 g4 e( |5 I+ Z) B8 z  listen  80;# X$ g$ H: m. t1 r0 j
  server_name localhost mike.hi-linux.com;8 ?- ~( L4 q* R0 \8 [) l
  access_log /var/log/nginx/yourdomain.log;. O3 R+ @* _4 G5 U2 L% H- F; s/ b/ w

% g+ w3 _) n0 s1 c0 J; F" a. |7 P# l& `3 t! m
  location / {
8 n8 s8 ~0 ?' j/ y% _$ D, D, ~6 I7 K7 [* _% r$ L
& W7 o" f# ~2 c+ e+ @
  modsecurity on;
' ^0 \: x* e2 {  modsecurity_rules_file modsec_includes.conf;
$ K5 v  j+ @1 Z  root   html;0 e9 v( _4 o; k2 m
  index  index.html index.htm;
0 w) [8 a$ z2 W% z- I( u}
) ]  p6 A8 Z' j/ @. G}# l2 J( `5 S/ J3 f7 |$ d7 L% w
验证Nginx配置文件, W) r, y+ B' E- N1 c, r6 O
$ /usr/local/nginx/sbin/nginx -t
( h$ M+ h  g9 h1 @0 Qnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
# V+ y9 W* L- }& A- Q) l5 q( snginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
1 }& C: A% j; X启动Nginx
! ~+ @7 `& `) E% `3 J8 e$ c+ m' E$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf" N. U3 v4 u. `, n
% X3 g+ x! G4 M) _, t; 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能够战胜更多复杂/未知/混淆的攻击模式。


8 ]4 [1 X0 y4 l

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-7-5 19:35 , Processed in 0.078496 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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