言語を切り替える
テーマを切り替える

Ubuntu 初期設定完全ガイド:ユーザー・SSH・fail2ban のセキュリティ設定

はじめに

深夜 3 時、ターミナルに表示された「Permission denied」というエラーメッセージを前に、冷や汗が流れました。

サーバーに入れなくなったのです。SSH 設定を適当に変更して、バックアッププランを用意していなかったのが原因でした。

これは 3 年前に初めて VPS を購入した時の話です。今思えば、当時の操作は「教科書通りの失敗例」そのものでした。root で直接ログインし、パスワードは誕生日、SSH はデフォルトの 22 番ポート、ファイアウォール?聞いたことありませんでした。結果として、サーバーは 2 週間も持たずに踏み台にされ、ログにはブルートフォース攻撃の痕跡が残りました。

正直なところ、多くの初心者が VPS を購入した後の最初の反応は「とにかく何かをインストールして、プロジェクトをデプロイしたい」です。ユーザー管理?SSH の強化?面倒だから後回しにしよう。しかし、まさにこの「後回し」が、サーバーの寿命を決定してしまうのです。

この記事では、新しく購入した Ubuntu サーバー(22.04 または 24.04)をゼロから安全に設定する方法を解説します。ユーザー権限、SSH の強化、fail2ban による自動BAN、すべてを網羅します。各手順で「なぜこれが必要なのか」を説明し、単にコマンドをコピー&ペーストするだけではありません。

約 10 分で、このフローを完了できます。完了後、あなたのサーバーのセキュリティレベルは、インターネット上の 80% の無防備なサーバーを上回ります。

一、初期設定前の準備

作業を始める前に、必要なツールを準備しましょう。ローカルで SSH 鍵ペアを生成する必要があります。

なぜパスワードではなく鍵を使うのか? 簡単に言えば、パスワードはブルートフォース攻撃で破られる可能性がありますが、鍵はほぼ不可能です。256 ビットの Ed25519 鍵をブルートフォース攻撃で破るには、宇宙の年齢よりも長い時間がかかります。

鍵生成

現在は Ed25519 アルゴリズムの使用が推奨されています。古い RSA よりも安全で、鍵も短くて済みます。生成コマンドは非常にシンプルです:

# macOS / Linux
ssh-keygen -t ed25519 -C "your_email@example.com"

# Windows(PowerShell、OpenSSH クライアントが必要)
ssh-keygen -t ed25519 -C "your_email@example.com"

実行すると、鍵の保存場所とパスワードの設定を尋ねられます。デフォルトのパスで問題なければ Enter キーを押してください。パスワードは必要に応じて設定してください。設定するとより安全ですが、接続のたびに入力が必要になります。

生成完了後、ローカルには 2 つのファイルが作成されます:

  • ~/.ssh/id_ed25519 — 秘密鍵、絶対に漏らしてはいけません
  • ~/.ssh/id_ed25519.pub — 公開鍵、後でサーバーに転送します

ターミナルツールについて、macOS 標準の Terminal で十分です。Windows では Windows Terminal または MobaXterm がおすすめです。これが本題ではないので、詳細は割愛します。

二、ユーザーと権限管理

まず、root でサーバーにログインしてください(これが最後の root 直接ログインです。以降は無効化します):

ssh root@あなたのサーバーIP

なぜ root を使わないのか?

一言で言えば、后果が深刻すぎます。

root 権限は非常に強力です。ファイルを間違って削除したり、設定を間違えて変更したりすると、システム全体が壊れてしまいます。さらに厄介なのは、多くの攻撃スクリプトが root アカウントを狙って攻撃を仕掛けることです。root を SSH ログインにさらすことは、ハッカーに大きなターゲットを提供するようなものです。

日常的な操作は一般アカウントで行い、権限が必要な時に sudo を使う。これが Linux の基本セキュリティ原則です。

デプロイユーザーの作成

私は deploy という名前を使用しています。「デプロイ専用」の意味です。お好きな名前を使用しても構いません:

# ユーザー作成(パスワードといくつかの情報の設定を促される)
adduser deploy

# sudo 権限を付与
usermod -aG sudo deploy

Ubuntu はパスワードとユーザー情報の入力を求めます。覚えやすいパスワードを設定し、他の情報は Enter キーでスキップして構いません。

公開鍵を新ユーザーに転送

次に、ローカルの公開鍵をこの新しいアカウントに転送します。ローカルマシンで実行してください:

# macOS / Linux
ssh-copy-id deploy@あなたのサーバーIP

# Windows(PowerShell)
type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh deploy@あなたのサーバーIP "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

次に、deploy でログインできるかテストします:

ssh deploy@あなたのサーバーIP

ログインできましたか?それでは、これからは deploy で操作し、root に切り替えないでください。root 権限が必要な場合は sudo を使います。

複数ユーザーシナリオ

サーバーをチームで共有する場合、各メンバーに独立したアカウントを作成できます。例えば:

# 同僚の山田さんのアカウントを作成
adduser yamada
usermod -aG sudo yamada

# 公開鍵を転送(本人のローカルで実行)
ssh-copy-id yamada@あなたのサーバーIP

各メンバーが自分のアカウントを使用すれば、操作記録を追跡でき、問題が発生した際の原因特定も容易です。

三、SSH セキュリティ強化

このステップは初期設定の中で最も重要な部分であり、「自分を締め出す」という悲劇が最も起きやすい場所でもあります。

警告:SSH 設定を変更する前に、現在の接続を切断しないでください。同時に別のターミナルウィンドウを開いてテストしてください。これにより、設定ミスがあっても別のウィンドウから修正できます。

SSH 設定ファイルの編集

sudo nano /etc/ssh/sshd_config

主要パラメータの詳細解説

1. Port ポート

Port 22    # デフォルト値、変更推奨

22 番ポートはインターネット全体でスキャンの主要ターゲットです。高ポート(例:22222 または 54321)に変更することで、無差別スキャンの大部分を回避できます。

Port 54321

注意:クラウドサービスプロバイダー(Alibaba Cloud、Tencent Cloud、AWS など)を使用している場合、ポート変更後にセキュリティグループ/ファイアウォールで新しいポートを開放する必要があります。開放しないと接続できなくなります。

2. PermitRootLogin root ログインの禁止

PermitRootLogin no    # 必ず変更

なぜでしょうか?前述の通り、root はハッカーの主要ターゲットです。これを無効化することで、攻撃面が大幅に減少します。

3. PasswordAuthentication パスワード認証の無効化

PasswordAuthentication no    # 鍵認証のみ許可

これがブルートフォース攻撃を防ぐ鍵です。秘密鍵が漏洩しない限り、パスワードを知られていてもログインできません。

4. その他のセキュリティパラメータ

MaxAuthTries 3              # 最大 3 回のパスワード試行
ClientAliveInterval 300     # 5 分間操作がない場合に切断
ClientAliveCountMax 2       # 最大 2 回の無応答

これらのパラメータは、長時間のアイドル接続によるリソース消費を防ぎ、ブルートフォース攻撃の試行回数を制限します。

設定検証の 3 ステップ

設定を変更したら、すぐに再起動せず、まず検証してください:

ステップ 1:設定構文のテスト

sudo sshd -t

出力がないのは良い兆候です。構文に問題がないことを意味します。

ステップ 2:新しいウィンドウで接続テスト

現在のウィンドウをそのままにして、別のターミナルウィンドウを開き、新しいポートと deploy アカウントで接続します:

ssh -p 54321 deploy@あなたのサーバーIP

接続できましたか?設定が有効になり、自分を締め出していないことを意味します。

ステップ 3:問題ないことを確認してサービス再起動

sudo systemctl restart sshd
# または
sudo systemctl restart ssh

再起動後、もう一度新しいウィンドウでテストします。正常にログインできることを確認して、このステップは完了です。

ヒント

設定変更後に接続できなくなった場合でも、慌てないでください。クラウドサービスプロバイダーのコンソールから VNC でログインし、設定を元に戻して、サービスを再起動すれば問題ありません。これが、SSH 設定を変更する前に接続を切断しないよう強調している理由です。

四、fail2ban による自動BAN

前述の SSH 設定は、主にブルートフォース攻撃を防ぐためのものです。しかし、誰かがしつこくパスワードを試し続けたらどうでしょうか?ここで fail2ban の出番です。

fail2ban とは? ログを自動監視し、不審な IP をBANするツールです。誰かが連続してパスワードを間違えたら?自動的に一定期間ブロックします。シンプルですが、非常に効果的です。

インストールと起動

sudo apt update
sudo apt install fail2ban -y
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

sshd ジェイルの設定

fail2ban は「ジェイル」(jail)という概念で、異なるサービスの監視ルールを管理します。SSH にはデフォルトで sshd ジェイルがあります。

ローカル設定ファイルを作成します(デフォルト設定を直接変更しないでください、アップグレード時に上書きされます):

sudo nano /etc/fail2ban/jail.local

以下の内容を記述します:

[sshd]
enabled = true
port = 54321          # あなたの SSH ポートに変更
maxretry = 3          # 3 回失敗でBAN
findtime = 600        # 10 分以内
bantime = 3600        # 1 時間BAN

パラメータの説明

  • maxretry:失敗を許可する最大回数。デフォルトは 5 ですが、私は 3 に変更してより厳格にしています。
  • findtime:時間枠(秒単位)。600 秒 = 10 分以内に 3 回失敗するとトリガーされます。
  • bantime:BAN 期間(秒単位)。3600 = 1 時間。86400(1 日)またはそれ以上に設定しても構いません。

変更後、サービスを再起動します:

sudo systemctl restart fail2ban

BAN 状態の確認

# すべてのジェイルの状態を確認
sudo fail2ban-client status

# sshd ジェイルの詳細を確認
sudo fail2ban-client status sshd

現在BANされている IP リストが表示されます。

IP のBAN解除

自分が誤ってBANされた場合(例:デバッグ中にパスワードを何度も間違えたなど)、次のように解除できます:

sudo fail2ban-client set sshd unbanip あなたのIP

上級編:カスタムルール

fail2ban は SSH の保護だけでなく、Nginx、Apache、MySQL などのサービスも保護できます。設定方法は同様で、対応するジェイルを作成するだけです。これは長くなるので、ここでは触れる程度にします。

五、バージョン別比較表

Ubuntu 22.04 と 24.04 の 2 つのバージョンでは、初期設定フローはほぼ同じですが、いくつかの細かい違いがあります。

主要な違い比較

項目Ubuntu 22.04 LTSUbuntu 24.04 LTS
カーネルバージョン5.156.8
OpenSSH バージョン8.99.6
デフォルト Python3.103.12
systemd バージョン249255
サポート期間2027 年 4 月まで2029 年 4 月まで

実際の影響

良いニュース:この記事の初期設定フローは、両方のバージョンで完全に共通です。SSH 設定パス、fail2ban のインストール方法、ユーザー管理コマンドはすべて変更ありません。

注意すべき点

  1. OpenSSH 9.x(24.04) のデフォルト設定はより厳格で、一部の古い暗号化アルゴリズムが無効化されています。古いバージョンの SSH クライアントで 24.04 に接続すると問題が発生する可能性がありますが、クライアントをアップグレードすれば解決します。

  2. クラウドサービスプロバイダーのイメージ:一部のクラウドサービスプロバイダーの 22.04 イメージには、監視や管理スクリプトがプリインストールされており、あなたの設定と競合する可能性があります。公式のクリーンイメージを使用するか、初期設定前に既存のサービスを確認することをお勧めします。

  3. アップグレードの問題:すでに稼働中の 22.04 サーバーがある場合、24.04 にアップグレードする前にスナップショットを作成することをお勧めします。do-release-upgrade はほとんどの場合成功しますが、セキュリティ設定のような重要な部分は、慎重に扱うべきです。

どちらを選ぶべきか?

  • 新規プロジェクト:24.04 を直接使用。サポート期間が長く、ソフトウェアバージョンも新しい。
  • 既存プロジェクト:特定のバージョンに依存している場合(Python 3.10 など)、22.04 を使用。
  • 安定性重視:22.04 は成熟しており、問題点はほぼ解決されています。
  • 新機能志向:24.04 には新機能があり、より良いハードウェアサポートとパフォーマンス最適化が含まれています。

まとめ

これまで説明した初期設定フローの核心的なポイントを振り返りましょう:

セキュリティの 3 点セット

  • 一般ユーザーを作成し、root ログインを無効化
  • SSH ポートを変更、パスワード認証を無効化、鍵認証のみ許可
  • fail2ban で不審な IP を自動BAN

操作原則

  • 設定変更前に接続を切断しない
  • 各ステップで検証し、すぐに再起動しない
  • 秘密鍵は絶対に漏らさない

検証チェックリスト

  • deploy アカウントで新しいポート経由で SSH ログインできる
  • root アカウントでログインできない
  • パスワード認証が無効化されている
  • fail2ban サービスが正常に動作している

この設定は、サーバーセキュリティの第一歩に過ぎません。続いて、ファイアウォール(UFW)の設定、Docker のインストール、アプリケーションのデプロイなどが必要になります。これらの話題はまた別の機会に。

このチュートリアルに従って操作して問題が発生した場合は、ぜひコメントで質問してください。3 年前の深夜 3 時に自分を締め出した悲劇を、他の誰にも経験してほしくありません。

Ubuntu サーバー初期セキュリティ設定

Ubuntu サーバーをゼロから安全に設定:ユーザー管理、SSH 強化、fail2ban BAN設定

⏱️ 目安時間: 10 分

  1. 1

    ステップ1: SSH 鍵生成

    ローカルマシンで Ed25519 鍵ペアを生成:

    • コマンド:ssh-keygen -t ed25519 -C "email@example.com"
    • 秘密鍵は ~/.ssh/id_ed25519 に保存(漏洩禁止)
    • 公開鍵は ~/.ssh/id_ed25519.pub に保存(アップロード待ち)
  2. 2

    ステップ2: 一般ユーザー作成

    サーバーログイン後、デプロイユーザーを作成:

    • ユーザー作成:adduser deploy
    • sudo 権限付与:usermod -aG sudo deploy
    • 覚えやすいパスワードを設定
  3. 3

    ステップ3: 公開鍵の転送とログインテスト

    ローカルマシンで実行:

    • ssh-copy-id deploy@サーバーIP
    • ログインテスト:ssh deploy@サーバーIP
    • deploy で正常にログインできることを確認後、このアカウントで操作
  4. 4

    ステップ4: SSH 設定の変更

    /etc/ssh/sshd_config を編集:

    • Port 54321(高ポートに変更)
    • PermitRootLogin no(root ログイン禁止)
    • PasswordAuthentication no(パスワード認証無効化)
    • MaxAuthTries 3
    • ClientAliveInterval 300

    注意:変更前に接続を切断しないこと!
  5. 5

    ステップ5: SSH 設定の検証と再起動

    3 ステップ検証法:

    • 構文テスト:sudo sshd -t
    • 新しいウィンドウでテスト:ssh -p 54321 deploy@サーバーIP
    • 問題なければ再起動:sudo systemctl restart sshd
  6. 6

    ステップ6: fail2ban のインストールと設定

    ブルートフォース攻撃 IP の自動BAN:

    • インストール:sudo apt install fail2ban -y
    • 設定ファイル:/etc/fail2ban/jail.local
    • maxretry=3, bantime=3600 を設定
    • サービス再起動:sudo systemctl restart fail2ban

FAQ

SSH ポートは何番に変更すべきですか?
1024-65535 の範囲の高ポート(例:22222、54321)への変更をお勧めします。一般的なポート(80、443、3306 など)を避けることで、スキャンされる確率を減らせます。変更後、クラウドサービスプロバイダーのセキュリティグループで新しいポートを開放するのを忘れないでください。
SSH 設定変更後に接続できなくなったらどうすればいいですか?
慌てずに、クラウドサービスプロバイダーのコンソールから VNC でログインし、設定を元に戻して、sshd サービスを再起動してください。これが、設定変更前に接続を切断せず、新しいウィンドウでテストすることを強調している理由です。
fail2ban は自分の IP もBANしますか?
はい、します。パスワードを何度も間違えると、自分の IP もBANされます。BAN解除コマンド:sudo fail2ban-client set sshd unbanip あなたのIP。設定時に自分の IP をホワイトリスト(ignoreip)に追加することをお勧めします。
Ubuntu 22.04 と 24.04 の初期設定に違いはありますか?
この記事のフローは両バージョンで完全に共通です。主な違いは、24.04 の OpenSSH バージョンが新しい(9.6)ことと、デフォルト設定がより厳格で、一部の古い暗号化アルゴリズムが無効化されている点です。古い SSH クライアントを使用している場合、アップグレードが必要かもしれません。
鍵認証はパスワード認証よりどのくらい安全ですか?
桁違いに安全です。256 ビットの Ed25519 鍵をブルートフォース攻撃で破るには、宇宙の年齢よりも長い時間がかかります。パスワード認証は辞書攻撃やブルートフォース攻撃の対象となり、特に弱いパスワードはほぼ無防備です。
SSH ポートを 22 に戻すことはできますか?
技術的には可能ですが、お勧めしません。22 番ポートはインターネット全体でスキャンの主要ターゲットです。高ポートに変更することで、自動スキャンスクリプトの大部分を回避できます。fail2ban と鍵認証と組み合わせることで、より安全になります。

6 min read · 公開日: 2026年3月27日 · 更新日: 2026年3月27日

コメント

GitHubアカウントでログインしてコメントできます

関連記事