単一パケット認証(SPA)は、2003年に使われはじめたポートノッキング手法の派生形である。Wikipediaでポートノッキングを調べると、「ファイアウォールで守られたポートを外部に向けて開く手法。前もって指定されている閉じたポートに対して一連の接続要求を行ったとき、その接続要求が正しい順序で受信されたと確認されると、ファイアウォール規則が動的に変更されて、接続要求を送ったホストが当該ポート(群)を通じて接続することを許される」と定義されている。
単一パケット認証は、ポートノッキングの概念を単一パケットにまで煮詰めたものと言える。前もって指定されたポートに一連のパケットを送るのでなく、ペイロードはただ1つのパケットであり、その中に「ノック」がコード化されている。受信されたキーが正しければ、SPAアプリケーションがファイアウォール規則を変更して、認証されたホストへのアクセスを許可する。以下では、fwknop(FireWall KNock OPerator)のインストールとテストを通じて、この認証過程をたどってみることにしよう。
fwknopは、Cypherdyne.orgのセキュリティ研究員であり、 Linux Firewalls の著者でもあるMichael Rash氏によって開発された。バイナリパッケージ、ソースパッケージ、tarballのどの形でもダウンロードできる。本稿では、アプリケーションの機能がよく理解できるよう、tarballを使ってソースからインストールする。
fwknopをダウンロードしてインストールする前に、テスト用に2台のホストを用意しておく必要がある。1台が単一パケット認証クライアントとなり、もう1台がサーバとなる。サーバとして使うマシンについては、実運用マシンでないことを十分に確認しておくこと。すべてのSSH接続を明示的に拒否するようiptablesアクセスポリシーを設定するので、実運用マシンであってはならない。また、テストプラットフォームにはローカルマシンを使うことを強くお勧めする。ファイアウォールポリシーを強化したあとでリモートサーバへのアクセスを復活させることは、ときに困難な作業になりかねない。
fwknopをダウンロードしたら、それを展開して、クライアントとサーバの両方にソースを抽出する。ほとんどのソースディストリビューションには./configureスクリプトがあって、これを通常の「configure, make, make install」手順に使うが、fwknopは異なる。install.plというPerlスクリプトを使い、これでアプリケーションをビルドし、インストールする。install.plが首尾よく実行されれば、動作可能なfwknopがインストールされているはずである。サーバへのfwknopインストールには、rootのアクセス権限が必要になる。root権限がないと、fwknopはサーバでなくクライアントとしてインストールされてしまい、単一パケット認証のテストを進めることができない。
インストールしたfwknopのセットアップが正しいかどうか、./fwknop_test.plスクリプトで確かめよう。このスクリプトは、インストール先のtestサブディレクトリにある。筆者がCentOS 4搭載のDell PowerEdge 850サーバで実行したところ、121通りのテストをすべて終えるのに約4分かかった。テスト結果はログファイルに出力されるので、その場にいつづけなくても、エラーメッセージを見逃す心配はない。
fwknopのアクセス制御ポリシーファイルはaccess.confと呼ばれ、fwknopサーバの/etc/fwknopに置かれている。今回のテストでは、認証キー以外にはデフォルトの設定を使う。/etc/fwknop/access.confを編集用に開き、ファイルの末尾までスキップする。KEY:で始まる行が見つかったら、少なくとも8文字からなる文字列をキーに指定する。本稿では"myt3stk3y!"を使った。
