ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。
, I* U7 P: `6 m/ L0 ?: A$ ?) ]0 a1 v: E& J& Q$ d% G. L
V9 q# o# T# ~- g- F
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。( }: A& w8 J- `, `" h
; b, U& l7 s8 @ f7 a
( H+ Y$ A8 v0 i& o什么是ModSecurity! ?: i7 {# R- `/ A0 w' u
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
+ H- g$ b7 o8 |9 v2 c1 B
& s9 ]8 A( W0 t9 ? U/ P
2 {0 p$ F. _. {/ C3 ^2 p) t. WModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
( R& E. O+ e3 E6 K/ L1 E& i6 U) m7 O) t7 Z3 y% A' b
& W* N' h- p; r9 {
ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。+ ^. P$ H& a8 x0 l4 p
- a& l" j1 D1 G3 u- X& k! [
& i+ k3 n' C9 q+ z& n- ?4 [' I: ^官网: https://www.modsecurity.org// y: a! j; L: x/ D- U9 L
& g6 N4 h/ Z) M1 {8 O4 {' b/ `
; U5 O0 P0 b- H5 |" I) ~3 X什么是OWASP CRS
5 x: [: X/ z6 @: cOWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。
% ?. H, \+ @' L M7 b, r, ?1 k }
* o. r! U, w6 M+ K
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
6 {+ {) x, Q9 | N2 P% q5 Q
8 I$ C& ^& j) l2 E
, r/ L4 N5 H. o# Y7 J2 U; IHTTP Protection(HTTP防御)
C; ^ C4 Y G4 ?" `4 hHTTP协议和本地定义使用的detectsviolations策略。& v, R: C% V p* o
8 O. {7 r$ m! P' W/ [' E8 R' p
" b7 q* ^% X7 A* G" c7 L* yReal-time Blacklist Lookups(实时黑名单查询)& M# K' |7 U% n* ~9 s
利用第三方IP名单。
) b$ m, T1 B7 B) ?0 B/ T3 W4 R3 e9 t/ K0 |+ Y7 t
- S) W. W4 A; k* M% `) o* wHTTP Denial of Service Protections(HTTP的拒绝服务保护)5 f) q4 k4 x; `7 A L$ v
防御HTTP的洪水攻击和HTTP Dos攻击。
I4 j& \5 ~3 y/ }$ N+ l- l- y" I: D1 Z) T G
) v% |4 n0 _5 Y, X# ]$ V9 WCommon Web Attacks Protection(常见的Web攻击防护)9 V2 O) f% f( m" U g \
检测常见的Web应用程序的安全攻击。7 @! ?. L$ [+ a1 |6 W: o* [4 \
q, V0 n8 a. E& Q6 v5 ?0 I: w* m* G
: J# e6 N7 S( q* P/ D5 N" W6 p
Automation Detection(自动化检测)
+ X' C5 J$ K" Y, N检测机器人,爬虫,扫描仪和其他表面恶意活动。
2 l* f8 L( c0 \7 d- n
. l, n2 z" T2 ^% @8 J9 a& ~* V/ w, n4 {) O! z, P8 h
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)
9 @6 _/ s- T* J; y4 k; Q检测通过Web应用程序上传的恶意文件。6 ^/ ~( E7 \" H! m$ H# D' @
2 T& G/ R( e( a" F6 W5 d
0 V/ D5 `6 ]9 S/ ~& n( z1 d/ J
Tracking Sensitive Data(跟踪敏感数据)" F9 M& `, j, l2 w6 f+ B
信用卡通道的使用,并阻止泄漏。5 }! T, p& Z( O% I: @3 i
' j! R `& @2 a$ [; M
* h% O2 }8 T) d5 b' ^! }Trojan Protection(木马防护)
' G! b" k+ I" X% |# p. r检测访问木马。
( t _5 G: X, `5 U( S" G8 X
& B% h7 ~5 q; _4 t5 u
3 Z9 A7 X7 c4 h1 h7 f- K0 s5 a# n* @Identification of Application Defects(应用程序缺陷的鉴定)
1 A- K8 e' y& j' H5 q1 ?检测应用程序的错误配置警报。# o0 A, }; {8 ~, }$ U
9 Y5 r6 x2 @; k- R3 N5 @" e" v
1 ~$ B0 i: ~ x* H* WError Detection and Hiding(错误检测和隐藏)
3 u) I8 v4 F |# \$ E( { f检测伪装服务器发送错误消息。
+ b1 U8 x2 ^8 n2 g0 w
0 o% P! G6 Z% \
" @' {/ h( [1 y3 j安装ModSecurity% g' w9 [* ^5 ^
软件基础环境准备0 w ?7 H, ?7 ?6 A( W8 `
下载对应软件包0 i( O3 V9 B D9 w$ R- ]. t; r
$ cd /root
7 \1 r7 t# M; g3 ]2 @* H; B, @- @) \3 T$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
- A$ v; P- J- ^, |" S$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz, ]3 I A+ q- a# Q
安装Nginx和ModSecurity依赖包
q! U$ j: J+ J/ oCentos/RHEL9 |1 y- R" n/ X! d2 ~" d0 A4 ~( r
0 B: V/ v. G# N8 s; k; M# f3 T
: L1 H( H. Z. N1 z; ]/ Z7 n$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel8 H, ~/ D5 e( j5 P3 C, a# A
Ubuntu/Debian( a6 }) Z* S3 B; a$ m, x" D C
1 ^5 y, N6 d" s. n
4 a9 h5 z+ j. w8 h! P) Z+ E
$ 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
m$ E2 ^/ O! M& G. V' ^编译安装ModSecurity4 a7 f% ?) ?: ?! R
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。. u: A, z6 o5 L/ u Z3 W- I4 B+ p
$ l& d' e8 a9 u% M* z
$ l3 s: |' A9 h
方法一:编译为Nginx静态模块
. } z5 V2 ^* S6 {
. |7 j: d7 G; Z2 d7 n! g8 _. n+ M$ r& J. ^- y1 `, ~4 O Z
编译为独立模块(modsecurity-2.9.1)
+ W h1 ]7 E% J5 A* c/ }$ tar xzvf modsecurity-2.9.1.tar.gz
: v9 B' j6 u' `5 E: o# T) R$ cd modsecurity-2.9.1/$ I0 V7 F# X+ M) g0 z* q& i
$ ./autogen.sh
6 K4 m: }4 B7 R/ |; w X* ?$ ./configure --enable-standalone-module --disable-mlogc
$ ` ?2 T2 @9 Q$ d+ q$ make ]: G% E0 F8 j6 E1 q7 Y" Q
编译安装Nginx并添加ModSecurity模块
9 J+ r0 R& @7 I$ tar xzvf nginx-1.9.2.tar.gz
, z( O _: J% ]: o8 N, d$ cd nginx-1.9.2
' |& z7 z4 k$ ?+ H0 H$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/% P0 {! p6 j; M" X+ k; |
$ make && make install
1 |, y9 r* v" w6 F s \方法二:编译通过ModSecurity-Nginx Connector加载的动态模块" e: I) R. G- p8 F
. [' U9 Y4 V6 `1 G* U1 ?
( H3 M0 \( O" v1 V5 b编译LibModSecurity(modsecurity-3.0)
4 @, a; C: o& g5 {$ cd /root
3 G) J6 Z$ L c6 i& a$ git clone https://github.com/SpiderLabs/ModSecurity
: x. c8 Y* k) h2 b% D9 A) O$ cd ModSecurity
. {5 O( m8 i; }9 t$ j. k5 i! T, L$ git checkout -b v3/master origin/v3/master( N( |# H- i1 w
$ sh build.sh
- e; w# |8 ~6 u% b; n$ git submodule init
, N6 H1 E* D# P3 {7 U5 u( z$ git submodule update- @3 w- |$ z8 o0 {
$ ./configure( m! T2 W$ ?0 O
$ make
. q& @* j7 T0 A6 x1 Z, x$ make install
* @7 r" E3 M }LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
: B2 P& t1 H7 `: [. c+ |" ^! i& \/ ^3 d7 z# I, v
7 [, _3 J8 K7 V* \) W/ u$ ls /usr/local/modsecurity/lib
. b$ a! @2 S' X3 A. J: Clibmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.0 f* p6 G" W. s
编译安装Nginx并添加ModSecurity-Nginx Connector模块
0 H8 g+ o1 }4 m4 v/ d% D使用ModSecurity-Nginx模块来连接LibModSecurity
4 X q+ g! ~* d7 ^ \6 Y& L6 G3 i' d7 ~( N, f5 _( W+ D) n9 q
; g& o g" r, x. t
$ cd /root
, F/ ?. x3 t) O- m. Y$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx
7 Q( f, Y# } o( n* L$ tar xzvf nginx-1.9.2.tar.gz
) ?6 a& F$ ?5 i+ V( |. }$ cd nginx-1.9.2
7 a3 c$ A' F/ y0 g$ ./configure --add-module=/root/modsecurity-nginx
2 j- Z6 o* A7 p# q$ make( ^& ^6 Z# H2 k5 W% ~
$ make && make install: G1 U* r- F9 s( q
添加OWASP规则' y9 x. u9 |8 _" ?$ R) k
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
( c+ Q' o+ X% j% P ^0 P2 H( n! c9 \# i/ R" S
G8 x- y: S, [
下载OWASP规则并生成配置文件9 X- O% _" o" E" d' D% e2 i; ?; P
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git" }# O7 C1 W- h/ J& F
$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/
& g2 E0 L& S$ d$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
. C' z0 a- m& l4 J) ]" {$ cp crs-setup.conf.example crs-setup.conf% J- a: p3 W' x5 U
配置OWASP规则
! h3 I. p1 a7 u编辑crs-setup.conf文件! S8 m* U4 O0 X8 D* R& f$ W- P- ^
+ \' j0 c3 z4 a
1 \7 g8 u) z1 b. e- ^9 Q0 [" a8 t8 q$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
/ L4 c) f; V+ P2 z4 B+ s5 x u) C$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf& `$ D! s9 C3 y$ k3 m: e
$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf3 v6 B# |4 k2 {2 J9 O. o2 L
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf5 L! ]9 P+ `# L: V8 y& N, b3 o
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
1 u/ D6 U" x& R( E% q, o3 P
$ p9 t9 O4 v. j
7 l6 L: a! j2 u5 E1 ?" U4 a启用ModSecurity模块和CRS规则" H& t9 S. I, [0 p2 E J8 a
复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。% N" y, C) W: {: S: F; Z
2 U: v* ~) {/ I9 q
0 I4 a9 r+ E) t' d7 C5 ]5 ?5 Vmodsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。
% f$ z7 `( I6 o9 v/ h6 U4 F0 y
" F( Q" h4 A5 ~3 b4 X
: t9 w% k* W2 T, C2 }5 u2 U$ cd /root/modsecurity-2.9.1/9 d) ?* j3 f- d1 x3 ?9 W. a# _
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf ; J6 }% s. q$ ~" Q
$ cp unicode.mapping /usr/local/nginx/conf/& F6 t$ O& {3 o+ j; S6 s
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
$ v% v! W1 f6 P, x
z6 V% ]4 Y+ B
7 [% ^( [& C- u$ vim /usr/local/nginx/conf/modsecurity.conf
! O9 q( R6 a) a/ F4 }SecRuleEngine On
$ ^1 @! v0 R, QModSecurity中几个常用配置说明:
7 l, p' y3 L$ O! p
# ?" S% e$ E1 {3 b; Q( E+ y( p6 B, N4 t% I/ @ C
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。
V! r0 C* T- F; H x' P3 Y+ S. G9 ]: O: N( Y9 l6 `
/ _7 x: \) f& }( Y4 g5 H2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。: O" `% L( N2 E. g2 c9 _
* d8 Z& Z# k8 y' c6 m. L$ D( C+ x( C
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
# _' }4 R* l9 Y" @- Y' B1 ]- w. ^, b3 m# v( p
$ s8 K( T/ n3 y8 Y; E4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。
4 z9 A- B6 g- b; n) h9 G4 M( @0 r- P) c* I
) r3 O( `2 g! B& N! J5 D7 t' I, i4 ~; M在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。6 _1 n1 j% ~$ T+ C' ]
0 o! _0 i9 h8 v( B
Z) O+ ?/ o1 f0 T+ r8 B; x3 c
3.x版本CRS$ @$ b, M% {8 f% G" g2 I
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs: B/ _* k T7 I& F
# 生成例外排除请求的配置文件
+ k- Y4 D. u8 @! `' O' {$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf
; O7 Y% @( D' D- K$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
. \; ?+ y* {/ O9 d5 f$ cp rules/*.data /usr/local/nginx/conf- j; s$ S9 P2 G
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。8 A+ L& h5 B3 \! b) N; k- A
5 h2 W6 k7 q% ]* u. a
5 ] h9 [' T; l; {$ vim /usr/local/nginx/conf/modsec_includes.conf
6 g2 m- C \2 n$ [' }
; w% j2 }& B. A! F& 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 ; _9 p) C S) i' E$ [
7 R/ x N$ B% J3 B7 B) r3 X2 A! R
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。* y! w1 c y! K' M
3 I: e. p) E! A- u* ^- m- Q' o$ p# p) ^) I+ O7 C1 O
配置Nginx支持Modsecurity
2 F6 S5 ]5 [" c启用Modsecurity
! a9 I l7 s8 g" i7 E' I+ f使用静态模块加载的配置方法 {. V4 f' A; r5 _
在需要启用Modsecurity的主机的location下面加入下面两行即可:
2 S& {8 l) |5 s3 G" w) k& t- h6 {3 m9 f2 \/ J" @
- ~" l' r8 N7 s3 G1 mModSecurityEnabled on;. b" n8 H/ L8 W/ u7 t7 m* W- e& S
ModSecurityConfig modsec_includes.conf;$ d% x. Q8 Q- [8 I: i8 O, O- Z4 A
修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
7 h+ f% D( S# ? G$ E0 E; Z i& O& J, G) R/ v+ D2 y
) ]/ G1 E4 M# P
$ vim /usr/local/nginx/conf/nginx.conf6 s# g! Y" r" @) _8 j2 I' a, |
, F* m+ a* e+ Y; `" `; `" N) @4 c: o+ ~. [
server {
* M0 D* ^) c( I7 j. M% a listen 80;
O2 {! t- D- ^$ x- c server_name example.com;
7 P3 |0 K$ t" j5 k& Q9 d! s( {0 \ h3 S8 W
) A7 p; a* @9 h( H
location / {( g' O$ a$ W" f8 N1 [
ModSecurityEnabled on;
4 C4 [7 x9 K ? ModSecurityConfig modsec_includes.conf;: ] Z' N' J" A5 y+ d
root html;( ?( M/ c7 T$ G& w8 ^4 u; U
index index.html index.htm;
) v" @% ^4 m) \7 S- {5 t. k }
2 c, l* m6 y# O8 O/ Z/ [% d}& _6 M1 i; ~8 Y) Y, F/ s4 A5 A
使用动态模块加载的配置方法, j: z6 D$ B& x9 c6 X
在需要启用Modsecurity的主机的location下面加入下面两行即可:
% Y( z2 z5 N6 w+ k, ?
5 W0 D: v9 ~9 n, K( A: f! n6 X4 G7 [9 Y2 Y5 C0 w. o
modsecurity on;: }+ @1 y' \0 W; A# y5 l/ A C
modsecurity_rules_file modsec_includes.conf;
# w. V4 U6 p) |' F4 J/ G+ H修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
' `% A# G' M1 ]! x1 B9 h# y( V' r2 n
/ m R# [( u+ m! i. R' e( L& h$ vim /usr/local/nginx/conf/nginx.conf; b+ L' r( r; d" e+ W9 @
: W. F* Z! i; H) g# y1 X- S4 E
8 ?3 b& a) E& ], g) {3 P/ _server {% G+ G1 ~2 E2 ^
listen 80;
: o6 J; N& Z' K8 u6 r! O( U( F server_name localhost mike.hi-linux.com;. X3 P- G: y* H9 j( `
access_log /var/log/nginx/yourdomain.log;
" y/ E4 \9 A% Z, m+ @' w- h* a9 J% H5 _2 w' ~) n3 M
# x$ e' W; D6 b location / {
0 b5 r: s; q3 M* ]1 e f |* ]% O
9 h, B# K' J1 O% N' f% N& Y/ M4 q7 E7 e* |2 L% Y! S2 d- Z
modsecurity on;
6 d2 g7 i5 E6 ] e( l; @. s modsecurity_rules_file modsec_includes.conf;( E6 r- [& Z+ [% ~4 y5 H o
root html;
. c5 o! n6 P# d5 m index index.html index.htm;# E& `) k7 i, s
}/ m* s) W; ]: P2 c/ X4 p1 K
}
7 v+ W" `1 {% {验证Nginx配置文件
4 Z8 n) w& c7 t+ K5 _$ /usr/local/nginx/sbin/nginx -t0 _" E) m* K) b1 N9 ^4 K
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
4 L3 U% G& H5 U" dnginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful T" l+ o5 B3 Z0 u0 \
启动Nginx
1 d* A e4 L! S$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf7 k, _" q6 }9 m5 d0 n9 k# }8 n5 Q
$ p* @% [9 u8 |) v' Z; O! w
测试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能够战胜更多复杂/未知/混淆的攻击模式。
* y0 m& m1 [( V9 k+ A' D: W) q |