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 "[email protected]"
# Windows(PowerShell、OpenSSH クライアントが必要)
ssh-keygen -t ed25519 -C "[email protected]"
実行すると、鍵の保存場所とパスワードの設定を尋ねられます。デフォルトのパスで問題なければ 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 LTS | Ubuntu 24.04 LTS |
|---|---|---|
| カーネルバージョン | 5.15 | 6.8 |
| OpenSSH バージョン | 8.9 | 9.6 |
| デフォルト Python | 3.10 | 3.12 |
| systemd バージョン | 249 | 255 |
| サポート期間 | 2027 年 4 月まで | 2029 年 4 月まで |
実際の影響
良いニュース:この記事の初期設定フローは、両方のバージョンで完全に共通です。SSH 設定パス、fail2ban のインストール方法、ユーザー管理コマンドはすべて変更ありません。
注意すべき点:
-
OpenSSH 9.x(24.04) のデフォルト設定はより厳格で、一部の古い暗号化アルゴリズムが無効化されています。古いバージョンの SSH クライアントで 24.04 に接続すると問題が発生する可能性がありますが、クライアントをアップグレードすれば解決します。
-
クラウドサービスプロバイダーのイメージ:一部のクラウドサービスプロバイダーの 22.04 イメージには、監視や管理スクリプトがプリインストールされており、あなたの設定と競合する可能性があります。公式のクリーンイメージを使用するか、初期設定前に既存のサービスを確認することをお勧めします。
-
アップグレードの問題:すでに稼働中の 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: SSH 鍵生成
ローカルマシンで Ed25519 鍵ペアを生成:
• コマンド:ssh-keygen -t ed25519 -C "[email protected]"
• 秘密鍵は ~/.ssh/id_ed25519 に保存(漏洩禁止)
• 公開鍵は ~/.ssh/id_ed25519.pub に保存(アップロード待ち) - 2
ステップ2: 一般ユーザー作成
サーバーログイン後、デプロイユーザーを作成:
• ユーザー作成:adduser deploy
• sudo 権限付与:usermod -aG sudo deploy
• 覚えやすいパスワードを設定 - 3
ステップ3: 公開鍵の転送とログインテスト
ローカルマシンで実行:
• ssh-copy-id deploy@サーバーIP
• ログインテスト:ssh deploy@サーバーIP
• deploy で正常にログインできることを確認後、このアカウントで操作 - 4
ステップ4: SSH 設定の変更
/etc/ssh/sshd_config を編集:
• Port 54321(高ポートに変更)
• PermitRootLogin no(root ログイン禁止)
• PasswordAuthentication no(パスワード認証無効化)
• MaxAuthTries 3
• ClientAliveInterval 300
注意:変更前に接続を切断しないこと! - 5
ステップ5: SSH 設定の検証と再起動
3 ステップ検証法:
• 構文テスト:sudo sshd -t
• 新しいウィンドウでテスト:ssh -p 54321 deploy@サーバーIP
• 問題なければ再起動:sudo systemctl restart sshd - 6
ステップ6: fail2ban のインストールと設定
ブルートフォース攻撃 IP の自動BAN:
• インストール:sudo apt install fail2ban -y
• 設定ファイル:/etc/fail2ban/jail.local
• maxretry=3, bantime=3600 を設定
• サービス再起動:sudo systemctl restart fail2ban
FAQ
SSH ポートは何番に変更すべきですか?
SSH 設定変更後に接続できなくなったらどうすればいいですか?
fail2ban は自分の IP もBANしますか?
Ubuntu 22.04 と 24.04 の初期設定に違いはありますか?
鍵認証はパスワード認証よりどのくらい安全ですか?
SSH ポートを 22 に戻すことはできますか?
6 min read · 公開日: 2026年3月27日 · 更新日: 2026年3月27日
関連記事
shadcn/uiで管理画面の骨組みを構築:Sidebar + Layout ベストプラクティス
shadcn/uiで管理画面の骨組みを構築:Sidebar + Layout ベストプラクティス
Tailwind レスポンシブレイアウト実践:コンテナクエリとブレークポイント戦略
Tailwind レスポンシブレイアウト実践:コンテナクエリとブレークポイント戦略
shadcn/ui インストールとテーマカスタマイズ完全ガイド(CSS変数付き)

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