找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 9652|回复: 0

利用ModSecurity在Nginx上构建WAF

[复制链接]
发表于 2017-10-19 17:34:51 | 显示全部楼层 |阅读模式
ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
# @& `& ^+ ~0 i
+ O2 h( Z5 d( ?# ]& j
8 N; r. l/ p; l: H在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
- c9 w6 S- S  P* z1 I* A1 N6 x9 o3 b7 q
) }7 ^8 j- t% P1 T( S+ q# |
什么是ModSecurity3 H8 F: F6 t4 L
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。8 D0 n2 g4 E# J5 h) o+ W. h8 }, T3 H

2 c% B( B5 A' w1 w+ k. L
7 I% K9 Q5 Z8 h) G; w8 |& gModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。) S9 j& M; k3 z1 Z/ W2 ?) z
7 _+ ~8 M3 c4 `6 A# o8 U+ v1 ^

1 ?8 t: d. _8 k* S. O! I- K; u9 _ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
- d( W0 o. }6 d' |6 Z- D" M" ^2 p+ h5 Z4 s, {) N% B2 l7 B
$ p; D( {4 }6 W( J
官网: https://www.modsecurity.org/' {  b! r. M9 j7 G

- h* v6 A% \+ d1 @% r' ~$ i; d( w8 t
9 Z9 f! ?* b& `4 [' Z什么是OWASP CRS
) Y- H# N* ?8 SOWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
) `' o; R: `( {5 S  q, u& _0 M% u9 z- L- `/ o( b+ N: G! Q/ V9 x+ J! |

3 S9 [0 j7 t. d8 S" U  g) gModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
+ k; R) s7 G2 c& i2 k' o
* Z2 H: O/ n# p7 g: B7 M2 _+ |4 O: d" s' @! l* y  o
HTTP Protection(HTTP防御)
! C0 s! v. ^$ p/ A: l( sHTTP协议和本地定义使用的detectsviolations策略。
, x2 O, ?" J6 x1 A$ S+ w/ {6 ~, C% e/ O" e: R' H# E6 R
2 ~/ f* P8 ?, s( `3 N9 k3 g; n9 Y5 c4 m
Real-time Blacklist Lookups(实时黑名单查询)
3 X; l! q) x) G+ P利用第三方IP名单。
/ j* Z& D2 ^/ u# m7 M) ?! y% R

: @+ {+ X; j8 kHTTP Denial of Service Protections(HTTP的拒绝服务保护)
/ m  C8 C' H7 s4 J) G防御HTTP的洪水攻击和HTTP Dos攻击。9 b4 D2 t4 e. a

9 {2 P! o* s: q( _+ a
' D3 a+ `  a4 f! H3 N0 X4 GCommon Web Attacks Protection(常见的Web攻击防护)
) F2 p$ Q4 U  s2 c, N- ]检测常见的Web应用程序的安全攻击。8 j4 \. |  I+ O7 O

# i5 O5 `$ [, ?$ L0 {, d# u+ Y+ N
$ u4 P: a7 C( V: M  QAutomation Detection(自动化检测)$ S! o9 \1 B7 D+ m( y  |! }
检测机器人,爬虫,扫描仪和其他表面恶意活动。6 K/ x5 ?: k' u. H5 ^

5 o, G9 l+ k! D  o9 u
$ s* X2 @2 {* q! [: [3 l8 LIntegration with AV Scanning for File Uploads(文件上传防病毒扫描)5 }+ g' _. f5 h" ~5 i+ j
检测通过Web应用程序上传的恶意文件。
5 o; B5 q, n- g1 O3 F7 z: z% D9 q# p  A) S- U) h
* m5 o7 J# u( r& Y
Tracking Sensitive Data(跟踪敏感数据)
5 q7 N* s1 U. ?- g- r1 r* Y信用卡通道的使用,并阻止泄漏。9 K- ]+ A! u( |4 N0 R

+ _% \1 [' L5 A# F7 }
2 }# w/ `8 u% T9 ATrojan Protection(木马防护): w6 c7 s: L1 \5 w& _
检测访问木马。
. i" a6 a) @3 X0 g3 K6 i/ P. N8 |0 t
8 l3 c6 p- `: r/ W6 z
Identification of Application Defects(应用程序缺陷的鉴定)
. P; u: O. \6 ^  G- {- d3 R- F检测应用程序的错误配置警报。
8 Z; u% S; Y- K% W+ G. [4 e4 S7 d. b$ @
) u! Z. t$ l* o/ S* T, l
Error Detection and Hiding(错误检测和隐藏)
1 n3 \5 t% S" I) M1 Q检测伪装服务器发送错误消息。* H. ^" @. q! t" l1 n/ C4 a

* Y( L; b( E" [3 ?' A$ W8 N: P5 X  y. x2 j0 f' ~; w4 q9 {
安装ModSecurity+ [; n1 C4 U6 ^: }4 @8 N6 W
软件基础环境准备7 W: \4 W# U6 e( S4 ^2 q
下载对应软件包
- I1 e2 @3 m3 H$ cd /root. L# n9 n, s% b3 _! a0 d0 ?- k" L
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'- {0 r; `, S" i- z
$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz
9 }4 Q# y7 j$ L0 T; f安装Nginx和ModSecurity依赖包
; V; M% Q/ V4 k0 ]  Y- ~3 \6 gCentos/RHEL" l8 G/ n: ]' a/ {3 p; C+ Y+ H% F! d
5 N" J, O+ `# ]6 I( G

2 O3 {: T$ d: v9 s, ?$ yum install httpd-devel apr apr-util-devel apr-devel  pcre pcre-devel  libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
* |7 j1 y; W2 Q; r" X, lUbuntu/Debian$ K+ e0 @% Z& n3 u. l0 N2 J3 S
2 \! u/ r# ~( @4 a9 [2 A- {

* _8 a0 |. L) P/ z2 [3 H/ R$ 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
& p: m) i/ b4 i) `编译安装ModSecurity
; }# B! V) v; z/ s3 C* BNginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。. b1 m, [7 o" [) ^/ n& @# V, y6 T
, G* r, w- g3 Q. C: ?' |8 d

4 b# o6 E0 Q, E1 O方法一:编译为Nginx静态模块# o  k3 q% t5 O

+ D) F+ ~# D6 R/ L
! N2 g* C/ f' u$ L- v编译为独立模块(modsecurity-2.9.1)
, F+ i. K% ?+ n) m+ a$ tar xzvf modsecurity-2.9.1.tar.gz4 B; f2 u0 P2 |0 T
$ cd modsecurity-2.9.1/
) l. m/ b* _% O/ L, F$ ./autogen.sh
8 O; Z6 J& s) O* d: u( }$ ./configure --enable-standalone-module --disable-mlogc
- u  X+ I/ T$ X! n' {$ E$ make
3 P7 ]( x0 e6 H. o编译安装Nginx并添加ModSecurity模块9 w5 k3 t/ v; Y0 X: s
$ tar xzvf nginx-1.9.2.tar.gz/ ?# q) y# {6 N/ O/ Z. R" y
$ cd nginx-1.9.2; }& _+ d" m/ R# R1 _# O5 n
$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/
5 i2 r6 n1 u& }' |$ make && make install! I+ a/ P) R* E$ V
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块2 w) T+ V6 B: ?. J9 E6 d( v
( d! M6 ]7 |' j& v  u

8 q- V. z1 @% o1 r编译LibModSecurity(modsecurity-3.0)  R4 H& S6 ^( V' j2 N8 j
$ cd /root( V+ |. |* }1 e
$ git clone https://github.com/SpiderLabs/ModSecurity4 F8 ], N! ~" G9 a" i
$ cd ModSecurity
% ]$ Y. S; J& H3 x( b4 W4 c, Y- `$ git checkout -b v3/master origin/v3/master* o- |( N4 \; h/ ^  |
$ sh build.sh1 D) a* g( g* o) P8 T
$ git submodule init0 s% V2 V1 `7 |
$ git submodule update
' m/ ~) f* Q- I5 X" K" `, `/ ^$ ./configure. e( ~! r8 F* w9 f$ X
$ make
$ l2 a( J3 ?7 A$ make install  c, v9 ~  Y, b- {; q0 Q+ Y( i
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。8 T2 D3 U( V. l" e7 j
% n7 L1 r! p% L0 l* X
5 O: U( F" T1 @( _4 }- {
$ ls /usr/local/modsecurity/lib$ |- N) A/ F) y% Q! a) q
libmodsecurity.a  libmodsecurity.la  libmodsecurity.so  libmodsecurity.so.3  libmodsecurity.so.3.0.0$ M: R: y: K- R1 t7 v
编译安装Nginx并添加ModSecurity-Nginx Connector模块
* Z0 l" H6 ^7 e) }使用ModSecurity-Nginx模块来连接LibModSecurity
: O4 G% ]' r5 v) z# @. z1 S8 L* C$ M0 A; ^3 s

+ O, l/ N0 b) D+ }; \, F. B$ cd /root
. h; s; ^2 l( ~8 W$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx  n' @  {! W  s
$ tar xzvf nginx-1.9.2.tar.gz
& A, a, `" F4 x4 ?$ cd nginx-1.9.2
3 @+ F# f8 ?" p. \/ Y; N$ ./configure --add-module=/root/modsecurity-nginx
( |: w; z. }. Q- F- r* D4 _  J5 b$ make/ w, I7 f* `$ D+ A( R4 N' s
$ make && make install
/ I. l9 [; p; ?' X: f* P6 ?) q添加OWASP规则
6 e  {, o# Y: OModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。- n' Q0 H% g2 R8 k- D: h
* {! A* ?' H1 Z
( z; y# ?1 }: K% e( Q" G9 N2 x
下载OWASP规则并生成配置文件* D( I  F7 m0 I! n
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
/ M- P8 r" w- h; Q0 p* J$ cp -rf owasp-modsecurity-crs  /usr/local/nginx/conf/: ?3 G# F; L% r2 u; W
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
9 ^) R0 m- N8 z/ p$ cp crs-setup.conf.example  crs-setup.conf5 |6 q3 t1 \1 @
配置OWASP规则
& i8 r" ^! C0 L& `4 w, D9 }编辑crs-setup.conf文件+ G: y0 J* Z7 b: i" ?7 l: T+ @
) E" u6 A% k# k0 N* z4 U

; l& u4 b  [8 ]2 `$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
0 k$ N4 x9 M$ V0 t$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
' W! |. a  d# i( K  E; q: w$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf5 ]' d8 g- K* q! u  q$ z' a
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
, l# L" T% p4 o8 g% a默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。) H+ K% h! B1 q

$ ^+ u. Y$ q4 s% T( }4 j4 Z5 N; h  y! P) x) C2 |8 o& q/ D: \
启用ModSecurity模块和CRS规则3 Z8 q4 C2 @, [% `
复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
$ p+ e% w6 ^# V- j
( n1 Y1 o$ [: O
; u+ F0 A1 |; A) G0 omodsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。+ _  X- k2 o8 P$ J

7 v0 ?. g4 c8 D9 N
0 N: C1 w, D+ @- L! e- N9 S$ cd /root/modsecurity-2.9.1/
" C* |" E  C# X; ~  P. o2 W$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf  1 w7 E- Z, x) E* b( `- k
$ cp unicode.mapping  /usr/local/nginx/conf/
& _& \0 C* o' V+ D' _& v将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
) C0 `$ w4 u0 }: s7 x
# i* w& _1 g5 i* H* }! ~! P' W: j" }+ ]
$ vim /usr/local/nginx/conf/modsecurity.conf
; Z7 n+ r5 L1 \) _4 C" S( M0 CSecRuleEngine On
6 p# o  n3 |: B/ ]0 KModSecurity中几个常用配置说明:1 U! N; I1 ^5 `

7 U  c! {1 J  C) }% L
2 q' L: a( y5 k( s% U/ _5 Z1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。; X& g  S: ]& q$ S! n" v  h

9 L' r3 O( a1 n5 Z7 ]/ u. T
6 K8 E9 f& T* B$ G" c% ]6 r3 h; ~2 h2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。" a+ a9 m7 T, h% B

8 ^' D2 M3 G. J- C5 G) }. Y; e% k' N# C+ n9 r
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。# V6 X0 p: K# {' E

; ?8 }, G! b3 s3 P9 o8 ]
- @: Z$ L' B; D* J; x8 z# C4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。
* d. ]  `& y$ x$ U2 C, ^. {
7 N. i1 g; ^9 }. @, h+ o/ E8 C3 ~; w0 `7 t$ _% O
在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
2 C- f/ E/ Y' s
6 u1 T; [; c. d* Y. j; {6 W. ?( Q* K6 C% Z, M9 I* H9 L
3.x版本CRS
3 X" M6 z( w4 ^5 P$ cd /usr/local/nginx/conf/owasp-modsecurity-crs' |. Q/ G/ _- d2 o# m+ a- p( M, d
# 生成例外排除请求的配置文件6 o! C+ L- R' X) ?% I6 Y* F6 ]$ d
$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
$ _) [( I. y4 [! D# W+ x/ v3 V$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf( f. v& V+ t" w% S0 f. E4 p
$ cp rules/*.data /usr/local/nginx/conf
+ u% D8 D2 P% r1 M% x5 i* ?为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。' W2 Z. w" j1 `0 j. T$ I& r
4 |2 }  _1 \/ o1 r: o) G% K; a
( ~  B  `( P1 q7 ]9 C- E* c9 h
$ vim /usr/local/nginx/conf/modsec_includes.conf9 `" h0 j: N) y! \  F9 p
9 ?& g2 k& L% C: O4 f- w
[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

2 ^6 R) k: L# X5 M$ p5 `9 w. h* b: J; B
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。, c+ ?) L( z8 @5 D# C1 |

4 D9 O# v) X# f% x2 R2 }# M) Y9 g% i) D2 A, W+ c) D
配置Nginx支持Modsecurity
7 X5 U1 D& v- }9 Q$ R. R2 s启用Modsecurity
: [- M6 S# k7 g. D5 m. B' }7 [使用静态模块加载的配置方法
& Z4 e( s) V1 @+ y; u1 G在需要启用Modsecurity的主机的location下面加入下面两行即可:
3 V3 j8 U1 y/ p# [- O: r7 \- Z$ y% u8 h6 m7 W* ?# H/ N3 ]; k

8 g& _+ O2 I: o5 P! J; g+ w: [/ uModSecurityEnabled on;# W5 |" z2 f! H. u' ?0 a! l9 M
ModSecurityConfig modsec_includes.conf;# ]+ J) n  {: F* f1 W$ ?- n
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
% \# _  i* w! X$ ], u" J! X/ K0 P& X0 \5 y. I
, N& S! j1 ^, _- D9 m9 B4 K4 i. f
$ vim /usr/local/nginx/conf/nginx.conf' ?: q' c; b1 W) }$ `- a( T* N- M

' I" W8 V/ N; v6 k9 U3 w4 U
& r" p" P. y$ v0 t5 ]server {
& A! B) Y; p1 ?$ o  listen       80;! `9 p! S1 g# M) H0 i# R- ]% k- G, q
  server_name  example.com;0 V9 D# F" Y' F* O" w8 B# X

+ Q% L- \: j$ S; ]
. L  L( R% n) N: l1 X  location / {
" n* l9 z1 v) J* D0 G  j* d4 f    ModSecurityEnabled on;
3 M9 m/ v, x) G  r2 K% v9 K    ModSecurityConfig modsec_includes.conf;' r! W, o# f/ z; u, b% L
    root   html;7 D! z, o- o' ^4 F. f: y7 R
    index  index.html index.htm;7 g& u, K8 b" ]+ q+ y
  }
  t% u" Y8 N6 G6 @}
" }) Y8 N+ `3 [& C# t# I9 ^使用动态模块加载的配置方法" \5 _" ]5 O, I
在需要启用Modsecurity的主机的location下面加入下面两行即可:
- T1 V5 T$ J4 w! e9 w' I
4 I2 l  }- c( N4 A( @# h
+ s3 b7 D5 I1 U% i) V) qmodsecurity on;% v1 T  Q* R" G$ D* h2 B7 H
modsecurity_rules_file modsec_includes.conf;+ z. [& R, z# L
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
2 r1 a3 z  X0 }+ @; v) ?$ k' b
1 ~4 s  q5 n* r9 n- H
0 }% k5 m# h% x; o0 h$ vim /usr/local/nginx/conf/nginx.conf
( Y5 L& Z0 f0 r; K9 _
3 R3 r/ R: y2 L4 L. p' u  o1 D2 ]/ D8 E, E0 u4 [7 V
server {' V3 V, D( ]: w4 P: m) g# h
  listen  80;
- A0 E) b. f' U& @! r8 o  server_name localhost mike.hi-linux.com;
5 v- a+ j/ J- I# A& u& Q/ e  i  access_log /var/log/nginx/yourdomain.log;
1 |  D8 N# ^& I: p  y* F5 U) l$ J% }; f1 ]4 g- a2 G5 y

0 u, F; P; }% d9 N' R  location / {2 C' c9 u3 T* n6 Q

6 Y4 [" h, v! K2 e* J! ^5 _$ [& W$ H; G3 N5 ]$ T# \0 x& C; ?
  modsecurity on;' m- p0 m2 d' z( ^6 b
  modsecurity_rules_file modsec_includes.conf;1 n) s& ]; s$ K; \$ Q% Q
  root   html;
) ^* s( Y; z- n. w. m8 ~  index  index.html index.htm;; M& C9 s+ [% q0 z! Z' f' B4 L. q
}0 z& `; I5 S9 B1 P  O5 O
}
1 O8 Z% a4 l; r验证Nginx配置文件
) z2 E6 T: b+ j6 F" g$ /usr/local/nginx/sbin/nginx -t
  D" A9 Y2 X9 y% I; Y% Enginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok  R' T- o1 u1 L9 V& s" [% O; ^% `
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
: |4 L) M3 h' j- U# A6 j启动Nginx
/ H: }- x& K5 r2 ?$ {* F0 H# Q$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
$ {' s* P2 E. n' ~, W
- p  f; ~$ T8 K6 K$ o: }6 V+ `

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

" W6 o: y, P# G. j! n- g

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2025-12-3 03:04 , Processed in 0.071309 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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