UbuntuでSSHポート番号を安全に変更!不正アクセスを99%減らす完全設定ガイド

Linux

「毎日大量の不正ログイン試行が…」 「/var/log/auth.logがエラーだらけ」 「デフォルトの22番ポートって危険?」

実は、SSHポート番号を変更するだけで 不正アクセス試行が99%以上減るんです!

ボットの自動攻撃は22番ポートを狙うので、 ポートを変えるだけで大半を回避できます。

でも、設定を間違えると サーバーに接続できなくなる危険も…

この記事通りに設定すれば、 安全確実にポート変更できます!


スポンサーリンク

【重要】作業前の準備と注意事項

必須の事前準備

絶対にやっておくこと:

  1. 現在の接続を維持する
    • 設定中は今の接続を切らない
    • 別ウィンドウで新規接続テスト
  2. コンソールアクセスの確保
    • VPSならコンソール画面を準備
    • 物理サーバーなら直接アクセス可能に
  3. 設定ファイルのバックアップ sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup sudo cp /etc/ssh/sshd_config.d/50-cloud-init.conf /etc/ssh/sshd_config.d/50-cloud-init.conf.backup 2>/dev/null
  4. 現在の設定確認 # 現在のポート確認 sudo ss -tlnp | grep ssh # SSHサービス状態確認 sudo systemctl status ssh

新しいポート番号の選び方

推奨ポート範囲:

範囲用途推奨度
1-1023ウェルノウンポート❌ 使用不可
1024-49151登録済みポート⚠️ 要確認
49152-65535動的ポート✅ 推奨

おすすめポート番号:

2222  - 覚えやすい(注意:狙われやすい)
8022  - 比較的安全
22222 - 覚えやすく安全
52222 - 動的ポート範囲で安全

使用中ポートの確認:

# 使用中のポート一覧
sudo ss -tuln | grep LISTEN

# 特定ポートの確認(例:52222)
sudo ss -tuln | grep :52222

【手順1】SSHデーモンの設定変更

Ubuntu 22.04/24.04 の場合

最新版は設定ファイルが分割されています:

  1. メイン設定ファイルを編集 sudo nano /etc/ssh/sshd_config
  2. Port設定を探して変更 # 変更前 #Port 22 # 変更後(例:52222に変更) Port 52222 # 移行期間は両方有効にすることも可能 #Port 22 #Port 52222
  3. Include設定を確認 # この行があるか確認 Include /etc/ssh/sshd_config.d/*.conf

クラウドサーバーの場合(重要)

AWS、Azure、GCPなどは追加設定が必要:

# cloud-init設定を確認
ls /etc/ssh/sshd_config.d/

# cloud-init設定がある場合
sudo nano /etc/ssh/sshd_config.d/50-cloud-init.conf

# Port設定があれば変更
Port 52222

設定の文法チェック

必ず実行!エラーがあると起動しません:

# 設定ファイルのテスト
sudo sshd -t

# エラーがなければ何も表示されない
# エラーがある場合は詳細が表示される

【手順2】ファイアウォールの設定(超重要)

UFW(Ubuntu標準)の設定

新しいポートを開く:

# UFWの状態確認
sudo ufw status verbose

# 新しいポートを許可(例:52222)
sudo ufw allow 52222/tcp comment 'SSH new port'

# 特定IPからのみ許可する場合(より安全)
sudo ufw allow from 192.168.1.0/24 to any port 52222 comment 'SSH from local network'

# ルールの確認
sudo ufw status numbered

重要:まだ22番ポートは削除しない!

iptablesを使用している場合

# 現在のルール確認
sudo iptables -L -n -v

# 新ポートを許可
sudo iptables -A INPUT -p tcp --dport 52222 -j ACCEPT

# 設定を保存
sudo netfilter-persistent save
# または
sudo iptables-save > /etc/iptables/rules.v4

【手順3】SSHサービスの再起動と確認

安全な再起動方法

接続を維持したまま再起動:

# 設定を再読み込み(接続は切れない)
sudo systemctl reload ssh

# または完全再起動
sudo systemctl restart ssh

# サービス状態確認
sudo systemctl status ssh

新ポートでの接続テスト

別ターミナルで実行:

# ローカルから新ポートで接続テスト
ssh -p 52222 username@server_ip

# 詳細表示でデバッグ
ssh -p 52222 -v username@server_ip

# ポートが開いているか確認
nc -zv server_ip 52222

Windowsから接続する場合:

ssh -p 52222 username@server_ip

【手順4】旧ポートの無効化

接続確認後の最終設定

新ポートで接続できたら:

  1. 22番ポートを無効化 # sshd_configを編集 sudo nano /etc/ssh/sshd_config # Port 22の行を削除またはコメントアウト #Port 22 Port 52222
  2. ファイアウォールから22番を削除 # UFWのルール番号を確認 sudo ufw status numbered # 22番ポートのルールを削除(番号は環境により異なる) sudo ufw delete [番号] # または sudo ufw delete allow 22/tcp
  3. 最終確認 # SSHサービス再起動 sudo systemctl restart ssh # 22番ポートが閉じているか確認 sudo ss -tlnp | grep :22

SELinuxが有効な場合の追加設定

Ubuntu with SELinux

# SELinuxの状態確認
getenforce

# SELinuxが有効な場合
sudo semanage port -a -t ssh_port_t -p tcp 52222

# 設定確認
sudo semanage port -l | grep ssh

クライアント側の設定

SSH設定ファイルで簡単接続

~/.ssh/config を作成/編集:

# クライアント側の設定
nano ~/.ssh/config

# 以下を追加
Host myserver
    HostName server_ip_address
    Port 52222
    User username
    IdentityFile ~/.ssh/id_rsa

# これで簡単接続
ssh myserver

各種ツールの設定変更

scp/sftpコマンド:

# SCPでファイル転送
scp -P 52222 file.txt user@server:/path/

# SFTP接続
sftp -P 52222 user@server

rsyncコマンド:

rsync -avz -e "ssh -p 52222" source/ user@server:/destination/

トラブルシューティング

問題1:新ポートで接続できない

チェックリスト:

# 1. SSHサービスが新ポートでリッスンしているか
sudo ss -tlnp | grep :52222

# 2. ファイアウォール設定確認
sudo ufw status | grep 52222

# 3. 設定ファイルの文法チェック
sudo sshd -t

# 4. SSHサービスのログ確認
sudo journalctl -xe | grep ssh

問題2:接続が拒否される

# ポートの疎通確認
telnet server_ip 52222

# ファイアウォールログ確認
sudo tail -f /var/log/ufw.log

# SSH詳細ログ有効化
sudo nano /etc/ssh/sshd_config
# LogLevel DEBUG
sudo systemctl restart ssh

問題3:古いポートがまだ使える

# プロセス確認
sudo lsof -i :22

# 全SSHDプロセス確認
ps aux | grep sshd

# 強制的に古いプロセスを終了
sudo killall sshd
sudo systemctl start ssh

緊急時の復旧方法

コンソールアクセスから:

# バックアップから復元
sudo mv /etc/ssh/sshd_config.backup /etc/ssh/sshd_config

# SSHサービス再起動
sudo systemctl restart ssh

# ファイアウォール全開放(一時的)
sudo ufw disable

セキュリティを更に強化する設定

追加の推奨設定

# /etc/ssh/sshd_config に追加

# rootログイン禁止
PermitRootLogin no

# パスワード認証無効化(鍵認証のみ)
PasswordAuthentication no

# 空パスワード禁止
PermitEmptyPasswords no

# ログインユーザー制限
AllowUsers username1 username2

# 接続試行回数制限
MaxAuthTries 3

# 同時接続数制限
MaxSessions 2

fail2banで自動ブロック

# fail2banインストール
sudo apt update
sudo apt install fail2ban

# SSH用設定
sudo nano /etc/fail2ban/jail.local

[sshd]

enabled = true port = 52222 filter = sshd logpath = /var/log/auth.log maxretry = 3 findtime = 3600 bantime = 86400


ポート変更後のメンテナンス

定期的な確認項目

# 毎週確認すべきこと
# 1. 不正アクセス試行
sudo grep "Failed password" /var/log/auth.log | tail -20

# 2. 開いているポート
sudo ss -tlnp

# 3. ファイアウォール状態
sudo ufw status verbose

# 4. fail2banでブロック中のIP
sudo fail2ban-client status sshd

ログ監視スクリプト

#!/bin/bash
# ssh_monitor.sh

echo "=== SSH接続試行 (過去24時間) ==="
grep "sshd" /var/log/auth.log | grep "$(date '+%b %d')" | wc -l

echo "=== 失敗した接続試行 ==="
grep "Failed password" /var/log/auth.log | tail -10

echo "=== 現在の接続 ==="
who

まとめ:ポート変更チェックリスト

設定前: ✅ 現在の接続を維持 ✅ コンソールアクセス確保 ✅ 設定ファイルバックアップ

設定中: ✅ sshd_config編集 ✅ 文法チェック(sshd -t) ✅ ファイアウォール新ポート開放 ✅ SSH再起動 ✅ 新ポートで接続テスト

設定後: ✅ 旧ポート無効化 ✅ ファイアウォールから旧ポート削除 ✅ fail2ban設定更新 ✅ クライアント設定更新


ポート番号を変更するだけで、 セキュリティが劇的に向上します!

ただし、これだけでは不十分。 鍵認証やfail2banと組み合わせて、 多層防御を構築しましょう。

安全なサーバー運用を!


ポート変更後の効果はどうでしたか?不正アクセスの減少率など、ぜひ教えてください!

コメント

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