自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

基于 WebAssembly + Coraza 相結合的 Traefik v3.0 高效解決方案解析

云計算 云原生
作為領先的云原生入口控制器和網(wǎng)關代理,Traefik 憑借其出色的可擴展性、簡單性和性能,在現(xiàn)代應用架構中扮演著關鍵角色。

Hello folks,我是 Luga,今天我們來聊一下云原生網(wǎng)關 Traefik 最新技術 - WebAssembly 和 Coraza。

作為領先的云原生入口控制器和網(wǎng)關代理,Traefik 憑借其出色的可擴展性、簡單性和性能,在現(xiàn)代應用架構中扮演著關鍵角色。而在最新發(fā)布的 Traefik v3.0 版本中,引入了 WebAssembly 和 Coraza Web 應用程序防火墻(WAF) Plugin 的強強聯(lián)手,為網(wǎng)絡代理的功能和安全性帶來了前所未有的增強。

Traefik 自定義 Plugin 開發(fā)的前世恩怨

作為 Traefik 項目早期最受歡迎的功能之一,“自定義 Plugin ”的概念自 2017 年開始由用戶提出,并源于以下背景和需求:

https://github.com/traefik/traefik/issues/1336?ref=traefik.io

其實,回顧 Traefik 的發(fā)展史,在 2016 年正式對外發(fā)布后,Traefik 已經(jīng)成為了一個備受歡迎的邊緣代理解決方案,然而,基于各自業(yè)務的實際情況,一些用戶希望能夠更進一步地定制和擴展其功能。希望能夠有一種靈活的方式來添加特定的功能或自定義請求處理邏輯,以滿足他們特定應用程序的需求。這種需求的提出促使了 Traefik 團隊開始構思如何為用戶提供一種可擴展的機制來滿足這些需求。

于是,自定義 Plugin 的概念應運而生。它允許開發(fā)人員編寫自己的 Plugin,并將其與 Traefik 集成,從而實現(xiàn)對代理服務的個性化定制。這種機制為用戶提供了靈活性和可擴展性,使他們能夠根據(jù)自己的需求添加特定的功能或修改請求處理流程。

隨著時間的推移,自定義 Plugin 成為了 Traefik 項目中最受歡迎的功能之一,為用戶提供了無限的可能性,使他們能夠根據(jù)自己的應用程序需求進行定制,無論是添加新的協(xié)議支持、實現(xiàn)高級的路由邏輯還是集成其他的服務和工具。

因此,如何基于 Golang 自定義實現(xiàn)這些 Plugin ,并使其能夠絲滑運行便是當前所要解決的問題。比如,嘗試將 Go 代碼編譯成動態(tài)庫,以使得這些庫可以在運行時加載和執(zhí)行。然而,基于當時 Go 語言的生態(tài)不是特別完善不足以支撐自定義 Plugin 的需求,于是在 Traefik 團隊的共同努力下實現(xiàn)了一種優(yōu)雅的 Go 解釋器,也就是當前主流的 Yaegi 項目,隨著眾多技術人員的參與,基于 Yaegi 所開發(fā)的中間件 Plugin 在Traefik 生態(tài)中成為現(xiàn)實。Yaegi 使許多人能夠為他們的上下文開發(fā)中間件或提供商。時至今日,我們可以看到通過目錄提供的中間件 Plugin 達到一百多個,以及更多私有的 Plugin。

盡管采用了 Yaegi 解釋器,使得用 Go 語言編寫 Plugin 成為可能,但這種做法對于非 Go 開發(fā)人員來說仍有一定門檻。正因如此,一部分社區(qū)開發(fā)者在 2023 年開始著手探索構建一種全新的 Plugin 引擎,以突破現(xiàn)有 Plugin 體系的語言束縛,進一步擴展 Traefik 的靈活性和可擴展性。

因此,一種與語言無關、安全可靠、高性能等特性,成為了構建 Traefik 新一代 Plugin 體系的不二之選,那便是——WebAssembly 技術。

WebAssembly:Traefik v3.0 邊緣計算能力的基石

WebAssembly,即 縮寫為 “WASM” 作為一種革命性的低級編程模型,以其緊湊的二進制指令格式和接近原生的運行性能,引起了廣泛關注。不同于傳統(tǒng)的高級編程語言,WebAssembly 而是類似于硬件指令集的底層抽象,為 Web 帶來了全新的執(zhí)行環(huán)境。

除了在 Web 瀏覽器中運行外,WebAssembly 同樣可以借助 WebAssembly 系統(tǒng)接口(WASI)規(guī)范在操作系統(tǒng)級別的運行時運行,實現(xiàn)對底層系統(tǒng)資源如文件、網(wǎng)絡等的訪問,從而使得 WASM 成為一種通用的可移植二進制指令格式,促進了云原生、邊緣計算、AI 推理等諸多領域的應用實踐。

接下來,我們主要了解一下在實際的業(yè)務場景中, WebAssembly 如何為 Traefik Plugin 開發(fā)助力。

對 Traefik 了解的人應該都知道,作為云原生時代領先的反向代理和負載均衡器, Traefik 采用了模塊化架構設計,其請求路由管道由 Entrypoint(入口點)、Router (路由器)以及Service(服務)三大核心組件構成。

入口點作為流量的入口,定義了網(wǎng)絡層面上進入 Traefik 的監(jiān)聽端點,可以是基于 HTTP、HTTPS、TCP 等多種協(xié)議類型。傳入的請求經(jīng)過入口點后,會被路由器所接管并進行智能分發(fā)。路由器是整個路由管道的大腦,負責根據(jù)配置的規(guī)則和策略,將請求精準地轉發(fā)至能夠處理該請求的服務節(jié)點。

在請求的路由轉發(fā)過程中,Traefik 提供了中間件(Middleware)機制,使得請求在被最終定向至服務節(jié)點前,可以經(jīng)過一系列預處理或后處理操作。這些操作涉及訪問控制、請求轉換、身份驗證、速率限制等多種功能,為路由管道添加了極大的靈活性和可擴展性。

接下來,讓我們來看看如何為 Traefik 編寫 WASM Plugin,這里,我們基于 WebAssembly 編寫一個自定義 Plugin。

為了實現(xiàn)該 Plugin,Traefik 提供了多種開發(fā)語言選擇,包括 Go、C 以及 Rust 等,只要最終代碼能夠實現(xiàn)統(tǒng)一的 HTTP-Wasm 接口規(guī)范即可。在當前示例中,我們使用 Go 語言進行開發(fā),目標主要實現(xiàn)兩個核心功能:handleRequest 和 handleResponse,分別負責請求預處理和響應后處理的自定義邏輯。

具體可參考如下:

package main

import (
  "encoding/json"
  "fmt"
  "os"

  "github.com/http-wasm/http-wasm-guest-tinygo/handler"
  "github.com/http-wasm/http-wasm-guest-tinygo/handler/api"
)

// Config the plugin configuration.
type Config struct {
  Headers map[string]string `json:"headers,omitempty"`
}

func main() {
  var config Config
  err := json.Unmarshal(handler.Host.GetConfig(), &config)
  if err != nil {
    handler.Host.Log(api.LogLevelError, fmt.Sprintf("Could not load config %v", err))
    os.Exit(1)
  }

  mw, err := New(config)
  if err != nil {
    handler.Host.Log(api.LogLevelError, fmt.Sprintf("Could not load config %v", err))
    os.Exit(1)
  }
  handler.HandleRequestFn = mw.handleRequest
}

// Demo a Demo plugin.
type Demo struct{}

// New created a new Demo plugin.
func New(config Config) (*Demo, error) {
  return &Demo{}, nil
}

func (d Demo) handleRequest(req api.Request, resp api.Response) (next bool, reqCtx uint32) {
  return true, 0
}

然后,將編譯的 Plugin 加載到靜態(tài)配置中,具體可參考如下:

# Static configuration
experimental:
  localPlugins:
    example:
      moduleName: github.com/traefik/plugindemowasm

```

最后,使用我們所構建的新 Plugin 定制一個路由器,具體如下所示:

# Dynamic configuration
http:
  routers:
    my-router:
      rule: host(`demo.localhost`)
      service: service-foo
      entryPoints:
        - web
      middlewares:
        - my-plugin

  services:
   service-foo:
      loadBalancer:
        servers:
          - url: http://127.0.0.1:5000
  
  middlewares:
    my-plugin:
      plugin:
        example:
          headers:
            Foo: Bar

是不是看起來跟其他的差不多一樣簡單?

Coraza:增強Traefik v3.0 安全性的堡壘

什么是 Coraza ?

在應用程序安全防護領域,Coraza 作為一款全新的開源 Web 應用程序防火墻(WAF)項目,憑借其卓越的性能表現(xiàn)和靈活的防護能力,正嶄露頭角。

作為 OWASP (開放Web應用程序安全項目) 旗下的一員,Coraza 從底層開始采用 Go 語言精心構建,摒棄了傳統(tǒng) WAF 產(chǎn)品臃腫笨重的代碼基因,擁有極致的性能優(yōu)化和資源占用效率。在多項基準測試中,Coraza 展現(xiàn)出遠超同類產(chǎn)品的高吞吐量和低延遲特性,可以毫無懼色地應對現(xiàn)代云原生應用程序的高流量挑戰(zhàn)。

除了性能之外,Coraza 還以其出色的擴展性和規(guī)則定制能力而備受推崇,天生支持 OWASP 核心規(guī)則集(Core Rule Set),可以高效阻擋 SQL 注入、XSS、代碼執(zhí)行等多種Web攻擊威脅。同時,Coraza 也提供了一套功能強大的域特定語言 SecLang,允許用戶根據(jù)業(yè)務需求,自由定制和擴展安全規(guī)則,實現(xiàn)個性化的防護策略。因此,無論是基于標準防護還是定制防護,Coraza 都能游刃有余。

現(xiàn)在,Coraza 項目已作為 Traefik Plugin 生態(tài)的一部分,具體可參考如下:

接下來,我們來看一下 Coraza plugin 在Traefik 中的應用,具體如下:

# This config was generated by "mage updateVersion". DO NOT EDIT.

entryPoints:
  web:
    address: :80

providers:
  file:
    filename: /etc/traefik/config-dynamic.yaml

experimental:
  plugins:
    coraza:
      moduleName: github.com/jcchavezs/coraza-http-wasm-traefik
      version: v0.2.1

然后,我們需要更新動態(tài)配置中路由器的中間件部分,具體可參考如下所示:

http:
# ...
  middlewares:
    waf:
      plugin:
        coraza:
          directives:
            - SecRuleEngine On
            - SecDebugLog /dev/stdout
            - SecDebugLogLevel 9
            - SecRule REQUEST_URI "@streq /admin" "id:101,phase:1,log,deny,status:403"

為了驗證 Coraza WAF 防火墻的配置規(guī)則生效情況,我們可以通過發(fā)起簡單的測試請求,直觀地觀測到不同請求模式下的響應結果。

首先,我們使用 curl 命令行工具向本地運行的 Traefik 反向代理發(fā)起一個 HEAD 請求,嘗試訪問/admin路徑,具體可參考如下:

curl -I 'http://localhost:8080/admin'

由于之前我們在 Coraza 的規(guī)則配置中,專門為 /admin 路徑設置了攔截策略,因此,這條請求將觸發(fā) WAF 的防護規(guī)則生效。我們預期會看到 “HTTP 403 Forbidden” 的響應狀態(tài)碼被返回,表明該請求已被視為惡意訪問而被 WAF 成功攔截。

相反,如果我們嘗試訪問另一個未被防護規(guī)則覆蓋的普通路徑,例如:

curl -I 'http://localhost:8080/anything'

由于該請求路徑?jīng)]有匹配任何 WAF 防護規(guī)則,因此預計會得到 “HTTP 200 OK” 的正常響應狀態(tài)碼,請求將被成功代理至后端服務處理。

通過這一對反例的測試,我們可以直觀地感受到 Coraza WAF 防護規(guī)則的生效情況。當請求匹配特定規(guī)則時,將被實時攔截并返回對應的狀態(tài)碼或拒絕訪問提示;而對于未匹配規(guī)則的普通請求則會放行,確保合法業(yè)務流量不受影響。

綜上所述,WebAssembly 作為一種革命性的技術,使得在沙箱環(huán)境中運行各種編程語言編寫的代碼成為可能,從而大幅提升了可移植性和安全性。通過與 Coraza 結合使用,Traefik v3.0 可以利用 WASM 的優(yōu)勢,在不影響核心代理性能的前提下,動態(tài)加載和卸載安全策略,實現(xiàn)高度定制化和靈活的 WAF 防護。

這一創(chuàng)新組合不僅賦予了 Traefik 更出色的模塊化架構和可擴展性,還顯著增強了其應對各種Web攻擊的能力,從 SQL 注入、跨站腳本攻擊到機器行為檢測,全面守護應用程序的安全。而 Coraza 作為一款全功能 WAF,其高效、低延遲的特性有助于確保 Traefik 的高性能表現(xiàn)。

憑借 WASM 和 Coraza 兩大利器的加持,Traefik v3.0 正努力成為云原生時代下最值得信賴的網(wǎng)絡代理和安全防護者,為現(xiàn)代應用程序架構提供無縫整合、動態(tài)擴展和全方位保駕護航,助力企業(yè)安全可靠地向云原生時代轉型。

Reference :

  • [1] https://github.com/traefik/traefik/issues/1336?ref=traefik.io
  • [2] https://github.com/corazawaf/coraza
  • [3] https://traefik.io/blog/traefik-3-deep-dive-into-wasm
責任編輯:趙寧寧 來源: 架構驛站
相關推薦

2024-07-05 11:13:05

2024-02-19 08:04:58

網(wǎng)關云原生

2014-12-24 10:47:20

施耐德綠色數(shù)據(jù)中心

2020-02-28 16:01:54

物聯(lián)網(wǎng)資產(chǎn)跟蹤IOT

2011-09-06 10:18:52

jQuery

2017-03-07 12:42:44

騫云科技

2011-09-14 10:56:52

服務器虛擬化數(shù)據(jù)中心

2009-03-12 09:57:24

APC英飛VMware

2010-11-15 11:14:17

CCIE

2023-02-06 14:44:08

人工智能自然語言開發(fā)

2009-09-24 15:45:23

2009-07-06 13:57:35

設計方案

2023-06-21 11:27:53

2011-06-27 20:48:38

打印機解決方案

2009-09-15 21:21:54

IT服務運維管理摩卡軟件

2009-08-26 18:17:26

C#基于Object解

2010-08-05 13:20:41

Flex最優(yōu)布局

2023-11-13 15:42:07

2022-03-09 21:55:30

HBase數(shù)據(jù)入倉

2011-04-29 14:53:56

SimpleFrame
點贊
收藏

51CTO技術棧公眾號