ConoHa VPSでWordPress+ツール系アプリを公開するまでの奮闘記2【SSH鍵登録~2222ポート接続編】

Wordpress備忘録

WordPressで技術ブログを運営しつつ、練習がてら作ったツール系アプリも同じサーバーで公開したい!
そんなケチな目標を掲げ、ConoHa VPSを契約して本番環境を構築した記録です。

前回はConoHa VPSの申し込みから、root権限でのSSH接続・ユーザー追加まで実施しました。
今回はSSHキーの登録から、セキュリティを強固にした2222ポートでの接続までを追っていきます。

前回の記事はこちら。

ConoHa VPSでWordPress+ツール系アプリを公開するまでの奮闘記1【申し込み~SSH接続編】
ConoHa VPSをWordPress+Dockerの同居環境として契約した構築記録の第1回。ConoHa WINGではなくVPSを選んだ理由から、プラン選択・セキュリティグループの設定・SSH初回接続・一般ユーザー作成まで、実際につまずいたポイントを交えてわかりやすく解説します。

SSH鍵の登録

鍵の生成

root権限でのSSH接続は、一旦exit。ログアウトしましょう。
これからは作成した一般ユーザー(ここではuser)で再ログインし作業していきます。

今はパスワードでログインしているわけですが、いずれはSSHキーのみでログインしたいところ。
というわけで、まずはローカル環境で鍵を生成していきます。

$ ssh-keygen -t ed25519 -C "your_email@example.com" -f ~/.ssh/example_vps(好きなファイル名に)
  • -Cは「コメント」を意味し、識別するラベルみたいなもんなので、わかるような名前でも可。
  • なので、your_email@example.comの部分はメールアドレスじゃなくても大丈夫だったみたいです。メアドにしちゃった。
  • -fでファイル名を明示しておくと複数の鍵を管理しやすいです。プロジェクトごとにめっちゃあるので…。

今回生成されるファイル

~/.ssh/example_vps:秘密鍵(絶対に公開しない)
~/.ssh/example_vps.pub:公開鍵(サーバーに登録する)

lsコマンドで該当キー2種類が確認できたら次の工程へ。

公開鍵をVPSに登録

今回はConoHa管理画面からSSHキーを登録しました。
セキュリティタブにあります。

現在は空っぽ。契約時に登録しておくとここに入るのかな?

$ cat ~/.ssh/example_vps.pub

このコマンドを実行し表示された1行(ssh-ed25519 AAAA…メールアドレスまで全て)をConoHa管理画面から「追加」ボタンを押下し貼り付けます。

今回はlocal-ubuntuという名前にしました。

まじでエンジニアになりたての頃、ここに秘密鍵のほう貼ってて震撼した記憶があるな。

sshd_configの更新・反映

sshd_configの更新

公開鍵を設定しましたら、まずはパスワードでSSH接続しましょう。
後続の作業で、パスワードログインを撤廃し、SSH公開鍵だけでログインできるようにしていきます。

$ ssh user(ユーザー名)@IPアドレス

ログインができたら、sshd_configを編集します。

$ sudo vi /etc/ssh/sshd_config

sshd_configファイルのうち、編集するのは以下の4項目。
新規追記ではなく、既存の行(コメントアウトされている場合は # を外して)を編集します。

Port 2222
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes

各設定の意味

  • Port 2222:SSHの接続ポートを22番から2222番に変更。
    デフォルトの22番は常に攻撃を受けているため、番号を変えるだけで大半の攻撃を回避できる。
  • PermitRootLogin no:rootでの直接SSH接続を禁止。
    rootを乗っ取られるとサーバーを完全掌握される。
  • PasswordAuthentication no:パスワード認証を無効化。総当たり攻撃を根本から防ぐ。
  • PubkeyAuthentication yes:SSH鍵認証を有効化。安全な認証方式に切り替える。

自分がそうだったのですが PermitRootLogin が2箇所に記述されている場合があります。
後に書かれた行が優先されるので、下の行を no に変更してください(あるいはどっちもnoに)。

ssh.socketの無効化

設定変更後に sudo systemctl restart ssh を実行しましたが、なぜか2222番ポートでListenされず、22番ポートのままだったんですよね。

確認コマンド

$ sudo systemctl status ssh.socket
→ Listen: 0.0.0.0:22 (Stream) と表示された

これ、Ubuntu 24.04の仕様によるものなんですが、 ssh.socket というsystemdのソケット管理機能が22番ポートを固定で管理しているみたいなんです。
このせいで、せっかく編集した sshd_config の設定が上書きされてました。

ssh.socketを無効化していきましょう。

$ sudo systemctl stop ssh.socket
$ sudo systemctl disable ssh.socket
$ sudo systemctl restart ssh
Q
こんな簡単に無効化していいの?
A

調査したところ、セキュリティ上の問題はないらしい。
ssh.service が代わりに常駐するため、SSH接続は引き続き可能で、鍵認証などのセキュリティ設定も全て機能するとのこと。

無効化後、2222番でちゃんとListenされていることを確認します。

$ sudo ss -tlnp | grep ssh
→ LISTEN 0 128 0.0.0.0:2222 と表示

以下は実際にコマンドを叩いた際の記録です。

$ sudo systemctl stop ssh.socket
$ sudo systemctl disable ssh.socket
Removed "/etc/systemd/system/sockets.target.wants/ssh.socket".
Removed "/etc/systemd/system/ssh.service.requires/ssh.socket".
$ sudo systemctl restart ssh
$ sudo ss -tlnp | grep ssh
LISTEN 0      128          0.0.0.0:2222      0.0.0.0:*    users:(("sshd",pid=xxxxx,fd=3))
LISTEN 0      128             [::]:2222         [::]:*    users:(("sshd",pid=xxxxx,fd=4))

余談:実は後々大問題になってた。

sshd_configを更新しても、とある別のファイルが優先されていたようであやうく二度ととログインできなくなるところでした…。

詳細はこちら。

SSHのパスワード認証を無効化したらログインできなくなった話【authorized_keysに気をつけろ】
ConoHa VPS構築中にハマったSSH接続トラブルの実録。sshd_config.dの50-cloud-init.confによる設定上書きと、authorized_keysの未作成が原因でVPSにログイン不能に。ConoHaコンソール機…

さて、まだVPSにSSH接続したまま(重要)作業を続けていきましょう。

UFW(ファイアウォール)の設定

先ほど2222番ポートの設定をしたのですが、この段階では接続しようとしてもうまくいかない可能性が高く(というか自分がそうだった)、事前にUFWも設定しておきました。

ConoHaのセキュリティグループ:ネットワークレベルの外側のファイアウォール
UFW:VPS内部のソフトウェアファイアウォール

状況の確認

$ sudo ufw status

UFWが有効になっている場合は Status: active とコマンドラインに表示されます。
2222番ポート、およびHTTP、HTTPS接続をUFWで許可しておきましょう。

$ sudo ufw allow 2222/tcp
$ sudo ufw allow 80/tcp   # HTTP
$ sudo ufw allow 443/tcp  # HTTPS
$ sudo ufw reload

実際に叩くとこんな感じ。

$ sudo ufw allow 2222/tcp
Rule added
Rule added (v6)
$ sudo ufw reload
Firewall reloaded

最終的な結果

$ sudo ufw status
Status: active
To                         Action      From
--                         ------      ----
2222/tcp                   ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443/tcp                    ALLOW       Anywhere

デフォルトポリシーも確認しておきます。

$ sudo ufw default deny incoming  # 外部からの通信をデフォルトで全拒否
$ sudo ufw default allow outgoing # サーバーからの送信は全て許可

別ターミナルで接続確認

sshd_config の設定ミスがあった場合、再起動後に一切SSH接続できなくなるリスクがあります。
必ずターミナルAは閉じずに、ターミナルBで新しい設定での接続を確認してから進めます。

$ ssh -i ~/.ssh/example_vps -p 2222 user@IPアドレス

もしここでパスワードを求められていたら、SSHキーでは接続できていないです!!!

自分はこれでしくじりました!!!!!
絶対にさっきの記事を読んで!!!

無事に接続できたそこのあなたは、遠慮なく次へどうぞ。

ターミナルAでexit→再接続を実施します。

22番ポートを削除

2222番でのSSH接続が確認できたら、ConoHa管理画面から22番ポートのインバウンドルールを削除しちゃってOKです。

22番を残しておくと不要な攻撃の入り口になるため、確認後は速やかに削除します。

ここでVPSにSSH接続したまま作業していたんですが、ConoHa管理画面で22番ポートを削除した瞬間に(当たり前に)コマンドラインが微動だにしなくなりました。ばか??

慌ててセキュリティグループに22番を追加したところ、コマンドラインが動き出しました。
必ずexitしてからセキュリティグループの更新はしようね…。

ではまた次回、パッケージ・アプリケーションのインストール編にて!

タイトルとURLをコピーしました