开源
ModSecurity:可以提供一定的DDoS防护功能的开源Web应用程序防火墙
来源:元经纪     阅读:1344
网站管理员
发布于 2023-06-19 07:05
查看主页

概述

ModSecurity是一个基于Apache Server的开源Web应用程序防火墙,可以提供一定的DDoS防护功能。一个基于Apache Server的开源Web应用程序防火墙,可以提供一定的DDoS防护功能。

ModSecurity 是由 Trustwave 的 SpiderLabs 开发的开源跨平台 Web 应用程序防火墙 (WAF) 引擎,适用于 Apache、IIS 和 Nginx。它具有强大的基于事件的编程语言,可防止针对 Web 应用程序的一系列攻击,并允许 HTTP 流量监控、日志记录和实时分析……

Libmodsecurity 是 ModSecurity v3 项目的一个组成部分。库代码库充当 ModSecurity 连接器的接口,接收网络流量并应用传统的 ModSecurity 处理。通常,它提供加​​载/解释以 ModSecurity SecRules 格式编写的规则的功能,并将它们应用于您的应用程序通过连接器提供的 HTTP 内容。

如果您正在寻找 Apache 的 ModSecurity(又名 ModSecurity v2.x),它仍在维护中并且可用: 这里

[hidecontent type="logged" desc="隐藏内容:登录后可查看"]

这个项目和旧的 ModSecurity (v2.xx) 有什么区别?

  • 已删除所有 Apache 依赖项
  • 更高的性能
  • 新功能
  • 新架构

Libmodsecurity 是对 ModSecurity 平台的完全重写。最初设计时,ModSecurity 项目只是一个 Apache 模块。随着时间的推移,由于大众需求,该项目已经扩展到支持其他平台,包括(但不限于)Nginx 和 IIS。为了满足对额外平台支持不断增长的需求,有必要删除该项目底层的 Apache 依赖项,使其更加独立于平台。

作为这个目标的结果,我们重新设计了 Libmodsecurity,使其不再依赖于 Apache Web 服务器(在编译和运行时)。这样做的一个副作用是,在所有平台上,用户都可以期待更高的性能。此外,我们还借此机会为用户长期寻求的一些新功能奠定了基础。例如,我们希望原生支持 JSON 格式的审计日志,以及未来版本中的许多其他功能。

它不再只是一个模块。

“ModSecurity”分支不再包含传统上打包在一起的传统模块逻辑(用于 Nginx、Apache 和 IIS)。相反,此分支仅包含此项目的库部分 (libmodsecurity)。这个库被我们称为“连接器”的东西使用,这些连接器将与您的网络服务器连接,并为库提供它理解的通用格式。这些连接器中的每一个都作为一个单独的 GitHub 项目进行维护。例如,Nginx 连接器由 ModSecurity-nginx 项目 ( https://github.com/SpiderLabs/ModSecurity-nginx ) 提供。

保持这些连接器分离允许每个项目有不同的发布周期、问题和开发树。此外,这意味着当您安装 ModSecurity v3 时,您只会得到您所需要的,没有您不会使用的额外内容。

汇编

在开始编译过程之前,请确保您已准备好所有依赖项。阅读“依赖关系”小节以获取更多信息。

编译后确保您的构建/平台没有问题。我们强烈建议使用单元测试和回归测试。这些测试实用程序位于子文件夹“测试”下。

作为一个动态库,不要忘记 libmodsecurity 必须安装到操作系统将查找动态库的位置(文件夹)。

Unix(Linux、MacOS、FreeBSD 等)

在 unix 上,该项目使用 autotools 来帮助编译过程。

$ ./build.sh
$ ./configure
$ make
$ sudo make install

有关特定于发行版的构建的详细信息,请参见我们的 Wiki: Compilation Recipes

依赖关系

这个库是使用 C++11 标准用 C++ 编写的。它还使用 Flex 和 Yacc 来生成“安全规则语言”解析器。其他强制依赖项包括 YAJL,因为 ModSecurity 使用 JSON 生成日志及其测试框架,libpcre(尚未强制)用于处理 SecRules 中的正则表达式,以及 libXML2(尚未强制)用于解析 XML 请求。

所有其他依赖项都与 SecRules 或配置指令中指定的运算符相关,编译可能不需要。此类依赖项的简短列表如下:

  • 运算符 @detectXSS 和 @detectSQL 需要 libinjection
  • 指令 SecRemoteRules 需要 curl。

如果缺少这些库,ModSecurity 将在不支持运算符@detectXSS 和配置指令 SecRemoteRules 的情况下进行编译。

Library文件

库文档以 Doxygen 格式编写在代码中。要生成此文档,请使用带有提供的配置文件“doxygen.cfg”的 doxygen 实用程序,该文件位于“doc/”子文件夹中。这将生成 HTML 格式的文档,包括使用示例。

Library利用

该库提供了 C++ 和 C 接口。某些资源目前只能通过 C++ 接口使用,例如,创建自定义日志记录机制的能力(请参阅回归测试以检查这些日志记录机制的工作原理)。目标是让两个 API(C、C++)提供相同的功能,如果您发现通过特定接口缺少 API 的某个方面,请打开一个问题。

在子文件夹示例中,有关于如何使用 API 的简单示例。下面是一些说明:

使用 C++ 的简单示例

using ModSecurity::ModSecurity;
using ModSecurity::Rules;
using ModSecurity::Transaction;

ModSecurity *modsec;
ModSecurity::Rules *rules;

modsec = new ModSecurity();

rules = new Rules();

rules->loadFromUri(rules_file);

Transaction *modsecTransaction = new Transaction(modsec, rules);

modsecTransaction->processConnection("127.0.0.1");
if (modsecTransaction->intervention()) {
   std::cout << "There is an intervention" << std::endl;
}

使用 C 的简单示例

#include "modsecurity/modsecurity.h"
#include "modsecurity/transaction.h"


char main_rule_uri[] = "basic_rules.conf";

int main (int argc, char **argv)
{
    ModSecurity *modsec = NULL;
    Transaction *transaction = NULL;
    Rules *rules = NULL;

    modsec = msc_init();

    rules = msc_create_rules_set();
    msc_rules_add_file(rules, main_rule_uri);

    transaction = msc_new_transaction(modsec, rules);

    msc_process_connection(transaction, "127.0.0.1");
    msc_process_uri(transaction, "http://www.modsecurity.org/test?key1=value1&key2=value2&key3=value3&test=args&test=test");
    msc_process_request_headers(transaction);
    msc_process_request_body(transaction);
    msc_process_response_headers(transaction);
    msc_process_response_body(transaction);

    return 0;
}
 

[/hidecontent]

 
免责声明:本文为用户发表,不代表网站立场,仅供参考,不构成引导等用途。 开源
【2023年10月13日-宁波】第三届人工智能与碳中和战略融合发展论坛
探馆消逍乐|家人们谁懂啊!董宇辉消博会分享干货了
达实智能携手视源股份,“双链主”联动共创可体验的智慧空间
软板厂常用的pcb板材解析
京津冀先进算力创新应用场景积极赋能产业发展

首页

分类

定制方案

消息

我的