nginx下安装配置naxsi waf防火墙

nginx下安装配置naxsi waf防火墙(附完整编译、配置)

转:http://f2ex.cn/nginx-installed-configuration-naxsi-waf/


Naxsi 是第三方 nginx 模块 ,它和 Modsecurity 都是开源 WAF ,但是它们的防御模式不同。 Naxsi 不依赖像防病毒软件这样的签名库,因此不会被“未知”攻击模式所规避,它就像是 windows 下默认的防火墙。Naxsi 和其他 WAF 之间的另一个主要区别就是仅过滤 GET 和 POST 请求。
这里写图片描述

我之前一直在用 modsecurity ,效果还不错,但是它对 nginx 支持真的不太好~.~ 。经常会产生大量错误日志,不过这个并不影响它的正常功能,只是看着揪心。让我想更换它的主要原因是 Modsecurity 经常在处理某个请求(正常或不正常)时,会突然导致 CPU 99.9% 以上,这是最不能忍受的。

我们先来简单对比下 Naxsi 和 Modsecurity :

WAFNaxsiModsecurity
Nginx 兼容性好(第三方 nginx 模块)不好(原 Apache 下的模块,Nginx 下bug较多)
防御模式简单(不依赖签名库)复杂(依赖更新规则)
白名单规则支持支持
安装难度容易一般(需要安装依赖库)
社区支持一般较好
内存占用大?不到哪去
特色 支持学习模式,可借助 nxapi/nxtool 自动分析白名单可开启只记录不阻止,但是官方没有提供分析工具。
总结Naxsi 比较灵活,所以学习成本较大,白名单规则需要自己完成。对 Nginx 支持良好,快速轻便。Modsecurity 操作简单,规则更新较快,比较占用服务器资源,对于生产环境下的 Nginx 来说是个噩梦

在日常使用中,可以发现 Modsecurity 具有非常严格的防御规则(误报挺多的),并且规则支持较好(有强大的后台?)。如果你使用 Apache 服务器,推荐使用 Modsecurity WAF。如果你使用的是 Nginx 服务器,建议先尝试使用 Naxsi 。

Centos 下编译安装 Nginx + Naxsi WAF

备份Nginx现有安装模块

首先先运行:

nginx -V

然后可以看到现有的模块,复制保存一下备用。

configure arguments: --prefix=/usr/local/nginx --user=www --group=www --with-http_stub_status_module --with-http_v2_module --with-http_ssl_module --with-ipv6 --with-http_gzip_static_module --with-http_realip_module --with-http_flv_module --with-openssl=../openssl-1.0.2h --with-pcre=../pcre-8.38 --with-pcre-jit --with-ld-opt=-ljemalloc

下载 Nginx 和 Naxsi
Naxsi 应该使用所有高于 0.8.X 的 Nginx 版本。 Naxsi 版本可以在 https://github.com/nbs-system/naxsi 这里,选择 Branch –> Tags 查看版本号。

下载Nginx和 Naxsi

Naxsi 应该使用所有高于 0.8.X 的 Nginx 版本。 Naxsi 版本可以在 https://github.com/nbs-system/naxsi这里,选择 Branch–>Tags 查看版本号。

wget http://nginx.org/download/nginx-x.x.xx.tar.gz
wget https://github.com/nbs-system/naxsi/archive/x.xx.x.tar.gz
tar xvzf nginx-x.x.xx.tar.gz 
tar xvzf naxsi-x.xx.tar.gz
cd nginx-x.x.xx/

Naxsi 不要求任何特定的依赖,它需要的 libpcrelibsslzlibgzip这些 Nginx 已经集成了。

然后编译(记得在./configure后面加上--add-module=../naxsi-x.xx/naxsi_src/和你之前备份的模块):

 ./configure --conf-path=/etc/nginx/nginx.conf --add-module=../naxsi-x.xx/naxsi_src/ \
 --error-log-path=/var/log/nginx/error.log --http-client-body-temp-path=/var/lib/nginx/body \
 --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-log-path=/var/log/nginx/access.log \
 --http-proxy-temp-path=/var/lib/nginx/proxy --lock-path=/var/lock/nginx.lock \
 --pid-path=/var/run/nginx.pid --with-http_ssl_module \
 --without-mail_pop3_module --without-mail_smtp_module \
 --without-mail_imap_module --without-http_uwsgi_module \
 --without-http_scgi_module --with-ipv6 --prefix=/usr
 make
 make install

等待编译完成。Naxsi 安装完成。


nginx/naxsi 基本配置

首先将 naxsi 目录下的 naxsi_core.rules 拷贝至 nginx.conf 所在目录。

http 部分配置

打开 nginx.conf 在 http 部分配置:

http {
 include naxsi_core.rules;  #导入 naxsi 核心规则
 ...
}

server 部分配置

在 nginx.conf 的 server 部分配置:

location / {
   #开启 naxsi
   SecRulesEnabled;
   #开启学习模式
   LearningMode;
   #定义阻止请求的位置
   DeniedUrl "/50x.html"; 
   #CheckRules, 确定 naxsi 何时采取行动
   CheckRule "$SQL >= 8" BLOCK;
   CheckRule "$RFI >= 8" BLOCK;
   CheckRule "$TRAVERSAL >= 4" BLOCK;
   CheckRule "$EVADE >= 4" BLOCK;
   CheckRule "$XSS >= 8" BLOCK;
   #naxsi 日志文件
   error_log /.../foo.log;
   ...
  }
  error_page   500 502 503 504  /50x.html;
  #This is where the blocked requests are going
  location = /50x.html {
  return 418; #I'm a teapot \o/
  }

server 完整示例配置

server {
listen 80 default;
access_log /wwwlogs/access_nginx.log combined;
root /www/site;
index index.html index.htm index.php;
location ~ [^/]\.php(/|$) {        
    SecRulesEnabled; 
    #LearningMode;     
    DeniedUrl "/RequestDenied";
    CheckRule "$SQL >= 8" BLOCK;
    CheckRule "$RFI >= 8" BLOCK;
    CheckRule "$TRAVERSAL >= 4" BLOCK;
    CheckRule "$EVADE >= 4" BLOCK;
    CheckRule "$XSS >= 8" BLOCK;    
    error_log /wwwlogs/foo.log;   
    fastcgi_pass unix:/dev/shm/php-cgi.sock;
    fastcgi_index index.php;
    include fastcgi.conf;
}
location /RequestDenied {
    return 403;
}    
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|ico)$ {
    expires 30d;
    access_log off;
    }
location ~ .*\.(js|css)?$ {
    expires 7d;
    access_log off;
    }
}

测试

测试 nginx 配置

/nginx/sbin/nginx -t

nginx: the configuration file /nginx/conf/nginx.conf syntax is ok
nginx: configuration file /nginx/conf/nginx.conf test is successful

重启 nginx

service nginx reload

防御测试
浏览器中打开 http://www.test.com/?a=<>‘ ,出现 403 错误,并且在 foo.log 中出现 NAXSI_FMT 开头的日志。恭喜你 Naxsi 启用成功。


白名单规则

Naxsi 社区提供了一些常用的白名单规则,例如 wordpress 。可以在 https://github.com/nbs-system/naxsi-rules 下载白名单规则。

然后将规则 include 到 server 内的 location 中。重启 nginx 即可。不过目前这些白名单最近的修改日期显示是1年前~.~ ,可根据自身需要添加白名单规则。

详细的白名单规则以及 Naxsi 其他支持,可参考 Naxsi WIKI

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 Windows 下安装 nginx 比较简单,可以直接从官网下载安装包并进行安装。 1. 从 nginx 官网下载 Windows 版本的安装包(http://nginx.org/en/download.html) 2. 双击安装包并依次按照安装向导的提示进行安装。 3. 安装完成后,在命令行中输入 nginx,如果能看到“nginx 已成功启动”的提示,说明 nginx 安装成功。 配置 nginx: 1. 打开 nginx 安装目录下的 conf/nginx.conf 文件。 2. 修改配置文件中的相关配置,如服务器的地址、端口号等。 3. 保存配置文件。 4. 在命令行中输入 nginx -s reload,重新加载配置文件。 注意:具体配置内容因个人需求而异。 ### 回答2: Windows下Nginx安装配置相对简单。下面是详细步骤: 1. 下载Nginx Windows版本的安装包,推荐到官网下载,地址为:http://nginx.org/en/download.html 2. 解压安装包,将解压后的文件夹重命名为nginx,并将其移动到C盘根目录。因为nginx默认会在C盘根目录寻找配置文件。 3. 进入nginx文件夹,打开conf目录下的nginx.conf文件,在开头添加如下代码,指定Nginx的运行目录: ```bash chdir c:/nginx/ ``` 4. 在nginx.conf文件中修改server块的配置,添加监听端口号和root目录,如下: ```bash server{ listen 80; server_name localhost; root html; index index.html index.htm; } ``` 这里的端口号可以根据实际需求修改,root目录则为Nginx的默认站点目录。 5. 启动nginx,在cmd命令行下输入: ```bash cd C:\nginx start nginx ``` 如果没有错误提示,则说明启动成功。 6. 在浏览器中输入localhost,如果看到Nginx的欢迎页面,则表示配置成功。 7. 关闭nginx,在cmd命令栏下输入: ```bash nginx -s stop ``` 注意:如果修改配置文件后需要重新启动Nginx,则输入: ```bash nginx -s reload ``` 总结:以上是Windows下Nginx安装配置步骤,如果需要添加虚拟主机、负载均衡等功能,在nginx.conf文件中进行对应的配置即可。 ### 回答3: Nginx是一个高性能的HTTP和反向代理服务器。在Windows操作系统中,通过安装Nginx可以实现Web服务器的搭建以及各种代理和负载平衡操作。下面是Windows下Nginx安装配置步骤。 一、下载Nginx 访问Nginx的官网,选择Windows版本的Nginx进行下载,下载后将文件解压到指定目录。 二、配置Nginx 1、进入到Nginx的目录中找到conf文件夹,这个文件夹中包含了Nginx配置文件。 2、打开nginx.conf文件,修改以下选项: 修改listen:将listen 80改为listen 8080,如果端口冲突,可以选择其他端口。 修改server_name:将server_name localhost改为server_name 你的域名,也可以使用IP地址。 修改root:将root html改为你的网站根目录。 3、将文件保存后,关闭文件。 三、启动Nginx服务 1、在cmd中进入到nginx.exe所在的文件夹中。 2、执行命令:nginx.exe -c conf/nginx.conf 提示nginx: [emerg] bind() to 0.0.0.0:80 failed (10013: An attempt was made to access a socket in a way forbidden by its access permissions),说明80端口被占用,改成其他端口即可(如8080)。 3、打开浏览器,输入localhost:8080,就可以访问Nginx搭建的Web服务器了。 总结: 以上就是在Windows操作系统下Nginx安装配置步骤。需要注意的是,配置文件中的选项对应的含义需要认真了解并修改,否则可能会造成配置错误或安全隐患。在运行之前还应当检查一下端口是否被占用,并选择一个空闲的端口,才可以正常启动Nginx服务器。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值