ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
& Y, K" l# r8 ~- }
- d. X% u1 \6 i2 Z# N/ U! d8 g. d$ T' y6 U2 W0 H& Y
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。# r. ^6 W" Q, X; E9 _& Z" o4 O$ h
$ Z q- a3 a) Z7 {" q7 u* _7 Y
* E, E7 G" o" i) i' v/ h- d8 z1 V% w什么是ModSecurity, T% z/ f: @7 P8 ]
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
& {# v& C6 F( @
( D8 q+ @' c8 k2 O8 h/ n! Z4 X1 q. Y# i% X
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
' O9 [2 v5 h ?- `, s9 |" }( x0 F' V# H7 R) w- V$ F
2 R: X, a, }4 \2 L7 ?4 F$ [ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
0 s9 c$ ]& T& _
% l. F) \# N% ` w" t/ r h; y* h) V3 D. @7 p# j4 w u; p* M* f
官网: https://www.modsecurity.org/. T( [" u i2 ]$ ^% u5 y/ H
7 Y5 k9 W" _8 ~( t, K% v
- z' p* C3 Y5 z# \) t$ L6 {4 s什么是OWASP CRS# l: E9 ?* u8 |8 @
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
; I( \8 m/ v* b l- F8 j# D& M1 }. D1 h
9 b- ?- J' j8 L# h C9 H9 p& X
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
d" ~2 J( N; G( l
) V% u# a ~! |; s" G+ s; V* W
: i4 J) x1 |" M* n/ Z8 aHTTP Protection(HTTP防御)( e9 _; G* x9 Q" t" @: [
HTTP协议和本地定义使用的detectsviolations策略。
" f1 a* A6 R2 [! L* \& l
/ s, ?! A" s; Q4 j& w6 V
6 `% J) Y* Q+ h$ D+ g! e5 PReal-time Blacklist Lookups(实时黑名单查询)
3 }) i+ ]7 J9 R4 Q8 X& x利用第三方IP名单。) s2 G: k9 J6 @5 m+ J
& p0 L$ ^6 p2 Z" q5 W/ ^7 i
+ \) U. X) }4 B) bHTTP Denial of Service Protections(HTTP的拒绝服务保护)
. }7 H# l9 v: d, \3 `4 h防御HTTP的洪水攻击和HTTP Dos攻击。. \* `- Q( L$ n7 Y1 A
; \8 s# z4 A s" Z1 a, `. o& F8 g
; f* v2 S6 t3 M$ j: Q; oCommon Web Attacks Protection(常见的Web攻击防护)4 n0 r3 l9 s; P3 G
检测常见的Web应用程序的安全攻击。# \4 m. m2 \8 ?; t
/ S, ^$ w% d, U! A( s# ~! p5 d2 z! y: {
Automation Detection(自动化检测)4 i6 p9 l- b# ~1 u" B% ^
检测机器人,爬虫,扫描仪和其他表面恶意活动。
" \. k! Q3 S0 Y: k+ V* x; ^% b1 {; \& r! q8 C6 y5 l
' p9 x- k2 \) s+ M, ~4 b v; _& O
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)- p$ ` G. I" ~2 m5 g7 I
检测通过Web应用程序上传的恶意文件。
v- ^1 y( q u5 \9 C; \- h4 F* u% c
3 c6 `2 I1 Y3 O& iTracking Sensitive Data(跟踪敏感数据)
! M, ^/ K8 R. x; |' r信用卡通道的使用,并阻止泄漏。; ^2 j1 A. m1 V0 c7 j1 [3 H
3 E @ L* r; c) Q% [# o
& R* n6 j/ c7 U
Trojan Protection(木马防护)/ h* G/ P: D+ c9 p: b1 b3 c% k
检测访问木马。& @3 [( C4 _ s& ]7 d( X1 Y
* a2 F5 h1 D8 j8 k5 C4 ]6 J t. {. T
Identification of Application Defects(应用程序缺陷的鉴定)* N# i- i: a$ w
检测应用程序的错误配置警报。6 a3 ]5 A4 B5 d) j( s0 }
8 m# g# e3 C2 }
' r" j- h" g, j& p8 s# N" IError Detection and Hiding(错误检测和隐藏)
. @# ~* n% N. U, d) E) q检测伪装服务器发送错误消息。% K; R8 E" O0 b4 K: W
) O* {% o7 ^* j* r" [; V; ?1 {- }! P+ ~
安装ModSecurity
8 q5 E$ I ~- J! w6 R. {5 w# X软件基础环境准备
4 T: g& H% f) p% N$ _下载对应软件包
1 w t8 v: }' @0 j( Q6 Q) \1 P$ cd /root
6 C1 f/ Y: f6 ?$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'; @# S' `5 G3 P+ N
$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz+ X: \" r) a0 m: P
安装Nginx和ModSecurity依赖包4 S. Y, G; L% O) d1 L J
Centos/RHEL
- n5 [- M Z$ }! h- U- n( G' W, O( w
3 a/ `$ }# Q" y' t/ D! {
$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel6 K4 G, [$ U1 ?2 X6 ]' y
Ubuntu/Debian' d2 \4 e X3 Q( k* m) B* \
* v- U1 D- K' O% F7 b4 M9 B
4 z4 W! [4 ^( ^ u$ 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
9 q, q- b# o* l: ?7 U编译安装ModSecurity
; w! w+ d$ T0 V6 L7 k" ~- o6 d, pNginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
- C& C& j/ A F$ o |9 n
1 O; b% i7 O' \* M- s
+ r2 c- k5 `& k0 |7 J5 E方法一:编译为Nginx静态模块
9 C! v$ j$ B8 i6 J/ ?# O( R* H/ {- T9 x
0 [) q7 s2 ^2 u [1 l8 U
编译为独立模块(modsecurity-2.9.1)
& o6 H% i ^+ ^! W8 L$ tar xzvf modsecurity-2.9.1.tar.gz
4 b+ H" y% ^' {2 a0 k* |) U# }5 x$ cd modsecurity-2.9.1/
' n: C6 n- k6 A5 C9 D7 [; r1 C$ ./autogen.sh
* ~9 T8 j8 J3 m8 g; X7 I$ ./configure --enable-standalone-module --disable-mlogc! D0 y Q! s ]
$ make
' P9 {+ ]) l5 c5 v. Z1 _' a4 p: r编译安装Nginx并添加ModSecurity模块
) D4 o- q" m7 @& B2 }4 z& `$ tar xzvf nginx-1.9.2.tar.gz
1 v$ s% y6 s+ E$ cd nginx-1.9.29 F. d/ e6 b7 v2 F1 F
$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/
7 R4 K, X# Z$ u( [$ make && make install+ v4 d6 p2 Q- D
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块; C: a( y6 p) Z1 h
2 P5 p9 s8 O2 j8 i
- x1 y* X7 C- Z" x" \; J' \# L编译LibModSecurity(modsecurity-3.0)4 o7 |. i$ X7 x9 W4 z2 n% C
$ cd /root
# M9 F8 V2 J8 B4 k" [+ g$ git clone https://github.com/SpiderLabs/ModSecurity% s1 y* Y1 F4 L) D0 T
$ cd ModSecurity
; H4 V+ k W8 @" r0 ?. ]4 f& c$ git checkout -b v3/master origin/v3/master" B% P0 l& z7 N, V( ?5 @7 |4 R& |
$ sh build.sh
1 R, t1 u* e" A0 j8 H" m$ git submodule init* w* n! h/ a4 R: m, B8 G1 ^
$ git submodule update
) g' [/ N8 C' y6 i. n( `$ ./configure
7 W& Y: E0 W# r) |1 y1 m$ make
o: l% X* J; Q* E: P. w$ make install
' x. y& Z/ e$ x' J3 @1 X. `LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
& S. D- s4 w# H' L D; U
: b8 y2 Q, @! K2 E5 Z- k* \) `# l+ T/ N
$ ls /usr/local/modsecurity/lib
" d: E4 ^' X( D( f" k) Ilibmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.0# ?" f% Y* X& N0 X. v
编译安装Nginx并添加ModSecurity-Nginx Connector模块$ p- s7 {1 C$ h5 N; P# f/ F; N
使用ModSecurity-Nginx模块来连接LibModSecurity
/ O3 p, _% G$ ]- X! I
4 Y. x9 O1 w! g& a- s) s6 n
* B9 B% A: p3 c) m5 e/ A$ cd /root
/ q& ^7 F; ^% @6 `# n$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
u# s3 U$ E( o; O3 w* b9 | h$ tar xzvf nginx-1.9.2.tar.gz1 K/ `* P- E6 P
$ cd nginx-1.9.27 G- ~' [3 K9 F0 ]
$ ./configure --add-module=/root/modsecurity-nginx
6 X" O+ B8 {) {% g( C- k$ make' O* O0 G4 H. ]) X1 f J
$ make && make install
2 y. q0 {9 c, G% L) o添加OWASP规则
% y$ ~* U9 z' e! Z# n% UModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。3 B- h/ |8 P( d& u( _
9 R% j0 t( K( s/ m& ^: [
( K6 J2 P% V3 S" K
下载OWASP规则并生成配置文件
! O; D8 P4 z+ a4 x- E- M$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git7 X2 E; d' `8 S' T2 R3 r
$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/
8 `+ d+ ]% w7 M5 w3 P5 X) L, S$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
1 N+ |/ O0 O# U( w2 g$ cp crs-setup.conf.example crs-setup.conf
' A( H8 f! q6 m配置OWASP规则
. u/ m# X, C" y) h% w" n% T* [编辑crs-setup.conf文件
9 p- Z# L: y7 w& v0 J2 U* g) [' K' H7 Z" m
& C) \3 C( p4 p8 m: |) n% x
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf2 q) g1 p# f) E( {% J
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf5 y- N" j: A- b# v6 o- W6 S
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
( i5 [, k d9 [$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
* W" B; r; F8 N1 w0 [默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
& D3 N- u) w3 R! L4 p8 L0 Z J# a% J0 V6 E1 `9 d
5 g* w5 _ B: v启用ModSecurity模块和CRS规则
7 y; E% a0 B& |" [复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。% a/ A* ]3 j. Y* A4 H( A3 v& B
9 |% l8 Y0 ] w: P% n" t
1 M! X u5 D3 j" \modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。
; q) D) @& A: x# S3 U/ }! R$ x1 h/ M# a% t1 c
- w% N, \, b) @/ W( Q
$ cd /root/modsecurity-2.9.1/
% g( n' W0 a! x g, S2 H$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf
4 e0 u A; c- x, C" x+ I' Q: P$ cp unicode.mapping /usr/local/nginx/conf/
% [' R% Z& g/ x% ^; M% u5 B将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
& @1 o( |# r& F3 h3 {2 B( e9 W# K
/ [% N. k1 p' Z: u% x$ H% A) z5 k3 V
$ vim /usr/local/nginx/conf/modsecurity.conf
, l! l$ j" ?, E8 S+ _- e* LSecRuleEngine On
. N6 r$ j9 H# Z- R$ ?( w5 yModSecurity中几个常用配置说明: }" m7 v. w" M. E/ N& d
' @) m( Z* ~& H8 R
$ i1 @! N" n# R* o+ S$ s2 W1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
5 k$ c+ a# O( | v4 m9 X C; O' ?+ u$ P* j$ R8 H
: L* o$ p `* _( h2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。9 b" F5 e$ S3 f4 k: J
4 c% z" `! a0 F9 ?6 }' C
6 d/ P- n7 ?5 I% y7 _3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
& z! w! v- p9 ^3 B: c; j' t3 I- {2 B/ U
* W. r$ q' [/ L+ ^4 w5 w. q
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。
3 k+ W& q+ r6 O/ g6 U/ @7 P5 ^
# p- k' W4 b) z3 V; v* r7 F
& G. ?9 Z& u- k6 Q1 H8 p3 H在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。# z$ ]$ N: c2 t) `
! p S* A0 h1 Y/ F2 M
8 `' n0 G5 Z6 f2 B# v
3.x版本CRS; _) V3 K/ s) }3 T
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
& Y# N _% M# p# 生成例外排除请求的配置文件
2 k" S& K2 d7 @1 j$ c) i4 [$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf( Q# Z8 O% s( k9 A* a, R# W* u
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
7 y, L4 T, U, H5 |- l7 x S. {$ cp rules/*.data /usr/local/nginx/conf9 o" p3 p9 X f6 x
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
% k4 D) [' t7 r4 c: S
% _7 Q F8 e! I* t/ M; G1 m. v5 T# ]% V! E# f e7 q E
$ vim /usr/local/nginx/conf/modsec_includes.conf' ?9 ^! |# w6 X- H5 L
/ w- F8 u! V1 U8 s4 l7 L8 v[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 X/ P$ U }, z( g6 W) s4 C. w9 _ A, m: w/ h6 P
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。9 V+ x% S2 h$ G9 c0 p9 G t* A
4 g& Q$ G, [: e+ F! p
1 b! B( a" j+ H5 Q N8 a7 x配置Nginx支持Modsecurity9 w. n% d8 R* k2 y- M! x0 w& T3 X
启用Modsecurity+ {+ B5 S% ^3 T# ]- O$ q1 E
使用静态模块加载的配置方法& ^; K& l/ Z. t: S+ k9 }; V# {
在需要启用Modsecurity的主机的location下面加入下面两行即可:
) \5 P S0 {. a8 c0 W3 A) I2 ^# J+ f
( C2 z" Z- G0 E8 Q8 BModSecurityEnabled on;
' z+ W- ?: z y7 c) A# z1 C5 eModSecurityConfig modsec_includes.conf;/ i. t, w2 m5 H2 f- r
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。1 c% o- Q) _# k' N& T% g/ t
, X! \) z+ B6 B# f7 m; T
, n% q* [, G7 I1 X' U7 p6 K o$ vim /usr/local/nginx/conf/nginx.conf5 K: I! \. J0 D" G2 `' M; q9 B
' b/ |( a1 l( L8 C6 a" j
/ }* Q2 L! w( q# Q' cserver {; u u3 f, z% f) y5 E8 c
listen 80;
: K5 ^; c2 V' d5 h" q$ L9 u) O server_name example.com;3 C+ [2 u; f/ ~" U2 V
1 O, z0 C' [3 Y, ~+ j. }" V
# F. m9 _1 j8 ?4 v2 F! |: C, `) g5 H4 ]
location / {" q: n( \5 _6 p. K- x
ModSecurityEnabled on;
( g& y' W: U0 F8 \! D: j: j. d ModSecurityConfig modsec_includes.conf;$ i4 g1 Y/ t1 y" [: w
root html;6 {8 ~9 {. K, T* v) }1 _
index index.html index.htm;8 T$ q5 C- v/ i& C# k8 n
}
( M9 Z0 q4 ^8 V7 |}6 N Y3 M0 h9 L6 t8 l9 t- O
使用动态模块加载的配置方法
; I; u/ ]+ F; {: ?* b在需要启用Modsecurity的主机的location下面加入下面两行即可:
8 Y5 w$ U' T7 ^, Q/ b2 a1 p3 j9 U% ?6 @7 y* f1 x
! k6 ? h! d9 n4 l7 b# x' gmodsecurity on;
R" h6 h) o- }5 v; Y( umodsecurity_rules_file modsec_includes.conf;1 E& ]5 }/ T, T6 Q# j9 y2 a! K
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
2 |) l2 j3 u! F4 L$ b. [+ N& K" v3 z& r1 m+ E4 t
. a3 ?* a ^ K* o% g
$ vim /usr/local/nginx/conf/nginx.conf( u2 ~* P8 t! K7 }7 ]
1 K& l4 W: D4 f i! L! S, c
& U1 W( t7 R- A+ W6 j8 h% e) Sserver {" T8 G: \* x2 b5 G+ C
listen 80;8 X5 G: \( m: f+ p' Z8 C- K
server_name localhost mike.hi-linux.com;! ]+ Z( N' B) B, @" |
access_log /var/log/nginx/yourdomain.log;6 K3 V, Q& S( k; Y" q
% p$ n: @/ J' i; x* \! N1 `( M! E
( X4 w1 N* K$ \8 `# o7 i% n4 A% k location / {- T. K7 i w+ L) c4 `& c
: {. d7 ]# o: c; ?9 @: Q" O) ^. [5 P* Q e# }9 H
modsecurity on;
, H" s3 |) ~5 v# r' K9 f8 X modsecurity_rules_file modsec_includes.conf;& a+ R0 M! {) P2 N
root html;
- H8 C. _2 o5 A: B/ Y0 B index index.html index.htm;. ~5 j/ T& v$ `+ @8 C
}0 ~. y: P' ~) r4 O2 M: Z8 M
}5 j {; ^* C& i( ?
验证Nginx配置文件
. l8 {) [2 G' A2 d4 l$ /usr/local/nginx/sbin/nginx -t
M& |: O7 ^7 n# ^! ^, ynginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok' ]+ L0 |* Y' U2 b3 P# i. f# G
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
# b" t; R7 n |& o启动Nginx8 `8 n6 r% R. h2 H/ u( J$ l
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
9 R! |2 i9 X5 Y& d
! v8 W6 _, p) A测试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.logModsecurity主要是规则验证(验证已知漏洞),Nginx下还有另一个功能强大的WAF模块Naxsi。Naxsi最大特点是可以设置学习模式,抓取您的网站产生必要的白名单,以避免误报!Naxsi不依赖于预先定义的签名,Naxsi能够战胜更多复杂/未知/混淆的攻击模式。 4 V/ e* n/ ?2 a. p% i
|