CosmosSDK-based chain node operations
Sentry Node Architecture Overview
バリデーターノードはデータセンターのプライベートネットワーク内に置き、パブリックIPアドレスを持たない。
セントリーノードはクラウドの複数のアベイラビリティゾーンやリージョンに分散して配置し、プライベート接続でバリデーターノードと通信する。
セントリーノードはパブリックIPを持ち、インターネット上の他のノードとピア交換(gossip)を行う。バリデーターノードのIPアドレスは外部に漏らさない。
DDoS攻撃時には、スケーリングが容易なクラウド上で新しいセントリーノードを立ち上げ、ゴシップネットワークを介してトランザクションフローに統合できる。
課題として、クラウドへの専用接続コスト、動的スケーリングの複雑さ、運用面での注意点などが挙げられている。
バリデーターノードをクラウドに置くことは、技術的な問題があるため現実的ではない。
この構成はDDoSの軽減策の1つであり、他の攻撃への対策も別途必要である。
Security best practices for a cosmos validator
rootではなく専用のユーザーでノードを管理し、SSHはパスワードではなくキーを使用する。
Prometheus、Grafana、PagerDutyなどのツールを使って、ノードとホストのメトリクスを監視し、アラートを設定する。
最小権限の原則に従い、必要なポート(P2Pの26656)以外は閉じる。RPC、GRPC、API、JSON-RPCのポートは設定ファイルやファイアウォールで制限する。
DDoS攻撃を防ぐため、バリデーターノードはセントリーノードとのみ直接通信し、外部からアクセスできないようにする。
TMKMSやHorcruxなどのツールを使って、署名鍵を保護し、マルチパーティ計算による署名を行う。
二重署名を防止するため、config.tomlのdouble_sign_check_heightを設定し、再起動時に直前のブロックへの参加をチェックする。
ただし、double_sign_check_heightだけでは不十分で、TMKMSやHorcruxによるより高度な二重署名防止メカニズムが推奨される。
Sentry Node Architecture において、Sentry Node と Validator Node の設定(config)には、以下のような重要な違いがある。これらの違いは、それぞれのノードの役割と目的を反映している。
ピア交換(Peer Exchange):
Sentry Node: pex = true に設定する。これにより、Sentry Node は他のノードとピア情報を交換し、ネットワーク上の新しいピアを発見できる。
Validator Node: pex = false に設定する。Validator Node は、Sentry Node からのみピア情報を受け取り、外部ネットワークとの直接的なピア交換は行わない。
永続的ピア(Persistent Peers):
Sentry Node: Validator Node をリストに含める。これにより、Sentry Node は常に Validator Node に接続を維持する。
Validator Node: すべての Sentry Node をリストに含める。これにより、Validator Node は Sentry Node にのみ接続し、外部ネットワークとの直接的な接続を持たない。
プライベートピア(Private Peers):
Sentry Node: Validator Node のノード ID をリストに含める。これにより、Sentry Node は Validator Node の情報を外部に漏らさないようにする。
Validator Node: 設定の必要はない。pex = false の場合、Private Peers の設定は無視される。
RPC エンドポイント:
Sentry Node: rpc.laddr = "tcp://0.0.0.0:26657" に設定し、外部からの RPC リクエストを受け付ける。
Validator Node: rpc.laddr = "tcp://127.0.0.1:26657" に設定し、ローカルホストからの RPC リクエストのみを受け付ける。
P2P 接続:
Sentry Node: p2p.laddr = "tcp://0.0.0.0:26656" に設定し、外部からの P2P 接続を受け付ける。
Validator Node: p2p.laddr = "tcp://127.0.0.1:26656" に設定し、ローカルホストからの P2P 接続のみを受け付ける。
ポート設定:
Sentry Node: 必要なポート(P2P, RPC, Prometheus など)を開放し、外部からのアクセスを許可する。
Validator Node: 最小限のポート(P2P のみなど)のみを開放し、外部からのアクセスを制限する。