OffshoreVps
セキュリティ2026年9月27日読了時間 6 分執筆:OffshoreVps チーム

ウェブサーバーの堅牢化:UFW、fail2ban、Nginx の設定

デフォルト拒否のファイアウォール、fail2ban のジェイル、より安全な Nginx ヘッダー、レート制限、自動アップデートで、ウェブサイトを動かす VPS を守ります。

新しいウェブサーバーは、オンラインになってから数分以内にスキャンされます。そのトラフィックのほとんどは自動化されたもので、基本的な対策をしていれば無害です。このガイドは15 分の堅牢化をもう一歩進め、ファイアウォール、fail2ban によるブルートフォース対策、より安全な Nginx の設定を取り上げます。

UFW、fail2ban、Nginx でウェブサーバーを堅牢化するために使うコマンドを、「sudo ufw default deny incoming」から始めて表示している VPS のターミナルウィンドウ
このガイドでサーバー上で実行するコマンドの例。

ステップ 1:UFW によるデフォルト拒否のファイアウォール

必要なものだけを許可し、残りをブロックします。自分が締め出されないよう、最初に SSH を追加してください。

sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status verbose

標準以外の SSH ポートを使っている場合は、OpenSSH の代わりにそのポートを許可します。

ステップ 2:繰り返しの失敗に対する fail2ban

fail2ban はログを監視し、ログインに失敗し続ける IP アドレスを遮断します。

sudo apt install -y fail2ban
sudo tee /etc/fail2ban/jail.local > /dev/null <<'CONF'
[DEFAULT]
bantime  = 1h
findtime = 10m
maxretry = 5

[sshd]
enabled = true

[nginx-http-auth]
enabled = true

[nginx-botsearch]
enabled = true
CONF
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd

SSH 鍵を使い、パスワードログインも無効にしてください。SSH 鍵の解説をご覧ください。

ステップ 3:Nginx のバージョンを隠して安全なヘッダーを追加する

/etc/nginx/nginx.conf の http ブロック内に記述します:

server_tokens off;

サイトの server ブロックに記述します:

add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

HSTS ヘッダーは、ドメインと使用しているすべてのサブドメインで HTTPS が動作するようになってから追加してください。

このガイドの手順(順番どおり):1. UFW によるデフォルト拒否のファイアウォール;2. 繰り返しの失敗に対する fail2ban;3. Nginx のバージョンを隠して安全なヘッダーを追加する;4. 悪質なリクエストを制限する;5. 最新の状態に保つ;6. 監視すべきこと
このガイドの手順(順番どおり)。

ステップ 4:悪質なリクエストを制限する

レート制限により、ログインページへのブルートフォース攻撃を遅らせられます:

# in the http block
limit_req_zone $binary_remote_addr zone=login:10m rate=5r/m;

# in your server block
location = /wp-login.php {
    limit_req zone=login burst=5 nodelay;
    # ...your usual PHP handling
}

sudo nginx -t && sudo systemctl reload nginx でテストして適用します。

ステップ 5:最新の状態に保つ

sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure --priority=low unattended-upgrades

自動セキュリティアップデートにより、何もしなくても既知の脆弱性がふさがれます。

監視すべきこと

  • sudo fail2ban-client status sshd で遮断状況を確認します。
  • /var/log/nginx/error.log をときどき確認します。
  • プロキシや CDN の背後にある場合は、fail2ban が実際のクライアント IP を読み取るようにしてください。そうしないと、自分のプロキシを遮断してしまうことがあります。