ポートノッキングとは、例えばSSHサービス用のポート22がデフォルトで閉じられている状態で、特定のポート(例えば1234、1111、2321)に順次パケットを送信すると、knockdサービスがそれを認識し、ファイアウォールでポート22を開いて接続を可能にするというものです。
簡単に言えば、ドアに鍵穴がなく、特定の順序でドアを押すと鍵穴が現れるという仕組みです。
一見、これは良い解決策のように見えますが、実際にはそうではありません。理由は以下の通りです。
1. 新しいポートと追加のサービス
サービス自体がポートを開いてシーケンスを受信するため、余分なポートが存在することは脆弱性を増やす要因となります。
2. シーケンスの傍受の可能性
デフォルトでは、knockdサービスは暗号化されていないため、送信されたパケットのシーケンスが傍受される可能性があります。
cryptknockのような修正版では、特定の文字列を送信して照合を行いますが、このパッケージ自体は8年間更新されていません。
3. PHPスクリプトを使った代替案
例えば、サイト用にポート443がデフォルトで開いている場合、より安全な方法としては、PHPスクリプトを使用してSSHへのアクセスを許可し、追加のサービスを必要としない方法が考えられます。
4. 追加の作業
この機能は定期的に追加の操作を必要とし、これが煩雑さを増し、結果的に作業効率が低下します。
結論として、ポートノッキングの使用は良い解決策ではありません。
5. プロキシとVPN
セキュリティと利便性を考えると、特に複数のサーバーで実装する必要がある場合、ポートノッキングは即席の方法に過ぎず、VPSを静的IPで作成し、そこからのみアクセスを許可する方が簡単で効果的です。このオプションは最善の代替手段であり、プロキシの利点については以下の記事で説明しています:
プロキシ - アクセスサーバーとして、VPSサーバーのセキュリティを強化する