「SSHのポートを開けているだけで、毎日何千回もの不正ログイン試行が来ている」――サーバーのログを見て驚いた経験はないでしょうか。
SSH(Secure Shell)はLinuxサーバー管理に欠かせないツールですが、初期設定のまま運用していると攻撃者にとって格好の侵入口になります。
この記事では、SSHのセキュリティを強化するための具体的な設定手順を、現場ですぐ使えるレベルで解説します。鍵認証への切り替え、ポート変更、fail2banの導入まで、情シス担当者が今日から実践できる対策を網羅しました。

SSHとは?なぜセキュリティ対策が重要なのか
SSH(Secure Shell)とは、ネットワーク経由でリモートのサーバーに安全に接続するためのプロトコル(通信規約)です。通信内容が暗号化されるため、telnet等の旧来の方法と比べて盗聴リスクが大幅に低減されます。
しかし、SSHが安全なのはあくまで「通信経路が暗号化されている」という点であり、認証の仕組みが甘ければ不正ログインを防げません。
SSHのセキュリティが重要な理由は主に3つあります。
・ブルートフォース攻撃の標的: デフォルトのポート22番に対して、パスワードの総当たり攻撃が日常的に行われています
・侵入後の影響が大きい: SSHでログインされると、サーバー上でコマンドが自由に実行されてしまいます。管理者権限を奪われれば被害は甚大です
・初期設定が甘い: 多くのLinuxディストリビューションでは、SSHのデフォルト設定がパスワード認証・root直接ログイン可能な状態です
SSHへの攻撃手法を知る(防御のための理解)
防御策を考える前に、攻撃者がSSHをどのように狙うかを理解しておきましょう。
1. ブルートフォース攻撃(総当たり攻撃)
もっとも一般的な攻撃手法です。自動化ツールを使い、ユーザー名とパスワードの組み合わせを大量に試行します。「admin」「root」「test」といったありがちなユーザー名と、辞書に載っている単語の組み合わせが狙われます。
2. デフォルトポートへのスキャン
攻撃者はインターネット上のIPアドレスをスキャンし、ポート22番が開いているホストを自動的にリストアップしています。ポート22番が開いているだけで攻撃対象リストに載ってしまうということです。
3. 漏洩した認証情報の悪用
他のサービスから流出したパスワードリストを使い回してSSHへの不正ログインを試みる手法です。パスワードを使い回している場合にリスクが高まります。

具体的なSSHセキュリティ強化手順
ここからは実際の設定手順を解説します。SSHの設定ファイルは /etc/ssh/sshd_config です。変更後は必ずSSHサービスを再起動してください。
1. パスワード認証を無効化し、鍵認証に切り替える
SSH鍵認証は、パスワード認証と比較して格段に安全です。秘密鍵を持っていない限りログインできないため、ブルートフォース攻撃が実質的に無効化されます。
まず、クライアント側で鍵ペアを生成します。
# ED25519鍵を生成(RSAより高速かつ安全) ssh-keygen -t ed25519 -C "your_email@example.com" # 公開鍵をサーバーにコピー ssh-copy-id -i ~/.ssh/id_ed25519.pub user@your-server
鍵認証での接続を確認できたら、パスワード認証を無効化します。
# /etc/ssh/sshd_config を編集 # パスワード認証を無効化(デフォルト: yes) PasswordAuthentication no # チャレンジレスポンス認証も無効化 ChallengeResponseAuthentication no # 公開鍵認証を有効化(通常はデフォルトで有効) PubkeyAuthentication yes
重要: パスワード認証を無効化する前に、必ず鍵認証でログインできることを確認してください。順番を間違えるとサーバーから締め出されます。
2. rootの直接ログインを禁止する
root(管理者)アカウントで直接SSHログインできる状態は危険です。攻撃者はまず「root」というユーザー名で侵入を試みるからです。
# /etc/ssh/sshd_config を編集 # rootの直接ログインを禁止(デフォルト: yes または prohibit-password) PermitRootLogin no
root権限が必要な作業は、一般ユーザーでログイン後に sudo を使う運用に切り替えます。
3. SSHポートをデフォルトの22番から変更する
ポート変更は「セキュリティの本質」ではありませんが、自動スキャンによる攻撃を大幅に減らす効果があります。ログに記録される不正アクセス試行が激減するため、本当に危険なアクセスを見つけやすくなるメリットもあります。
# /etc/ssh/sshd_config を編集 # ポート番号を変更(デフォルト: 22) # 1024〜65535の範囲で、既知のサービスと被らない番号を選ぶ Port 50022 # SELinuxが有効な環境では、ポート変更を許可する sudo semanage port -a -t ssh_port_t -p tcp 50022 # firewalldで新ポートを許可(旧ポートを閉じる前に必ず確認) sudo firewall-cmd --permanent --add-port=50022/tcp sudo firewall-cmd --permanent --remove-service=ssh sudo firewall-cmd --reload
注意: ポート変更後、新しいポートで接続できることを確認するまで、既存のSSHセッションを切断しないでください。
4. 接続元IPアドレスを制限する
特定のIPアドレスからのみSSH接続を許可することで、不正アクセスのリスクをさらに下げられます。
# /etc/ssh/sshd_config でアクセス元を制限 # 特定ユーザーを特定IPからのみ許可 AllowUsers admin@192.168.1.0/24 # または、firewalldで制限する方法 sudo firewall-cmd --permanent --add-rich-rule="rule family=ipv4 source address=192.168.1.0/24 port port=50022 protocol=tcp accept" sudo firewall-cmd --reload
固定IPがない場合は、VPN経由でのアクセスに限定する方法が有効です。
5. fail2banを導入する
fail2banは、ログを監視して一定回数ログインに失敗したIPアドレスを自動的にブロックするツールです。ブルートフォース攻撃への強力な防御策になります。
# fail2banのインストール # RHEL/CentOS系(EPELリポジトリが必要) sudo dnf install epel-release sudo dnf install fail2ban # Ubuntu/Debian系 sudo apt install fail2ban # 設定ファイルを作成(jail.localで上書き) sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
# /etc/fail2ban/jail.local のSSH設定例 [sshd] enabled = true port = 50022 # 5回失敗で1時間ブロック maxretry = 5 bantime = 3600 findtime = 600 # fail2banを起動・有効化 sudo systemctl enable --now fail2ban
fail2banの動作確認は以下のコマンドで行えます。
# ブロック中のIPを確認 sudo fail2ban-client status sshd
中小企業でも今日からできること
すべての対策を一度に実施する必要はありません。以下の優先順位で進めてください。
| 対策 | 効果 | 難易度 |
|---|---|---|
| SSH鍵認証への切り替え | ブルートフォース攻撃をほぼ無効化 | 低(30分で完了) |
| rootログイン禁止 | 特権アカウントへの直接攻撃を防止 | 低(5分で完了) |
| fail2banの導入 | 不正試行IPの自動ブロック | 低(15分で完了) |
| ポート番号の変更 | 自動スキャンによる攻撃を大幅減少 | 低(10分、ただしFW設定に注意) |
| 接続元IP制限 | 許可外からのアクセスを遮断 | 中(固定IPまたはVPNが必要) |
鍵認証への切り替えとrootログイン禁止の2つだけでも、SSHへの不正アクセスリスクは劇的に下がります。予算ゼロ・所要時間30分程度で実施できるため、最優先で取り組んでください。
よくある誤解と注意点
【注意】「ポートを変えれば安全」は過信
ポート変更はあくまで自動スキャンへの対策です。標的型攻撃ではポートスキャンで開いているポートを特定されるため、ポート変更だけに頼るのは危険です。鍵認証やfail2banと組み合わせることで初めて効果を発揮します。
【注意】「鍵認証にしたから鍵の管理は適当でいい」は間違い
秘密鍵をパスフレーズなしで生成したり、複数人で共有したりしていると、鍵が漏洩した時点でセキュリティが崩壊します。秘密鍵には必ずパスフレーズを設定し、個人ごとに鍵を発行してください。退職者の公開鍵を authorized_keys から削除する運用も忘れずに。
【注意】設定変更後のロックアウトに注意
SSHの設定変更は、手順を誤るとサーバーに接続できなくなるリスクがあります。設定変更時は以下のルールを守ってください。
・変更前に、別のターミナルでSSHセッションを1つ開いたままにしておく
・新しい設定で接続できることを確認してから、旧設定を無効化する
・クラウド環境では、Web管理コンソール経由のアクセス手段を確保しておく

本記事のまとめ
SSHはLinuxサーバー管理に不可欠なツールですが、初期設定のまま運用すると不正アクセスの格好の標的になります。鍵認証への切り替え、rootログイン禁止、fail2banの導入を基本として、ポート変更やIP制限を組み合わせた多層防御が効果的です。
| 脅威 | 対策 | 優先度 |
|---|---|---|
| ブルートフォース攻撃 | SSH鍵認証 + fail2ban | 最優先 |
| rootアカウントへの攻撃 | PermitRootLogin no + sudo運用 | 最優先 |
| デフォルトポートへのスキャン | ポート変更 + firewalld設定 | 高 |
| 不特定多数からのアクセス | 接続元IP制限 + VPN経由 | 高 |
| 秘密鍵の漏洩 | パスフレーズ設定 + 鍵の個別管理 | 中 |
Linuxのファイアウォール設定やSELinuxの詳しい使い方については、姉妹サイトLinuxMaster.JPで詳しく解説しています。SSHのセキュリティ強化とあわせて、サーバー全体の防御力を高めたい方はぜひご覧ください。
SSHのセキュリティ、初期設定のままになっていませんか?
サーバーへの不正アクセスは、気づかないうちに進行していることが少なくありません。
正しいセキュリティ知識を体系的に身につけたい方へ、メルマガで実践的なセキュリティ対策ノウハウをお届けしています。


コメント