一見,外向けには一切ポートが開いていないように見えるが,実はひそかに用意されていて,特定の条件を満たしたときだけ実際にポートが開いて通信可能になる--。まるで合言葉で開く忍者屋敷の隠しトビラか何かのようなイメージですが,そんなカラクリを実際に実現するのがファイアウオールなどが備える「ポート・ノッキング」機能です。

 自宅のサーバーにインターネット経由でリモート・アクセスしたいとき,通常はブロードバンド・ルーターやファイアウォールに対して,サーバー・ソフトが待ち受けるポート番号を常に開けておくように「ポート・マッピング」(静的NATなどとも呼ばれます)の設定を施します。

 しかし,この場合,誰かが無作為にポート・スキャンをかけるとサーバーが稼働していることが簡単に分かってしまいます。特にTCPを使って通信する場合,最初の接続手順(3WAYハンドシェーク)では認証も何もできないため,特定の送信元IPアドレスからの接続のみをファイアウオールで許可するなどしていない限り,簡単にサーバーが見つかってしまいます。

 外からは自由にアクセスしたいが,自分以外にはなるべく存在を知られないようにしたい。そんなときに使えるのがポート・ノッキング機能です。ポート・ノッキングを使うと,例えばTCPの22番ポート(SSH)でサーバーを立てているとして,「直前にUDP10000番にパケットが送りつけられた場合のみ,10秒間だけTCP22番ポートを開ける」といった設定が可能になります。こうすれば,悪意のあるユーザーがポート・スキャンをかけても,TCP22番ポートが開いていることにはそう簡単には気づけないというわけです。

 Linuxの場合,標準で備わっているファイアウオール機能の「iptables」を使うことでポート・ノッキングの仕組みを実現できます。ただし,過信は禁物です。もし,誰かが途中の経路でパケットを盗聴していれば,ポート・ノッキングのための通信パターンなど簡単にバレてしまいます。必要なセキュリティ対策はすべて施した上で,さらに無用ないたずらアクセスなどを避ける意味で使うべきでしょう。