コンテンツにスキップ

Go (net/http and Chi)

このガイドでは、アプリケーションへの Zen Firewall by Aikido のインストールとセットアップの手順を説明します。以下の手順に従ってアプリケーションを保護してください。

問題や不具合が発生した場合は、遠慮なくサポートチャットまたは Github issues でご連絡ください。

https://github.com/AikidoSec/firewall-go

1. Zen Firewall by Aikido をインストールする

Section titled “1. Zen Firewall by Aikido をインストールする”

アプリケーションのモジュール(main を含むモジュール)内で Zen を初期化し、依存関係を更新します。

Terminal window
go run github.com/AikidoSec/firewall-go/cmd/zen-go@latest init
go mod tidy

main パッケージ内でできるだけ早く Zen を有効化します。

+import "github.com/AikidoSec/firewall-go/zen"
func main() {
+ err := zen.Protect()
+ if err != nil {
+ panic(err)
+ }
// your existing setup
}

Zen がバイナリを計装できるように、ビルドツールをインストールし toolexec を使ってビルドします。

Terminal window
go install github.com/AikidoSec/firewall-go/cmd/zen-go@latest
go build -toolexec="zen-go toolexec" -o bin/app

実行時にトークンを設定します。

Terminal window
export AIKIDO_TOKEN=AIK_RUNTIME_

2. リクエストブロックとユーザー識別を有効化する

Section titled “2. リクエストブロックとユーザー識別を有効化する”

このミドルウェアを使用して、レート制限、ユーザー識別、ブロック機能を有効化します。

Zen Firewall は攻撃をブロックするためにこのミドルウェアを必要としません。コアの攻撃防御はこれがなくても機能します。このミドルウェアは、ルートへのレート制限の設定Zen Firewallでのユーザー追跡Zen FirewallによるボットトラフィックのブロックZen Firewallによる国別トラフィックのブロックZen Firewallによる既知の脅威アクターのブロックブロックといった保護機能のために Zen が利用する追加のリクエストコンテキストを提供します。

アプリケーションがユーザーを識別しリクエストを処理する方法に合わせて、この例を調整してください。

// ...
+handler := AikidoMiddleware(mux)
// ...
+func AikidoMiddleware(next http.Handler) http.Handler {
+ return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ blockResult := zen.ShouldBlockRequest(r.Context())
+ if blockResult != nil {
+ switch blockResult.Type {
+ case "rate-limited":
+ message := "You are rate limited by Zen."
+ if blockResult.Trigger == "ip" {
+ message += " (Your IP: " + *blockResult.IP + ")"
+ }
+ http.Error(w, message, http.StatusTooManyRequests)
+ return
+ case "blocked":
+ http.Error(w, "You are blocked by Zen.", http.StatusForbidden)
+ return
+ }
+ }
+
+ next.ServeHTTP(w, r)
+ })
+}
// Setting a user:
+zen.SetUser(r.Context(), id, name)

3. Zen Firewall をドライ / 検知専用モードで起動する

Section titled “3. Zen Firewall をドライ / 検知専用モードで起動する”

検知モードを有効にしてアプリを起動します。

Terminal window
AIKIDO_BLOCK=false AIKIDO_TOKEN=AIK_RUNTIME_ go run -toolexec="zen-go toolexec" .

Aikido Zen エージェントがトークンを認識できるよう、環境変数として設定します。まだトークンをお持ちでない場合は、こちらの手順に従ってください。

Terminal window
AIKIDO_TOKEN=AIK_RUNTIME_

期待通りに動作し、リクエストをブロックしないことを確認するため、アプリをドライモードで起動することを推奨します。誤検知を避けるため、ステージング環境で2週間、Zen Firewall を運用することを推奨します。

Terminal window
AIKIDO_BLOCK=false

アプリケーションにアクセスし、いくつかの操作を行うか、いくつかのページを開いてください。Zen はアプリケーション内のルートを自動的に検出します。

Zen アプリケーションの以下のページを確認することで、エージェントが正常に動作していることを確認できます。

  • Events: 「Application started」イベントが表示されるはずです。
  • Routes: しばらくすると、アプリケーションのルートがメソッド、ルート、リクエスト数とともにここに表示され始めます。
  • Instances: Zen がインストールされているアプリケーションのアクティブなインスタンス数が表示されるはずです。

5. ダッシュボードでレート制限を設定する

Section titled “5. ダッシュボードでレート制限を設定する”

Zen Firewall ミドルウェアを追加したら、Aikido Dashboard でレート制限を設定することで、ブルートフォース攻撃からルートを保護するテストができます。

  1. 作成したアプリをクリックします。
  2. Routes タブに移動します。
  3. 制限したいルートを見つけて Setup rate limiting をクリックします。
  4. 手順に従ってレート制限を設定します(例: 1分あたり5リクエスト)。

保護とレート制限のオプションを備えた認証ルートを表示するAPIルート管理インターフェース。

POST /auth/login のレート制限を1分あたり5リクエストに設定する。

レート制限の確認

アプリを起動し、レート制限を設定したルートに1分以内に5回アクセスしてみてください。5回目の試行後、レート制限エラーが返されるはずです。

You are rate limited by Aikido firewall. (Your IP: 1.2.3.4)

おめでとうございます。Zen Firewall のインストールに成功しました。問題が発生した場合、ご不明点やご要望がある場合は、遠慮なくサポートまでご連絡ください。

Zen Firewall が提供する多くの機能を、これから探索していきましょう。

追加情報: