こんにちは!
今日は、RHEL 10環境でFirewalldの基本的な使い方についてご紹介します。
まず、ちょっとした個人的なニュースから。8年ほど使い続けたパソコンがついに壊れてしまいました。これを機に新しいデスクトップを購入!勉強のためにVMware Workstation Proをインストールし、RHEL10(開発者サブスクリプション)を使い始めました。しばらくはこの環境で記事を書いていこうと思います。
ちなみに、RedHat Subscription Managerに登録すれば、RHELを一生無料で使えるようですが、私の場合はなぜか登録が失敗続き。もし解決したら、その方法も記事にしたいですね。
それでは、本題に入ります!
1. Firewalldのインストールとステータス確認
まず、Firewalldがインストールされていることを確認します。
$ sudo systemctl status firewalld

active (running)と表示されているので、Firewalldはすでに実行中です。
Firewalldがインストールされていない場合・実行中ではない場合は以下を参考してください。
※① インストールされていない場合
$ sudo dnf install firewalld
※② Firewalldが起動していない場合
$ sudo systemctl start firewalld
※③ システム起動時に自動的に起動させたい場合
$ sudo systemctl enable firewalld
2. ゾーンの確認と変更
Firewalldは「ゾーン」を使って、異なるネットワークに対して異なるルールを適用します。
デフォルトで使用されるゾーンはpublicです。
$ sudo firewall-cmd --get-active-zones

現在有効なゾーンがpublicということが確認できました。
※publicゾーンに変更したい場合
$ sudo firewall-cmd --set-default-zone=public
3. サービスの許可
特定のサービス(ここではHTTPやSSHについて説明します)を許可するには、以下のコマンドを使用します。
● HTTP(ポート80)の許可:
$ sudo firewall-cmd --zone=public --add-service=http --permanent
![]()
● SSH(ポート80)の許可:
$ sudo firewall-cmd --zone=public --add-service=ssh --permanent

--permanentオプションを使うことで、変更を永続化します。
設定の確認のため、以下のコマンドを実行してみます。
$ sudo firewall-cmd --zone=public --list-services

先ほど許可したhttpとsshが見えますよね。
ちなみに、ここのcockpitとdhcpv6-clientという出力について調べてみたんですが、
cockpitはLinuxシステムを管理するためのウェブベースのインターフェースを提供するツールです。
dhcpv6-clientはIPv6アドレス専用 のDHCPクライアントらしいです。IPv6アドレスを自動設定してくれたり、デフォルトゲートウェイやDNSサーバーの設定も自動的に取得してくれるようです。
4. サービスの削除と確認
許可したサービスを後で削除したい場合は、以下のコマンドを使います。
ここでは、httpサービスだけを削除してみます。
$ sudo firewall-cmd --zone=public --remove-service=http --permanent

その後、設定を反映させるためにリロードする必要があります。
(リロードなしで--list-servicesコマンドで確認してみましたが、やはり反映されていませんでした🥲)
firewall設定のリロードには以下のコマンドを使います。
$ sudo firewall-cmd --reload
![]()
リロードが終わったので、--list-servicesでhttpサービスが削除されたか確認してみます。
$ sudo firewall-cmd --zone=public --list-services

httpサービスが削除されたことが確認できます😊。
5. 特定のポートの解放
特定のポートを開放したい場合は、ポート番号を指定して追加できます。
例えば、ポート8080を開放したい場合は、以下のコマンドを使います。
$ sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent

$ sudo firewall-cmd --reload

ポートの情報は以下のコマンドで確認します。
$ sudo firewall-cmd --list-ports
![]()
6. Firewalldの現在の設定確認
最後に、Firewalldの現在のゾーンの設定内容をすべて表示してみます。
ここで本日の作業内容が全部表示されるはずです。
$ sudo firewall-cmd --list all

sudo firewall-cmd --list-allを実行すると、現在設定されているFirewalldの状態を詳細に確認できます。
上記の出力から見ると、ゾーンがpublicであること、解放されているサービス(cockpit, dhcpv6-client, ssh)やポート(8080/tcp)、転送やNATの設定が確認できます。
・public(default, active)
ゾーン名が public で、このゾーンが現在 アクティブ(有効)であることを示しています。また、default とも表示されているので、これはデフォルトのゾーンであることを意味します。つまり、新しい接続は自動的にこのゾーンに適用されます。
・target : default
ゾーンのターゲットが default に設定されていることを示します。ターゲットは、パケットがこのゾーンに一致した場合に実行されるアクションです。default は特に指定されたアクションがない場合に通常使用されます。
(※パケット:コンピュータネットワークでデータを送受信する際のデータの単位)
・interfaces: ens160
このゾーンに関連付けられているネットワークインターフェースです。ens160 インターフェースが public ゾーンに関連付けられていることがわかります。ちなみにens160はVMwareなどの仮想環境でよく見られる名前らしいです。つまり私のPCに割り当てられたネットワークインターフェースです。
・services: cockpit dhcpv6-client ssh
許可されているサービスです。現在、cockpit(管理インターフェース用サービス)、dhcpv6-client(DHCPv6クライアント用サービス)、ssh(SSH接続)が許可されています。
開放されているポートです。8080/tcp ポートが開放されていることがわかります。これは、Webアプリケーションなどでよく使われるポートです。
まとめ
今日は、RHEL10環境でのFirewalldの基本的な操作について学びました。
個人的には sudo firewall-cmd --list-all コマンドで詳細な設定を確認するのが少し難しいと感じましたが、
使いこなせるようになれば、ネットワークの管理がもっと楽になると思います。
最後まで読んでいただき、ありがとうございました!