APC 技術ブログ

株式会社エーピーコミュニケーションズの技術ブログです。

株式会社 エーピーコミュニケーションズの技術ブログです。

NEEDLEWORKで any any 試験の実行を検討する

始めに

先進サービス開発事業部の山岡です。

弊社製品の一つにファイアーウォールのポリシーテストを自動化するNEEDLEWORKがあります。詳細はリンクを見て頂くとして、簡単に言えばCSVに試験シナリオ(プロトコルやSrc/Dstアドレス等々)を定義しそれを実行することができるアプライアンスです。

1試験あたりにかかる時間はPass試験の場合で1つ50msほど(Drop試験の場合は1秒程度)です。人間が試験する場合は熟練したエンジニアであっても1項目あたり数分はかかることでしょう。これにより今まで時間的制約で抜粋せざるを得なかった試験を網羅することができ、工数の短縮だけでなく品質の担保にも役立ちます。

それでは究極の品質を目指して全通信パターンの試験を行った場合にどれほどの時間がかかるのでしょうか?とても気になって夜しか眠れなくなってしまったので計算してみました。

計算

 ※注:予約等は無視しています

  • 全IPアドレス: 2^32=4,294,967,296通り
  • 全ポート: 65,536通り
  • 全VLAN-ID: 4,097通り(4,096+タグVLAN無し)
  • 対応プロトコル: TCP, UDP, ICMPの3通り
  • 通信方向: In/Outの2通り

これを掛け算すると全部で 6,919,112,298,615,275,520 (691京9112兆2986億1527万5520)通りとなりました。嫌な予感しかしません

そして1試験あたり50ms(0.05秒)としてPythonインタープリタに計算させたところ

>>> ((2 ** 32) * 65535 * 4097 * 3 * 2) * 0.05 / 60 / 60 / 24 / 365
10970180585.069883

ざっくり110億年ほどかかってしまいました。流石に納期が110億年後ではどんなに高品質であっても受注は難しいでしょう。しかもこれはPass試験であることが大前提です。普通のファイアーウォールで全数試験をすると殆どがDropになるでしょうから、実際にはこの数十倍かかると思われます。

余談ですが地球が誕生したのが46億年前、宇宙が誕生したのが137億年前です [1] 。まさに天文学的スケールですね。

現実的な時間内で全数試験を行うには?

少なくとも現状のNEEDLEWORKは逐次実行で試験を行うため、並列実行するためには複数台のNEEDLEWORKと分割した試験シナリオが必要になります。それでは何台のNEEDLEWORKがあれば現実的な時間で収まるのでしょうか?ここでは24時間以内に終わることを目標とします。よって

>>> ((2 ** 32) * 65535 * 4097 * 3 * 2) * 0.05 / 60 / 60 / 24
4004115913550.5073

4兆41億1591万3551台のNEEDLEWORKがあれば24時間以内に終わらせることができそうです。但し試験対象のファイアーウォールがそのトラフィックに耐えられるかどうか、ポート数をどうやって確保するか、大量の機材を設置するスペースや必要電力等は考慮されていません。

更に4兆台のNEEDLEWORKを購入するために必要な資金を概算してみたところ、日本の一般会計予算が10万年分くらいは必要になりそうです。

試験シナリオファイルの容量

これだけ多数のパターンだと試験シナリオとなるCSVファイルの容量も無視できません。仮に1行1バイトだったとしても6.9ZB(ゼタバイト:エクサバイトの1,000倍)という極めて膨大な量になってしまいます。実際には数十~数百文字は書くでしょうから更にそれが膨れ上がります。

そういえばAWSのS3は容量無制限なので少なくともサービス仕様上は問題無く格納できるはずです。6.9ZBを1ヵ月間保管しておくと175億円、また1度ダウンロードすると917億円ほどかかるのが難点でしょうか [2] 。

余談ですがTwitterのストレージ容量は500PB程あるそうです [3] 。それを遥かに上回っていますね。

結論

ここに書かれたこと以外にもまだまだ沢山の問題があることでしょう。そしてそれら途方もない困難を乗り越えた先にあるものが「高品質なファイアーウォール」では全く割に合いません。よって非常に高速に試験ができるNEEDLEWORKといえど、全数試験は時間・資金・技術あらゆる面から全く現実的ではありません。

参考資料

Wikipedia: 地球史年表 [1]

ざっくりAWS: S3 [2]

Publickey: Twitter、数万台のHadoopクラスタとコールドストレージをGoogle Cloud Platformへ移行すると発表 [3]

Wikipedia: ゼタバイト