Coraza - Web应用防火墙
Coraza 是一个开源、企业级、高性能的 Web 应用防火墙 (WAF),能够保护您的应用程序安全。它使用 Go 语言编写,支持 ModSecurity SecLang 规则集,并且 100% 兼容 OWASP Core Rule Set v4。
主要特性:
⇲ 即插即用 - Coraza 是一个替代引擎,部分兼容 TrustwaveOWASP ModSecurity Engine,并支持业界标准的 SecLang 规则集。
🔥 安全性 - Coraza 运行 OWASP CRS v4(原 Core Rule Set),保护您的 Web 应用免受广泛攻击,包括 OWASP Top Ten,且误报极少。CRS 可防御多种常见攻击类别,包括:SQL 注入 (SQLi)、跨站脚本 (XSS)、PHP 和 Java 代码注入、HTTPoxy、Shellshock、脚本/扫描器/爬虫检测以及元数据和错误泄漏。请注意,旧版本的 CRS 不兼容。
🔌 可扩展 - Coraza 核心是一个库,拥有众多集成方案,可部署本地 Web 应用防火墙实例。审计日志记录器、持久化引擎、操作符、动作——您可以创建自己的功能来无限扩展 Coraza。
🚀 高性能 - 无论是大型网站还是小型博客,Coraza 都能以极小的性能开销处理负载。查看我们的基准测试
﹡ 简单易用 - 任何人都能理解并修改 Coraza 源码。扩展新功能非常容易。
💬 社区驱动 - Coraza 是一个社区项目,欢迎贡献,所有想法都会被考虑。贡献指南请见 CONTRIBUTION 文档。
Coraza 项目为以下服务器提供了实现和插件:
Coraza 可作为 Go 程序的库使用,用于实现安全中间件或集成到现有应用和 Web 服务器中。
package main
import (
"fmt"
"github.com/corazawaf/coraza/v3"
)
func main() {
// 首先初始化我们的 waf 和 seclang 解析器
waf, err := coraza.NewWAF(coraza.NewWAFConfig().
WithDirectives(`SecRule REMOTE_ADDR "@rx .*" "id:1,phase:1,deny,status:403"`))
// 现在解析我们的规则
if err != nil {
fmt.Println(err)
}
// 然后创建一个事务并分配一些变量
tx := waf.NewTransaction()
defer func() {
tx.ProcessLogging()
tx.Close()
}()
tx.ProcessConnection("127.0.0.1", 8080, "127.0.0.1", 12345)
// 最后处理请求头阶段,可能会返回中断
if it := tx.ProcessRequestHeaders(); it != nil {
fmt.Printf("Transaction was interrupted with status %d\n", it.Status)
}
}
Examples/http-server 提供了一个练习 Coraza 的示例。
Go 构建标签可在编译时调整特定功能。这些仅适用于高级用例,不保证跨小版本的兼容性——请谨慎使用。
coraza.disabled_operators.* - 从编译中排除指定的操作符。当使用 plugins.RegisterOperator 覆盖操作符以减小二进制体积/启动开销时特别有用。coraza.rule.multiphase_evaluation - 启用规则变量在它们就绪的阶段中进行评估,而不仅仅是在规则定义的阶段。coraza.no_memoize - 禁用正则表达式和 aho-corasick 构建器的默认记忆化功能。默认启用记忆化,使用全局缓存来重用跨 WAF 实例的已编译模式,从而减少内存消耗和启动开销。在需要实时重新加载的长时间运行进程中,使用 WAF.Close()(通过 experimental.WAFCloser)在 WAF 被销毁时释放缓存条目,或者使用此标签完全退出记忆化。no_fs_access - 表示目标环境无法访问文件系统,因此不利用操作系统的文件系统相关功能(例如文件体缓冲区)。coraza.rule.case_sensitive_args_keys - 启用 ARGS 键的区分大小写匹配,使 Coraza 行为符合 RFC 3986 规范。在下个主版本中,该标签将默认启用。coraza.rule.no_regex_multiline - 禁用在 @rx 操作符中默认启用正则表达式的多行修饰符。这符合 CRS 预期行为,减少误报并可能提升性能。在下个主版本中,默认将不启用多行正则表达式。更多背景请查看此 PR。coraza.rule.mandatory_rule_id_check - 启用严格的规则 ID 检查,要求所有 SecRule/SecAction 必须包含 动作。http/e2e/ 提供了一个运行端到端测试的实用工具。可以单独针对您自己的 WAF 部署使用:
go run github.com/corazawaf/coraza/v3/http/e2e/cmd/httpe2e@main --proxy-hostport localhost:8080 --httpbin-hostport localhost:8081
或者作为库导入使用:
"github.com/corazawaf/coraza/v3/http/e2e"
作为库使用的参考,请参见 testing/e2e/e2e_test.go。需要加载的预期指令和可用标志可以在 http/e2e/cmd/httpe2e/main.go 中找到。
Coraza 开发仅需要 Go。您可以使用 mage.go 来执行开发命令。
查看命令列表:
$ go run mage.go -l
Targets:
check runs lint and tests.
coverage runs tests with coverage and race detector enabled.
doc runs godoc, access at http://localhost:6060.
format formats code in this repository.
fuzz runs fuzz tests.
lint verifies code quality.
precommit installs a git hook to run check when committing.
test runs all tests.
例如,在提交前格式化代码,运行:
go run mage.go format
欢迎贡献!请参阅 CONTRIBUTING.md 获取指导。
要报告安全问题,请点击此链接,描述问题详情、复现步骤、受影响的版本以及已知的缓解措施。
我们的漏洞管理团队将在收到报告后的 3 个工作日内回复。如果问题确认为漏洞,我们将开启安全公告。本项目遵循 90 天披露时间线。
如需捐赠,请访问捐赠站点。
首先,衷心感谢 Juan Pablo Tosso 启动了这个项目,并围绕 Coraza 建立了出色的社区!
如今我们拥有众多杰出的贡献者,没有你们,我们无法做到这一切!
由 contrib.rocks 生成。
idcoraza.rule.rx_prefilter - 将 SecRxPreFilter 指令的默认值设为 On。通过跳过输入无法匹配时的完整正则表达式,优化 @rx 操作符。此构建标签仅用于测试目的,运行时可配置请使用 SecRxPreFilter 指令,更全面的文档请参阅该功能的相关说明。