找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 10729|回复: 0

利用ModSecurity在Nginx上构建WAF

[复制链接]
发表于 2017-10-19 17:34:51 | 显示全部楼层 |阅读模式
ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
) i8 t( h! E3 C3 u' W
/ A8 A  K/ M4 p3 @# c) ^) @2 P4 ~
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。! I$ s+ a% K6 X& l; F$ z/ _
3 m  @* o7 @9 C
/ R0 O- K- p* V3 |: e
什么是ModSecurity  o1 }4 u4 [( Q1 X5 `. v
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。) M* ]* m- v$ g5 m( R6 Q

3 W8 F0 v$ G3 B) e; m$ O, F* |  @
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
9 V; K9 \5 W- B/ K) W/ @  {, r# \% n; t7 r5 M7 B# J
) y; W6 S1 a, l, r/ l
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。( X( B- ^* u$ S+ h" J% n
; h& v3 L( w9 R! Y( a3 M3 d4 F
" `' u' j* w/ E  F  G* i$ ?
官网: https://www.modsecurity.org/
- o; t! a' x, i% \( l
! Z# P2 |  {( i9 ]" P# K( P+ C6 R$ D1 M# p( Z3 l
什么是OWASP CRS( l+ l0 p. L% {
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。. Z" a) K3 I9 N( x/ Y/ u/ V; v

5 a$ v2 M! w2 Z2 E5 @  _
; I/ `+ J8 r# N6 s0 jModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
7 F: d9 r( h7 G0 ]
6 p# k% P* V2 k0 O  k9 `' n" F
8 ~% h# n" [' ]# O# U& J$ \2 Y# {. RHTTP Protection(HTTP防御)9 N6 {% A" o1 b; C
HTTP协议和本地定义使用的detectsviolations策略。, m4 ]/ ?. Y4 u3 m

6 s+ i( q! ]* t% w/ I7 t- h& M% M* ]& m3 b" J( f
Real-time Blacklist Lookups(实时黑名单查询)
) c; B6 g0 k1 u# r+ e* x, i利用第三方IP名单。+ O0 @# t' ~! i  H% @
2 @9 S& S5 Q. g# @* q1 x5 ~
: C- A$ @' F/ {
HTTP Denial of Service Protections(HTTP的拒绝服务保护)
  t! _% @3 A8 l9 f- X. D( c防御HTTP的洪水攻击和HTTP Dos攻击。! M9 m- e; G, o$ l8 M! P  \

5 Z7 h* V8 d: d3 _- ?8 E3 w" q
1 m% H1 f$ x: O1 gCommon Web Attacks Protection(常见的Web攻击防护)
4 V: O; L$ z+ n检测常见的Web应用程序的安全攻击。
' J. C7 m( t, n  K4 i
6 x  g0 p  ]9 E9 Y5 F/ m3 U' R# o
! {: N) }( l  {' W4 DAutomation Detection(自动化检测): ~9 {( E" N1 X8 X8 N" }
检测机器人,爬虫,扫描仪和其他表面恶意活动。6 O% @$ [8 v4 `) h4 S4 R

. T. Z+ m% A: h& T" \% ^* w  \# h7 U$ r) m3 D8 q: v
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)
0 I% r8 R" |" r检测通过Web应用程序上传的恶意文件。
& G3 p2 D! w0 y- L; L4 o) F3 k: a7 y6 V7 k2 y6 r( ~$ Z4 U+ C
% O) U2 ~1 V+ B) ]$ ?# K( M' g* h5 G
Tracking Sensitive Data(跟踪敏感数据)- w4 n; \1 q$ f7 F
信用卡通道的使用,并阻止泄漏。
8 s  K( \9 M; e; w- o9 C2 p8 N- {1 l
6 a. d5 o* ]6 O2 `- Y1 a0 p
Trojan Protection(木马防护)) ^: l$ W, q( g& M( s# U/ ~) C
检测访问木马。
6 c2 y/ S9 ]. f% T7 l
9 `' y$ D4 m/ v: r4 K! x
; `) _* I: y8 ^) I: ]Identification of Application Defects(应用程序缺陷的鉴定)0 `' N% k& q* A$ _6 b4 V
检测应用程序的错误配置警报。" D! y0 W" {5 o4 Z" k

$ }8 h9 }' y- p. l9 D2 V4 p
5 ?  w+ P. {, @- ZError Detection and Hiding(错误检测和隐藏)
0 d4 e: K0 g2 L# r& l2 r/ N" p& @" s检测伪装服务器发送错误消息。
/ r3 p, w  F; `4 j, t. p
1 y% d- @; t2 ^
5 u# T0 e0 g4 R, ~' |- O: n4 r9 m安装ModSecurity
9 O; \- q" M2 u  q软件基础环境准备
) x- n! M+ M: x# z* P: @, e6 \下载对应软件包
; F: U5 z/ z# }" R; U" D$ cd /root
$ c* ~" y+ o6 `4 ]$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
/ y4 }6 J+ E# L. C$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz# T% Z/ E4 C4 ~) P/ u) e
安装Nginx和ModSecurity依赖包
. ^" i' S$ a) I1 `- `+ V9 _1 {Centos/RHEL
1 v- E2 I- k- A# A; F) N2 b5 q+ M2 w! U4 O; R' ~

& |5 i9 y3 h3 P$ yum install httpd-devel apr apr-util-devel apr-devel  pcre pcre-devel  libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
" M& a$ C0 ^" b) fUbuntu/Debian
- b$ {# ]; X, e, R( y" |4 Y) T5 Q
& Q* |# H$ N, p+ C
$ 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
! Y& Z  {4 M8 ]' U4 ?编译安装ModSecurity; E4 x: \# t5 y* v
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
" [* \# [1 W& ]$ A, J5 d0 p  Y7 u) N+ F8 X) J3 u+ l8 s1 _
# S6 o/ }# g! V- z, B: N) `
方法一:编译为Nginx静态模块& C" c" O4 i, u, _9 J

  Q( z, v4 w% w* b
: [2 Y0 X; D# j$ i1 v5 x+ ?编译为独立模块(modsecurity-2.9.1)
9 {$ S; U* E, W, z2 h# v6 {" x$ tar xzvf modsecurity-2.9.1.tar.gz
1 Y* `- w8 W8 R1 M1 w; x- j$ cd modsecurity-2.9.1/
  f1 h, n, e! q$ V; o; L6 Z$ ./autogen.sh
  O/ W# G" D4 ]; r1 Q# ~" I  Z5 R$ ./configure --enable-standalone-module --disable-mlogc' `& ~( G6 k/ B+ l3 K3 \
$ make
2 W$ w0 j# R8 d2 ?7 u8 _编译安装Nginx并添加ModSecurity模块
, |3 J4 x) G. K! k: u- l6 ^7 d$ tar xzvf nginx-1.9.2.tar.gz
' ^1 j* L; \1 h$ `, l3 @" F$ cd nginx-1.9.2) g- a  W; F: y  g
$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/3 q' f- `0 p, c8 y4 F
$ make && make install- b4 M1 o- o! [
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
( u: z) w6 K3 I, w, `4 c" ]$ n8 m! K( H7 A) b
& ?/ B% k8 B$ |4 e9 J+ |" q! ^
编译LibModSecurity(modsecurity-3.0)
" S- j0 q  ?; ?! I) F5 x9 U! J$ cd /root
! u: y6 k) e( E, o$ git clone https://github.com/SpiderLabs/ModSecurity, j/ Y8 ^5 O/ w6 {. j( \; u
$ cd ModSecurity$ a" |. N: \! n7 E3 ~
$ git checkout -b v3/master origin/v3/master. g; u/ A) ^: [! j( W% Y
$ sh build.sh/ ~( ?$ ^  W9 g
$ git submodule init/ m4 A( @/ \* l1 U& m
$ git submodule update
# T% p+ |/ T/ \. O$ ./configure
' x  d! u8 A. l% j' L$ make5 s7 f1 i$ p2 Z. C5 f5 Z( T+ H
$ make install
% k6 J) t$ e! z- N2 H0 @" yLibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
+ A: e- F0 d( b2 G' D
) ?3 n9 k- o. q5 _# Z5 @0 q( L
5 s# a1 j9 G5 u$ L8 w2 B' j$ ls /usr/local/modsecurity/lib; H' B/ K! m3 d1 g3 w, g- R# g
libmodsecurity.a  libmodsecurity.la  libmodsecurity.so  libmodsecurity.so.3  libmodsecurity.so.3.0.0
% M6 `$ L" _+ d编译安装Nginx并添加ModSecurity-Nginx Connector模块
  {/ |. W; J0 Y1 y% A1 ~  ?使用ModSecurity-Nginx模块来连接LibModSecurity. K) E$ q. C* V4 q/ d

& m  w( u  t/ E3 O7 [8 b4 {
5 z$ Y# A: M9 K: `$ cd /root' |6 c' P' d6 J% V9 z( I! i
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx. K( E* \9 K$ R' r" r1 {' J5 q, R  j
$ tar xzvf nginx-1.9.2.tar.gz2 t2 l& ]; J! Z# x
$ cd nginx-1.9.2
) p1 B- N! W8 s- E$ ./configure --add-module=/root/modsecurity-nginx2 A; I% l3 L* w4 Z
$ make9 x6 N% D) q  M0 E
$ make && make install5 R, m( {' c/ Y1 }! I5 _7 ?2 a0 K
添加OWASP规则
: r; w; d$ ~# A/ C5 J' |% A! qModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
) M- J5 \0 N' a$ L+ P8 G: t+ Z  i, y: ~

* @; t* M1 k& d% M+ U( D下载OWASP规则并生成配置文件0 J% i) ^7 G% Z/ X0 `; W& a1 k
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
# @6 K* K8 Q" A% Q$ cp -rf owasp-modsecurity-crs  /usr/local/nginx/conf/
9 V+ T! i) ]; T8 P2 Z9 z$ cd /usr/local/nginx/conf/owasp-modsecurity-crs! T% y% r* r4 L3 {
$ cp crs-setup.conf.example  crs-setup.conf
* d  ?  I, r' r配置OWASP规则
+ [$ W+ k$ L' C编辑crs-setup.conf文件
" k( j" {- H' L: K! ]! h0 k0 X# L

! d8 z: H5 \! z. }, P- y( Z5 R$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf* q8 a$ ^7 P' |5 {1 g
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
, l( R5 N9 r( h( [* p6 L$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf* T; ~/ e( u, p" A' ^6 g
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf. k! I3 q8 l/ L( p2 e/ N
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。" ~1 X* l  j: B% `6 i' S

& O8 x; E' b2 R  d& @
) R. ^( r# `1 O" t. Z+ w启用ModSecurity模块和CRS规则0 ~# Z7 s( E: B9 U2 X
复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
( ]) \- p* q2 m. n. v% w- P' k% t: ]5 g3 l

5 ^+ Y0 z& P* \modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。+ U; [) Q( X! g% C) L* R

) }5 t. _0 ?" A3 L8 Q  t# X* U% ]& G3 A% v5 e) y; h9 t3 f$ D
$ cd /root/modsecurity-2.9.1/: n' U" z3 s" q( W8 [+ L5 \
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf  
7 D: y; D1 I7 ~( J0 |- z' e( o7 Z( z$ cp unicode.mapping  /usr/local/nginx/conf/! r: ]' ?9 u) g
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
2 `- L; N& ~; P! m' `, _% m* [: I6 u! N& B! \7 d; \- r; ^
3 I* W/ a7 O3 W1 M- E
$ vim /usr/local/nginx/conf/modsecurity.conf- Q7 U1 E  r6 ?8 e: {& b
SecRuleEngine On' ?, O; v( l$ f/ F
ModSecurity中几个常用配置说明:7 E* A) g* `! A' [3 x
5 X- u, _: a$ w0 @  G

3 c. j# B/ |9 C1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
2 X" J: k2 P" _- g1 m
1 c: K! F% X( l; a5 t4 d4 ]" Y# \: o, [2 Y7 c* Y4 P9 k1 J* l
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
6 o+ U' @5 u" b( E# V, g+ ^% W  ^
* P1 n; D2 D7 X: W2 M' {8 b3 p& t& j7 E" O1 P$ g- [1 n4 e+ i
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。. q7 }: o, r* w/ ?% T! H& D2 E4 ~

+ B+ R% x& e: r& s
9 _8 }" g1 E7 b( M, Z6 p4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。1 J- U& {) m% v8 Z
" M  c3 K% }  ]  S
1 p  l$ ^* @, a& D6 A/ n
在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
- L0 w/ S3 Q0 o5 _; i6 x0 b
5 q! P& O& S6 D( p: S( L! c& X+ K+ m2 d3 Y. A& S) N
3.x版本CRS
. E; D3 n" ?3 q* D( L$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
5 C4 {9 \" y& y6 P# 生成例外排除请求的配置文件% y5 z6 c% b  ^' |% _) z8 u
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
  C  `" P, Y3 F+ T# Q3 x  [3 V. L$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf4 C+ {$ m* |: Y" [( h
$ cp rules/*.data /usr/local/nginx/conf* q$ o) V; Z$ M5 w0 g, ^9 _& G
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
0 N6 T' y8 f2 a9 W
# B& P5 i7 n( T2 H% C  e* t6 l
4 V$ n! [& g' Z0 E: k$ vim /usr/local/nginx/conf/modsec_includes.conf0 q0 Q) c$ A: {; a
) L: v  f/ `4 a2 g6 e* b( U  |
[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
! }- [/ X8 Z( V& F( ?

' i0 f, l+ D/ W, B. d$ H) r. O注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
' K! Y! a7 M5 D' @6 l" ?- k
2 C* H1 [8 j: R- J7 x2 w
5 a  U! y2 e( S5 h; P配置Nginx支持Modsecurity# ^' K/ B4 Q, q+ A
启用Modsecurity5 r8 j& w8 j2 f4 G& k  \$ s
使用静态模块加载的配置方法
+ V& R8 N8 L- F2 V8 \% G6 Z在需要启用Modsecurity的主机的location下面加入下面两行即可:
) z- U6 o0 l5 s1 n* I  ?. r2 D) H9 _2 e
3 o: V' n; g: P+ \% b
ModSecurityEnabled on;
9 o; y* b# Q( P- X! AModSecurityConfig modsec_includes.conf;, k/ G* t0 j! J6 X; a- h
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。3 O5 Q; R" U6 w5 O4 i
- F* ?' F, g4 e4 E& [) _" e# ]5 `$ P
& d1 B) W0 @/ X( ?' P+ @3 R  \( Q
$ vim /usr/local/nginx/conf/nginx.conf+ R- f% r! V* w4 R: V' o- S; {
8 F% P; j1 P; \' h

- y/ e: ^; I1 [* wserver {2 o: x4 v% \) r: Q$ c& V- I0 p! b
  listen       80;- u0 A* s: w0 o, z/ H( f* F
  server_name  example.com;
* p1 s( B5 ~4 \. W$ Z! j2 j- f
; _8 J% m) i; Y$ Y
7 j3 l. W- A) m2 |7 G9 W4 s  location / {
' E. n6 s( b+ a6 x    ModSecurityEnabled on;
; z& V% x- \) N4 T& g6 t- c" d# |    ModSecurityConfig modsec_includes.conf;
8 Z0 T) Y: F. `$ Y& R/ N    root   html;4 q6 T5 |/ u: \7 {/ o: j
    index  index.html index.htm;
1 \! a1 p& r! W- ~. Q  }
: C1 q: r$ X4 i! ?}
% y! a6 f( z1 R1 G+ u" D3 O' b使用动态模块加载的配置方法
) ]+ L' s- |1 L2 @( }2 e0 Z- i3 q, J4 w在需要启用Modsecurity的主机的location下面加入下面两行即可:$ j2 Q# Z' v% S0 Y

3 d. n* m( Q3 R4 r4 M' s* p  y
  h. `* C4 `% d. H" r: G3 d3 fmodsecurity on;" m' u  Y9 _) [
modsecurity_rules_file modsec_includes.conf;% C" s3 L7 }( C! p
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。- V, J3 L  p+ K; K2 c
6 O) R0 M0 x% a& b. F
/ c# b$ v2 c* }, V' o
$ vim /usr/local/nginx/conf/nginx.conf
6 Z4 B/ p% f" D+ Z  ]5 u  D8 a5 \& J- g3 ~* c, n' g; U1 Y& L

% \, E( m/ v! z2 F* ?& S/ X2 z& zserver {! l5 t9 L+ ^4 [" i4 m
  listen  80;5 E- A# e/ U/ }$ e
  server_name localhost mike.hi-linux.com;
6 G3 o; z& W+ d7 R  p  access_log /var/log/nginx/yourdomain.log;
7 l: ]% V# D5 B: Q% q
  w  Q- Q. q+ q. W& {$ g( m) k* J" _! Z& ~1 E( b
  location / {; m8 d' @5 B8 I' I) r8 z8 J
( K) p3 r$ G1 e3 E3 J
7 ?# Z7 ], a" E* Q
  modsecurity on;
3 u1 h" L0 }. a6 [; e! g* I  modsecurity_rules_file modsec_includes.conf;
. c0 \) K0 M$ ?; Y- h  root   html;) e6 p7 T0 k+ r: V$ |6 M
  index  index.html index.htm;! `( ^& h+ j  w! Y. e4 W
}9 [$ e; K, C! J
}8 x+ F: v! W) g; n0 B
验证Nginx配置文件" V  \2 J# C/ r( W, m
$ /usr/local/nginx/sbin/nginx -t) O  m1 x! v$ E) d, I) _* w' t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok$ H/ ?( i  \/ p1 {
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful* F. ^1 f& J  L) @0 j! Y. ], e
启动Nginx5 R$ J5 e; A3 E3 B5 @
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
+ F1 m6 _5 y' z4 W) {+ E5 @* J7 n4 Q7 i' o( S9 b4 w- h

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

' `1 O' Z- K5 H9 a0 z0 O6 I3 Q+ r

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-4-5 13:31 , Processed in 0.077271 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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