0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Ubuntu 24.04 で SSHD に複数のポートを設定する方法

Posted at

はじめに

Ubuntu 24.04 で sshd にデフォルトの 22 以外のポートを追加しようとしたところ、通常の sshd_config への設定だけではうまくいかず、ssh.socket の設定を変更する必要がありました。

本記事では、そのトラブルシューティングの過程と、正しく複数のポートを設定する方法をまとめます。


なぜ複数のポートが必要か?

今回、SSHのポートを2つ設定するのは、異なる接続用途を分けるためです。

  • ポート22: ローカルネットワークからの接続専用
  • ポート8922: 外部からの接続用(公開鍵認証のみ)

外部からの不正アクセスを防ぐため、ポート8922では パスワード認証を無効にし、公開鍵認証のみ許可 する設定を行います。また、ルータのポート転送設定を行い、外部からのアクセスが適切な内部IPアドレスに転送されるように設定します。


複数ポートの設定方法

まず、/etc/ssh/sshd_config.d/ にカスタム設定ファイルを作成し、複数のポートを指定します。

sudo nano /etc/ssh/sshd_config.d/custom.conf

内容:

Port 22
Port 8922
Match Address 0.0.0.0/0
    PasswordAuthentication no
    PubkeyAuthentication yes

保存後、sshd を再起動します。

sudo systemctl restart sshd

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

追加したポート 8922 を開放します。

sudo ufw allow 8922/tcp
sudo ufw reload

設定が適用されたかを確認します。

sudo ufw status

期待する出力:

22/tcp                     ALLOW       Anywhere
8922/tcp                   ALLOW       Anywhere

sshd のポート確認

1. 開いているポートを確認

ss -tulnp | grep ssh

出力:

tcp   LISTEN 0      4096                *:22               *:*    users:("sshd",pid=4699,fd=3)

ポート 22 のみがリスンされており、8922 が適用されていません。

2. 設定を確認

sudo sshd -T | grep port

出力:

port 22
port 8922

設定自体は認識されていますが、実際には 8922 が開いていません。


AppArmor の影響を確認

一部のネット情報では AppArmorsshd のポート制限をしているとありましたが、Ubuntu 24.04 ではデフォルトでそのような制限はないようです。

aa-status | grep ssh

このコマンドで sshd のポリシーが有効でないことを確認しました。


ssh.socket がポートを制限している可能性

Ubuntu 24.04 では systemd による ソケット起動 (socket activation) が有効になっており、ssh.socket によって sshd が開けるポートが制限されていました。

systemctl status ssh.socket

出力:

● ssh.socket - OpenSSH Server Socket
     Loaded: loaded (/lib/systemd/system/ssh.socket; enabled; preset: enabled)
     Active: active (listening) since ...
   Triggers: ● ssh.service
     Listen: [::]:22 (Stream)

ポート 22 のみがリスンされていることが分かります。


ssh.socket に追加ポートを設定

以下の手順で ssh.socket8922 を追加します。

sudo systemctl edit ssh.socket

エディタが開くので、以下を追加。

[Socket]
ListenStream=
ListenStream=22
ListenStream=8922

設定を反映します。

sudo systemctl daemon-reload
sudo systemctl restart ssh.socket
sudo systemctl restart sshd

その後、ポートのリスン状態を確認。

ss -tulnp | grep ssh

出力:

tcp   LISTEN 0      4096                *:22               *:*    users:("sshd",pid=12345,fd=3)
tcp   LISTEN 0      4096                *:8922             *:*    users:("sshd",pid=12345,fd=4)

systemd のソケット起動を無効化する方法(オプション)

もし ssh.socket を無効にし、従来通り sshd のみでポートを管理したい場合は、以下の手順を実行。

sudo systemctl disable --now ssh.socket
sudo systemctl restart sshd

その後、ss -tulnp | grep ssh でポートのリスン状態を確認。


まとめ

Ubuntu 24.04 では systemdssh.socket が有効になっているため、単に sshd_configPort 8922 を追加するだけでは sshd に反映されません。

解決策:

  1. /etc/ssh/sshd_config.d/custom.confPort 22 Port 8922 を記述し、公開鍵認証のみ許可
  2. sudo ufw allow 8922/tcp && sudo ufw reload でファイアウォールを設定
  3. systemctl edit ssh.socketListenStream=8922 を追加
  4. sudo systemctl daemon-reload && sudo systemctl restart ssh.socket
  5. sudo systemctl restart sshdsshd を再起動
  6. ss -tulnp | grep ssh でポートのリスン状態を確認

この手順を踏めば、追加のポートでも問題なく SSH 接続が可能になります!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?