2019-08-08 16:14:18

Nginx 安装 Naxsi 模块实现 WAF WEB应用安全防火墙的功能


Nginx 安装 Naxsi 模块实现 WAF WEB应用安全防火墙的功能

能够浏览我的这篇文章,相信你已经对 Nginx 不陌生了,所以这里就不再赘述 Nginx 的安装和配置了,我们直接从 Nginx 和 Naxsi 的集成来讲,如果你对 Nginx 还比较陌生,不知道配置文件在哪里或者不知道如何编译,那这篇文章不太适合你,还请先熟悉 Nginx 的安装和配置编译。

我为什么需要 WAF 呢?随着网站上线时间变长,各种扫描攻击也日益增多,为了能安心一点,所以就希望能有个 WAF防火墙抵挡大部分攻击扫描,但是硬件 WAF防火墙虽然好,价格也十分昂贵,中小型企业或者创业团队肯定没有资金来购买昂贵的安全设备的,但是 Nginx + Naxsi 就可以构建一个免费的软件 WAF防火墙,所以我开始尝试使用 Naxsi 来实现我的 WAF防火墙。

在开始之前,我们先了解一下都需要准备的环境(我所演示的操作均在Linux环境下):

  • 1、Nginx:http://nginx.org/en/download.html
  • 2、Naxsi:https://github.com/nbs-system/naxsi
  • 3、Linux环境我安装了:crontabs gcc gcc-c++ glibc libpcre3-dev make zlib autoconf openssl openssl-devel wget libxslt-devel gd gd-devel GeoIP GeoIP-devel pcre pcre-devel

一、下载和安装各项依赖和包

1、我使用的Centos7,所以直接使用 yum 安装:


yum -y install crontabs gcc gcc-c++ glibc libpcre3-dev make zlib autoconf openssl openssl-devel wget libxslt-devel gd gd-devel GeoIP GeoIP-devel pcre pcre-devel

2、下载 Nginx:


wget -P /usr/local/src/ http://nginx.org/download/nginx-1.16.0.tar.gz

3、下载 Naxsi:


wget -P /usr/local/src/ https://github.com/nbs-system/naxsi/archive/untagged-afabfc163946baa8036f.tar.gz

4、解压 Nginx 和 Naxsi:


tar vxf nginx-1.16.0.tar.gz
tar vxf untagged-afabfc163946baa8036f.tar.gz

注意,untagged-afabfc163946baa8036f.tar.gz 就是下载的 Naxsi,解压后就是下文中的 naxsi 文件夹

5、新建 Nginx 的工作目录


mkdir /usr/local/nginx

6、配置 Nginx 的各个模块,在此处添加 Naxsi 模块,注意下文中的 “../naxsi/” 就是 Naxsi 解压的文件夹


cd nginx-1.16.0/
./configure \
    --prefix=/usr/local/nginx \
    --user=nginx \
    --group=nginx \
    --add-module=../naxsi/naxsi_src \
    --with-http_stub_status_module\
    --with-http_gzip_static_module\
    --with-http_realip_module\
    --with-http_ssl_module

7、编译安装


make modules
make
make install

8、复制 Naxsi 的核心规则文件到指定位置


cp ../naxsi/naxsi_config/naxsi_core.rules /etc/nginx/naxsi_core.rules

二、配置 Nginx 的配置文件 nginx.conf

1、在 http 节点处


http {
	#上下文省略

	include       /etc/nginx/naxsi_core.rules; # 此处加载 naxsi 核心规则文件

	#上下文省略
}

2、在 server 节点处


server {
	#上下文省略

	# 启用Naxsi模块
	SecRulesEnabled;
	# 启用学习模式,即拦截请求后不拒绝访问,只将触发规则的请求写入日志
    #LearningMode; #enable learning mode
    LibInjectionSql; #enable libinjection support for SQLI
    LibInjectionXss; #enable libinjection support for XSS
	
	# 拒绝访问时展示的页面
	DeniedUrl "/RequestDenied";
	
	# 检查规则
	CheckRule "$SQL >= 8" BLOCK;
	CheckRule "$RFI >= 8" BLOCK;
	CheckRule "$TRAVERSAL >= 4" BLOCK;
	CheckRule "$EVADE >= 4" BLOCK;
	CheckRule "$XSS >= 8" BLOCK;
	error_log  logs/naxsi.log;

	# 配置拦截后拒绝访问时展示的页面,这里直接返回403。
    location /RequestDenied {
      return 403;
    }

	#上下文省略
}

这里说下 LearningMode 学习模式,如果把这个放出来,启用学习模式的话,就不会拦截攻击,只是把攻击请求写入 error_log 日志里面,所以我们需要它拦截攻击,就需要把这个注释掉。

三、重启 Nginx,验证是否能拦截攻击请求


/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reload

验证方法也很简单,执行类似这样的请求:

http://localhost/?id=<>

如果显示的是 403 禁止访问,那么就是成功了!


商业用途请联系作者获得授权。
版权声明:本文为博主「任霏」原创文章,遵循 CC BY-NC-SA 4.0 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://www.renfei.net/posts/1003286
评论与留言
以下内容均由网友提交发布,版权与真实性无法查证,请自行辨别。

本站有缓存策略,时间约2小时后能看到您的评论。本站使用自动审核机制,如果您的内容包含广告/谩骂/恐怖/暴力/涉政等不和谐内容将无法展示!


本站有缓存策略,时间约2小时后能看到您的评论。本站使用自动审核机制,如果您的内容包含广告/谩骂/恐怖/暴力/涉政等不和谐内容将无法展示!

关注任霏博客
扫码关注「任霏博客」微信订阅号
微博:任霏博客网
Twitter:@renfeii
Facebook:任霏
最新留言 感谢🙏,第一个问题是空格的问题应该,我逐字敲完后可以构建了.第二个问题是我docker环境的问题,docker更新为最新版后需要重置配置文件.现已经正常使用,再次感谢您的分享和您的细心解答,期待下次相遇😄 还有一个问题可以请教下吗?就是我在容器里建文件夹没有权限,su root后密码不知道是多少,sudo mkdir xxx 提示我,没有sudo命令,请问有好的解决方法吗?谢谢解答 -v 后面可以指定文件吗 我的也是报错,还有。我执行了这个:@localhost kingbase-es-v8-r3-docker % docker run -d --name kingbase -p 54321:54321 -e SYSTEM_PWD=SYSTEM -v /opt/kingbase/data:/opt/kingbase/data -v /opt/kingbase:/opt/kingbase/Server/bin kingbase:v8r3 docker: 'run -d --name kingbase -p 54321:54321 -e SYSTEM_PWD=SYSTEM -v /opt/kingbase/data:/opt/kingbase/data -v /opt/kingbase:/opt/kingbase/Server/bin kingbase:v8r3' is not a docker command. See 'docker --help' 麻烦帮忙看下,是不是我写的命令有问题,还是版本问题,谢谢啦 请问我build的时候一直报错,是资源没了吗?failed to solve with frontend dockerfile.v0: failed to create LLB definition: failed to do request: Head "https://reg-mirror.qiniu.com/v2/library/centos/manifests/7?ns=docker.io": Moved Permanently 能不能在代码那里详细解释一下啊,没完全懂呀 en 按照路径上的来操作的,但是启动时一直报:zsh: no such file or directory: docker run -d --name kingbase -p 54321:54321 -e SYSTEM_PWD=SYSTEM -v /Volumes/installation/opt/kingbase/data:/opt/kingbase/data -v /Volumes/installation/opt/kingbase/bin/license.dat:/opt/kingbase/Server/bin/license.dat kingbase:v8r3 错误 博主,怎么没有spark入门教程? 亲测可用,十分感谢。 讲得好 我想提示博主,Adblock 广告屏蔽插件被启用提示这个弹窗非常不友好。它唯一的作用是影响用户阅读,甚至厌恶了离开。没有哪个用户会为了某一个站点而关闭防广告插件,因为这对于用户是不明智也不理智的,最终的伤害是贵站。