找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 10286|回复: 0

利用ModSecurity在Nginx上构建WAF

[复制链接]
发表于 2017-10-19 17:34:51 | 显示全部楼层 |阅读模式
ModSecurity原本是Apache上的一款开源WAF模块,可以有效的增强Web安全性。目前已经支持Nginx和IIS,配合Nginx的灵活和高效可以打造成生产级的WAF,是保护和审核Web安全的利器。' l# J! H+ z0 R$ P& J4 l$ m

- W5 U' N. k! D+ u/ L  l( j1 X7 g1 b) R
在这篇文章中,我们将学习配置ModSecurity与OWASP的核心规则集。2 c' d- A- e1 Q5 ]
* ^) Y6 F  s( i# z7 I. o
  {' h9 V5 @' H: Z$ w
什么是ModSecurity1 P& o3 g( t0 f1 N' q
ModSecurity是一个入侵侦测与防护引擎,它主要是用于Web应用程序,所以也被称为Web应用程序防火墙(WAF)。它可以作为Web服务器的模块或是单独的应用程序来运作。ModSecurity的功能是增强Web Application 的安全性和保护Web application以避免遭受来自已知与未知的攻击。8 a) l% w( o/ a8 ?( [" A
* y* b4 F' l" p( }8 N
2 {- R6 M* I; X6 F" R
ModSecurity计划是从2002年开始,后来由Breach Security Inc.收购,但Breach Security Inc.允诺ModSecurity仍旧为Open Source,并开放源代码给大家使用。最新版的ModSecurity开始支持核心规则集(Core Rule Set),CRS可用于定义旨在保护Web应用免受0day及其它安全攻击的规则。/ b( W) \% s+ V- C
: W  W  [3 }1 d% p

9 J# h' r4 |9 z  w. ]ModSecurity还包含了其他一些特性,如并行文本匹配、Geo IP解析和信用卡号检测等,同时还支持内容注入、自动化的规则更新和脚本等内容。此外,它还提供了一个面向Lua语言的新的API,为开发者提供一个脚本平台以实现用于保护Web应用的复杂逻辑。
# c7 A! T+ ~$ G. G, ]  j9 L+ m$ l) R& z! T5 c5 b5 k7 y& L% C

& e+ M  k; o3 P官网: https://www.modsecurity.org/
+ {9 `/ r- B: Y
% s0 m5 C( {+ f: |; _
$ x9 @1 y: |6 g5 N4 v; N* Z' y' j什么是OWASP CRS$ u+ y: x- n" H: D# L; U! j0 S
OWASP是一个安全社区,开发和维护着一套免费的应用程序保护规则,这就是所谓OWASP的ModSecurity的核心规则集(即CRS)。ModSecurity之所以强大就在于OWASP提供的规则,我们可以根据自己的需求选择不同的规则,也可以通过ModSecurity手工创建安全过滤器、定义攻击并实现主动的安全输入验证。  j& U( t  M( b; ?7 C2 J

" z. v9 o" n! L: @4 }
/ A# V" p" M$ }  ~4 }5 t1 H; fModSecurity核心规则集(CRS)提供以下类别的保护来防止攻击。
7 C3 l- w" w/ W& N3 k9 j/ I8 h% X2 C
. A: |, A% N% R$ a. M: `6 j- J3 i- B
HTTP Protection(HTTP防御)
" c2 e6 X$ |0 p: NHTTP协议和本地定义使用的detectsviolations策略。& U$ U+ \3 v5 o3 {6 m4 i. g

4 n0 |8 B& F/ B9 f& ]6 j$ t" s8 K) h* x2 L  u3 ]8 s( \2 _
Real-time Blacklist Lookups(实时黑名单查询)! e$ K* x/ `9 ]
利用第三方IP名单。7 q/ |! G+ t) v- p: a6 G2 S

. a2 \9 v5 j+ N: H0 p0 W' `0 p2 q, y$ V1 m
HTTP Denial of Service Protections(HTTP的拒绝服务保护)
) I7 V3 o* ?9 Y* X防御HTTP的洪水攻击和HTTP Dos攻击。$ _/ _( O- l) X4 c4 ~8 g4 y/ I
9 @7 J5 l: M! W) q# i8 j) A0 {
* w; O/ i$ [# `5 W$ y5 O
Common Web Attacks Protection(常见的Web攻击防护)8 n2 h) v+ _" X8 f' C
检测常见的Web应用程序的安全攻击。
  C$ |0 ^6 h! A: P: n$ g% T; z, G& Y7 R
5 U* u) w. M5 M3 s4 X, o6 ]$ C4 A* [
Automation Detection(自动化检测)6 \* J9 z; E7 w: _' g1 G
检测机器人,爬虫,扫描仪和其他表面恶意活动。9 @$ e! b7 \# ~( @# i, L

  j! ~- v# d- a3 ]' h* C
7 ~! t' p7 }  c9 Y' G$ j- ^" GIntegration with AV Scanning for File Uploads(文件上传防病毒扫描)
7 l- ]  \3 i3 s5 O! b7 S/ S7 ~检测通过Web应用程序上传的恶意文件。
% g$ ]/ |6 e; F6 u$ p7 `% V  f; Z2 f& Q2 Q' Z
/ Q% Z8 O. \% ^4 ]0 U* l9 n
Tracking Sensitive Data(跟踪敏感数据)
& X3 k7 P1 f8 P1 U信用卡通道的使用,并阻止泄漏。1 X6 Q+ s; }/ }
/ s  l* a% ?  x$ ?
* s8 Z$ M- N7 A
Trojan Protection(木马防护)' u6 Z1 W- j. s, z! t
检测访问木马。
1 w  J( g% U+ ~/ e2 ]: i& n% ]
  N: j3 g  O" v" C4 w) O4 y) q' q! ?
Identification of Application Defects(应用程序缺陷的鉴定)
% b9 y3 O, w0 @$ A5 @6 b检测应用程序的错误配置警报。
% h4 t% |2 h# t+ q/ u
8 h$ m; V$ u# R: {5 o2 a# H2 H( a9 \1 }8 u$ F$ p
Error Detection and Hiding(错误检测和隐藏); H* s0 Q% {: U( y) w
检测伪装服务器发送错误消息。
) k( Z7 ]3 H0 d# B  p) b  @5 F# Q7 s" R
$ C/ C7 d. j# \" @
安装ModSecurity
4 S& s& p+ L- p" O  H软件基础环境准备+ ]. d& W+ u( x0 t7 _' P  ?
下载对应软件包  G0 B- o& e. R( D
$ cd /root
! b2 p5 X/ Y* u$ wget 'http://nginx.org/download/nginx-1.9.2.tar.gz'
# T; [0 V7 B' [9 D& H$ wget -O modsecurity-2.9.1.tar.gz https://github.com/SpiderLabs/ModSecurity/releases/download/v2.9.1/modsecurity-2.9.1.tar.gz$ D/ M- e$ @( e0 b
安装Nginx和ModSecurity依赖包
6 X* I+ O' x" W* l  y  P! o8 d+ o# BCentos/RHEL
: M+ g  p/ t/ b0 O, m3 b# ~1 e& b/ t9 K1 e$ e1 E) F
) @" W5 e' `" h- f
$ yum install httpd-devel apr apr-util-devel apr-devel  pcre pcre-devel  libxml2 libxml2-devel zlib zlib-devel openssl openssl-devel
0 j* z( H0 D" G* @9 m4 X* G" f: O4 zUbuntu/Debian; F- i/ \+ \- P$ q6 Y# E

* y; Z+ ?6 W, w. j- {
5 b7 W% {7 p, }$ 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
7 c! ?8 t! j6 _5 o  R+ I编译安装ModSecurity
4 S( g* X+ x' C# u1 CNginx加载ModSecurity模块有两种方式:一种是编译为Nginx静态模块,一种是通过ModSecurity-Nginx Connector加载动态模块。
# l, j9 J* X& r- K" R) c* U1 w5 W9 a

9 }. I0 r* @4 |9 Q方法一:编译为Nginx静态模块5 [/ n3 Z; I1 v, h  E
+ ]: O* |: M3 k' M8 E% i

$ Z, ^" Z% ]; q( b$ I3 F) \编译为独立模块(modsecurity-2.9.1)
. Q) O0 H5 C6 i: @9 ~3 `+ ~$ tar xzvf modsecurity-2.9.1.tar.gz7 K% }+ F. L, F2 ^- D3 T) Y5 x
$ cd modsecurity-2.9.1/
/ F9 ~" W( \5 o9 b, Q& T; S$ ./autogen.sh& D3 M& v8 i3 d: ?1 J
$ ./configure --enable-standalone-module --disable-mlogc
8 t! W1 d1 \3 I5 o, n, m$ make0 v, u$ Q5 f. M: l; h; ?" R5 m
编译安装Nginx并添加ModSecurity模块* N2 B) X* `7 U# H! x1 c$ r1 F
$ tar xzvf nginx-1.9.2.tar.gz' S" v& W- M9 c% N/ d8 T' D
$ cd nginx-1.9.2) U% r6 L3 [& Y+ N
$ ./configure --add-module=/root/modsecurity-2.9.1/nginx/modsecurity/0 z' D( P$ L$ w9 i4 F; [- x
$ make && make install
6 v6 g( R4 q" p' V: E, W2 f% u3 a  T方法二:编译通过ModSecurity-Nginx Connector加载的动态模块/ N& f4 X& r3 X; E0 p
1 \. |4 M5 ?; V' i2 `, P
) C  T5 N/ U, T: B& C% E) t" P
编译LibModSecurity(modsecurity-3.0)
# \' q& a( l7 {6 x: |$ cd /root9 O& ^8 }" W  X1 k1 [  D! u" L
$ git clone https://github.com/SpiderLabs/ModSecurity+ V7 h) G( `$ q, B4 \1 q
$ cd ModSecurity. |0 f2 L7 c9 r$ Z" s
$ git checkout -b v3/master origin/v3/master# E8 y5 k7 d5 u9 @! E. i" \# e1 f
$ sh build.sh
. F. T) k% H7 D2 A$ git submodule init. A) b( h& v6 g2 k
$ git submodule update/ h8 r% u5 E5 v3 Y% D  S. V
$ ./configure
9 T% [& e) H7 t$ make8 L3 d; n) G/ c. N3 N: x
$ make install5 j# K" d( l' o1 a
LibModSecurity会安装在 /usr/local/modsecurity/lib 目录下。
/ w4 @! O! l# k% H2 @4 ]  i) D4 _+ o7 \# `: n

# X/ s' b. h2 f5 G$ ls /usr/local/modsecurity/lib0 F8 K7 Y" p- X+ {! p! e7 c
libmodsecurity.a  libmodsecurity.la  libmodsecurity.so  libmodsecurity.so.3  libmodsecurity.so.3.0.0/ b. m4 \4 d# W6 D! I
编译安装Nginx并添加ModSecurity-Nginx Connector模块% e8 ?/ Q  }' c7 L9 S2 |  ^: a
使用ModSecurity-Nginx模块来连接LibModSecurity( x; f# ?' W- N( _: M

9 a8 [0 A) u$ C
# B+ D8 J/ E: N- W6 h$ cd /root
1 a7 b/ Q7 l  `! E! H: U$ git clone https://github.com/SpiderLabs/ModSecurity-nginx.git modsecurity-nginx5 F0 j0 O$ ]* H/ ]
$ tar xzvf nginx-1.9.2.tar.gz
- D9 i9 K0 x+ `* h  o$ j+ B8 p8 m$ cd nginx-1.9.2
8 p' ?2 t+ f. N+ s  |$ ./configure --add-module=/root/modsecurity-nginx
/ u( D# C2 y, X8 a$ make' D1 `  T" ?+ W3 x( S4 [$ r5 H7 K
$ make && make install
. I* ^# r: D6 z* A) H0 D1 [添加OWASP规则5 q* P$ T& j9 q
ModSecurity倾向于过滤和阻止Web危险,之所以强大就在于规则。OWASP提供的规则是社区志愿者维护的被称为核心规则CRS,规则可靠强大,当然也可以自定义规则来满足各种需求。
" d2 R/ q% n  r$ ^. o% F: s' L, S6 }
# l* J# l1 ~& E. l9 t. H* p$ V2 ~6 L, D' d
下载OWASP规则并生成配置文件" Y9 p; j/ O0 P$ [
$ git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git( c! P; N) E+ w) ^1 ?, r5 E; O6 d
$ cp -rf owasp-modsecurity-crs  /usr/local/nginx/conf/1 P& k1 J7 B; b# W! r
$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
4 M/ K) O2 |$ s, J# W6 K$ b$ cp crs-setup.conf.example  crs-setup.conf
' q! w' j$ \! |; {, N! n+ i配置OWASP规则, V% ?  i0 c% ~, I# K, m6 H& W6 ]
编辑crs-setup.conf文件: T  d5 s2 z7 }: ]

, O9 q: E& y0 S" {& }! |, Y# V: p& K* l; r8 {" j& h8 n; x! O/ W
$ sed -ie 's/SecDefaultAction "phase:1,log,auditlog,pass"/#SecDefaultAction "phase:1,log,auditlog,pass"/g' crs-setup.conf! _* a/ y1 e, p) ]5 k4 @5 Z- _, G
$ sed -ie 's/SecDefaultAction "phase:2,log,auditlog,pass"/#SecDefaultAction "phase:2,log,auditlog,pass"/g' crs-setup.conf
3 J/ A. l% N& T) ?$ sed -ie 's/#.*SecDefaultAction "phase:1,log,auditlog,deny,status:403"/SecDefaultAction "phase:1,log,auditlog,deny,status:403"/g' crs-setup.conf- ~7 {5 n* G7 w- l1 \) H. u
$ sed -ie 's/# SecDefaultAction "phase:2,log,auditlog,deny,status:403"/SecDefaultAction "phase:2,log,auditlog,deny,status:403"/g' crs-setup.conf2 E1 Y5 A8 L* n/ s. [4 a9 J
默认ModSecurity不会阻挡恶意连接,只会记录在Log里。修改SecDefaultAction选项,默认开启阻挡。* \+ Q, B7 p5 G

! P( D5 ^4 C3 s6 Q0 C$ u
/ _1 A2 L) G* U  E  V4 c  u启用ModSecurity模块和CRS规则
" F, q/ K' p4 e3 P( K0 k复制ModSecurity源码目录下的modsecurity.conf-recommended和unicode.mapping到Nginx的conf目录下,并将modsecurity.conf-recommended重新命名为modsecurity.conf。
6 A# `% l/ @/ k+ Y% {2 x
3 k1 j/ i% Q: v% B- y8 p3 }6 N& R3 [) A( Y& U- a
modsecurity.conf-recommended是ModSecurity工作的主配置文件。默认情况下,它带有.recommended扩展名。要初始化ModSecurity,我们就要重命名此文件。1 I- o. {( a6 x( S. |
( |$ Z' Z7 R( V- v
  o" _2 {4 C1 X" I. U
$ cd /root/modsecurity-2.9.1/) A! @5 n0 R1 ^0 O1 m, o/ ]: e4 G
$ cp modsecurity.conf-recommended /usr/local/nginx/conf/modsecurity.conf  
, K+ Q5 e0 P+ M+ \& _$ cp unicode.mapping  /usr/local/nginx/conf/
' ^! [) `7 q3 u$ @! g1 ]将SecRuleEngine设置为On,默认值为DetectOnly即为观察模式,建议大家在安装时先默认使用这个模式,规则测试完成后在设置为On,避免出现对网站、服务器某些不可知的影响。
5 [7 z, X& e! o% ?3 ~2 |4 n
7 ~* i% \' ~! L/ E1 k  X, `
% p) |! ]+ m! J, D$ vim /usr/local/nginx/conf/modsecurity.conf' O' ]  A- t6 t( V
SecRuleEngine On8 u, S' U$ u' l9 b1 J2 G# b  _
ModSecurity中几个常用配置说明:) t1 w! M# q8 i8 U# ^
6 {; S/ e; H2 B% X

% y3 w* ^" B# u4 w. ~. {, k1.SecRuleEngine:是否接受来自ModSecurity-CRS目录下的所有规则的安全规则引擎。因此,我们可以根据需求设置不同的规则。要设置不同的规则有以下几种。SecRuleEngine On:将在服务器上激活ModSecurity防火墙,它会检测并阻止该服务器上的任何恶意攻击。SecRuleEngine Detection Only:如果设置这个规则它只会检测到所有的攻击,并根据攻击产生错误,但它不会在服务器上阻止任何东西。SecRuleEngine Off:这将在服务器上上停用ModSecurity的防火墙。- J* K7 T! d9 D" W6 y

* ?2 |% v5 [6 J$ Z& I+ ]1 O( O9 m2 H. D' i& B8 ~
2.SecRequestBodyAccess:它会告诉ModSecurity是否会检查请求,它起着非常重要的作用。它只有两个参数ON或OFF。
* }3 f- u' A) w# `6 R( z. i7 n- S  i( w

; ]3 h' G9 n. I5 S7 o3.SecResponseBodyAccess:如果此参数设置为ON,然后ModeSecurity可以分析服务器响应,并做适当处理。它也有只有两个参数ON和Off,我们可以根据求要进行设置。, k" J9 M) U! ]5 B
5 S+ i0 k* a, ^9 a! i

5 M5 P' O! T/ J/ j4.SecDataDir:定义ModSecurity的工作目录,该目录将作为ModSecurity的临时目录使用。! ]" k% q4 _# `6 B; a' D; E& P) _. [" |# V

( u- }+ E6 U6 N1 I3 |
7 u9 Z1 b+ n% G, ~1 [) A在 owasp-modsecurity-crs/rules 下有很多定义好的规则,将需要启用的规则用Include指令添加进来就可以了。
5 U; i1 h0 h6 [8 F$ p  ?; S% G- y! y# n  H

* h0 \$ @* e; o1 W" k3.x版本CRS
7 V8 W, p7 B1 k5 K! v. }$ cd /usr/local/nginx/conf/owasp-modsecurity-crs
. _/ u( O5 U1 f, Q' |0 ~' \3 v3 O8 `# 生成例外排除请求的配置文件
1 X5 I4 m& g8 t7 I$ cp rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf" z' F( S6 g: V( y1 L1 J5 Q+ S; |
$ cp rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
, y: j$ w$ l9 @( c& P$ cp rules/*.data /usr/local/nginx/conf
: v6 y& n' u# N: F: U8 d# w为了保持modsecurity.conf简洁,这里新建一个modsec_includes.conf文件,内容为需要启用的规则。
1 z; }7 T! R2 o2 F( K3 Z$ p: ~8 j9 _5 L/ y  g5 v

) q: ~  l% Y5 E; _4 \$ vim /usr/local/nginx/conf/modsec_includes.conf
0 l* {# R  l. @1 [+ T2 |: \7 G' c
0 _. ]' I  J' b! R' r" A3 o" K2 C
[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 o% O! ~! C# \- n6 p$ Z6 J2 ?0 U% z
注:考虑到可能对主机性能上的损耗,可以根据实际需求加入对应的漏洞的防护规则即可。
5 X# ^5 P  J- T6 G( a/ b1 v: J
7 E% S9 y1 M/ e8 f* O& |+ Z$ Q, k  r: T# y
配置Nginx支持Modsecurity
3 R/ q5 L5 c' Z# N启用Modsecurity
  L5 a, g1 L' i+ K2 [0 r4 {" n  y使用静态模块加载的配置方法
* ?- a) N9 N; T$ k! E% Q在需要启用Modsecurity的主机的location下面加入下面两行即可:' u- w, K2 o( }* l
  \* S6 j, H8 t7 [5 s

# \1 ^# T, L- o2 FModSecurityEnabled on;
6 o! Y1 U% B0 \1 c. V  oModSecurityConfig modsec_includes.conf;
9 z# u6 d6 Q# x8 x% q5 d6 h修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。
) W7 [" O0 d. _- L% K! \5 S
6 h7 i; E; M2 V, A! R" l
+ m* Q* K( b3 o6 O$ M2 X$ vim /usr/local/nginx/conf/nginx.conf. `% f, a+ P3 P) g

; r6 }  ]8 ?1 F) ~  w; X0 B8 i6 h" l- O0 Q+ }
server {! E# j8 y" R) U- e( L& I- O  ^5 N
  listen       80;% g4 L7 J% E& b" h4 L
  server_name  example.com;; V6 A6 M0 z9 z6 L
+ m7 r& j8 t# m  X; R* s9 f$ V
' O, f; H- Q9 k# Y
  location / {' ^' A: ]. I3 s. R+ P4 }& R' I4 l
    ModSecurityEnabled on;
: [: K' E- _+ I" W6 j- s    ModSecurityConfig modsec_includes.conf;
% q# P" N; k, h6 f0 O$ Q5 \/ H    root   html;( a! M# G- |' e& E
    index  index.html index.htm;* C  `9 g9 _& e8 u" ?7 I
  }& E; E  I8 f) B2 f3 @/ F
}3 i5 a! x  M3 x( \" k+ l
使用动态模块加载的配置方法; v, Q8 d) e( A$ i% [. ^
在需要启用Modsecurity的主机的location下面加入下面两行即可:* W& X8 D8 w) V
3 V& S5 j9 v/ P* D, H
/ I& X) n5 N$ p" g7 w
modsecurity on;
; U, e2 {9 U$ P/ A; cmodsecurity_rules_file modsec_includes.conf;
2 c9 n! Q& A' M修改Nginx配置文件,在需要启用Modsecurity的location开启Modsecurity。" s2 w. q; p9 z$ Q0 |( h1 _
7 T# `. I( t; m' W5 k

- `3 K1 Y  u& }9 B* w$ vim /usr/local/nginx/conf/nginx.conf0 |$ m2 H: R7 N. |4 E/ q4 A5 D
/ ?* V! `1 m+ f; [0 Q

3 r' |/ k; P/ |0 [/ h3 U8 d  Vserver {( B# i: S+ }, W4 o0 K& b
  listen  80;
& j7 ~1 Q% r  B; [5 X/ U2 ]3 {4 B  server_name localhost mike.hi-linux.com;
4 n3 m+ ~2 M8 j$ J- T/ \  G. p; x  access_log /var/log/nginx/yourdomain.log;8 L: Q) Z' z4 e  y# e, }" Q
, U. D" u5 n" g& g  A* L7 F. i
4 ^8 y3 S: g0 y. R
  location / {
# `. }" I- s& o2 C9 R
: l, {" P3 t2 K/ R
0 \1 T0 a+ ?$ m, l$ ~  modsecurity on;+ c+ e. U6 W7 G8 R. [. c  P
  modsecurity_rules_file modsec_includes.conf;) L0 T  D! C& a! M" k
  root   html;' O3 _, D" o# p1 W
  index  index.html index.htm;
6 R- u% g( h7 [: E* \% b}/ |. C) K9 d. Y5 o7 w" v& D# `0 T
}6 @8 b3 j4 ]' C/ b+ i# |% p
验证Nginx配置文件
' i% u! W  L2 g- M; O$ /usr/local/nginx/sbin/nginx -t' [6 G$ L8 M$ `- v
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok' s# d+ [( M8 l8 Y6 Y( n3 b
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful, ^) K; S1 ]! T, F: ~# E
启动Nginx1 r4 R$ L% ^  A  J, G* `* K$ {
$ /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
* r1 ^$ ?% i& |9 R* l: B* w6 Z( E$ r4 C/ M

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


) N6 c. W' w& P" p

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2026-2-20 15:44 , Processed in 0.076423 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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