はじめに (対象読者・この記事でわかること)

この記事は、ConoHa VPSを使用しているCentOS7サーバーの管理者や、セキュリティを強化したいWeb開発者・システム管理者を対象としています。特に、サーバー管理の基礎知識があり、SSH接続の基本的な使い方を理解している方を想定しています。

この記事を読むことで、CentOS7サーバーで22番ポート以外のSSH接続を設定する方法を習得できます。非標準ポートを使用することで、ブルートフォース攻撃のリスクを低減し、サーバーのセキュリティを向上させる具体的な手順を学べます。また、設定変更中に発生する可能性のある問題とその解決策についても理解できます。

前提知識

この記事を読み進める上で、以下の知識があるとスムーズです。 - Linuxコマンドの基本的な知識 - SSH接続の基本的な理解 - ConoHa VPSの基本的な操作知識 - ファイアウォールの基本的な概念

非標準ポートSSH接続の背景とメリット

標準のSSHポートである22番ポートは、インターネット上で広く知られており、ブルートフォース攻撃の一般的な対象となっています。攻撃者は自動スクリプトを用いて22番ポートに対して継続的にログイン試行を行い、パスワードを総当たりで推測しようとします。

非標準ポートを使用することには、以下のようなメリットがあります: 1. ブルートフォース攻撃の低減: 攻撃者がポート番号を特定する必要があるため、攻撃の難易度が上がります 2. ログの分離: 標準ポートと非標準ポートのアクセスログを分離でき、監視が容易になります 3. サービスの競合回避: 他のサービスが22番ポートを使用している場合でも問題なくSSHを利用できます

ConoHa VPSでCentOS7をセットアップした直後は、セキュリティを考慮して非標準ポートでのSSH接続設定を行うのがベストプラクティスです。以下では、その具体的な手順を詳しく解説します。

非標準ポートSSH接続の具体的な設定手順

ステップ1: 新しいSSHポートの選定

まず、使用する新しいポート番号を決定します。選定のポイントは以下の通りです: - 1024〜65535の範囲内で選択(1024以下のポートは特権ポートでroot権限が必要) - 既に使用されているポートではないこと - よく知られていないポートを選ぶ(例: 2222, 8022, 10022など)

ポートが使用されているか確認するには、以下のコマンドを使用します:

Bash
netstat -tuln | grep ポート番号

または

Bash
ss -tuln | grep ポート番号

この記事では例として、ポート番号「22222」を使用することにします。これは、22番ポートの10倍という数字で覚えやすく、一般的なポート範囲外であるため適しています。

ステップ2: SSH設定ファイルの編集

SSH設定ファイルを編集して、新しいポートを追加します。まず、設定ファイルのバックアップを作成します:

Bash
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

次に、SSH設定ファイルを開きます:

Bash
sudo vi /etc/ssh/sshd_config

ファイル内で「Port 22」という行を見つけ、以下のように変更します:

#Port 22
Port 22222

変更後、ファイルを保存してviエディタを終了します。設定ファイルの文法チェックを行うには、以下のコマンドを使用します:

Bash
sudo sshd -t

エラーが表示されなければ、設定ファイルの文法は正しいです。

ステップ3: SSHサービスの再起動

設定を反映させるために、SSHサービスを再起動します。ただし、直接再起動すると接続が切断される可能性があるため、まず新しいポートで接続できるかテストします。

新しいターミナルを開き、新しいポートでSSH接続を試みます:

Bash
ssh -p 22222 ユーザー名@サーバーのIPアドレス

接続が成功した場合、元のターミナルでSSHサービスを再起動します:

Bash
sudo systemctl restart sshd

ステップ4: ファイアウォール設定の変更

CentOS7では、firewalldがデフォルトのファイアウォールとして使用されています。新しいポートを開放するには、以下のコマンドを使用します:

Bash
sudo firewall-cmd --permanent --add-port=22222/tcp sudo firewall-cmd --reload

設定が反映されたか確認するには:

Bash
sudo firewall-cmd --list-ports

ステップ5: SELinuxの設定確認

SELinuxが有効な場合、SSHが新しいポートでリッスンするためにポリシーの調整が必要な場合があります。SELinuxの状態を確認するには:

Bash
sestatus

SELinuxがEnforcingモードの場合、SSHが新しいポートを使用するためのポリシーを追加します:

Bash
sudo semanage port -a -t ssh_port_t -p tcp 22222

SELinuxが無効な場合や、すでにポリシーが適用されている場合は、このステップは不要です。

ステップ6: 接続テストと設定確認

新しいポートでのSSH接続が正常に動作することを確認します:

Bash
ssh -p 22222 ユーザー名@サーバーのIPアドレス

接続が成功したら、22番ポートへのアクセスを無効化します。まず、22番ポートがファイアウォールで開放されている場合は閉じます:

Bash
sudo firewall-cmd --permanent --remove-port=22/tcp sudo firewall-cmd --reload

次に、SSH設定ファイルから22番ポートの記述を削除またはコメントアウトします:

Bash
sudo vi /etc/ssh/sshd_config
#Port 22
Port 22222

ファイルを保存してSSHサービスを再起動します:

Bash
sudo systemctl restart sshd

ハマった点やエラー解決

エラー1: 接続が拒否される(Connection refused) 原因: ファイアウォールで新しいポートが開放されていないか、SSHサービスが新しいポートでリッスンしていない 解決策: - ファイアウォール設定を確認: sudo firewall-cmd --list-ports - SSHサービスの状態を確認: sudo systemctl status sshd - SSH設定ファイルの文法チェック: sudo sshd -t

エラー2: パーミッション denied (publickey,password) 原因: 認証情報(公開鍵やパスワード)が正しくないか、SSH設定で認証方法が制限されている 解決策: - SSH設定ファイルで認証方法が制限されていないか確認: sudo vi /etc/ssh/sshd_config - パスワード認証を許可する場合: PasswordAuthentication yes - 公開鍵認証を使用する場合、authorized_keysファイルのパーミッションを確認: chmod 600 ~/.ssh/authorized_keys

エラー3: SELinux関連のエラー 原因: SELinuxがSSHサービスの新しいポートを許可していない 解決策: - SELinuxのログを確認: sudo grep ssh /var/log/audit/audit.log | audit2why - ポリシーを追加: sudo semanage port -a -t ssh_port_t -p tcp 22222 - 一時的にSELinuxを無効化してテスト(本番環境では推奨されません): sudo setenforce 0

解決策

上記のエラーが発生した場合、以下の手順で解決を試みてください:

  1. ファイアウォール設定の再確認 bash sudo firewall-cmd --list-all 新しいポートが「active (running)」状態で表示されていることを確認します。

  2. SSHサービスの再起動と状態確認 bash sudo systemctl restart sshd sudo systemctl status sshd SSHサービスが正常に起動しているか確認します。

  3. SSH設定ファイルの再確認 bash sudo cat /etc/ssh/sshd_config | grep Port 設定ファイルに新しいポートが正しく記述されていることを確認します。

  4. SELinuxポリシーの調整 bash sudo semanage port -l | grep ssh 新しいポートがポリシーに追加されていることを確認します。

  5. 接続テストの実施 bash ssh -v -p 22222 ユーザー名@サーバーのIPアドレス -vオプションで詳細なログを表示し、どこで接続が失敗しているか特定します。

これらの手順を実行しても解決しない場合は、SSH設定ファイルをバックアップから復元し、ステップバイステップで再設定を行うことをお勧めします。

まとめ

本記事では、ConoHa VPSのCentOS7サーバーで22番以外のポートからSSH接続を設定する方法を解説しました。

  • 非標準ポートの選定と設定: 1024〜65535の範囲内で適切なポートを選び、SSH設定ファイルを編集
  • ファイアウォール設定: firewalldを使用して新しいポートを開放
  • SELinuxの調整: 必要に応じてSELinuxポリシーを調整
  • 接続テストと設定確認: 新しいポートでの接続を確認後、旧ポートを無効化

非標準ポートを使用することで、ブルートフォース攻撃のリスクを大幅に低減し、サーバーのセキュリティを向上させることができます。特に、インターネットに公開するサーバーでは、この設定は必須と言えるでしょう。

この記事を通して、読者はConoHa VPSのCentOS7サーバーで安全にSSH接続を設定する方法を習得できたはずです。今後は、さらにセキュリティを強化するための鍵認証の設定や、Fail2banの導入など、追加のセキュリティ対策についても検討してみてください。

参考資料