# Go (net/http と Chi)


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

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

[https://github.com/AikidoSec/firewall-go](https://github.com/AikidoSec/firewall-go)

## 要件

* Go 1.24以上
* net/http または Chi
* [Aikido アカウント](https://help.aikidogov.us/docs/docs-ja/getting-started/setting-up-your-account) と [Zen Firewall トークン](https://help.aikidogov.us/docs/docs-ja/zen-firewall/zen-installation-instructions/creating-an-aikido-zen-firewall-token)

## インストールと設定

{% stepper %}
{% step %}
**Aikido の Zen Firewall をインストールする**

アプリケーションモジュール（`main` を含むモジュール）で Zen を初期化し、依存関係を更新します：

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

`main` パッケージのできるだけ早い段階で Zen を有効にします：

```code-highlight language="go"
+import "github.com/AikidoSec/firewall-go/zen"

func main() {
+    err := zen.Protect()
+    if err != nil {
+        panic(err)
+    }

    // your existing setup
}
```

Zen がバイナリを計装できるように、`zen-go` を使ってビルドします：

{% code title="" %}
```bash
go tool zen-go go build -o bin/app
```
{% endcode %}

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

```bash
export AIKIDO_TOKEN=AIK_RUNTIME_
```
{% endstep %}

{% step %}
**リクエストのブロックとユーザー識別を有効にする**


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

Zen Firewall が攻撃をブロックするために、このミドルウェアは必須ではありません。中核となる攻撃防御機能はミドルウェアなしでも動作します。このミドルウェアは追加のリクエストコンテキストを提供し、Zen はそれを [レート制限](https://help.aikidogov.us/docs/docs-ja/zen-firewall/zen-features/setting-up-rate-limiting-for-routes)、[ユーザーブロック](https://help.aikidogov.us/docs/docs-ja/zen-firewall/zen-features/blocking-users-with-zen-firewall)、[ボットブロック](https://help.aikidogov.us/docs/docs-ja/zen-firewall/zen-features/blocking-bot-traffic-with-zen-firewall)、[国別ブロック](https://help.aikidogov.us/docs/docs-ja/zen-firewall/zen-features/blocking-traffic-by-country-with-zen-firewall)、[脅威アクター](https://help.aikidogov.us/docs/docs-ja/zen-firewall/zen-features/blocking-known-threat-actors-with-zen-firewall)のブロックなどの保護機能に使用します。

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

```code-highlight language="go"
// Setting a user:
+zen.SetUser(r.Context(), id, name)
```

```code-highlight language=""
// ...
+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)
+	})
+}
```
{% endstep %}

{% step %}
**Zen Firewall をドライ / 検出専用モードで起動する**

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

```bash
AIKIDO_BLOCK=false AIKIDO_TOKEN=AIK_RUNTIME_ go tool zen-go go run .
```


Aikido Zen エージェントがトークンを読み取れるように、トークンを環境変数として設定してください。まだトークンをお持ちでない場合は、[こちらの手順](https://help.aikidogov.us/docs/docs-ja/zen-firewall/zen-installation-instructions/creating-an-aikido-zen-firewall-token)に従ってください。

```bash
AIKIDO_TOKEN=AIK_RUNTIME_
```

リクエストをブロックせずにアプリが期待どおりに動作することを確認するため、まずはドライモードでアプリを起動することをお勧めします。誤検知を避けるため、Zen Firewall をステージング環境で2週間実行することをお勧めします。

```bash
AIKIDO_BLOCK=false
```

{% hint style="info" %}
`AIKIDO_DEBUG=true` を使用するとデバッグモードが有効になり、エージェントの動作に関するより詳細な情報を確認できます。環境変数の詳細については、こちらをご覧ください: [configuration-via-environment-variables.md](https://help.aikidogov.us/docs/docs-ja/zen-firewall/zen-installation-instructions/configuration-via-environment-variables "mention")
{% endhint %}
{% endstep %}

{% step %}
**アプリをテストする**


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

{% hint style="info" %}
Zen は 10 分ごとに Aikido へデータを送信します
{% endhint %}

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

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

<figure><img src="https://help.aikidogov.us/_assets/c2caef7203b6/Screenshot-2025-06-23-at-10.08.35.png" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
**ダッシュボードでレート制限を設定する**


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

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

![認証ルートと保護およびレート制限のオプションを表示している API ルート管理画面。](https://help.aikidogov.us/_assets/5c97a4dd85f0/Screenshot-2025-10-30-at-10.38.17.png)

![POST /auth/login のレート制限を 1 分あたり 5 リクエストに設定。](https://help.aikidogov.us/_assets/a8c11e989a3b/ucarecdn-34b1af76-facb-4b6d-9c87-155236236b8f.png)

**レート制限の確認**

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

```
You are rate limited by Aikido firewall. (Your IP: 1.2.3.4)
```
{% endstep %}

{% step %}
**次のステップ**


Zen Firewall のインストールが完了しました。問題が発生した場合や、ご不明な点、機能のご要望がある場合は、お気軽にサポートまでお問い合わせください。

Zen Firewall が提供するさまざまな機能をぜひご覧ください：

* [blocking-bot-traffic-with-zen-firewall.md](https://help.aikidogov.us/docs/docs-ja/zen-firewall/zen-features/blocking-bot-traffic-with-zen-firewall "mention")
* [blocking-tor-traffic-with-zen-firewall.md](https://help.aikidogov.us/docs/docs-ja/zen-firewall/zen-features/blocking-tor-traffic-with-zen-firewall "mention")
* [blocking-users-with-zen-firewall.md](https://help.aikidogov.us/docs/docs-ja/zen-firewall/zen-features/blocking-users-with-zen-firewall "mention")
* [blocking-known-threat-actors-with-zen-firewall.md](https://help.aikidogov.us/docs/docs-ja/zen-firewall/zen-features/blocking-known-threat-actors-with-zen-firewall "mention")
* [blocking-traffic-by-country-with-zen-firewall.md](https://help.aikidogov.us/docs/docs-ja/zen-firewall/zen-features/blocking-traffic-by-country-with-zen-firewall "mention")
* [setting-up-rate-limiting-for-routes.md](https://help.aikidogov.us/docs/docs-ja/zen-firewall/zen-features/setting-up-rate-limiting-for-routes "mention")
* [monitor-outbound-domains.md](https://help.aikidogov.us/docs/docs-ja/zen-firewall/zen-features/monitor-outbound-domains "mention")

その他の情報：

* [how-zen-works-performance-reliability.md](https://help.aikidogov.us/docs/docs-ja/zen-firewall/miscellaneous/how-zen-works-performance-reliability "mention")
* [blocking-vs-detection-mode-in-zen-firewall.md](https://help.aikidogov.us/docs/docs-ja/zen-firewall/zen-features/blocking-vs-detection-mode-in-zen-firewall "mention")
* [understanding-your-zen-statistics.md](https://help.aikidogov.us/docs/docs-ja/zen-firewall/zen-features/understanding-your-zen-statistics "mention")
{% endstep %}
{% endstepper %}
