ufwファイアウォール:不要なポートを閉じる
5分でufwを設定する方法です。必要なポートを許可し、残りを閉じ、アドレスでアクセスを制限し、自分のSSHを遮断しない方法を説明します。
更新日 2026年8月23日
新品のマシンでは、ネットワークで待ち受けているものはすべて開いた状態です。意図的にインストールしたサービスもあれば、パッケージに同梱されてきたものもあります。ファイアウォールを使えば、これを一括で解決できます。リストに載せたもの以外はすべて拒否されます。
ufw はカーネルルールを扱いやすくするシンプルなラッパーです。ほとんどのケースではこれで十分であり、より複雑な構成については nftables の記事で解説しています。
基本的な設定
apt install -y ufw
ufw default deny incoming
ufw default allow outgoing
ufw allow 22/tcp
ufw enable
ufw status verbose
ここでは順序が重要です。SSH のルールは有効化する前に追加します。そうしないと ufw enable で接続が切断され、パネルのコンソール /hosting/vds/m/<id> またはレスキューモードから復旧しなければならなくなります。
パネルのコンソールはネットワークとは独立して動作するため、完全に締め出されることはありませんが、時間がかかります。
よく使うルール
ufw allow 80/tcp
ufw allow 443/tcp
ufw allow from 203.0.113.5 to any port 22 proto tcp
ufw limit 22/tcp
ufw delete allow 80/tcp
ufw status numbered
ufw delete 3
ufw limit は 30 秒間に 6 回を超えて接続を開く相手を減速させます。パスワード総当たり攻撃に対する手軽な対策です。同じ目的により細かく対応できるツールとして fail2ban があります。
allow from ルールは、公開すべきでないサービスに便利です。データベース、管理パネル、メトリクスのエクスポーターなどが該当します。
ufw allow from 203.0.113.5 to any port 5432 proto tcp
結果の確認
ufw status verbose
ss -tulpn
ss はシステムが待ち受けているものを表示し、ufw status は外部から何が通されているかを表示します。両者のリストの差分が、閉じているサービスであり、これは問題ありません。逆は問題です。ufw でポートが開いているのに、待ち受けているプロセスが存在しない状態です。
外部からは ping ではなくポートで確認します。
nc -vz <address> 443
Docker と ufw
マシンで Docker を動かしている場合は注意が必要です。コンテナのポート転送は ufw のルールより前のカーネルチェーンで処理されます。-p 5432:5432 で起動したコンテナは、ufw status が deny と表示していても外部から到達できます。そのようなポートはローカルインターフェースにバインドしてください。
docker run -p 127.0.0.1:5432:5432 postgres
よくある間違い
| 間違い | 結果 | 解決策 |
|---|---|---|
SSH のルールなしで ufw enable | ネットワークアクセスの喪失 | パネルのコンソールから入り、ufw allow 22/tcp |
| SSH ポートを変更し、古いルールを残した | 同じ結果 | 先にルール、その後でポート |
| ポートは開いているのにサービスが応答しない | サービスが 127.0.0.1 で待ち受けている | バインドアドレスを変更する |
| deny にもかかわらずコンテナに到達できる | Docker が ufw をバイパスする | 127.0.0.1 にバインドする |
ポートを閉じる前に
ss -tulpnを実行し、そこに何が座っているかを把握してください。閉じた監視ポートは、後から「サービスが落ちた」ように見えます。