コンテンツにスキップ

ポートとファイアウォール

Yagra がファイアウォールに必要とする穴は、ごくわずかです。

コアのホストが公開する TCP ポートは 2 つです。ポーラーの UDP リスナーは、有効にしたパッシブ受信の ぶんだけ開きます。それ以外 — 5 つのストアとバス — は、内部の Docker ネットワークから出ません。

外向きの接続は、機能ごとに厳密に分かれています。通知チャネルも転送先も AI プロバイダも設定して いない新規インストールは、外向きの通信を一切行いません(イメージの取得は除きます)。

ポート プロトコル サービス 備考
8080 TCP (HTTP) Core API この 1 ポートで REST API(/api/v1)、Prometheus エンドポイント(/metrics)、ヘルスプローブ(/healthz、/readyz)、/mcp で MCP のツール群を提供します(既定で有効。YAGRA_ENABLE_MCP=false にすると外れ、このルートは 404 を返します)。ホスト側ポートは YAGRA_API_PORT(compose)または YAGRA_API_ADDR(ネイティブ実行)で変更します。
443 TCP (HTTPS) WebUI nginx(rootless、コンテナポート 8080)がフロントエンドを TLS で配信します。/api と /mcp はコアへプロキシされるため、ブラウザが必要とするのはこのポートだけです。ホスト側ポートは YAGRA_WEB_PORT で変更します — deploy 構成では 443、ソースからビルドする単一ノード構成では 8443。YAGRA_WEB_TLS=off を設定しない限り、平文のリスナーはありません。
8081 TCP (HTTP) 2 台目のコア(HA オーバーレイのみ) 2 コア構成の高可用性オーバーレイは、スタンバイコアの API を別のホストポートにマップします。/readyz はリーダーでのみ 200 を返す(スタンバイは 503)ため、ロードバランサはこれを基準にルーティングできます。

UI と API は、ログインパスワード、Bearer トークン、そして暗号化される前のデバイス認証情報を運び ます。WebUI のポートは既定で HTTPS なので、前に何かを置く必要はありません。

コアの API ポートは、今も平文です。 8080 を信頼できる LAN の外へ公開しないでください。機械の クライアントを TLS の入口へ移し終えたら、YAGRA_API_BIND=127.0.0.1 で完全に閉じてください。

ポーラーのリスナーは、すべて自分で有効にするものです。各リスナーは、対応する *_BIND 変数を設定 しているときだけ存在します。compose ファイルは、既定で先頭の 3 つを設定します。無効にするには、 .env でその変数を空にしてください。

コンテナは 1024 以上のポートを開き、ホスト側の標準の小さい番号のポートへは compose が割り当てます。

コンテナポート ホスト既定 プロトコル サービス 有効化 / 無効化
1514 514(YAGRA_SYSLOG_PORT) UDP syslog 受信 YAGRA_SYSLOG_BIND
1162 162(YAGRA_TRAP_PORT) UDP SNMP トラップ受信(v1/v2c + inform) YAGRA_TRAP_BIND
2055 2055(YAGRA_FLOW_PORT) UDP NetFlow v5/v9 / IPFIX 受信 YAGRA_FLOW_BIND
6343 6343(YAGRA_SFLOW_PORT) UDP sFlow v5 受信 YAGRA_SFLOW_BIND — 既定で無効。ホスト側マッピングは存在しますが、バインドを設定するまで何も待ち受けません
9100 — TCP (HTTP) ポーラーの Prometheus /metrics(0.0.0.0:9100 固定) compose のポートマッピングでは公開されません。ポーラーをホストネットワーキング(リモート拠点構成)またはネイティブで実行したときに到達できます

ホスト側のポートは、機器がデータを送ってくるネットワークセグメントに対してだけ開けてください。

イベントとノードの結び付けは、データグラムの送信元 IP を手がかりに行います。ですからそれを 書き換えるもの(機器とポーラーの間の NAT)があると、結び付けが壊れます。ポーラーは機器の近くに 置いてください。

次のサービスは、内部の Docker ネットワークに留めてください。どの compose ファイルもこれらを公開 していませんし、スタックの外から届く必要も一切ありません。そのままにしてください。

ポート サービス 役割
5432 PostgreSQL メタデータストア(ノード、設定、ユーザー、アラート履歴)
6379 Redis ポーラーの死活・割当の一時ミラー(再構築可能)
4222 NATS コア⇄ポーラーのバス。ジョブメッセージは平文のデバイス認証情報を運ぶため、このポートを公開してよいのは TLS + 認証の設定を整えた場合 — かつリモート拠点ポーラーを運用する場合に限られます。
8428 VictoriaMetrics メトリクスの時系列ストア
9428 VictoriaLogs パッシブイベントのログストア(オプション)
8123 ClickHouse トラフィックフローストア(オプション)

機能別のアウトバウンド(egress)

Section titled “機能別のアウトバウンド(egress)”

Yagra が行いうる外向きの接続と、それを行うプロセスの一覧です。ここに挙げた接続は、どれも該当の 機能を設定するまで発生しません。

機能 宛先 プロトコル 発信元
Webhook 通知 設定した Webhook URL HTTP/HTTPS コア
メール通知 YAGRA_SMTP_HOST(既定ポート 465、implicit TLS) SMTP コア
PagerDuty 通知 events.pagerduty.com(EU アカウントは events.eu.pagerduty.com — チャネルの API URL で指定) HTTPS コア
Jira Service Management 通知 api.atlassian.com HTTPS コア
転送 — 中継先 設定したコレクタの host:port UDP、TCP、または TLS コア(アクティブ/リーダーのコア — ポーラーではありません)
転送 — BigQuery 転送先 bigquery.googleapis.com と oauth2.googleapis.com。保存鍵の代わりに Workload Identity を使う場合は GCE メタデータサーバー 169.254.169.254 も HTTPS コア
AI 根本原因分析 設定した 1 プロバイダのみ: api.anthropic.com(Claude)、generativelanguage.googleapis.com(Gemini)、または {location}-aiplatform.googleapis.com(Vertex AI — 自分の GCP プロジェクト内に留まります)。既定は無効 — プロバイダ未設定なら外向き通信はゼロです。 HTTPS コア
シングルサインオン(OIDC) お使いの ID プロバイダの issuer URL HTTPS コア
Cisco Meraki 監視 api.meraki.com(またはリージョナルの api.meraki.ca / api.meraki.cn / api.gov-meraki.com) HTTPS コア および Meraki ジョブを実行するポーラープール
分散トレーシング OTLP コレクタ(YAGRA_OTEL_ENDPOINT、例: :4318) OTLP/HTTP コアとポーラー
IP→ASN 補完データセット iptoasn.com(週次取得) HTTPS ipasn-updater サイドカー — この機能で外向き通信を必要とする唯一のコンテナ

固く閉じたコアホストのために、繰り返しておく価値のある点が 2 つあります。

  • 転送の外向き通信は、ポーラーではなくコアから出ます。 ポーラーは、受け取ったバイト列をバス 経由でコアへ運ぶだけです。中継も BigQuery へのストリーミングも、すべてコアが行います。ですから 転送先へのファイアウォールの例外が要るのは、コアのホストだけです。
  • TLS の中継先では、コレクタの証明書を検証します。基準はシステムのトラストストアと、任意で指定 した CA 証明書です。検証を無効にするフラグはありません。ですから通信を途中で覗くプロキシの後ろに ある TLS の転送先へは、接続できません。

リモート拠点とファイアウォール

Section titled “リモート拠点とファイアウォール”

リモート拠点のポーラーは、外向きのルール 1 本だけで動き、中央側に内向きのルールは要らないよう に設計されています。

  • ポーラーは、中央の NATS バス(tls://…:4222)へ自分からつなぎに行きます。中央のファイア ウォールが公開するのは、TLS と認証を付けたバスのちょうど 1 ポートだけです(YAGRA_NATS_PORT、 既定 4222)。それ以外は何も公開しません。

    ポーラーへ向けた穴は開けません。ジョブの割当、結果、イベント、フローのまとまりは、すべてこの 1 本の外向き接続の上を流れます。この接続は、拠点側でポート転送を設定しなくても NAT を越えます。

  • リモートポーラーの構成は、ホストネットワークを使います。ですからパッシブのリスナーがホスト のポートを直接開き、イベントの結び付けに使う機器の本当の送信元 IP が残ります。Docker のブリッジ は、これを書き換えてしまいます。

  • ポーラーは非 root で動きます(ファイルに付く権限は NET_RAW だけです)。ですから 1024 未満 のポートは開けません。既定の大きい番号のポート(1514、1162)を使い、機器から直接そこへ送る か、拠点のファイアウォールで標準ポートを転送してください。

Terminal window
# Redirect the standard syslog/trap ports to the poller's unprivileged listeners
iptables -t nat -A PREROUTING -p udp --dport 514 -j REDIRECT --to-ports 1514
iptables -t nat -A PREROUTING -p udp --dport 162 -j REDIRECT --to-ports 1162

転送機能が「機器が送ったとおりのもの」を中継できるよう、ポーラーは常に元のバイト列をコアへ運び ます。

そのぶんの量は次のとおりです。パッシブイベントは、バスの上で生の syslog / トラップ量のおよそ 1.5〜1.6 倍になります。受け取ったフローのデータグラムは、まとめたデータと並べて、すべて原本 のまま中継されます。

中継するフローの見込みは、1,000 flows/s あたり 0.4〜0.8 Mbit/s です。密に詰めるエクスポーター では最大 1 Mbit/s ほどになります(10,000 flows/s なら 4〜8 Mbit/s)。

WAN が落ちても、ポーラーの store-and-forward バッファがその場でのポーリングを続けます。つながり 直したときにメトリクスを埋め戻すので、リンクが不安定でも履歴は失われません。

  • 設定リファレンス — 上で挙げたバインド変数やポート マッピング変数を含む、すべての環境変数。
  • インストール — これらのマッピングの出どころである compose ファイルと、リモート拠点ポーラーのセットアップ。