firewalld でポートが開かないときの対処方法

  • URLをコピーしました!

Linux サーバでサービスを公開しようとして firewalld を設定したのに、外部からアクセスできない…。
そんなときに確認すべきポイントをまとめます。

目次

1. firewalld の基本確認

まずは firewalld が有効かどうかを確認します。

systemctl status firewalld
firewall-cmd --state
  • running であれば有効
  • not running の場合、ルールは適用されていません

2. ゾーン設定の確認

症状

  • firewall-cmd --list-ports で追加したのに、アクセスできない

原因

  • インターフェースが別のゾーンに紐づいている
  • public に開けたつもりが、実際は external ゾーンで動いている

解決方法

  1. 現在のゾーンを確認: firewall-cmd --get-active-zones
  2. 該当インターフェースに設定されているゾーンを確認し、そのゾーンにルールを追加する: firewall-cmd --zone=public --add-port=8080/tcp

3. permanent オプション適用忘れ

症状

  • 再起動後に設定が消える

原因

  • 一時的な設定(--add-port)しかしていない

解決方法

  • 設定を恒久化して、リロードする: firewall-cmd --zone=public --add-port=8080/tcp --permanent firewall-cmd --reload

4. サービス名の指定間違い

firewalld では --add-service=http のようにサービス名で追加できます。
ただし、firewall-cmd --get-services に載っていない名前を指定しても反映されません。

  • 確実なのは ポート番号で指定する方法 firewall-cmd --add-port=443/tcp

5. SELinux の影響

症状

  • firewalld の設定は正しいのに、依然としてアクセスできない

原因

  • SELinux がポリシーで制限している

解決方法

  1. SELinux の状態確認: getenforce
  2. Enforcing の場合、サービスごとのポリシーを見直す
    例:HTTPD でポート 8080 を使うとき semanage port -a -t http_port_t -p tcp 8080

6. ネットワーク側の制約

  • クラウド環境(AWS, GCP, Azure)では セキュリティグループやVPCファイアウォール 側で制限されている可能性があります。
  • firewalld の前に、ネットワークポリシーを確認することも重要です。

まとめ

firewalld でポートが開かないときの確認ポイント:

  1. firewalld が有効か確認
  2. 正しいゾーンにルールを追加しているか
  3. --permanent--reload を忘れていないか
  4. サービス名指定よりもポート番号指定を優先
  5. SELinux が制御していないか
  6. クラウドのセキュリティ設定も確認
目次