找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 12511|回复: 0

利用ModSecurity在Nginx上构建WAF

[复制链接]
发表于 2017-10-19 17:34:51 | 显示全部楼层 |阅读模式
ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
* Y: I, D! E) M
' H( I( `& |* K
) m7 C& l! I% ^4 E' o$ T- F# v在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
1 U8 F3 F7 Z7 i# C& S' p6 E: G
* W' R, _, N% W: ^  t% L. Y
3 [) g) D0 l; n+ H1 u什么是ModSecurity) ~0 E9 B2 J0 O. T0 l4 {
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
- S/ ?2 P: H7 ?1 E0 J+ b& A. M
' r1 d( w+ f& A
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。$ U& O; C$ K1 ?

1 k0 M: w0 Y  |3 g" R; D
  U0 Z# |* @2 S' ~1 w- }/ `ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。1 @9 z9 A' K2 Y: w; J

: }0 f( Z; v, G3 r3 [2 E7 D( M' w( m5 P/ N$ _$ p
官网: https://www.modsecurity.org/4 O8 E2 n/ t% d/ w# Q+ `
% `9 q7 y6 G; \) _) e7 g

% f3 B0 _; \+ l+ o; j7 k7 W什么是OWASP CRS
, Y5 a* v6 J& Y+ T. GOWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
8 v" N' P' G3 L4 V
$ L+ S1 G/ y1 `" x' k9 Y: X, `+ k6 z
# B( w( k$ D, Z) |" hModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
# N3 [, _* T  A" N& Q0 @6 I( d
& k( S- G% f( I" ]& r' R' l% K8 {
' s6 @2 L- M3 u1 m& F+ T6 cHTTP Protection(HTTP防御). k6 N" h# s- L( p+ q1 y
HTTP协议和本地定义使用的detectsviolations策略。8 B  Y* o! {2 [0 Q+ a
8 v) e" ^+ y2 A) ?5 N8 d$ E5 b' m) m
9 k. h: r( W" R; G7 u, m. K) _7 _" y% B
Real-time Blacklist Lookups(实时黑名单查询)4 S, [9 r4 D9 t7 I. }) {6 e
利用第三方IP名单。
) `) G# `% P- [" N, }- D. u% d* o8 a* A/ Q4 m, n
4 \, }0 w6 U2 f$ [! Y; {; E
HTTP Denial of Service Protections(HTTP的拒绝服务保护)
8 ~4 s$ z  a, X) i* x防御HTTP的洪水攻击和HTTP Dos攻击。
" ~/ h5 g$ _9 z% m9 q* a5 y
  a1 w% \  B' m) m) ]' L/ {1 C$ P# S3 d! J$ ?7 C- m
Common Web Attacks Protection(常见的Web攻击防护)
& K" D; i7 c# ^& u$ g+ y2 Z检测常见的Web应用程序的安全攻击。
5 n' X) J5 m+ s' f7 T) \( I4 e7 P4 J0 I. `  \
6 K! j: ?0 h0 B4 ?
Automation Detection(自动化检测)
1 {0 a! d% ?  p3 |/ q, r3 f检测机器人,爬虫,扫描仪和其他表面恶意活动。5 K8 T; X$ I& Z3 T1 f2 k9 U

  D3 ^- |: A9 W$ H
; T" U- a. j2 ^6 S4 ^5 v4 fIntegration with AV Scanning for File Uploads(文件上传防病毒扫描)  l- C+ w* E% W: X1 K$ k, t' A( q
检测通过Web应用程序上传的恶意文件。
, U! ^7 ^! h. \) R  m- |, Z) a* K; k5 K5 z% u
- G: S; N! W6 _& @- P
Tracking Sensitive Data(跟踪敏感数据)
0 m! B, k# g+ j( `信用卡通道的使用,并阻止泄漏。) x1 x, j2 E) T( \
) M1 E, t5 p5 _/ c  ?
+ H! U  Y( n  E
Trojan Protection(木马防护)
1 N% S! a6 M8 t$ T5 |1 f! K检测访问木马。
4 T7 c$ G' X" r0 ~4 j% Q: a1 t
6 m( ^: J4 y$ v4 U% p  B2 d9 J7 Z( ^9 C  p
Identification of Application Defects(应用程序缺陷的鉴定)
6 E. g2 Z. ?: }+ o检测应用程序的错误配置警报。
8 {: N# O$ G7 ]3 k$ {" V. L$ a( S- u# Y
9 Y2 N; l& B8 ^% v) B* b9 w
Error Detection and Hiding(错误检测和隐藏)! t. ?- A4 V# ?
检测伪装服务器发送错误消息。% k" s8 P: D) q8 M
; B/ R' N# ~3 q9 ?# w# N
4 e0 u9 h6 v: a+ Q$ O, d) v; }6 T6 x
安装ModSecurity
2 b1 _: m+ W% H& B2 ?/ |1 l2 b软件基础环境准备
' o7 m2 L" c( V7 [下载对应软件包
! u$ ?/ \9 P( R$ cd /root3 U# |0 y8 A5 S8 ^7 `1 ^" m
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
3 V; K- T" N6 H$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz# S7 W9 R9 ^2 i  H" q6 x! j) |
安装Nginx和ModSecurity依赖包9 N6 P7 p2 e+ Z, n% C' r- C
Centos/RHEL
5 z4 g& P+ {* U1 T: e7 K
$ H5 M4 I6 {" D; L; k& H5 v7 g$ s7 _
$ yum install httpd-devel apr apr-util-devel apr-devel  pcre pcre-devel  libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel; Y, l' s0 a, {" @0 I* ^
Ubuntu/Debian# G" A# G- W9 \+ U/ F

# x1 p; q* \2 p: b4 k8 V/ r  T8 w+ x9 W, \  u1 Y
$ 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
# O$ K: `2 y. x0 \编译安装ModSecurity; I! Z5 Q. Q$ w9 m+ b/ B" b, v3 H
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。, v! n" A' H/ z0 i" j9 J
- L: P# }9 Q; z% j
) \* T7 Z! @- [* y
方法一:编译为Nginx静态模块" _0 Q9 V9 d$ ~5 ^

. [3 |; U; S  w/ h7 l
( I( X9 ]1 s. C6 d: I0 v. u3 q编译为独立模块(modsecurity-2.9.1)4 @; ?6 F( h2 i- V% F  J) @
$ tar xzvf modsecurity-2.9.1.tar.gz
. U3 y& }/ U8 i  n- n: W$ cd modsecurity-2.9.1/
6 T1 \; X, [0 m* x$ ./autogen.sh6 H' F5 n( P1 @1 w
$ ./configure --enable-standalone-module --disable-mlogc
8 q  ~& D  Q; D& _  A8 z/ g$ make7 v0 Q2 R+ T8 G
编译安装Nginx并添加ModSecurity模块4 h$ X6 s, o) K$ C1 D; I
$ tar xzvf nginx-1.9.2.tar.gz
$ X$ E, [/ P  s1 h3 T  j$ cd nginx-1.9.29 q, a# A7 N5 I! L  u' A3 Q
$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/
/ J* [: O7 L; P$ make && make install1 j8 Q" u* Q# {
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块
! }6 w5 n" }$ v* J! |2 x0 J9 N; g" p, {, ^2 a4 s

1 b7 @+ _" ?. C0 h编译LibModSecurity(modsecurity-3.0): `/ A. w1 F! U; j  @3 c* `: K+ W6 c6 i
$ cd /root' B5 ?& E( t% |2 o9 M
$ git clone https://github.com/SpiderLabs/ModSecurity: U# B7 H3 y2 a3 C
$ cd ModSecurity
2 z* n7 G$ c0 w6 [* G6 m1 P# x$ git checkout -b v3/master origin/v3/master% P- {' N7 N9 _. z+ c
$ sh build.sh8 E; o$ k: R; X3 M
$ git submodule init
& I( P5 k0 s4 s# \& F  Q$ git submodule update
8 {4 {" y' V: U3 O2 M' y$ ./configure
! T% N! y+ C7 @, ~$ make
+ f* W& p- t5 y; E- n9 j7 q$ make install
3 D0 D* e5 {3 b- ?" q2 lLibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。7 l8 Q# l2 W0 `9 _5 K5 U/ l- G0 m7 S

$ y  O, n, z. [5 b7 a  h8 o9 ~2 @# W3 J' j' x! v3 m
$ ls /usr/local/modsecurity/lib( O1 f7 u! a$ H. m  D  O9 S
libmodsecurity.a  libmodsecurity.la  libmodsecurity.so  libmodsecurity.so.3  libmodsecurity.so.3.0.0/ c. r4 `' T" ?- X. K! j1 i- z* o
编译安装Nginx并添加ModSecurity-Nginx Connector模块
& Z1 A( W1 t, L# H& H+ o7 X使用ModSecurity-Nginx模块来连接LibModSecurity
& b0 f* F& ^: e8 s0 M, `: B" s8 [! g8 n# @- m# f" e+ J/ l

& s2 |) O/ @% B& p$ cd /root0 y& e3 z- [& z$ V$ o6 T
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
. E9 K0 [% r$ c6 u% ^$ tar xzvf nginx-1.9.2.tar.gz
6 H$ _! ?) T1 C" N* `6 _$ cd nginx-1.9.2
6 H8 f/ l& s$ q9 {$ ./configure --add-module=/root/modsecurity-nginx7 E/ Q$ D' D/ g; ?$ {/ _0 b
$ make5 k! D3 Y& l8 |; i
$ make && make install9 v* S9 V) r% H
添加OWASP规则3 G) o4 i: b( I7 m+ Q
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。7 M9 n! Z3 H4 f; _0 i1 \

" I8 D0 [; x/ U3 f0 r  l1 v- |8 K$ Y1 k7 w& j! R/ X2 U3 H% V
下载OWASP规则并生成配置文件  _& a! B/ w3 }( ^6 c
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git$ c& q0 r' D3 `+ f* d- f! F* M) v, `/ w
$ cp -rf owasp-modsecurity-crs  /usr/local/nginx/conf/
% `- k( ]5 @1 F3 I/ l) [8 r$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
: b* }+ K, h/ q6 v8 v% |* s$ cp crs-setup.conf.example  crs-setup.conf! {6 v) A6 j* A9 ~
配置OWASP规则
& |0 x- h0 J# `* ~' ~6 I编辑crs-setup.conf文件
, |. {7 W; A3 g, E9 F7 Z( R: d, p  B- y

4 f0 ?! V9 t* Y# t/ ?0 H$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf( y1 ?! z3 L( ?) `
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
" m& M7 K! [$ k$ _4 H" y$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf. i% m' J" J* g% f0 \& q8 K
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
/ U! e* E+ C0 i, J) u! |默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。. m7 _/ x: ]: x" A6 J, H: Z
  t! [& t% G' u, ~. X. `
" q) B# i# X% a8 S
启用ModSecurity模块和CRS规则4 G$ M5 A9 g; G; ]) ?
复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。' V# c  b% C: J$ A& k
% l' O6 [/ `8 I, s7 I' e5 _
: K/ ^: l7 I3 G9 h5 I
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。5 c* a  i% b4 J( d  g

2 I, ]! f+ _$ T$ w- V0 J
' C7 o! B4 Z: ?( A  e. u. J$ cd /root/modsecurity-2.9.1/
, i2 y" U' X$ `; `1 c5 s% ]8 n$ S$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf  
  l* |5 {% [- q$ cp unicode.mapping  /usr/local/nginx/conf/
' s' i" S. ~+ f7 h将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
  o. h- W- a# f$ W6 k- B4 [% L- s& @. u, O' _6 b+ l( t
! u$ ^$ L8 @# O0 T( d
$ vim /usr/local/nginx/conf/modsecurity.conf
+ U  z/ o: E0 V& E: E6 D; xSecRuleEngine On& Q1 h: t; {( y6 ]) A/ ?
ModSecurity中几个常用配置说明:2 e2 v" M0 W: W! i2 S5 e

1 f. r# v( n3 ]1 x, u3 }) x- H% Q1 O! |1 S+ Z* ?
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
' X& H, t6 \. V9 G7 X4 ?" R0 e
+ U1 f: e& v4 F% u1 c3 w- V- q5 @# Z
6 D' a+ D' h) v3 n2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。. f7 N8 N1 x) F( |4 [6 s

3 |8 G/ }* ]( Z
$ p4 K9 o5 F& ~3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。* L4 e( q9 h* o

/ ]4 X- f! m; S5 r9 l# @* B2 g6 u* r3 W! o) i
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。
' p6 x2 E+ h7 O$ M: e& n. q
# T4 f% D8 C' c; ~6 b
7 C" y7 ^9 G" x  Y' L9 h7 _在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。8 Q4 ]6 j! U# k3 S$ i, I  ^+ o

% Y7 F% q7 L3 k( w" X3 T& i6 A1 `/ I3 Y) S
3.x版本CRS4 q' e) V) e3 Z, m
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs. c& P6 d- Z$ A9 h' c( h3 j
# 生成例外排除请求的配置文件+ e) f- d3 A4 l0 ?# F0 n* V! @) o5 d
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
2 y& w1 B9 q. t0 @, E+ q$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
# Z8 A) `) b$ Z8 q% a' Y$ cp rules/*.data /usr/local/nginx/conf* m! o# w( P8 P
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
" v" Q; G) y, N- G* g0 p- N* V9 ?6 C1 w' B2 l

* S1 g% N  c- v/ @& l$ vim /usr/local/nginx/conf/modsec_includes.conf7 i) o! |' q9 K  r0 M/ Q. {1 z
0 ^4 T9 Z; |) J9 _+ q/ r4 N
[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

6 g- x, i. \3 X+ M9 D  A: |* S4 T2 K8 J; A* {
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。6 H. ?% T0 Z+ w; r3 N

5 B: \+ O7 J4 u3 a/ V; K0 Z+ f" z& t% t, N9 z( N
配置Nginx支持Modsecurity* \( v# |8 g# Z5 ]% q
启用Modsecurity* W/ l3 \) y: V% C9 K
使用静态模块加载的配置方法
0 t7 f) g2 n1 P7 s( S在需要启用Modsecurity的主机的location下面加入下面两行即可:* {  H8 M& U' R% s
% P! w: @+ Z/ T/ F/ D
2 ~+ ^1 _1 K3 W3 p
ModSecurityEnabled on;
4 S  k; N4 y/ x' UModSecurityConfig modsec_includes.conf;2 F# m/ f& I& y3 K4 `
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
0 M. R. ?* h: N, n( S0 Q
- z/ J9 l9 I& k7 ^) a* W2 H  b( J) ?# |/ l, ^: z$ H/ q7 W" V2 _
$ vim /usr/local/nginx/conf/nginx.conf4 U' ^! ~: Y; s- H, k! |; w
9 r, }6 d! W6 G+ I2 q
: N1 ~& m, R7 f8 C4 S
server {
0 {4 I6 z& F: f& X, ?  listen       80;+ ^) W1 A3 _; p* z( y+ n# Z- }1 L
  server_name  example.com;6 U$ I; U: Z! k1 B% b/ ]( s
- D" X/ f3 K: j8 D

5 V2 ~7 s" d/ V2 F- b+ l  location / {9 F6 j0 c% h0 Z; w
    ModSecurityEnabled on;
$ Y6 o, |! Q/ c; X- o2 U" f    ModSecurityConfig modsec_includes.conf;
5 W, j' O  i& P) H    root   html;
/ I- R( E' L- w    index  index.html index.htm;
9 u- J5 d8 `+ x2 R; d2 Q  }
# q% |/ i- T* r+ l1 T}
4 }5 m$ p+ _) T0 D7 s使用动态模块加载的配置方法
4 j1 |* L: q/ Z& z在需要启用Modsecurity的主机的location下面加入下面两行即可:0 g! ~! ]( i0 P

' j$ b$ X- \. k0 K+ P
) C; q: T9 G8 n7 j4 E/ R- Dmodsecurity on;6 P7 d' b7 N; M' |( m
modsecurity_rules_file modsec_includes.conf;
1 C! q7 a7 u; l, y: N/ q修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
6 H& {5 i6 Q+ ~; y- o2 Q8 C6 @# p- e; V; ]! }8 `+ r
1 t+ F  J% \) z+ I9 l- s
$ vim /usr/local/nginx/conf/nginx.conf2 e0 |9 R: h6 v6 \2 f1 P

  h8 S" f8 p' r) C$ H3 @7 N+ @8 B( L) v% F2 R$ ~/ [0 C3 ]3 C
server {( |$ c  Q; G7 }
  listen  80;
! P3 O# ^4 c: @- D+ {5 S) j# R  server_name localhost mike.hi-linux.com;
4 D- \6 Q' o" H2 ~! ^  access_log /var/log/nginx/yourdomain.log;
. y' \( H0 i2 E0 `4 ?& M7 n7 d3 J6 C& W4 z. ?. n- |- R! q/ \$ k0 Q

2 _4 Z2 B% c7 G6 K) j" s3 j  location / {$ a" b, r% p/ `- f
7 K; K& {+ J. {; J' D5 e
3 [9 L1 Y5 F3 K7 L
  modsecurity on;$ B& S/ ^) t7 f1 N( x1 e/ l
  modsecurity_rules_file modsec_includes.conf;* h+ ~+ t! f2 ~6 J/ j# u4 V/ K/ e
  root   html;
! k+ o5 l& d- h  p, a8 q4 W8 z  index  index.html index.htm;) {  C/ G' M& P& Y8 O8 F' @
}+ Q3 }9 |/ b# z6 D
}
/ S! _5 ~" J; E验证Nginx配置文件
% j! d+ B# O$ [" |0 C- l$ /usr/local/nginx/sbin/nginx -t
3 _3 ]1 `% c% M* R' H7 ^, K9 n( |nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok8 O4 n( d9 ~: a
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful. d* l' `. X3 t8 f* v) g
启动Nginx2 }# J/ N" e+ T: h3 m2 p4 `
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
+ x3 w5 p% y( l. d, k7 D# b5 e/ I, l
! G- z- b' F8 P/ P2 g

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

( p2 [$ k7 ]4 F* F: e$ K% b. z

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-10-6 16:32 , Processed in 0.064128 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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