Linux下用nginx和naxsi搭建web防火墙

2023-05-16

Linux下用nginx和naxsi搭建web防火墙

  • Naxsi

Naxsi是一个开源,高性能,地位会规则,nginx的web应用程序防火墙模块,著名的web服务器和反向代理,它的目标是帮助人们保护web应用程序,对跨站脚本,SQL注入,跨站请求伪造,本地和远程文件包含漏洞。

这次就使用naxsi模块来完成WAF构建。

  • 下载Naxsi以及编译

下载:master naxsi-master.zip

编译:./configure –prefix=$TOOLDIR/openresty/openRestyDir  

--with-http_stub_status_module \

--add-module=$TOOLDIR/openResty/nginx-http-concat-master \

--add-module=$TOOLDIR/openResty/naxsi-master/naxsi_src \

--with-http_realip_module \

--with-http_ssl_module \

--with-luajit

 

gmake

gmake install

 

   ps: 这些模块其实在安装openresty的时候已经添加并且编译了,所以这一步可以省略。

 

  • 定义一个虚拟主机的安全策略

cd /open/thirdparty/openrestyDir/nginx/conf/naxsi_conf

vi mysite.rules

mysite.rules内容如下:

//开启自学习模式

#LearningMode;

//开启naxsi 

SecRulesEnabled; 

//关闭规则

#SecRulesDisabled;

//定义请求被拒的位置,nginx.conf中有相关配置

DeniedUrl "/RequestDenied";

//确定naxsi何时采取行动

# check rules  

CheckRule "$XSS >= 4" BLOCK;

CheckRule "$TRAVERSAL >= 4" BLOCK;

CheckRule "$EVADE >= 8" BLOCK;

CheckRule "$UPLOAD >= 8" BLOCK;

CheckRule "$RFI >= 8" BLOCK;

CheckRule "$SQL >= 8" BLOCK

将mysite.rules文件在nginx.conf中配置,如图:

且配置被拒请求的位置:返回403状态码

location /RequestDenied {

        return 403;

    }

 

四、添加naxsi核心配置naxsi_core.rules

在nginx.conf中添加naxsi的核心配置: 

  • 白名单规则配置

这是这次用到的白名单规则,我们可以根据自身的要求添加白名单规则,然后将规则include到server中的location中。

总结:

在查阅了一些资料后,我对naxsi的理解就是,帮助我们抵挡一些不合法的请求或者攻击,可以帮我们过滤某些请求。而这其中最重要的就是mysite.rules、naxsi_white.rules文件,他们都属于防火墙中的规则,mysite.rules文件是对不合法请求的处理,而naxsi_white.rules则是规定什么url合法的(当然不限于url,还有参数,get和post等),哪些是不合法的。这些文件都在nginx.conf文件中include,这样在nginx启动的时候,就会加载到这些配置文件了,也会对请求做出处理。

步骤如下:

解析http请求:协议解析模块,也就是白名单规则。

匹配规则:规则检测模块,匹配规则库

防御动作:return 403等

日志记录:将过滤日志记录下来

     

    

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux下用nginx和naxsi搭建web防火墙 的相关文章

  • 如何在位置中使用 Nginx Regexp

    Web 项目将静态内容放入 some content img 文件夹中 url规则为 img some md5 但文件夹中的位置 content img 前两位数字 Example url example com img fe5afe048
  • 不同GIT版本的GIT合并结果不同

    在不同的 GIT 版本上运行 merge 命令我们得到不同的结果 命令是 git merge no ff origin master codeline Results 版本2 1 4 gt 合并成功 版本1 7 1 gt 同一提交上的同一合
  • 编译器 libstdc++ 版本与系统版本

    我试图了解 g 如何选择它链接的 libstdc 版本 以及当库的 系统 版本不同时它意味着什么 我正在使用 gcc g 4 1 2 根据ABI 指南 http gcc gnu org onlinedocs libstdc manual a
  • 将用户添加到组但运行“id”时未反映

    R 创建了一个名为 Staff 的组 我希望能够在不以 sudo 身份启动 R 的情况下更新软件包 所以我使用以下方法将自己添加到员工中 sudo usermod G adm dialout cdrom plugdev lpadmin ad
  • libusb 和轮询/选择

    我正在使用 Linux 操作系统 想知道是否有任何文件描述符可以轮询 选择 当数据等待从 USB 设备读取时会触发这些文件描述符 我也在使用 libusb 库 但尚未找到可以使用的文件描述符 Use libusb 的轮询函数 http li
  • 错误:从上游读取响应标头时上游过早关闭连接 [uWSGI/Django/NGINX]

    我目前在用户正在进行的查询中总是得到 502 它通常返回 872 行 在 MySQL 中运行需要 2 07 然而 它返回了大量信息 每一行包含很多东西 有任何想法吗 运行 Django tastypie Rest API Nginx 和 u
  • 如何从 C 文件更改终端中的目录

    如何从 C 程序更改将在终端上生效的目录 实际上不要告诉 system 函数或 chdir 函数 这些仅适用于 C 中的进程或子 shell 假设我正在从 bash shell 执行一个 C 程序 其进程 ID 为 10223 那么 我可以
  • 如何修改s_client的代码?

    我正在玩apps s client c in the openssl源代码 我想进行一些更改并运行它 但是在保存文件并执行操作后 我的更改没有得到反映make all or a make 例如 我改变了sc usage函数为此 BIO pr
  • 访问 Linux 线程(pthreads)的本地堆栈

    我目前正在实现一个使用多线程但对总内存消耗有要求的应用程序 我希望有一个主线程执行 I O 并有几个工作线程执行计算 目前 我在主堆栈上有几个可供工作人员访问的数据结构 我使用 OpenMP 进行工作分配 由于主 工作者模式不能很好地与 O
  • 在 C 中使用 sqrtf():“未定义对‘sqrtf’的引用”

    我正在使用Linux Ubuntu 12 04 https en wikipedia org wiki Ubuntu version history Ubuntu 12 04 LTS 28Precise Pangolin 29 Precis
  • 如何真正释放 Linux 中的大页面以供新进程使用?

    真的找不到太多关于此的信息 希望有人可以提供帮助 我正在假脱机使用 100GB java 堆作为大数据缓存 为了避免与文件系统缓存等内容发生冲突 并且因为它通常性能更好 我将其分配在大页面中 我保留了 51 200 x 2MB 大页面 一切
  • Nasm 打印到下一行

    我用 nasm Assembly 编写了以下程序 section text global start start Input variables mov edx inLen mov ecx inMsg mov ebx 1 mov eax 4
  • 在键盘热插拔上加载模块

    我正在尝试学习如何为 Linux 系统编写模块和驱动程序 类似于this https unix stackexchange com questions 120839 usb kernel module does not load on de
  • Bash 中 $() 和 () 之间的区别

    当我打字时ls l echo file 支架的输出 这只是简单的回显 被获取并传递到外部ls l命令 就等于简单的ls l file 当我打字时ls l echo file 我们有错误 因为不能嵌套 内部外部命令 有人可以帮助我理解之间的区
  • 使用 MongoDB docker 镜像停止虚拟机而不丢失数据

    我已经在 AWS EC2 上的虚拟机中安装了官方的 MongoDB docker 映像 并且数据库上已经有数据 如果我停止虚拟机 以节省过夜费用 我会丢失数据库中包含的所有数据吗 在这些情况下我怎样才能让它持久 有多种选择可以实现此目的 但
  • 变量作为 bash 数组索引?

    bin bash set x array counter 0 array value 1 array 0 0 0 for number in array do array array counter array value array co
  • Linux TCP服务器:在接受连接之前读取客户端的IP地址

    Related C Winsock API如何在接受连接之前获取连接客户端IP https stackoverflow com questions 716209 c winsock api how to get connecting cli
  • 原生 Linux 应用程序可像 ResHacker 一样编辑 Win32 PE

    我想运行自动修改 dll服务 用户提交特定的 dll 我在服务器上修改它 然后用户可以下载 dll的修改版本 是否有任何本机 Linux 应用程序提供常见的 Win32 PE 修改功能 例如图标 字符串 加速器 对话等 至少提供命令行或脚本
  • Docker DNS 设置

    我尝试使用自定义网络和 dos 设置创建 docker 容器 docker网络创建 driver bridge opt com docker network bridge enable ip masquerade true opt com
  • 将 stdout 作为命令行 util 的文件名传递?

    我正在使用一个命令行实用程序 该实用程序需要传递文件名以将输出写入 例如 foo o output txt 它唯一写入的东西stdout是一条消息 表明它运行成功 我希望能够通过管道传输写入的所有内容output txt到另一个命令行实用程

随机推荐