ESC

Start typing to search across invoices, services, domains, tickets, and more...

Search... Ctrl+K
Linuxサーバー

Linux で SSH ポートと root パスワードを変更する方法(ファイアウォール・SELinux 設定付き)

7 ステップ 8 分で読めます 18 回閲覧 0
目次

既定の 22 番ポートには毎日大量の自動ブルートフォース攻撃が届きます。SSH を標準外のポートに移し、強力な root パスワードを設定することは、サーバー公開後に最初に行うべき基本的なセキュリティ対策です。本記事では Linux で SSH ポートと root パスワードを変更する方法として、sshd_config の編集、ファイアウォールと SELinux での新ポート許可、sshd の安全な再起動、passwd によるパスワード変更までを解説します。Debian/Ubuntu と CentOS/Rocky/AlmaLinux に対応しています。

作業中は現在の SSH セッションを閉じず、22 番ポートも一時的に残しておいてください。新しいポートでログインできることを確認してから旧ポートを閉じます。接続できなくなった場合はクライアントエリアの VNC コンソールから復旧できます。

ステップ1:SSH 設定ファイルをバックアップして確認する

/etc/ssh/sshd_config をバックアップし、現在の Port 設定を確認します。新しい OS では /etc/ssh/sshd_config.d/ に追加設定がある場合もあるため、上書きされないよう合わせて確認してください。

cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
grep -nE '^#?Port' /etc/ssh/sshd_config
grep -rn '^Port' /etc/ssh/sshd_config.d/ 2>/dev/null

ステップ2:sshd_config で SSH ポートを変更する

vi や nano で sshd_config を開き、Port 行の # を外して新しいポートの行を追加します。1024~65535 の未使用ポートを選びましょう。ここでは 2222 を例にします。移行期間中は 22 と新ポートの両方で待ち受けます。

# /etc/ssh/sshd_config - keep 22 temporarily and add the new port
Port 22
Port 2222

ステップ3:ファイアウォールで新しい SSH ポートを許可する

CentOS・Rocky・AlmaLinux は firewalld、Ubuntu は ufw がよく使われます。ファイアウォールが有効なのに新ポートを許可していないと、sshd 再起動後に接続できなくなります。ファイアウォールを使っていない場合はスキップできます。

# CentOS / Rocky / AlmaLinux with firewalld
firewall-cmd --permanent --add-port=2222/tcp
firewall-cmd --reload

# Debian / Ubuntu with ufw
ufw allow 2222/tcp
ufw status

ステップ4:SELinux で SSH の新ポートを許可する

SELinux が Enforcing の RHEL 系ディストリビューションでは、sshd は許可されたポートしか使えません。semanage で新ポートを ssh_port_t として登録しないと sshd が起動に失敗します。Debian/Ubuntu は標準で SELinux が無効なのでスキップできます。

# Only on systems with SELinux enforcing (CentOS / Rocky / AlmaLinux)
getenforce
dnf install -y policycoreutils-python-utils
semanage port -a -t ssh_port_t -p tcp 2222
semanage port -l | grep ssh_port_t

ステップ5:設定を検証して sshd を再起動する

sshd -t で構文をチェックし(何も出力されなければ正常)、サービスを再起動します。Ubuntu ではサービス名が ssh で、22.10 以降はソケットアクティベーションを使うため、systemd の再読み込みと ssh.socket の再起動も必要です。最後に ss で新ポートの待ち受けを確認します。

# Check syntax first - no output means OK
sshd -t

# CentOS / Rocky / AlmaLinux / Debian
systemctl restart sshd

# Ubuntu (service is named "ssh"); on Ubuntu 22.10+ with socket activation also run:
systemctl restart ssh
systemctl daemon-reload && systemctl restart ssh.socket

ss -tlnp | grep -E ':22 |:2222 '

ステップ6:新ポートで接続テストし 22 番を閉じる

手元で新しいターミナルを開き、新ポートでログインします。成功したら sshd_config から Port 22 の行を削除して sshd を再起動し、ファイアウォールの 22 番許可ルールも削除します。

# From your own computer, in a NEW window
ssh -p 2222 [email protected]

# After it works: remove "Port 22" from sshd_config, restart sshd, then close 22
firewall-cmd --permanent --remove-service=ssh && firewall-cmd --reload   # firewalld
ufw delete allow 22/tcp                                                  # ufw (if a rule exists)

ステップ7:passwd で Linux の root パスワードを変更する

passwd を実行し、新しいパスワードを 2 回入力します(入力中は表示されません)。12 文字以上で英大小文字・数字・記号を含むランダムなパスワードを使い、パスワードマネージャーで管理しましょう。スクリプトでは chpasswd が便利です。

# Change the root password interactively
passwd root

# Or non-interactively (avoid leaving it in shell history on shared systems)
echo 'root:N3w-Str0ng-P@ssw0rd' | chpasswd

よくある質問

ポート変更後に接続がタイムアウトします。

多くはファイアウォールか SELinux で許可されていないことが原因です。VNC コンソールでログインし、ss -tlnp | grep sshd で新ポートの待ち受けを確認してから、firewall-cmd --list-all や ufw status の結果を確認してください。

root パスワードを変更するとクライアントエリアの表示も変わりますか?

変わりません。OS 内で変更したパスワードは同期されないため、ご自身で保管してください。忘れた場合は VNC コンソールからシングルユーザーモードで再設定するか、チケットでご相談ください。

ポート変更だけで十分安全ですか?

スキャンによるノイズは大きく減りますが、SSH 鍵認証への切り替えとパスワードログインの無効化、fail2ban の導入もあわせて行うことをおすすめします。

上記の手順で解決しない場合は、サポートチケットを送信して IMIDC の 24 時間 365 日テクニカルサポートへお問い合わせください。サーバー IP、OS、実行したコマンド、エラー画面のスクリーンショットを添えていただくと、より迅速に対応できます。

この回答はお役に立ちましたか?

関連チュートリアル