2026年8月9日

2026年8月9日

UFWでファイアウォールを設定する方法|UbuntuのWordPressサーバーで安全に有効化する手順

UbuntuでWordPressを動かしているなら、ファイアウォールはUFW(Uncomplicated Firewall)で設定するのが手軽です。手順は「受信は原則拒否・送信は許可を既定にする」「SSHを許可してから有効化する」「Webサーバー用のプロファイルで80番と443番を開ける」の順で、この順番を守ることで、SSHから締め出される事故の多くを防げます。この記事では、有効化までの手順に加えて、ルールの確認と削除、接続回数の制限、IPv6、ログの見方、Dockerやクラウド側のファイアウォールとの関係まで解説します。

UFWはiptables(またはnftables)のルールを分かりやすいコマンドで管理するための道具です。細かな制御が必要な場合は直接iptablesを書く方法もありますが、Webサーバー1台を守る用途ならUFWで十分なことがほとんどです。

作業前の準備

状態を確認する

UbuntuにはUFWが標準で入っていますが、初期状態では無効です。

sudo ufw status verbose
# Status: inactive と表示されれば無効

入っていない場合は sudo apt install ufw で導入します。RHEL系のディストリビューションでは標準のfirewalldを使うのが一般的で、UFWとfirewalldを同時に動かすとルールが衝突します。どちらか一方に決めてください。

締め出されたときの入り口を用意する

UFWを有効にした瞬間からルールが効くため、SSHを許可し忘れると今の接続も新しい接続も切れることがあります。作業前に、VPSやクラウドの管理画面から使える「コンソール」機能で、SSHを使わずにログインできることを確かめておきます。本番の前に検証用サーバーで一度試すのも有効です。

基本の設定手順

1. 既定の方針を決める

sudo ufw default deny incoming
sudo ufw default allow outgoing

受信は許可したもの以外を拒否し、送信はすべて許可します。WordPressはプラグインやテーマの更新、メール送信、外部APIとの連携などで外向きの通信を使うため、送信まで絞ると更新が失敗するなどの不具合が出やすくなります。送信を制限したい場合は、必要な通信を洗い出してから段階的に進めます。

2. SSHを許可する

# 利用できるアプリケーションプロファイルを確認
sudo ufw app list

# どこからでもSSHを許可する場合
sudo ufw allow OpenSSH

# 管理用の接続元が決まっている場合はこちらが安全
sudo ufw allow from 203.0.113.10 to any port 22 proto tcp

OpenSSH はOpenSSHサーバーのパッケージが用意しているプロファイル名で、22番ポートのTCPを意味します。SSHのポートを22番以外に変えている場合は、プロファイルではなく実際のポート番号を指定します(例: sudo ufw allow 2222/tcp)。ポートを変更するときは、新しいポートをUFWで許可してからSSHの設定を変える順序にします。逆にすると、変更直後に接続できなくなります。

接続元を固定できない場合は、次の「接続回数の制限」と公開鍵認証を組み合わせて守ります。

3. Webサーバーのポートを開ける

# Nginxの場合
sudo ufw allow 'Nginx Full'

# Apacheの場合
sudo ufw allow 'Apache Full'

Nginx Full や Apache Full は、80番と443番をまとめて開けるプロファイルです。プロファイル名はWebサーバーのパッケージに含まれる定義ファイル(/etc/ufw/applications.d/ 配下)によって決まり、パッケージやバージョンで異なることがあります。sudo ufw app list に表示された名前を使い、sudo ufw app info 'Nginx Full' で中身のポートを確かめてから許可してください。表示されない場合は sudo ufw allow 80/tcp と sudo ufw allow 443/tcp で直接指定します。

HTTPSしか使わないつもりでも、80番は残しておくのが一般的です。HTTPからHTTPSへのリダイレクトや、Let's EncryptのHTTP-01認証による証明書の更新に80番を使うためです。HTTP/3(QUIC)を有効にしている場合は sudo ufw allow 443/udp も追加します。

4. 確認してから有効化する

# 追加したルールを確認(有効化前でも確認できる)
sudo ufw show added

# 有効化
sudo ufw enable

有効化の際に、SSH接続が切れる可能性があるという確認が表示されます。SSHが許可に含まれていることを確認してから進めます。有効化したら、今のSSH接続は閉じずに別のターミナルから新しく接続できるかを試します。新しい接続が通れば完了です。

状態の確認とルールの削除

# 既定の方針とルールを詳しく表示
sudo ufw status verbose

# 番号付きで表示
sudo ufw status numbered

# 番号を指定して削除
sudo ufw delete 3

# ルールの内容を指定して削除
sudo ufw delete allow 'Apache Full'

番号で削除すると、それより後ろのルールの番号が繰り上がります。続けて複数のルールを番号で消すときは、毎回 status numbered で番号を確認し直すか、後ろの番号から消していきます。IPv4とIPv6のルールは別の番号で表示されるため、片方だけを消して片方が残ることにも注意します。

SSHへの総当たりを抑える limit

sudo ufw limit OpenSSH

limit は、同じIPアドレスから短時間に多くの接続を試みたときに一時的に拒否するルールです。マニュアルでは、30秒以内に6回以上の接続を試みたIPを拒否すると説明されています。パスワード総当たりの勢いを落とす効果はありますが、ログイン失敗の回数を見ているわけではありません。パスワード認証を無効にして公開鍵認証にする、fail2banで失敗が続いたIPを遮断する、といった対策と組み合わせると効果的です。

すでに allow OpenSSH を入れている場合は、そちらを削除してから limit を追加しないと、先に一致する許可ルールで通ってしまいます。

IPv6の設定

サーバーにIPv6アドレスがある場合、UFWの設定ファイル /etc/default/ufw で IPV6=yes になっていれば、追加したルールはIPv6にも同時に適用されます。Ubuntuでは既定で有効になっていることが多いですが、念のため確認します。ここが no のままだと、IPv4では閉じているポートがIPv6から開いたままになることがあります。変更した場合は sudo ufw reload で反映します。

ログで拒否された通信を確認する

# ログを有効化(low / medium / high などの段階がある)
sudo ufw logging low

# ログの確認(環境によって出力先が異なる)
sudo tail -f /var/log/ufw.log
sudo journalctl -k | grep -i ufw

拒否された通信は [UFW BLOCK] という形で記録され、送信元(SRC)、宛先ポート(DPT)、プロトコル(PROTO)が分かります。「設定したのに通らない」ときは、ここで実際に拒否されているポートを確かめるのが近道です。ログの段階を high にすると量が多くなるため、調査が終わったら low に戻します。

DockerとクラウドのファイアウォールはUFWの外側

Dockerでコンテナのポートを公開すると、Dockerが独自にファイアウォールのルールを追加するため、UFWで拒否していても外から届く場合があります。WordPressやデータベースをDockerで動かしているときは、ポートを 127.0.0.1:8080:80 のようにローカルだけに公開し、ホスト側のNginxなどから中継する構成にすると、UFWの設定と食い違いにくくなります。

クラウドやVPSの管理画面のファイアウォール(セキュリティグループなど)は、サーバーの外側にある別の層です。両方で許可しないと通信は届きません。UFWで開けたのに接続できないときは、外側の設定も確認します。

困ったときの戻し方

# 一時的に無効化(ルールは残る)
sudo ufw disable

# すべてのルールを消して初期状態に戻す
sudo ufw reset

SSHで入れなくなった場合は、管理画面のコンソールからログインして sudo ufw disable を実行すれば、ひとまず接続は戻ります。そのうえで status numbered を見ながらルールを直し、もう一度有効化します。reset は既存のルールを消すため、使う前に sudo ufw status numbered の内容を控えておきます。

設定を終えたら、WordPressの管理画面でプラグインの更新確認が通るか、「ツール」→「サイトヘルス」で通信関係のエラーが出ていないか、問い合わせフォームのメールが届くかも確認しておくと安心です。UFWのプロファイル名やログの出力先はUbuntuのバージョンやパッケージ構成で変わることがあります(2026年10月現在)。

まとめ

  • 既定の方針は「受信拒否・送信許可」にし、SSHを許可してから ufw enable する
  • Webサーバーのプロファイル名は ufw app list で確かめ、80番と443番を開ける
  • 有効化後は今のSSH接続を残したまま、別のターミナルで新しく接続できるか試す
  • limit は総当たりの勢いを抑えるもので、公開鍵認証やfail2banと組み合わせる
  • /etc/default/ufw の IPV6=yes を確認し、IPv6の穴を残さない
  • Dockerの公開ポートとクラウド側のファイアウォールは別に確認する

お気軽にご相談ください

お見積りへ お問い合わせへ
▲