Ubuntuセキュリティ完全ガイド2026 — 最新脅威対策と堅牢化チェック

セキュリティ

VPSを借りてUbuntuサーバーを立てたら、まず最初にやるべきことがあります。それがセキュリティ強化(ハードニング)です。インターネットに公開したサーバーは、起動直後から世界中のボットがポートをスキャンし、SSHにブルートフォース攻撃(辞書攻撃)を仕掛けてきます。本記事では Ubuntu 24.04 LTS のサーバーを対象に、2026年時点の最新構成を実際に ubuntu:24.04 Dockerコンテナで検証した一次データをもとに解説します。

検証環境:ubuntu:24.04 公式Dockerイメージ(openssh-server 1:9.6p1-3ubuntu13.16)。比較用に ubuntu:22.04 も使用。すべて2026年6月15日に docker run --rm で実測しています。

この記事のポイント

  • Ubuntu 24.04 の SSH デフォルトは sshd -T 実測で X11Forwarding yesPasswordAuthentication yes。いずれも要変更
  • UFW 0.36.2 の DEFAULT_INPUT_POLICY は最初から DROP。有効化するだけで受信は遮断される(実測確認)
  • fail2ban 1.0.2 のデフォルト banactioniptables-multiport。「nftablesがデフォルト」は誤解(jail.conf 実測)
  • ed25519 鍵は実測で秘密鍵411B・公開鍵98B。RSA-4096(3381B / 743B)の約8分の1で強度は同等以上
  • 設定の順番を間違えると締め出されます。記事の手順通りに進めてください

目次

  1. はじめに:なぜ即日セキュリティ設定が必要か
  2. 必須セキュリティパッケージ一覧(2026年版・実測)
  3. UFWファイアウォールの設定
  4. SSH強化:鍵認証とsshd_config設定
  5. 自動セキュリティアップデートの有効化
  6. fail2banでブルートフォース攻撃を遮断
  7. AppArmorとauditdの確認
  8. Ubuntu 22.04 と 24.04 のバージョン差
  9. セキュリティ強化チェックリスト
  10. まとめ

はじめに:なぜ即日セキュリティ設定が必要か

VPSを起動してSSHログインできる状態になると、すぐにボットによる攻撃が始まります。/var/log/auth.log を見ると、数分以内に Failed password for root from ... という行が大量に出ます。これはrootやよくあるユーザー名のパスワードを片っ端から試すブルートフォース攻撃です。

Canonical(Ubuntu開発元)は脆弱性が見つかるたびに Ubuntu Security Notices(USN)としてセキュリティ修正を公開しています。下は実際の USN 一覧ページです。毎日のように新しい修正が出ていることが分かります。

Ubuntu Security Notices 公式ページ(Playwright実撮影)
Ubuntu Security Notices 公式ページ(Playwright実撮影)

2026年時点で特に多いのは次のような脅威です。

  • SSHへのブルートフォース攻撃(ボットネット経由の辞書攻撃)
  • 公開ポートへの脆弱性スキャン(古いミドルウェア狙い)
  • マイニングマルウェア・ボットの埋め込み
  • サプライチェーン攻撃(npm・pip 経由の悪意あるパッケージ)

これらすべてを完全に防ぐのは難しいですが、基本的なハードニングをするだけで標的になる確率が劇的に下がります。まずは下記の手順を順番に進めましょう。

必須セキュリティパッケージ一覧(2026年版・実測)

Ubuntu 24.04 のリポジトリで使えるセキュリティ関連パッケージのバージョンを、ubuntu:24.04 コンテナで apt-cache policy を実行して実測しました。

Ubuntu 24.04 セキュリティパッケージ一覧(実測)
Ubuntu 24.04 セキュリティパッケージ一覧(実測)

この中から、まず次の4パッケージを優先的にインストールします。実際にコンテナで apt-get install を実行したログがこちらです。

必須セキュリティパッケージの apt install 実ログ(実測)
必須セキュリティパッケージの apt install 実ログ(実測)



ubuntu@vps: ~
$ sudo apt update && sudo apt upgrade -y
$ sudo apt install -y ufw fail2ban unattended-upgrades auditd
Setting up auditd (1:3.1.2-2.1build1.1) …
Setting up nftables (1.0.9-1ubuntu0.1) …
Setting up fail2ban (1.0.2-3ubuntu0.1) …
Setting up ufw (0.36.2-6) …
Setting up unattended-upgrades (2.9.1+nmu4ubuntu1) …

実測すると、ufw を入れた時点で nftables 1.0.9libnftables1 が依存関係として同時にインストールされ、fail2ban を入れると python3-systemd が一緒に入ります。この4パッケージで、ファイアウォール・自動BAN・自動更新・監査ログの土台が一気に揃います。

注意

sudo apt upgrade -y は必ずUFWを有効にする前に済ませてください。UFWを先に有効化してSSH許可を忘れると、その後の操作で締め出されることがあります。順番が大事です。

UFWファイアウォールの設定

UFW(Uncomplicated Firewall)は iptables/nftables のフロントエンドです。Ubuntu 24.04 では UFW 0.36.2 が標準で、パケットフィルタ本体として nftables v1.0.9 が依存で入ります。まずコンテナで実測したデフォルト設定を見てみましょう。

UFWデフォルトポリシーと nftables バックエンド(実測)
UFWデフォルトポリシーと nftables バックエンド(実測)

注目すべきは /etc/default/ufwDEFAULT_INPUT_POLICY="DROP" です。UFW を有効にするだけで、許可していない受信接続はすべてブロックされます。ただし実測では /etc/ufw/ufw.confENABLED=no で、インストール直後は無効の状態です。

①SSH を許可してから UFW を有効にする(順番厳守)




ubuntu@vps: ~
$ sudo ufw allow OpenSSH
Rules updated
Rules updated (v6)
$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
$ sudo ufw status verbose
Status: active
Default: deny (incoming), allow (outgoing), disabled (routed)
22/tcp ALLOW IN Anywhere

allow OpenSSH を先に実行してから enable します。ここだけは順番を間違えると動きません。UFW を先に有効にしてSSH許可を忘れると、VPSのWebコンソール(管理画面のシリアルコンソール)からしかアクセスできなくなります。

②Webサーバーを動かす場合の追加設定




ubuntu@vps: ~
$ sudo ufw allow 80/tcp # HTTP
$ sudo ufw allow 443/tcp # HTTPS
$ sudo ufw status numbered
[ 1] 22/tcp ALLOW IN Anywhere
[ 2] 80/tcp ALLOW IN Anywhere
[ 3] 443/tcp ALLOW IN Anywhere

SSH強化:鍵認証とsshd_config設定

次に重要なのがSSH設定の強化です。Ubuntu 24.04 の OpenSSH は実測で OpenSSH_9.6p1(パッケージ 1:9.6p1-3ubuntu13.16)。デフォルトの設定にはサーバー用途では要変更の項目がありますsshd -T で実際の実効値をダンプした結果がこちらです。

sshd -T で確認したSSHデフォルト設定(実測)
sshd -T で確認したSSHデフォルト設定(実測)

実測で確認できた要注意ポイントは次の3つです。

  • x11forwarding yes ― GUIアプリをSSH越しに転送する機能。サーバーでは不要なので no
  • passwordauthentication yes ― パスワードログインが有効。鍵認証に切り替えてから no
  • permitrootlogin without-password ― rootは鍵があればログイン可。完全に塞ぐなら no

ちなみに permitrootloginwithout-password は、設定ファイルでよく見る prohibit-password と同じ意味です。sshd -T は正規化した without-password で返してきます。

①まず公開鍵ペアを作成する(ローカルPCで実行)

ローカルPC(接続元)で鍵を生成します。ed25519 はRSA-4096より短い鍵長で同等以上の強度を持つ、2026年の推奨アルゴリズムです。実際にコンテナで生成してサイズを比較しました。

ed25519 鍵生成と RSA-4096 の鍵サイズ比較(実測)
ed25519 鍵生成と RSA-4096 の鍵サイズ比較(実測)

実測では ed25519 の秘密鍵が 411バイト・公開鍵が 98バイト。RSA-4096(秘密鍵3381バイト・公開鍵743バイト)と比べて圧倒的にコンパクトです。




your-local-pc: ~
$ ssh-keygen -t ed25519 -C “your-email@example.com”
Generating public/private ed25519 key pair.
Enter passphrase (empty for no passphrase): [強力なパスフレーズを入力]
Your identification has been saved in /home/user/.ssh/id_ed25519
Your public key has been saved in /home/user/.ssh/id_ed25519.pub
$ ssh-copy-id -i ~/.ssh/id_ed25519.pub user@your-vps-ip

②sshd_config を強化する

公開鍵をサーバーに登録してSSHログインできることを確認したら、次の設定を変更します。




ubuntu@vps: ~
$ sudo nano /etc/ssh/sshd_config
# 以下を変更・追記する
PermitRootLogin no
PasswordAuthentication no
X11Forwarding no
MaxAuthTries 3
LoginGraceTime 20
$ sudo sshd -t # 設定の文法チェック(エラーが出なければOK)
$ sudo systemctl restart ssh
● ssh.service – OpenBSD Secure Shell server
Active: active (running)

重要

PasswordAuthentication no に変更する前に、必ず鍵認証でSSHログインできることを別ターミナルで確認してください。パスワード認証を無効にした状態で鍵が使えないと、サーバーから締め出されます。

自動セキュリティアップデートの有効化

unattended-upgrades を使うと、セキュリティパッチを自動で適用できます。Ubuntu 24.04 では実測で 2.9.1+nmu4ubuntu1 が入ります。設定ファイル /etc/apt/apt.conf.d/50unattended-upgrades を確認すると、デフォルトの許可リスト(Allowed-Origins)に ${distro_id}:${distro_codename}-security やESM系のセキュリティオリジンが最初から含まれています。




ubuntu@vps: ~
$ grep security /etc/apt/apt.conf.d/50unattended-upgrades | grep -v ‘//’
“${distro_id}:${distro_codename}-security”;
“${distro_id}ESMApps:${distro_codename}-apps-security”;
“${distro_id}ESM:${distro_codename}-infra-security”;
$ cat /etc/apt/apt.conf.d/20auto-upgrades
APT::Periodic::Update-Package-Lists “1”;
APT::Periodic::Unattended-Upgrade “1”;

再起動が必要なアップデートを自動で再起動して適用したい場合は、50unattended-upgradesUnattended-Upgrade::Automatic-Reboot "true"; を設定します。ただし本番サービスがある場合は、Automatic-Reboot-Time "04:00"; のようにメンテナンスウィンドウを決めてから有効にしましょう。

fail2banでブルートフォース攻撃を遮断

fail2ban 1.0.2-3ubuntu0.1 は、ログを監視して一定回数以上認証に失敗したIPを自動的にブロックします。ここで実測して分かった重要な事実があります。Ubuntu 24.04 の /etc/fail2ban/jail.conf[DEFAULT] を確認したところ、デフォルトの banactioniptables-multiport でした。「24.04 では fail2ban が nftables に移行した」という説明をよく見かけますが、デフォルトのjail設定は iptables 系のままです(実際の遮断は iptables-nft 互換レイヤ経由で動きます)。




ubuntu@vps: ~
$ fail2ban-client –version
Fail2Ban v1.0.2
$ grep -E ‘^(bantime|findtime|maxretry|banaction)’ /etc/fail2ban/jail.conf | head -4
bantime = 10m
findtime = 10m
maxretry = 5
banaction = iptables-multiport

実測したデフォルト値は bantime 10mfindtime 10mmaxretry 5。つまり「10分以内に5回失敗したら10分BAN」が初期値です。これを実運用向けに強化します。設定は必ず jail.local を作って行います。




ubuntu@vps: ~
$ sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
$ sudo nano /etc/fail2ban/jail.local
# [DEFAULT] セクションを以下に変更
bantime = 1h
findtime = 10m
maxretry = 3
# nftablesで遮断したい場合は明示的に指定
banaction = nftables-multiport
$ sudo systemctl enable –now fail2ban
$ sudo fail2ban-client status sshd
Status for the jail: sshd
|- Filter … Currently failed: 0 / Total failed: 0
`- Actions … Currently banned: 0
著者アイコン
著者アイコン

正直、fail2banで一番詰まりやすいのが jail.local の作成を忘れること。jail.conf を直接編集すると、パッケージ更新で上書きされて設定が消えます。必ず jail.local にコピーしてから編集してください。あと「nftablesで動いているはず」と思い込まず、fail2ban-client get sshd action で実際の banaction を確認するのがおすすめです。

参考までに、fail2ban の公式パッケージページ(Ubuntu noble)でもバージョンと依存関係を確認できます。

Ubuntu noble の fail2ban パッケージ公式ページ(Playwright実撮影)
Ubuntu noble の fail2ban パッケージ公式ページ(Playwright実撮影)

AppArmorとauditdの確認

Ubuntu 24.04 には実測で AppArmor 4.0.1 が標準搭載されています。AppArmor はプロセスごとにアクセスできるリソース(ファイル・ネットワーク等)を制限するMAC(強制アクセス制御)の仕組みです。VPSの実機では次のように状態を確認できます。




ubuntu@vps: ~
$ sudo aa-status
apparmor module is loaded.
36 profiles are loaded.
34 profiles are in enforce mode.
$ sudo systemctl status apparmor
● apparmor.service – Load AppArmor profiles
Active: active (exited)

補足

aa-statussystemctl はカーネル機能とsystemdに依存するため、本記事の検証に使った素のDockerコンテナ内では動きません(コンテナはホストのカーネルを共有し、systemdを持たないため)。上のコマンドは実際のVPS/物理マシン上で実行してください。本記事ではパッケージのバージョン(apparmor 4.0.1)までをコンテナで実測しています。

auditd(Linux Audit Daemon、実測 3.1.2)はシステム上のコマンド実行やファイルアクセスを記録します。コンプライアンス要件がある環境や、侵害後の調査のために有効にしておくと役立ちます。




ubuntu@vps: ~
$ sudo systemctl enable –now auditd
$ sudo auditctl -w /etc/passwd -p wa -k passwd_changes
rule added
$ sudo ausearch -k passwd_changes
<no matches> # 監視開始直後は記録なし

Ubuntu 22.04 と 24.04 のバージョン差

すでに 22.04 のサーバーを運用している人向けに、同じ確認コマンドを ubuntu:22.04ubuntu:24.04 の両コンテナで実行してバージョンを比較しました。

Ubuntu 22.04 vs 24.04 セキュリティパッケージ比較(実測)
Ubuntu 22.04 vs 24.04 セキュリティパッケージ比較(実測)

特に fail2ban0.11.2 → 1.0.2 とメジャーバージョンが上がっています。一方で、X11Forwarding yes がデフォルトなのは 22.04 でも 24.04 でも同じでした。「新しいバージョンだから安全」ではなく、どのバージョンでも初期設定の見直しが必要だということです。

セキュリティ強化チェックリスト

ここまでの実測結果(デフォルト値と推奨値)をチェックリストにまとめました。

Ubuntu 24.04 セキュリティ強化チェックリスト(実測ベース)
Ubuntu 24.04 セキュリティ強化チェックリスト(実測ベース)

設定が完了したら、次のコマンドで現在の状態をまとめて確認できます。




ubuntu@vps: ~
$ sudo systemctl is-active ufw fail2ban unattended-upgrades auditd
active
active
active
active
$ sudo sshd -T | grep -E ‘passwordauthentication|permitrootlogin|x11forwarding’
passwordauthentication no
permitrootlogin no
x11forwarding no
設定項目 デフォルト値(実測) 推奨値 優先度
X11Forwarding yes no ★★★★★
PasswordAuthentication yes no(鍵認証後) ★★★★★
PermitRootLogin without-password no ★★★★☆
MaxAuthTries 6 3 ★★★☆☆
UFW(DEFAULT_INPUT) DROP(ただし ENABLED=no) SSH許可後に有効化 ★★★★★
fail2ban banaction iptables-multiport 1h BAN / maxretry=3 ★★★★☆
unattended-upgrades 未インストール 有効(2.9.1) ★★★★★
AppArmor 有効(4.0.1・デフォルト) そのまま維持 ★★★☆☆

まとめ

Ubuntu 24.04 LTS のセキュリティ強化について、2026年6月15日時点の実測データをもとに解説しました。

  • UFW 0.36.2 の DEFAULT_INPUT_POLICY は実測で DROP。SSHを許可してから enable する順番が重要
  • SSHのデフォルトは sshd -T 実測で X11Forwarding yes / PasswordAuthentication yes(22.04も同じ)
  • ed25519 鍵に切り替えた後、PasswordAuthentication no でパスワードログインを無効化する
  • fail2ban 1.0.2 のデフォルト banaction は iptables-multiport。nftablesにしたいなら明示指定が必要
  • unattended-upgrades 2.9.1 はセキュリティオリジンが既定で許可リストに入っている
  • AppArmor 4.0.1 はデフォルトで有効。auditd 3.1.2 を追加すると監査ログが取れる

これらの設定を完了させれば、一般的なVPS環境として十分な基本セキュリティを確保できます。本番でサービスを公開するなら、次のステップとしてTLS証明書の取得(Let’s Encrypt)も進めてみてください。どのVPSを選ぶか迷っている人は、実測ベンチで比較した も参考にしてください。

コメント

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