ESC

Start typing to search across invoices, services, domains, tickets, and more...

Search... Ctrl+K
Linuxサーバー

Linux ファイアウォール設定:firewalld と ufw でポートを開放する方法

6 ステップ 8 分で読めます 4 回閲覧 0
目次

Web サイトやデータベース、アプリケーションを公開しても外部からアクセスできない場合、多くはファイアウォールがポートを遮断しています。本記事では Linux のファイアウォール設定でよく使われる 2 つのツール、CentOS・Rocky Linux・AlmaLinux 標準の firewalld と、Ubuntu・Debian でよく使われる ufw について、状態確認、ポート開放、送信元 IP の制限、ルール削除の方法を解説します。コマンドはすべて root で実行します。

ファイアウォールを有効化・変更する前に、必ず SSH ポート(既定は 22、変更済みなら新ポート)を許可してください。許可しないとリモート接続がすぐに切断されます。万一の場合はクライアントエリアの VNC コンソールから復旧できます。

ステップ1:使用しているファイアウォールを確認する

1 台のサーバーで使うファイアウォール管理ツールは 1 つにしましょう。firewalld と ufw を同時に使うとルールが競合します。RHEL 系は通常 firewalld、Ubuntu は ufw(初期状態では無効のことが多い)、一部の Debian 最小イメージではどちらも入っていません。

systemctl is-active firewalld    # CentOS / Rocky / AlmaLinux
ufw status                       # Debian / Ubuntu

ステップ2:firewalld の導入と状態確認(CentOS / Rocky / AlmaLinux)

firewalld は「ゾーン」単位でルールを管理し、通常メインの NIC は public ゾーンに属します。インストールして起動したら、--list-all で許可されているサービスとポートを確認します。初期状態では ssh のみ許可されていることが多いです。

# Install and start firewalld (CentOS / Rocky / AlmaLinux)
dnf install -y firewalld
systemctl enable --now firewalld

firewall-cmd --state
firewall-cmd --get-active-zones
firewall-cmd --list-all

ステップ3:firewalld でポート・サービスを開放する

http・https のようなサービス名でも、ポート番号や範囲でも許可できます。--permanent は恒久設定への書き込みで、--reload 後に有効になります。--permanent なしのルールはすぐ有効ですが、再起動すると消えます。

# Open by service name
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https

# Open by port / range
firewall-cmd --permanent --add-port=8080/tcp
firewall-cmd --permanent --add-port=10000-10100/udp

# Apply and verify
firewall-cmd --reload
firewall-cmd --list-ports
firewall-cmd --list-services

ステップ4:firewalld で送信元 IP を制限・ルールを削除する

データベースや管理画面など重要なポートは全世界に公開すべきではありません。rich rule を使えば特定の IP やサブネットだけを許可できます。不要になったポートは --remove-port で削除します。

# Allow MySQL 3306 only from one subnet
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="198.51.100.0/24" port port="3306" protocol="tcp" accept'

# Remove a port
firewall-cmd --permanent --remove-port=8080/tcp
firewall-cmd --reload

ステップ5:ufw の導入と有効化(Ubuntu / Debian)

ufw は Ubuntu が提供するシンプルなファイアウォールツールです。有効化の前に必ず SSH を許可し、既定ポリシーを「受信は拒否・送信は許可」にします。ufw enable 実行時に SSH 接続が切れる可能性があると警告されますが、SSH を許可済みなら y で続行します。

# Debian / Ubuntu
apt update && apt install -y ufw

# Allow SSH FIRST (use your custom port if you changed it)
ufw allow 22/tcp
ufw default deny incoming
ufw default allow outgoing
ufw enable
ufw status verbose

ステップ6:ufw でポート開放・IP 制限・ルール削除

allow でポートを開放し、ポート範囲ではプロトコルの指定が必要です。from で送信元 IP を制限できます。ルール削除は numbered で番号を確認し、番号で削除するのが簡単です。

ufw allow 80/tcp
ufw allow 443/tcp
ufw allow 10000:10100/udp
ufw allow from 198.51.100.0/24 to any port 3306 proto tcp

# Delete a rule by number
ufw status numbered
ufw delete 3
Docker で公開したコンテナのポートは iptables に直接書き込まれ、ufw のルールを迂回することがあります。コンテナのポートを制限したい場合は docker run で 127.0.0.1 にバインドするか、Docker 公式のファイアウォールに関する説明を参照してください。

よくある質問

ポートを開放したのに外部からアクセスできません。

ss -tlnp でアプリがそのポートを待ち受けているか、待ち受けアドレスが 127.0.0.1 ではなく 0.0.0.0 かを確認し、アプリ自体の設定やプラットフォーム側のセキュリティポリシーも確認してください。解決しない場合はチケットでご相談ください。

ファイアウォールを無効にしても構いませんか?

技術的には可能です(systemctl stop firewalld や ufw disable)が、インターネットに公開されたサーバーではおすすめしません。必要なポートだけ許可し、それ以外は拒否するのが安全です。

ファイアウォールを有効にしたら SSH が切れました。

VNC コンソールでログインし、firewall-cmd --permanent --add-service=ssh && firewall-cmd --reload または ufw allow 22/tcp を実行して SSH を許可すれば復旧できます。

上記の手順で解決しない場合は、サポートチケットを送信して IMIDC の 24 時間 365 日テクニカルサポートへお問い合わせください。サーバー IP、OS、実行したコマンド、エラー画面のスクリーンショットを添えていただくと、より迅速に対応できます。

この回答はお役に立ちましたか?

関連チュートリアル