ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。! _* v# [% u: e o9 X' J
: v: b) T6 x+ `2 g' m# ]5 ^& v0 r
2 g; q6 B' I& F. Z: b7 [& k1 Y/ E
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。; {4 m9 Q3 H! i6 m+ \1 L
3 i4 n0 ^$ k6 d$ G
) Q# G! x0 N i1 f5 ~ `( {
什么是ModSecurity
7 W" p) r- t' B% g9 FModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。 t5 T N$ ]! X+ `) E, T
& a" G' E3 s. w; d) L
, }. r" o3 V8 C% n7 p5 ^
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
( r$ M* \: y) m4 |$ q; L1 S2 N- l" t, u2 V U
# ~7 k: O2 o+ N* C- A4 E4 TModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。. [- g, r: Y/ J- n; K: n
# q* T# I$ Y$ m6 U
/ Z- p0 [$ n( D* @官网: https://www.modsecurity.org/, q4 ], Q1 S, W6 z( R+ J% N! `6 g1 t
. c, i; L) A) R$ o! ^) O* J4 H; o
& _; ? l) E) F: t' ^# `$ y2 F什么是OWASP CRS; L9 n% y. ^/ ]/ C4 u2 H: z' {
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。" N7 P0 r" f% |3 h! G5 f
# I+ l9 m4 J' `- B/ `+ ^% B4 R( l( J
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
/ K, l- `$ A1 e' o6 }4 x* W( v( w$ Z9 N% g( |
3 P% A5 w1 M/ d% _1 r+ [
HTTP Protection(HTTP防御)
4 d) `% @7 b% K* g% I' WHTTP协议和本地定义使用的detectsviolations策略。
9 q& H/ Z5 {$ E, f5 } ~1 U4 r. Z( t" \) ?4 p% f4 u
! W+ ~ }. o! @9 N* r7 `
Real-time Blacklist Lookups(实时黑名单查询)
6 ?2 k' x- _2 O利用第三方IP名单。
% m! L; ?: d* {9 ~/ G0 e# b' V
; N% [& i) V9 d- l2 g' F. Q
+ e- \+ y0 h! b7 m/ YHTTP Denial of Service Protections(HTTP的拒绝服务保护)7 h7 Q* u9 l: z9 B& h
防御HTTP的洪水攻击和HTTP Dos攻击。
. j6 z7 J( @6 T& h& m+ N
8 ~1 v( d) m, Q# ?# p! x: x1 E X2 c# B& O; c3 \1 i# a
Common Web Attacks Protection(常见的Web攻击防护)# z- N3 w* {7 |% [; Y
检测常见的Web应用程序的安全攻击。4 B- z: X! U2 ^+ |
3 f o8 v+ N. M1 |) w1 e* e
& L' k) e5 I2 X8 S" p
Automation Detection(自动化检测)% x; s& s9 D/ @$ H2 v' _( A! r/ i$ t* U
检测机器人,爬虫,扫描仪和其他表面恶意活动。5 a+ e6 a1 x) ?1 }3 u, @
; q8 D; Q( g k; A/ q) i, Y& g0 \! `* A
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)
! v& `% q& O# H9 ~; y检测通过Web应用程序上传的恶意文件。
5 _* @& M8 Z# t6 r& I( h) V8 F# ~- l1 t& b6 a& ^
0 a8 Y. j! _ e4 H) hTracking Sensitive Data(跟踪敏感数据)
& H5 D, A4 `; a4 ]. K' U信用卡通道的使用,并阻止泄漏。
1 M% l% o0 H ?) c9 h3 T( p% ^' ]7 X% e6 D8 l! q1 A" U% u1 k2 P) d. o7 ^
5 [- e3 K4 o+ y/ J7 ?# g* V' z
Trojan Protection(木马防护). p8 z* K" M. ~+ U# i
检测访问木马。/ Q: M: R* l+ K+ r' h
P& x- ~9 t, U3 n B. M% q Z+ `- G0 c% s& }
Identification of Application Defects(应用程序缺陷的鉴定)$ W* I- L6 z$ r, X( x, T" y
检测应用程序的错误配置警报。
( p- f2 l* B8 J- n \8 M; |, \# G5 q& T% B. [! ]9 s7 C7 c
; A3 M: U/ ^6 A) \
Error Detection and Hiding(错误检测和隐藏)
' O" c- ^( P) P* J3 u& q检测伪装服务器发送错误消息。& w, ]+ [1 K5 u, J8 I
* F' T7 p1 r9 m1 k/ j9 E( m3 X9 R3 |1 y3 R
安装ModSecurity+ g9 j/ |: }! v9 Z9 P3 e& f
软件基础环境准备* x0 s2 Y: ~3 D8 J
下载对应软件包
7 _1 p- Z5 ?9 `) f& h: Z$ cd /root1 ~; S. I7 S* i+ D; e' s% `( A" X5 C
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'$ ~5 w7 ~. d0 }( U7 p
$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz
! C) B4 ~4 E# p# z2 `安装Nginx和ModSecurity依赖包
, R+ j5 \0 X+ ~0 J# y# FCentos/RHEL9 [, ? ^6 C! Q; o; r5 [; S
3 H1 R/ Y& Y" m
# O- l/ i. ?; V$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel) k- I+ u0 G7 `. L5 T2 _$ ` J: H
Ubuntu/Debian
$ O9 Z0 x+ ~9 Q, _! A% G! k* d) ?+ ]
. |% A# {' d3 U/ C& x" V
$ 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
2 d" X5 `4 U3 |/ Y& v( I编译安装ModSecurity' S6 S: m0 r( V
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。9 }4 d+ Q+ l/ ~7 I
4 u. M% y9 H9 h
; ?# U: T Y9 ?6 s+ ]方法一:编译为Nginx静态模块; R K# i( S! E% c$ r c
- N- r" Z9 A. u: H1 W: z9 J3 \' Q6 v* |3 e8 K
编译为独立模块(modsecurity-2.9.1)9 o2 ], m& s) [" d/ l4 D
$ tar xzvf modsecurity-2.9.1.tar.gz
% y ?% ?+ c- ]: |0 _) V$ cd modsecurity-2.9.1/
) d8 i, P6 S9 N) @/ h% j$ ./autogen.sh
6 v/ t5 Z1 d5 Z( Z! g) j$ ./configure --enable-standalone-module --disable-mlogc3 E, X& G& u j I0 v) y
$ make* Y5 f+ X9 T( k# F. q; U7 s
编译安装Nginx并添加ModSecurity模块7 y6 Y1 T! d% d7 M' g$ U5 X% A7 B
$ tar xzvf nginx-1.9.2.tar.gz
6 ]% t' p2 V0 n$ cd nginx-1.9.27 Q2 [+ P# J% d' E4 p
$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/* `+ X* e+ i& h7 `
$ make && make install
. h1 o E5 z9 [! l0 j* v方法二:编译通过ModSecurity-Nginx Connector加载的动态模块8 R! E$ z0 J% B- }0 s8 q
- b7 L6 r' b9 V* m5 v+ R9 c. ^1 u4 I" y P# V7 r9 n
编译LibModSecurity(modsecurity-3.0)
+ G; Y+ ?8 M! B2 E& {1 c! X$ }9 j$ cd /root
% m0 `( n( z9 ?$ git clone https://github.com/SpiderLabs/ModSecurity6 K( H0 {; V3 a4 _5 p
$ cd ModSecurity7 k8 Y8 Q/ S6 l4 T9 ?2 y
$ git checkout -b v3/master origin/v3/master
" e( ?# `' ~7 @* j$ sh build.sh- s: {1 f2 W6 L; L, O4 y
$ git submodule init/ R) z8 b. L, v/ I5 K' \4 `6 l
$ git submodule update
9 D4 _- s+ M. o1 U" B$ ./configure( h& R! O, a6 C
$ make. O' c) [: ^2 H- S2 |
$ make install. O' g! P* e1 g7 Q# B* g
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。( V6 f7 A' \5 p0 ]7 Y
5 R, y. A0 a! M+ K
2 K( w( ?$ n# O. B: a' {$ ls /usr/local/modsecurity/lib# s& k+ p, X$ @1 \
libmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.0
% l, O- G* s9 x h1 p" Q7 X' j q9 T编译安装Nginx并添加ModSecurity-Nginx Connector模块# [. O0 t/ H! {) G
使用ModSecurity-Nginx模块来连接LibModSecurity
! a$ _- c( X3 H6 p# f% _* Q
; G( s) I; x: D& G# W
; h4 ^3 w& t8 h" X: K$ cd /root' d+ P+ N7 P7 `! s7 J3 j( X# T
$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
) C; p2 S. M# n3 R8 m) f. ~/ V$ tar xzvf nginx-1.9.2.tar.gz! P" P1 N& o" v8 o
$ cd nginx-1.9.2
2 {9 L( ~" X$ P3 K# a% N$ ./configure --add-module=/root/modsecurity-nginx
4 L: z- h* R6 N7 n/ Y( |$ make/ J6 |4 A; o: y4 [ u# ~
$ make && make install
& m4 F& Z$ f3 v1 o+ h0 i添加OWASP规则
9 X0 d8 `/ U% R5 o6 cModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。) E( I. d% _6 G8 s5 I
) ~6 o& u7 `* r, E* A: Z0 l4 S$ N3 k5 S. q6 ~9 l
下载OWASP规则并生成配置文件' Z" ]7 |) \& A6 b
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
" V& F1 t& }6 a' W. W, t7 |$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/& _. y" {1 o' j2 `
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs; Z# z! Q Z: |9 r
$ cp crs-setup.conf.example crs-setup.conf
" \; e0 Q$ Y, \* P; h+ e6 {6 G) J, N6 R! x& Y配置OWASP规则! d+ E' ~& t$ W5 z3 Y4 x1 ~( V
编辑crs-setup.conf文件
* u- Y w- q; j* D0 D+ Y1 v; R5 b9 f9 [# I) K. g
' c9 n+ H2 }+ Y/ t- n j
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf' g8 @8 n) B% W- q* C
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
5 i: b o; s6 U! O8 I# g+ i& q4 r9 [$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf, ]/ A8 b4 Z( F# s' y
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf8 ^1 s* ?1 M j) o9 e+ \3 x) h1 h
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。8 |3 \1 X ^% }7 g9 x5 H
6 Z' Q) ], [+ N7 w. R& Y
. Z, |5 z6 N& c+ ^" D& @/ Z
启用ModSecurity模块和CRS规则
/ r/ X! h2 g h) L( i6 P. R1 E, R复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
8 O. Z" L( z# R: t# p
$ X. D& Q+ E# O8 R7 v$ c/ |7 L; u% n0 k9 e2 u( r" J/ [
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。8 B! A5 M$ h/ P
5 y, a) A! G8 Q$ }) h6 [$ K0 W; g3 \7 [8 F) C" \, g( ^6 z& e$ y
$ cd /root/modsecurity-2.9.1/# c6 Y$ V$ I' h" W
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf
5 f. v! ]/ Z% O: {/ Y' @7 H$ cp unicode.mapping /usr/local/nginx/conf/
8 W- e, E* c5 @+ Z! X a将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
, t- v& s+ [+ E1 m7 `- D* q9 D1 Y7 o! O! o+ C$ o
M6 n4 }5 n2 P; p7 V1 K
$ vim /usr/local/nginx/conf/modsecurity.conf
* ?; r5 J0 c3 J. WSecRuleEngine On4 h8 b3 h- S1 w' R Y
ModSecurity中几个常用配置说明:
3 m C6 `8 R7 {& G3 X2 E" v+ J% d9 P, ?# c5 ^/ Z
5 r+ S" D4 K% D( s+ R1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。) @2 }6 \& T( A$ F/ N
# O: A1 ~9 C' {3 j
( f/ W! q. p M E1 w. d+ h$ K2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
8 |9 S" Q. `+ L3 h) w' X% y7 `7 s* j
% U* R3 L/ [# ?) z! Z
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
# S8 }& @0 b! V0 N1 r9 @3 s$ @
+ m2 {8 G5 U! k+ }. B, U3 ^" `/ X2 E6 B6 N
4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。
' m, J1 K# {3 ?' T3 b& A& R
& @ G% [$ ~' h1 H( J4 ]
3 @/ `' @! O! M在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
, J7 I% X0 h+ h7 u7 y& M% z5 L/ D* n S) ~
4 g) Z3 b# r3 t# I
3.x版本CRS
0 G( V W3 d" T$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
( m+ K4 Y* r9 u+ E; Q# I# 生成例外排除请求的配置文件
3 q1 q7 h0 V0 s G/ S( t/ e. Z& ?$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
- _. p, @2 U/ X% D* y# W; V$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf7 t: z- x5 l; i+ v" m& U
$ cp rules/*.data /usr/local/nginx/conf
, E- c. c( X' p) \/ _为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
! I5 k4 ^- b i
+ M! ?7 y% ~2 v) ~. U9 V% D/ h9 w" Q8 R# l/ ]/ A9 [; J; ?
$ vim /usr/local/nginx/conf/modsec_includes.conf
& Y( t6 s7 B: n* ~0 S/ z, Y8 K# H& F- c7 t! ] ^9 v% H
[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
! v8 ?' Q8 ?4 n8 i4 o: x: Z: ~9 g6 n1 N4 m: Q; N/ q
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
+ `2 X1 b4 q) n+ q$ [' v3 _
" l& \3 L, l. b
7 Y, @4 f; r0 g3 [! V9 q' b配置Nginx支持Modsecurity
/ Q7 U0 b2 f `; I$ c. J5 t启用Modsecurity
6 F8 z. K `- q( ~6 N' n0 X% ~3 K使用静态模块加载的配置方法$ {1 l+ Q2 j+ J
在需要启用Modsecurity的主机的location下面加入下面两行即可:4 ^3 g0 S( E0 e& N/ _4 T
7 {9 O- H# A( R( ^" ]4 Z
( v$ w/ U* Q$ w% J. |" V3 wModSecurityEnabled on;
5 ^) _& D+ [2 [- FModSecurityConfig modsec_includes.conf;8 W& ~7 g3 g) ~1 |+ P3 E
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
! `6 Z3 ~4 ]) {' ]3 S3 B4 M' O, A* k3 v- o1 r: ]
, m5 W* V7 g+ b% s3 X; y8 A5 L* S
$ vim /usr/local/nginx/conf/nginx.conf
" r/ Y7 {' h8 V/ v- p2 @
" @9 N% g7 d8 b5 ?( B# Q4 @
% b8 [! K( u; j# l7 Y; F) c; g, tserver {
# Z: L. Q) E H listen 80;. l j, c8 W/ c# P3 J- J
server_name example.com;2 B$ q8 ~4 u! v9 O
3 m# l3 E, j& b; H) a* B/ q4 ^; d' H" ~- n! h3 T8 h
location / {+ a" B* p; |8 }. @6 a
ModSecurityEnabled on;
, ]2 h* x3 P+ C2 T7 t3 _ ModSecurityConfig modsec_includes.conf;6 H% Y. u3 l8 r' r: I" P/ K
root html;
# l% F# O4 b; k index index.html index.htm;7 w; _6 m2 K( A2 V4 D p
}
+ T- `# R( A" p1 X}. O: Z4 r4 D$ L$ c4 `, o. ^7 K3 V
使用动态模块加载的配置方法
4 M2 z+ ?; w- C7 E% t4 v2 b在需要启用Modsecurity的主机的location下面加入下面两行即可:
$ D$ O# D1 {4 |7 v5 O4 ^/ r! j3 n. o
# e7 W$ V( I! u- D7 B) ?# q, c) L1 _8 [
modsecurity on;
& g, u" ?3 \' r3 {8 r) lmodsecurity_rules_file modsec_includes.conf;# H f+ V6 D; y, X5 v% }# t3 `
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。9 x% ?- B% c/ E* R D; ]- g1 o
6 m5 o" P \7 e; H* n2 w3 H( J/ e0 Y4 ^0 p. B5 @9 y* |
$ vim /usr/local/nginx/conf/nginx.conf9 `) t7 L& L8 y) R k* D6 A/ o
; S" d5 I: v- t2 x Z0 o5 m
4 J1 D- E4 F6 eserver {
3 k/ Q9 V- S5 D6 p- }! U listen 80;5 L7 m( Z7 y2 Q H
server_name localhost mike.hi-linux.com;
, v! M- `' J' M$ k6 e) E access_log /var/log/nginx/yourdomain.log;. k% T% v4 C( {7 ~ a3 ~0 ^3 i
3 a) ^2 h; u3 l$ V* \
' \( x: O$ l3 E* p( {3 h: C location / {
3 W* i( U0 p$ F. U! A: S$ X/ f6 r: R. H: U1 T4 j. [
- O( U) u \& Q: o modsecurity on;
) D5 ], g) w" v* K' y! U7 B$ { modsecurity_rules_file modsec_includes.conf;/ y/ h: A) b6 C3 j& T3 U- _& c
root html;
+ {' F. K; L# j3 a4 _* A index index.html index.htm;3 X9 Z. e8 g& G! O( k9 J, }. r! ?
}+ V3 V* @+ v0 c4 v; X
}
6 O$ k+ u6 H* Z. w$ e! Q2 D4 L验证Nginx配置文件* z6 ~5 m; P* Z2 \! a
$ /usr/local/nginx/sbin/nginx -t' ^5 t& g! M7 F
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok$ {) Y& K) |* g. i Q
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful8 D1 a. v" u6 ~6 k+ }4 ]8 x4 l; c
启动Nginx
/ T2 Q2 `9 ~, W9 T0 X, M Z3 `$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
' R2 P$ R! V/ n7 n; c1 X% ]4 F& F [" 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.logModsecurity主要是规则验证(验证已知漏洞),Nginx下还有另一个功能强大的WAF模块Naxsi。Naxsi最大特点是可以设置学习模式,抓取您的网站产生必要的白名单,以避免误报!Naxsi不依赖于预先定义的签名,Naxsi能够战胜更多复杂/未知/混淆的攻击模式。 3 G& {4 I5 g7 J% i) t! W4 B+ W$ r
|