セキュリティと強化
このページには、セルフホスト型Kanera展開のセキュリティに関する決定事項がまとめられています。インターネットに何が直面しているのか、どの機密が重要なのか、サーバーが何に接続しているのか、スタックの実行後にどの設定を強化する必要があるのかについて説明します。
後で読んでください はじめに。詳細な設定は、各セクションからリンクされている他のセルフホスト ページにあります。
インターネットが直面しているもの
バンドルされたもの docker-compose.yml アプリケーション サービスを一切公開しません。何を公開するかを決定します。通常は、 compose.override.yml そしてリバースプロキシ。参照 サービスとルーティング.
| サービス | 露出 | ノート |
|---|---|---|
web | パブリック、HTTPS プロキシの背後 | ブラウザが必要とする唯一のサービス。その nginx はアプリ API とリアルタイム トラフィックを api 内部的には。 |
public-api | 任意、公開 | 統合、API リファレンス、または AI エージェント OAuth に対してのみ公開してください。 |
mcp | 任意、公開 | リモート AI クライアントが接続する必要がある場合にのみ公開します。 |
api | 内部のみ | メイン API に独自のパブリック ドメインを与えないでください。 |
worker | 内部のみ | スケジューラとアウトバウンド配信を実行します。 |
postgres | ホストループバックのみ | バインドされている 127.0.0.1:5433 デフォルトでは (POSTGRES_BIND_PORT)。リモート アクセスには SSH トンネルを使用します。 |
valkey | 内部のみ | 公開ポートはありません。 Compose ネットワーク上ではパスワードなしで実行されるため、決して公開しないでください。 |
admin-api | デフォルトではオフ | のみで始まります COMPOSE_PROFILES=admin。有効にする場合は、独自のドメインに配置します。 |
| モニタリング | デフォルトではオフ | と monitoring プロファイル、Prometheus および Grafana のバインド 127.0.0.1 次を設定しない限り: MONITORING_BIND_IP、たとえば VPN アドレスに。絶対にバインドしないでください 0.0.0.0. |
公開するサービスが少ないほど、攻撃される可能性は低くなります。 Web アプリのみを使用する展開には、単一のパブリック ドメインが必要です。
TLS とリバース プロキシ
Kanera のコンテナはプレーンな HTTP を話します。リバース プロキシまたはロード バランサー (Caddy、Traefik、nginx、またはクラウド ロード バランサー) で TLS を終了し、HTTPS 経由ですべてのパブリック ドメインを提供します。
- セット
COOKIE_SECURE=true、そして作りますWEB_ORIGINそしてCOOKIE_DOMAINパブリック HTTPS アドレスと一致します。 - Webコンテナが送信するのは、
Strict-Transport-Security次を使用:includeSubDomainsそして寿命は1年。ブラウザーはアプリ ドメインのサブドメインに対しても HTTPS を要求するため、API、MCP、および管理サブドメインは HTTPS のままにしておきます。 - また、コンテンツ セキュリティ ポリシーも送信します。
X-Frame-Options: SAMEORIGIN,X-Content-Type-Options: nosniff、および制限的なPermissions-Policy。プロキシで剥がさないでください。
レート制限とサインイン スロットルはクライアント IP を使用します。その IP は、プロキシが転送ヘッダーを上書きする場合にのみ信頼できます。
| 設定 | デフォルトの作成 | に設定します true 次の場合: |
|---|---|---|
API_TRUST_PROXY | false | アプリは、実際のクライアント IP を設定するプロキシの背後にあります。 |
PUBLIC_API_TRUST_PROXY | false | パブリック API についても同様です。 |
MCP_TRUST_PROXY | true | 放っておいてください true MCP がそのようなプロキシ経由でのみ到達可能な場合のみ。 |
ADMIN_TRUST_PROXY | true | 放っておいてください true 管理 API がそのようなプロキシ経由でのみアクセスできる場合に限ります。 |
サービスがプロキシ ヘッダーを信頼しているが、クライアントがそのヘッダーに直接アクセスできる場合、IP を偽造して IP ごとの制限を回避できます。
秘密
各シークレットを個別に生成します。たとえば、 openssl rand -hex 32、サーバーの外部だけでなく秘密のストアにも保管します。 .env。運用環境では、既知の開発プレースホルダーがまだ使用されている間、API は起動を拒否します。また、次の場合にも起動を拒否します。 SECRETS_ENCRYPTION_KEY が欠落しているか等しい JWT_SECRET、またはいつ MCP_INTERNAL_SECRET または ADMIN_JWT_SECRET 等しい JWT_SECRET.
| 秘密 | 守る | 変えたら |
|---|---|---|
POSTGRES_PASSWORD | データベースのログイン | 実行中のデータベース ユーザーも更新します。 |
JWT_SECRET | アプリセッション | 全員がサインアウトしています。これは、リークの疑いがある場合にすべてのセッションを終了する最も迅速な方法です。 |
MFA_ENCRYPTION_KEY | Authenticator のシークレットとリカバリ コード | 登録されているすべての認証システムが動作を停止します。 |
MEDIA_SIGNING_SECRET | 署名付きメディア URL | 既存のメディア リンクの解決が停止します。 |
SECRETS_ENCRYPTION_KEY | 保存された SMTP、ストレージ、Webhook、チャット宛先、および GitHub アプリの認証情報 | 保存された資格情報は復号化できないため、再度入力する必要があります。 |
MCP_INTERNAL_SECRET | 間のプライベートな交流 mcp そして public-api | 両方のサービスに同じ新しい値を設定します。実行中の MCP リクエストは失敗する可能性があります。 |
ADMIN_JWT_SECRET | 管理ポータルセッション | ポータル管理者はサインアウトしています。 |
METRICS_TOKEN | /metrics 削る | 一致するように Prometheus を更新します。 |
DB_BACKUP_ENCRYPTION_PASSPHRASE | 暗号化されたバックアップ | 古いパスフレーズを使用して作成されたバックアップには、引き続き古いパスフレーズが必要です。 |
Kanera には、保存されたデータを新しいキーで再暗号化する方法が組み込まれていません。治療する MFA_ENCRYPTION_KEY そして SECRETS_ENCRYPTION_KEY 必要になる前にローテーションを計画してください。参照 守る価値のある秘密.
メトリクスはデフォルトでオンになっていますが、 /metrics 返品 404 次まで: METRICS_TOKEN が設定されています。監視プロファイルは、次の手順を実行しないと開始を拒否します。 METRICS_TOKEN そして GRAFANA_ADMIN_PASSWORD.
アウトバウンドトラフィック
Kanera には更新チェックがありません。製品分析はデフォルトではオフになっており、Kanera Cloud のみを対象としています。サーバーは、あなた、管理者、またはユーザーが設定した宛先にのみ接続します。
- SMTP サーバー、S3 互換ストレージ、バックアップ バケット。
- 組織管理者がプッシュを有効にすると、ブラウザー プッシュ サービス。
- ワークスペース管理者によって設定されたワークスペース Webhook とチャット宛先 (Slack、Discord、Telegram、Zulip)。
- ユーザーがセットアップした個人の ntfy、Gotify、または Webhook チャネル。
ALERT_WEBHOOK_URL設定されている場合、運用アラート用。- Trello、添付ファイルをコピーするインポート中
TRELLO_API_KEY、および GitHub (GitHub アプリがリンク プレビュー用に構成されている場合)。 - Cloudflare 回転木戸、キーが設定されている場合のみ。通常のセルフホスティングでは設定を解除したままにしておきます。
1 つの宛先はオペレータによって設定されていません。 AI クライアントが MCP を呼び出すとき search.docs ツールでは、MCPサービスが次の場所から公開ドキュメントの索引をダウンロードします: https://www.kanera.app/docs-search.json そしてローカルで検索します。検索クエリは送信されません。
プライベートネットワーク
ワークスペースの Webhook とチャットの宛先では、パブリック HTTPS アドレスを使用する必要があります。 Kanera は、ループバック、プライベート、CGNAT、リンクローカルおよびクラウドのメタデータ、およびその他の予約済みアドレスを拒否します。配信時にアドレスを再度チェックし、リダイレクトに従いません。これにより、Webhook またはチャットの宛先がネットワーク内のサービスを指すことがなくなります。
個人通知チャネルは、オプトインしない限り、同じルールに従います。
KANERA_ALLOW_PRIVATE_NOTIFICATION_DESTINATIONS=true
これにより、ユーザーは ntfy、Gotify、および個人の Webhook 通知を次の宛先に送信できるようになります。 http:// およびプライベートネットワーク受信機。リンクローカル アドレスとメタデータ アドレス、マルチキャスト、およびその他の予約された範囲はブロックされたままになります。ワークスペース Webhook またはチャット宛先のルールは緩和されません。すべてのユーザーがサーバーから内部ネットワーク上のホストにリクエストを送信できることを受け入れる場合にのみ、これをオンにします。参照 電子メールと通知.
バックアップ
オプションの db-backup このサービスは、S3 互換ストレージにアップロードする前に、各 PostgreSQL ダンプを GPG 対称 AES-256 で暗号化します。マニュアル pg_dump は暗号化されていないため、サーバーから送信される前に自分で暗号化してください。アップロードされたファイルは、 kanera_uploads ボリュームは次の対象外です: db-backup 独自のバックアップが必要です。バックアップとバックアップ パスフレーズをサーバーのプライマリ ディスクから遠ざけてください。参照 ストレージとバックアップ.
アップデート
セキュリティ修正は、タグ付きの最新リリースに対して提供されます。ではなくタグ付きリリースを実行します。 main ブランチを作成し、新しいものが出荷されたら更新し、リリース ノートを読み、更新する前にバックアップしてください。構成ファイル内のサードパーティ イメージは正確なバージョンに固定されているため、レビューされた変更がなければ、ルーチンの再デプロイによって PostgreSQL や Valkey が変更されることはありません。参照 アップデートとスケーリング.
アカウントとサインイン
- パブリックサインアップを閉じます。 組織を作成した後、設定します
SIGNUPS_ENABLED=false。招待リンクは引き続き機能します。 - 電子メールアドレスを確認します。 送信メールが機能したら、設定します
EMAIL_VERIFICATION_ENABLED=true. - 認証スロットルをオンのままにします。
AUTH_RATE_LIMIT_ENABLEDデフォルトはtrue、IP ごとに 1 分あたり 10 回の試行が可能です。 - MFA が必要です。 組織管理者は、以下のすべてのユーザーに認証システムを要求できます。 設定 -> 組織 -> セキュリティ。参照 プロファイルとセキュリティ.
- セッションの有効期間。 アプリ アクセス トークンの有効期間は 5 分間、更新セッションは 10 日間です (
JWT_ACCESS_TTL,JWT_REFRESH_TTL_DAYS). - 管理ポータル。 デフォルトではオフになっており、独自のアカウントとシークレットを使用します。これを有効にすると、そのサポート セッションはターゲット組織の所有者として機能します。それぞれのログは監査ログに記録され、デフォルトでは 60 分後に自動的に期限切れになります (
SUPPORT_SESSION_TTL_MINUTES、最大でも 480)。
AIエージェントへのアクセス
暴露する mcp および OAuth ルート public-api リモート AI クライアントが必要な場合のみ。プラン ゲーティングは自己ホスト型展開には適用されないため、MCP に到達できるようになると、どのメンバーもそのメンバーの権限で動作するエージェントに接続できます。
- セット
MCP_SERVER_PUBLIC_URLそしてPUBLIC_API_OAUTH_ISSUER自分のドメインに変更します。OAuthトークンはそのMCPアドレスに紐付いており、次では拒否されます:/api/v1. - どのクライアントでも自分自身を登録できます。
/oauth/register。サインインしているユーザーが同意画面で接続を承認するまで、登録しても何も許可されません。 - 認証されたパブリック API および MCP リクエストは、デフォルトで資格情報ごとに 1 分あたり 400 に制限されます。キー試行の失敗は、IP ごとに 1 分あたり 10 回に制限されます。参照 環境リファレンス.
- MCP サービスは、各ツール呼び出しの名前、期間、結果を記録しますが、引数は記録しません。
参照 統合とAPI セットアップと エージェントの権限とセキュリティ エージェントができることについて。
脆弱性を報告する
セキュリティ上の問題については公開問題を開かないでください。電子メール [email protected] 説明、再現手順、影響するコンポーネント、標準のセルフホスト構成への影響の有無を添えてください。報告には5営業日以内に受領の連絡をします。参照: Kanera リポジトリの SECURITY.md 範囲と開示のために。