ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。) Q+ l4 H. d' K4 C/ _9 f
: E3 A) C! X4 Q8 I! s6 [, q
3 b$ l9 E, X9 k, ?/ O2 ~ }2 c+ [7 g2 _在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。
% O: N' N1 {3 |. }+ U; i2 |4 ^3 \" m, m' E2 R
, P* M+ ?: |0 X
什么是ModSecurity
) w- T) q8 E8 U+ \/ O" MModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。
) l! }/ b! _; H' J; n5 ?
4 X) O% d+ w3 @6 N/ t7 A/ Q) M4 O; G3 J' @# o& W
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。
' C" l4 V( h2 o- g) Y
. U7 k: e* Z" f% q( E+ K
- }2 t+ L! S4 X# H6 {2 FModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
# b' K9 r' Q4 t7 M4 V% S! C, o' K5 `' j! H) \7 L% j) h* o" \) e
( i* y) ]& ^! W& n
官网: https://www.modsecurity.org/
R$ B8 p3 u C# O$ z) j/ ?
. `% c6 }( n6 u# Y* x& d' |+ H X' s5 |( K0 J( v
什么是OWASP CRS
) A4 g |" n# m' {9 cOWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。8 F5 E2 M' J3 k4 i' h
4 b5 `8 q$ C& R; T/ y; f) \) n. z- y. @9 O0 E; b9 }
ModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
( r. ]9 s2 S" e- ?6 ?
% @! ]: M% n1 H. j( u5 O3 g/ }+ E2 e# e9 }6 ]$ w
HTTP Protection(HTTP防御)2 U5 b" f% k$ W* O, t/ Z
HTTP协议和本地定义使用的detectsviolations策略。
2 D/ `( f* D# U! j( h+ U/ r4 V
7 q R$ h# z/ N5 q0 Q4 H5 o8 h' S" C0 R
Real-time Blacklist Lookups(实时黑名单查询)' N% t0 J4 ~" c8 D
利用第三方IP名单。8 t9 r) [/ [4 e9 q
0 b! _: O) f5 \8 g4 g8 D
6 e. ^1 \4 Q( W7 h' {% S6 \1 c
HTTP Denial of Service Protections(HTTP的拒绝服务保护)' Q, Y/ l0 x: j% f" R3 f( z
防御HTTP的洪水攻击和HTTP Dos攻击。
/ n$ t8 S7 ~1 x* w% A' i1 d' F0 o" i- x! n7 ?
3 D2 h/ r# T2 U. I' z+ O
Common Web Attacks Protection(常见的Web攻击防护)
) y0 g* g4 z: Y# L$ U检测常见的Web应用程序的安全攻击。
q; ^+ i- ~( T* u$ _9 u2 {4 W% z1 T3 v- D$ E9 V: B
& y" T$ N/ R2 e8 O/ B" m) sAutomation Detection(自动化检测)) q& h& v( M$ m0 {2 f
检测机器人,爬虫,扫描仪和其他表面恶意活动。
) t4 c5 A# V: d0 m& A9 M7 r m& A6 b
. }9 r H( F/ N% u' X
Integration with AV Scanning for File Uploads(文件上传防病毒扫描)3 S. |+ N8 `0 J2 C0 h
检测通过Web应用程序上传的恶意文件。
# X) N- H2 y8 d
# T/ t5 o# K; s5 y; e
4 d5 n; m* m& ]0 \Tracking Sensitive Data(跟踪敏感数据)/ Z6 h3 C# D' N# u& `
信用卡通道的使用,并阻止泄漏。
5 w* N" ?9 R9 D! _6 @: R0 J9 ^8 S }4 u$ Q7 @$ h/ @
5 s( W# P- y9 U/ T: STrojan Protection(木马防护)
& l: L, R" z& ^4 Q7 E检测访问木马。7 f$ H7 P8 o) H* ?6 n; u
. ^# e$ P: \+ r4 w2 u/ \$ X
: W* U& p- T2 T9 I! VIdentification of Application Defects(应用程序缺陷的鉴定)3 J6 B3 k6 I$ z* n2 \# z/ f
检测应用程序的错误配置警报。
Q+ H" [9 R, n" S+ S8 p/ Y3 Z4 ]8 x$ T+ w0 L) a* C
2 l$ R0 g) W4 J5 y! YError Detection and Hiding(错误检测和隐藏)
O5 V. C# s- W3 p" ?9 f8 F( {& P检测伪装服务器发送错误消息。4 ~; B3 b0 Z V; V" T8 k( F. S
C6 I. B$ I5 w, c z7 f
8 X+ x; ]9 o; F. f" [6 q' D安装ModSecurity5 E7 `0 `0 {" t& ?/ [ @2 p
软件基础环境准备/ Q3 Y2 k. Y; a
下载对应软件包3 [* [0 } O" ~7 S# t& W
$ cd /root0 g7 p( W- _8 v. \+ S/ W: T
$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz': p/ w( j0 f3 f( u$ Z1 |0 G
$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz# w y: p t, |3 I; ?- }% B" v
安装Nginx和ModSecurity依赖包: m2 f7 H: Q2 S# N( K& ^9 n
Centos/RHEL
! p" G7 s+ j& E3 F0 E. i3 S5 o* b0 F1 y: v1 F. }3 U
8 n+ H6 A$ u# D/ d* _3 `9 g$ yum install httpd-devel apr apr-util-devel apr-devel pcre pcre-devel libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
3 [: g' ?; e8 z4 t6 Q" X8 yUbuntu/Debian
. o3 t: _& u, G* t0 _% F5 H' V
r3 v& q+ ?/ m! a. z9 N' P* I0 v* f: I( q
$ 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
+ Y Z+ n2 O6 [+ Z7 b4 }编译安装ModSecurity5 q* G* Q p4 s
Nginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。, Q+ j; L( Y E5 M5 V7 `( D
: ]4 Q9 ]6 L W! l
& t, s. p! {2 H/ H, \- @方法一:编译为Nginx静态模块 q& x! C w2 z
" J) Q1 u5 `% q, y
) r- f0 d+ y' ~: q5 z! q( K编译为独立模块(modsecurity-2.9.1)
: p- @/ ^" P. z) n9 m Z- M$ tar xzvf modsecurity-2.9.1.tar.gz
, r4 m/ s0 m% C% {& M. R( K i$ cd modsecurity-2.9.1/. p& k1 o1 U6 W1 G" G
$ ./autogen.sh
- O& x( ~, A/ v: O# W& i! t$ ./configure --enable-standalone-module --disable-mlogc
5 w, s- d. z3 P; \/ s [/ I! Z$ make& ?0 V- T. t7 y1 ?. Z' O. g
编译安装Nginx并添加ModSecurity模块* B$ V, _. |* _- W
$ tar xzvf nginx-1.9.2.tar.gz
6 @" k, G# f, Z3 E7 m4 W" g$ cd nginx-1.9.2
1 R; K- O+ g! m7 G* l' ^$ Q$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/
) D! D$ V* e: @$ make && make install1 e8 U& N0 I$ o4 ^
方法二:编译通过ModSecurity-Nginx Connector加载的动态模块# K4 i2 d/ i; b7 m
& x6 k v. T# T1 H0 _5 u. J' U f
编译LibModSecurity(modsecurity-3.0)# E8 e& y1 E" i. D5 u6 `1 D; J9 A5 G+ A
$ cd /root
2 S+ S2 {. _/ i2 S# L$ git clone https://github.com/SpiderLabs/ModSecurity& O* z% n. U- f5 E
$ cd ModSecurity4 h- E1 C: T: e( m& B0 R
$ git checkout -b v3/master origin/v3/master
# u' C$ [& z1 J2 R$ sh build.sh
4 c O# Z# i6 t$ git submodule init
* i5 C" n0 @- a& ]2 L$ git submodule update; F- Q$ y9 y' G( \2 D
$ ./configure7 Z3 [) R) v* m% k- P& P/ O( W
$ make) b) G$ n F% v8 ]6 A; t
$ make install
) i# q" }9 N7 t: v& rLibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。* m& c! m; |1 z9 T. S) x
" L/ W3 f7 _. H; \. d T
( @2 E5 I& F+ Z$ ls /usr/local/modsecurity/lib1 S: z7 V5 X" h
libmodsecurity.a libmodsecurity.la libmodsecurity.so libmodsecurity.so.3 libmodsecurity.so.3.0.02 B) M$ s3 O3 L
编译安装Nginx并添加ModSecurity-Nginx Connector模块
4 ?) i/ F0 D& G. f, w. i( U8 _使用ModSecurity-Nginx模块来连接LibModSecurity. i& I7 i- _5 t. _* p. u8 H
" E+ Q' r" U0 e. x" c
# y# T, N9 t* T7 }$ cd /root
( j' P8 d0 o W+ v$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx) R0 @8 A. z# e8 Y
$ tar xzvf nginx-1.9.2.tar.gz' Z w" B& f$ V; S; P
$ cd nginx-1.9.2
" |0 i% n0 X! a3 C, ^$ ./configure --add-module=/root/modsecurity-nginx
7 {) I' F9 M" s7 \1 x$ make
6 |' M& ~5 w% C$ K, R$ make && make install/ S* h1 b" U, W% a7 c2 l
添加OWASP规则4 U% e, k7 g& ]$ W" f
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。4 E! x- b+ ~0 H. N5 K! n4 f
) l' n, I$ G3 @) F% g" g0 x6 r" f+ Z: l6 c+ n$ ^# w0 V
下载OWASP规则并生成配置文件
m# W. Y6 N: `$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git
+ e1 r8 i4 v! F% J) B$ cp -rf owasp-modsecurity-crs /usr/local/nginx/conf/
; v! D* E' c! F" f$ cd /usr/local/nginx/conf/owasp-modsecurity-crs0 U. B5 Q( k( ]+ K8 t9 h1 B
$ cp crs-setup.conf.example crs-setup.conf
* f2 \3 {" H: G9 [$ g配置OWASP规则7 d4 X" l9 S2 I
编辑crs-setup.conf文件
0 U6 }, ~4 ]# @: O) h
+ d3 {( [/ w [: c$ G; U3 J! }/ @! ^* q3 G
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf
. A; D5 \5 T& u, n9 \$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
. [, k3 A8 Y6 e* r: D- N( M$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf
2 j, t. n. g1 X- `- q; p- O# Y$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf
/ B C! I/ f p* z0 |默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。
6 j. z H1 V* d7 g
4 H C8 s5 ~3 A, ~7 g. d3 o, ]2 f8 c8 }4 T/ W- Y0 X- I
启用ModSecurity模块和CRS规则: ~( R) |* R; }/ Q
复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
3 ]7 X0 ~( s' ]# f% J0 Y# }9 Y; D/ n/ [/ Q4 I" k" t# C; X
k+ S8 i2 I/ r6 R
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。) ~: E3 ~2 Z6 m+ c
, w p- o0 y7 O( B0 E5 c( u
/ F% K. x9 Z5 N$ cd /root/modsecurity-2.9.1/
: a! V+ D P; u! `) ?1 c3 \! m$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf " H7 T1 D' R" ~' I- w
$ cp unicode.mapping /usr/local/nginx/conf/9 R+ C7 ^2 m# ~9 B' V- B
将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。: Q7 o+ s6 ]; i$ O. f# ^
& J/ h+ V- M% M7 {: S: c5 w' Y* S$ ^4 d0 I3 C
$ vim /usr/local/nginx/conf/modsecurity.conf0 o3 R' ?, a- f
SecRuleEngine On
% j; `8 X1 o) A5 {9 g2 h% ]4 s) nModSecurity中几个常用配置说明:
9 y# W3 c. }6 l; v( ~$ ]! J. e
O. v8 I& p) w0 k4 u$ K: T4 K# j5 u! c4 V# s7 q0 j }
1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。3 }' b! N$ `& n8 Y
$ r# K1 O; X% k( G0 x. w
# A% Y! Q* N5 ]/ C% G! L" v2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
4 b. }% A* `# T5 d' ]3 }9 v( g4 w! S' ^3 z3 u9 L3 R' u
2 R. y/ c. N: o7 }" O& X
3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。
! c# w5 k6 @2 o0 Y# s
* Y4 x4 B( r. |7 I9 c# r) g/ ^' W8 l
) p; J' B A4 ~( F4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。
1 H& c, r. K! B! j% B- T
* @% u: H" ~8 x- n% n* `; [; b, D5 ^* Y
在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
8 a2 Q3 r1 s5 |1 D4 J% j5 Z
+ V5 a& j& w5 V5 g5 \7 I7 C
# b2 `0 o0 u0 J! y5 V4 @3.x版本CRS- v) A! @1 D5 E+ r3 B9 P
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
( j) W5 Y& S* w# 生成例外排除请求的配置文件
( |1 [3 u5 n- G1 G* J" _& \$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf; V- r. z. P% }
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf) H& |/ U: X3 u/ A# A" H9 o) R8 I9 Y
$ cp rules/*.data /usr/local/nginx/conf9 ^; c* I7 h! b; `
为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。1 q0 S7 y: t& F! j
- U8 j" O, Q) \6 h1 E
. ?* j5 k# [4 r( o4 E
$ vim /usr/local/nginx/conf/modsec_includes.conf5 H) P# p2 X% N! N& y2 T2 I% t5 b
% \# v' }6 P% _4 n( u6 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
4 B9 o0 Y- F+ U' B8 m1 R9 i
0 m9 v$ R6 z5 s& k# X( p注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。1 i6 ~+ h v! r0 z! X0 v2 I" U" X
D% D( |! Y% ?, ^* u6 }
8 k) G6 P7 ^# q0 d6 V配置Nginx支持Modsecurity; p8 Z% V$ M* ]5 R
启用Modsecurity
3 R$ H) \: K5 A4 f- c使用静态模块加载的配置方法
. C6 b$ Z" y \( _7 I& E5 m8 C在需要启用Modsecurity的主机的location下面加入下面两行即可:" m0 Z& u p) R- G
. L+ n! X6 Y: N( H
! K7 s N: ^' V, h1 `* PModSecurityEnabled on;7 l5 `! a7 \- X; B- E A- f
ModSecurityConfig modsec_includes.conf;
0 @ p- f# A" l& d/ k" S修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。/ }! I' {# o# L7 o) U0 F0 I
: ], Q J7 m) j3 N, y5 M6 ?4 I- z
$ r- i) C e3 q( N$ vim /usr/local/nginx/conf/nginx.conf
$ S% ~2 Z" a7 Z
$ v* ?3 q2 g4 |0 J9 r2 b3 ?- V
/ C- d9 B6 d2 k- `server {
. \) C3 |& o( B8 a8 c listen 80;- P1 ]& H- \" e1 r/ e# A, e% r
server_name example.com;8 Z1 Q5 q5 c4 H' _2 C
! [6 V0 z( D/ w6 q0 t" x! p2 _
* [0 C! o7 i$ P. b7 r
location / {$ b. `9 s6 |/ ?! p
ModSecurityEnabled on;9 L6 ]. K2 H1 K' R) x" L8 w2 n1 ~. s
ModSecurityConfig modsec_includes.conf;
- @/ ^5 i6 d3 h/ g root html;
! q- l: Z3 c" Z" f; G3 K. f2 C" ?$ ~ index index.html index.htm;8 S [; B% ]& X0 N# ?8 c$ A, L
}6 l, C- J& s3 ]3 K$ n2 |
}
7 y h% e! ?' m6 P. V使用动态模块加载的配置方法
* d5 b1 N9 ]/ k) t在需要启用Modsecurity的主机的location下面加入下面两行即可:
9 Z% j$ e8 z3 S6 ~. v0 X3 J( l: S/ Z$ r$ j5 K/ m
" e1 _0 m; Y5 c2 m; i$ Omodsecurity on;
; V7 ~/ T: F) u3 Y3 pmodsecurity_rules_file modsec_includes.conf;
5 u; m+ @- b5 A6 ^) q修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。; W* t) p0 g# K1 d: Z; d
2 e4 Q- n: `7 \# @3 d: v6 r
4 \' p( F6 m4 Q, V
$ vim /usr/local/nginx/conf/nginx.conf
; b/ W# } O/ J; E2 c$ D% ?$ z! ^$ y3 w! v
. A) ]1 v# q- z, ^0 t* ]
server {% l$ N5 W0 o! ^6 b
listen 80;
+ m2 ~. Z/ [, M* |0 k server_name localhost mike.hi-linux.com;; Z! q4 Y9 y8 y
access_log /var/log/nginx/yourdomain.log;
' M3 V6 j( r4 R, i
0 x# |2 d3 @1 A( }4 L& e
2 [: J1 ?" k) D8 S# f7 R location / {
8 F$ \$ s9 a( f. k3 T/ [, w: q3 D1 V$ B
3 a' B( l. ], f" @4 C
modsecurity on;( x$ T- O/ O' Y9 A+ y% V
modsecurity_rules_file modsec_includes.conf;1 B: P' ~- h1 e
root html;
1 W F* F k/ Q7 W/ l index index.html index.htm;
' a7 J0 H0 V" d' Y( I}( d% P* Q; u5 `; ?
}
, h5 [' y, [5 B# i验证Nginx配置文件
) ?- ?% |1 ~5 \1 R1 {' f- [$ /usr/local/nginx/sbin/nginx -t
: x: R1 X: k# I- g: m1 Mnginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok. j* r4 o: s, A' s9 W
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful* h, l! d& `" }1 q8 s$ G0 ` k' _
启动Nginx c4 K( y0 @: U( Q/ L; n1 I
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf- b: i D5 O9 m8 A
: p$ x) v3 h- r- U
测试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能够战胜更多复杂/未知/混淆的攻击模式。 / K1 T5 G K; V6 F1 X
|