sigp/discv5 v0.1.0-beta.4で追加された機能

Release v0.1.0-beta.4 · sigp/discv5 · GitHub

個人的に気になった機能のソースコードを追ったのでメモ。

同一サブネットのノード数を制限する

Adds an abstract filter to the local routing table, allowing easier ways to filter entries from being added to the table. This is currently used for creating limits on IP ranges and incoming/vs outgoing nodes.

以前から、怪しいノードを BANする機能 は実装されていたが、それとは別にIPアドレスベースでフィルタする機能が実装された。

機能

  • ルーティングテーブル内に同じ /24 サブネットに属するノード数の上限を設ける
  • テーブル単位、バケット単位で上限が設定される

実装

同じ /24 サブネットに属するノード数が制限値内であるかどうかを確認している

2種類のフィルタ

  • IpTableFilter
    • KBucketsTableで利用するフィルタ
    • 「同じ /24 サブネットに属するノード数は 10 まで」に設定されている
    • フィルタ自体には、(設定値以外は)ルーティングテーブルに関係する実装は入っていない。KBucketsTableのフィールドに保持されて使われる
  • IpBucketFilter
    • Bucketで利用するフィルタ
    • 「Bucket内に、同じ /24 サブネットに属するノード数は 2 まで」に設定されている

設定値のカスタマイズはできない

セッションに “接続方向” を持たせる

Introduces the concept of connection direction. Sessions that get established are now tagged with either being ingoing or outgoing. This can be used to limit the number of incoming connections allowed per bucket.

  • 各ノードとの間のセッションに InComming/Outgoing の方向を持たせて、フィルタリングに利用する

実装

その他の改善

Improves and adds some extra filtering logic to harden the security and limit the allowed actions of malicious actors.