リモートワークが浸透した今、SSHサーバーをインターネットに公開しなければならない場面は多くあります。 しかし「SSHを安全に公開するなら、ポート番号を変更する」「踏み台サーバーを使う」というのは、表面的な対策に過ぎません。 本当に重要なのは、認証の仕組み自体をセキュアにすることです。 この記事では、SSHを安全に公開するために本当に大切なセキュリティ対策をご紹介します。
⇒【ロリポップ!固定IPアクセス】 月額490円、すぐに使えて最大2ヶ月間無料!
SSHの脅威:パスワード認証の危険性
SSHサーバーがインターネットに公開されると、まず第一の脅威となるのがブルートフォース攻撃です。
ブルートフォース攻撃とは、複数のパスワード候補を試し続ける攻撃手法です。 インターネットに公開されたSSHサーバーは、攻撃者から常時アクセスされる可能性があります。 実際のサーバーログには、毎日数万回のログイン試行が記録されることも珍しくありません。
パスワード認証を使用している場合、攻撃者は以下のような手法でアクセスを試みます。
- 辞書攻撃:一般的なパスワードを試す
- 総当たり攻撃:可能性のあるすべての組み合わせを試す
- クレデンシャルスタッフィング:他社の漏洩パスワードを使用する
これらの攻撃が成功すれば、攻撃者はサーバーへの完全なアクセス権を得てしまいます。
ポート変更と踏み台:表面的な対策の限界
セキュリティ担当者から「ポート番号を22番から別番号に変更しましょう」というアドバイスを受けることがあります。 確かに、SSHのデフォルトポート(22番)を避けることで、スキャンツールに引っかかる確率は低下します。 しかし、これは本当の対策ではありません。
攻撃者は、以下の方法でポート番号を特定できるからです。
- ポートスキャン:すべてのポート番号を順番にチェックして、SSHサーバーを探す
- Shoadanなどの検索エンジン:バナー情報から公開されているサーバーを特定する
つまり、ポート番号の変更は「気付かれにくくする」だけで、「攻撃されない」わけではありません。
同様に、踏み台サーバーを経由してアクセスする方法も、追加のセキュリティレイヤーを提供しますが、根本的な解決策ではありません。 踏み台サーバー自体がセキュアでなければ、その奥のサーバーも危険にさらされます。
本当に重要なセキュリティ対策:公開鍵認証
SSHを安全に公開する上で、最も重要なのは公開鍵認証の導入です。
公開鍵認証とは、暗号学的に関連付けられた2つの鍵を使用する認証方式です。
- 秘密鍵:クライアント(ユーザーのPC)に保管される、絶対に外部に知られてはいけない鍵
- 公開鍵:サーバーに登録される、公開されることを想定して設計された鍵
公開鍵認証の仕組み
公開鍵認証でのログイン手順は以下の通りです。
- ユーザーのPCから、秘密鍵を使用してデジタル署名が生成される
- デジタル署名がサーバーに送信される(秘密鍵そのものは送信されない)
- サーバーが公開鍵を使用して、署名が本物であることを検証する
- 署名が有効であれば、ログインが許可される
最大のメリットは、秘密鍵そのものがネットワーク上を行き来しないという点です。 パスワード認証では、毎回パスワードをサーバーに送信する必要があります。 これに対し、公開鍵認証では署名の有効性を検証するだけで、秘密鍵の内容は一度も送信されません。
パスワード認証との比較
| 項目 | パスワード認証 | 公開鍵認証 |
|---|---|---|
| ネットワーク送信物 | パスワード本体 | デジタル署名のみ |
| 盗聴への対策 | 必要 | 署名の再利用が不可能 |
| ブルートフォース攻撃 | 非常に脆弱 | 事実上不可能 |
| ユーザビリティ | パスワード覚える必要あり | 秘密鍵ファイルを管理 |
公開鍵認証の設定方法
では、実際に公開鍵認証を設定する手順を確認しましょう。
ステップ1:クライアント側でキーペアを生成
まず、ユーザーのPC上でキーペア(秘密鍵と公開鍵)を生成します。
ssh-keygen -t ed25519 -C “user@example.com”
このコマンドで、.ssh/id_ed25519(秘密鍵)と.ssh/id_ed25519.pub(公開鍵)が生成されます。 ed25519は最新のセキュアなアルゴリズムです。
ステップ2:公開鍵をサーバーに登録
生成した公開鍵をサーバーの~/.ssh/authorized_keysに追加します。
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@example.com
ステップ3:SSHサーバーの設定を変更
サーバー側の/etc/ssh/sshd_configでパスワード認証を無効化し、公開鍵認証のみを許可するようにします。
PasswordAuthentication no PubkeyAuthentication yes 設定を反映させるため、SSHサーバーを再起動します。
sudo systemctl restart sshd
ステップ4:秘密鍵のアクセス権限を確認
秘密鍵ファイル(~/.ssh/id_ed25519)のアクセス権限は、ユーザーだけが読み取り可能な600になっている必要があります。
chmod 600 ~/.ssh/id_ed25519
秘密鍵の管理:もう一つ大切なこと
公開鍵認証を導入しても、秘密鍵の管理がずさんであれば、セキュリティは台無しです。 秘密鍵は、パスワード同様に「絶対に盗まれてはいけない」ものです。
秘密鍵を守るためのベストプラクティス
- パスフレーズで保護:秘密鍵ファイル自体をパスフレーズで暗号化する。
- バックアップは安全に:秘密鍵のバックアップは、安全にロックされた場所に保管する。
- 複数マシンでの共有は避ける:秘密鍵を複数のマシンにコピーすると、流出リスクが増加する。
- 定期的な更新:必要に応じて秘密鍵を更新し、古い鍵を削除する。
その他の補完的なセキュリティ対策
公開鍵認証を基本としつつ、さらに強化するための対策もあります。
IP制限の併用
サーバーへのアクセス元を特定のIPアドレスに限定することで、攻撃面をさらに狭めることができます。 ファイアウォールやセキュリティグループで、許可するIPアドレスのみを指定しましょう。
踏み台サーバーの活用
リモートワーカーの場合、プロバイダの乗り換えなしに固定IPアドレスを利用できるVPNサービスを使用して、社内ネットワークに接続してからSSHにアクセスする方法も有効です。 このアプローチにより、パブリックネットワークからの直接的なアクセスを避けられます。
ログ監視
SSHのログを継続的に監視し、不審なログイン試行を検出することも重要です。
固定IPで安全なアクセス環境を実現するなら「ロリポップ!固定IPアクセス」
ロリポップ!固定IPアクセスは、今お使いのインターネット回線をそのまま活かして固定IPアドレスを利用できるVPNサービスです。 月額539円(税込)から、初期費用0円・最大2ヵ月無料で始められます。 WireGuardによる高速接続で、VPN特有の速度低下も気になりません。 IP制限をかけたい社内システムやクラウドサービスへのアクセス管理にぴったりです。 プロバイダの乗り換えも不要で、申し込んだその日から利用できます。