見出し画像

ICのノードのファイアウォール設定について


「ファイアウォール、云々に頼ることなく」という記述があったりして、ノードのファイアウォールってどうなってるんだ?と思っていたら
、やっぱり設定されていました。
hokosugiさんありがとう!

参考:

ファイアウォール設定のための新しいプロポーザルタイプ

インターネットコンピュータのノードマシンは、ネットワーク攻撃から身を守るためにファイアウォールを使用しています。現在、すべてのノードマシンは全く同じファイアウォール設定を使用しており、この設定はプロポーザル(propose-to-set-firewall-config)によってレジストリに設定されます。このファイアウォール設定は、nftables形式(ゲストOS上で動作するファイアウォールが使用する形式)のルールセットと、前者の文字列に注入されるIPv6プレフィックスのリストを定義した1つの文字列として提供されます。このリストは、ICに参加する新しいデータセンターごとに更新される。

まず、すべてのICノードが常にnftablesをファイアウォールとして使用することを前提にしている。これは将来的には事実ではなくなる可能性があり、ICプロトコルを特定の実装の詳細から切り離したいと考えています。第二に、特定のノードや特定のサブネットなどに特定のファイアウォールルールを設定する方法がない。第三に、新しいデータセンターのオンボーディングに伴い、IPプレフィックスのリストを常に更新する必要があることです。

これらの理由から、我々はプロセスを修正し、3つの新しいプロポーザルタイプを導入します。新しいプロポーザルでは、ファイアウォールルールのロジックを、それを実行するターゲットプラットフォームに依存せずに指定することができます。以下が3つの新しいプロポーザルです。

propose-to-add-firewall-rules(スコープ、ルール、ポジション、ハッシュ)

scope: これらのルールが適用されるべきスコープ。これは以下のいずれかになります。
global - すべてのノードに適用します(将来的には境界ノードにも適用します)
replica_nodes - すべての(コア)ノードマシンに適用されます。
subnet(subnet_id) - 指定されたsubnet_idに割り当てられた全てのノードに適用されます。
node(node_id) - 与えられた node_id を持つ特定のノードに適用されます。
rules: 追加されるルールのリスト
positions: これらのルールを追加する位置 (低い位置 = 高い優先度)
hash: 新しいルールを追加した後の、指定されたスコープのルールセットの SHA-256 です。これは、結果のルールセットが呼び出し元の期待通りであることを確認するために使用される。
propose-to-remove-firewall-rules(スコープ、ポジション、ハッシュ)
この提案のパラメータは、上記のものと同様であり、ここでのpositionは、ルールを削除する位置である。

propose-to-update-firewall-rules(scope, rules, positions, hash) (スコープ、ルール、ポジション、ハッシュ)
ここでもパラメータは類似しており、positionは既存のルールを新しく与えられたルールで置き換える場所を示しています。

上記の提案に加えて、ノードマシン上のファイアウォール設定を生成するコードを修正し、レジストリに保存されている論理表現からターゲットファイアウォールプラットフォーム(例えば、nftables)にルールを変換しています。さらに、レジストリに登録されているすべてのノードが、ICプロトコルで使用されるポートで他のすべてのノードと通信できるように、自動的にホワイトリスト化されます。このコードは、今後数週間のうちにリリースされるものの一部となる予定です。

一方、新しい形式でファイアウォールルールを準備し、レジストリに置くために、新しい提案タイプをすぐに使用する予定です。

ご興味のある方には、より詳細な情報を提供し、質問にお答えしたいと思います。

Yotam

この記事が気に入ったらサポートをしてみませんか?