インストール/初期設定 一覧へ戻る トップUbuntu 26.04 LTSインストール/初期設定 / UFW/Fail2Ban
Ubuntu 26.04 LTS 構築ガイドシリーズ

UFW/Fail2Banによる基本的なファイアウォール設定

サービスを外部に公開する前に、まず不要な穴を塞ぎ不正アクセスを検知・遮断する

対象:Ubuntu 26.04 LTS (Server)

目次

  1. はじめに
  2. 詳細な技術要素
  3. 実証手順
  4. トラブルシューティング
  5. まとめ

はじめに

次回以降、Apache/Nginxなど外部からアクセスされるサービスを構築していきます。その前に、まず不要なポートを塞ぎ(UFW)、不正なログイン試行を自動的に検知・遮断する仕組み(Fail2Ban)を整えておきます。

危険:ファイアウォール有効化の順序に注意

UFWを有効化する前にSSHを許可し忘れると、リモート接続そのものが遮断され、物理アクセスできない限り操作不能になります。必ず「SSHを許可 → デフォルトポリシー設定 → 有効化」の順で行ってください。

1. 詳細な技術要素

用語説明
UFW(Uncomplicated Firewall)Linuxのnetfilterを簡単なコマンドで操作できるようにするフロントエンド。
デフォルトポリシー個別ルールに一致しない通信をどう扱うかの既定値。「incoming: deny/outgoing: allow」が定番の安全な組み合わせ。
Fail2Banログファイルを監視し、一定時間内に規定回数以上ログイン失敗したIPアドレスを自動的に一時遮断するツール。
jail(監獄)Fail2Banの監視単位。「sshdジェイル」ならSSHへのログイン失敗のみを監視する、という形で対象サービスごとに設定する。
jail.localFail2Banの既定設定(jail.conf)を上書きするための独自設定ファイル。アップデートで上書きされないよう、変更はここに書くのが定石。

2. 実証手順

1

現在のUFWの状態を確認する

実行コマンド
sudo ufw status verbose
実行結果(実機ログ)
Status: inactive
2

SSHを許可してから有効化する

実行コマンド
sudo ufw allow OpenSSH
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw --force enable
sudo ufw status verbose
実行結果(実機ログ)
Rules updated
Rules updated (v6)
Default incoming policy changed to 'deny'
Default outgoing policy changed to 'allow'
Firewall is active and enabled on system startup
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)

To                         Action      From
--                         ------      ----
22/tcp (OpenSSH)           ALLOW IN    Anywhere
22/tcp (OpenSSH (v6))      ALLOW IN    Anywhere (v6)

有効化後、既存セッションとは別に新しいSSH接続を試し、遮断されていないことを確認した(実機で確認済み)。

3

Fail2Banをインストールする

実行コマンド
sudo apt install -y fail2ban
sudo systemctl status fail2ban --no-pager | head -5
実行結果(実機ログ)
● fail2ban.service - Fail2Ban Service
     Loaded: loaded (/usr/lib/systemd/system/fail2ban.service; enabled; preset: enabled)
     Active: active (running)
4

sshd用のjailを設定する

実行コマンド
sudo tee /etc/fail2ban/jail.local << 'EOF'
[sshd]
enabled = true
port = ssh
maxretry = 5
findtime = 10m
bantime = 1h
EOF
sudo systemctl restart fail2ban
sudo fail2ban-client status
sudo fail2ban-client status sshd
実行結果(実機ログ)
Status
|- Number of jail:      1
`- Jail list:   sshd

Status for the jail: sshd
|- Filter
|  |- Currently failed: 0
|  |- Total failed:     0
|  `- Journal matches:  _SYSTEMD_UNIT=ssh.service + _COMM=sshd
`- Actions
   |- Currently banned: 0
   |- Total banned:     0
   `- Banned IP list:

5回のログイン失敗(10分以内)で1時間そのIPを遮断する設定。値は用途に応じて調整可能。

3. トラブルシューティング

fail2ban-client status が「Failed to access socket path」で失敗する

解決策systemctl restart fail2ban直後は、ソケットファイルの準備が完了する前にコマンドを実行してしまい、一時的にこのエラーが出ることがある(実機で確認済み)。数秒待ってから再実行すれば正常に応答する。恒久的に失敗する場合はsystemctl status fail2banでサービス自体が起動しているか確認すること。

UFW有効化後にSSH接続ができなくなった

解決策sudo ufw allow OpenSSH(またはsudo ufw allow 22/tcp)を実行し忘れたままdeny incomingを設定してしまったことが原因。物理アクセスまたは別の管理コンソール(VMのコンソール画面等)からsudo ufw disableで一時的に無効化し、SSHを許可するルールを追加してから再度有効化する。

4. まとめ

UFWでSSH以外の不要なポートを塞ぎ、Fail2Banでログイン失敗の繰り返しを自動遮断する設定を行いました。これで外部公開サービスを構築する前の基本的な防御ラインが整いました。

インストール/初期設定 一覧へ戻る