ウェブサイト検索

RHEL系システムでFirewallDを設定する方法


ネットフィルタは、皆が知っているように、Linuxのファイアウォールです。 Firewalldは、ネットワークゾーンのサポートを持つファイアウォールを管理するための動的デーモンです。以前のバージョンのRHELやCentOSでは、パケットフィルタリングフレームワークのためのデーモンとしてiptablesを使用していました。

新しいバージョンのRHELベースのディストリビューションであるFedora、Rocky Linux、CentOS Stream、AlmaLinux、およびopenSUSEでは、iptablesインターフェースがfirewalldに置き換えられています。

将来的にiptablesが廃止される可能性があるため、Firewalldの使用を開始することをお勧めします。ただし、iptablesはまだサポートされており、yumコマンドでインストールできます。同じシステムにFirewalldとiptablesの両方を保持することはできず、競合を引き起こす可能性があります。

iptablesでは、INPUT、OUTPUT、およびFORWARD CHAINSとして設定していましたが、ここFirewalldでは、概念としてゾーンを使用します。デフォルトでは、firewalldには異なるゾーンが利用可能であり、この記事で説明します。

基本ゾーンは、公開ゾーンとプライベートゾーンです。これらのゾーンで機能させるためには、指定されたゾーンのサポートを持つインターフェースを追加し、その後にサービスをfirewalldに追加する必要があります。

デフォルトでは、多くのサービスが利用可能であり、firewalldの最も優れた機能の一つは、事前に定義されたサービスが付属していることです。私たちはこれらのサービスを例として、単純にコピーすることで自分たちのサービスを追加することができます。

FirewalldはIPv4、IPv6、およびイーサネットブリッジでも素晴らしく機能します。firewalldでは、実行時の設定と永続的な設定を別々に持つことができます。

ゾーンの使い方や独自のサービスの作成、さらにはLinuxでのfirewalldのより興味深い使用法について始めましょう。

私たちのテスト環境

Operating System :	Red Hat Enterprise Linux release 9.0 (Plow)
IP Address       :	192.168.0.159
Host-name	:	tecmint-rhel9

ステップ1: RHELベースのシステムにFirewalldをインストールする

1. Firewalld パッケージは RHEL、Fedora、Rocky Linux、CentOS Stream、AlmaLinux、および openSUSE にデフォルトでインストールされています。もしインストールされていない場合は、次の yum コマンドを使用してインストールできます。

# yum install firewalld -y

2. firewalldパッケージがインストールされたら、iptablesサービスが実行されているかどうかを確認する時です。もし実行中であれば、以下のコマンドを使用してiptablesサービスを停止し、マスク(もはや使用しない)する必要があります。

# systemctl status iptables
systemctl stop iptables
systemctl mask iptables

ステップ2: Firewalldコンポーネントの理解(ゾーンとルール)

3. firewalldの設定に進む前に、各ゾーンについて話し合いたいと思います。デフォルトでは、いくつかのゾーンが利用可能です。インターフェースをゾーンに割り当てる必要があります。ゾーンは、そのインターフェースが接続を得るために信頼されたものか拒否されたものかのレベルを定義します。ゾーンにはサービスやポートが含まれることがあります。

ここでは、Firewalldで利用できる各ゾーンについて説明します。

  • ドロップゾーン: ドロップゾーンを使用すると、受信するすべてのパケットは破棄されます。これはiptables -j dropを追加するのと同じです。ドロップルールを使用すると、応答はなく、出力ネットワーク接続のみが利用可能であることを意味します。
  • ブロックゾーン: ブロックゾーンは、着信ネットワーク接続を icmp-host-prohibited として拒否します。サーバー内の確立された接続のみが許可されます。
  • パブリックゾーン: 選択した接続を受け入れるために、パブリックゾーンでルールを定義できます。これにより、特定のポートのみがサーバーで開かれ、他の接続は拒否されます。
  • 外部ゾーン: このゾーンはルーターオプションとして機能し、マスカレードが有効になっている場合、他の接続は切断され受け入れられず、指定された接続のみが許可されます。
  • DMZゾーン:公共にいくつかのサービスへのアクセスを許可する必要がある場合、DMZゾーンでそれを定義できます。これも、選択された着信接続のみを受け入れるという機能を持っています。
  • 作業ゾーン:このゾーンでは、内部ネットワークのみを定義できます。つまり、プライベートネットワークトラフィックが許可されています。
  • ホームゾーン: このゾーンは家庭内エリアで特に使用されます。このゾーンを使用することで、ネットワーク上の他のコンピュータがあなたのコンピュータを害することがないと信頼できます。このゾーンも、選択された受信接続のみを許可します。
  • 内部ゾーン: これは選択された許可された接続を持つ作業ゾーンに似ています。
  • 信頼されたゾーン: 信頼されたゾーンを設定すると、すべてのトラフィックが受け入れられます。

今、ゾーンについてより良い理解を得たので、利用可能なゾーン、デフォルトゾーンを調べ、次のコマンドを使用してすべてのゾーンをリストアップしましょう。

ファイアウォールのゾーンをリストする

# firewall-cmd --get-zones

Firewalldのデフォルトゾーンをリストする

# firewall-cmd --get-default-zone

すべてのFirewalldゾーンをリストする

# firewall-cmd --list-all-zones

注意: 上記のコマンドの出力は、ブロック、DMZ、ドロップ、外部、ホーム、内部、パブリック、信頼された、作業などのすべてのゾーンがリストされるため、1ページに収まらないでしょう。ゾーンにリッチルールがある場合は、有効なサービスやポートもそれぞれのゾーン情報とともにリストされます。

ステップ3: デフォルトのFirewalldゾーンの設定

4. デフォルトゾーンを内部、外部、ドロップ、作業、またはその他のゾーンに設定したい場合は、以下のコマンドを使用してデフォルトゾーンを設定できます。ここでは「内部」ゾーンをデフォルトとして使用します。

# firewall-cmd --set-default-zone=internal

5. ゾーンを設定した後、以下のコマンドを使用してデフォルトゾーンを確認してください。

# firewall-cmd --get-default-zone

6. ここでは、私たちのインターフェースは enp0s3 です。インターフェースがどのゾーンに属しているかを確認する必要がある場合、以下のコマンドを使用できます。

# firewall-cmd --get-zone-of-interface=enp0s3

7. firewalldのもう一つの興味深い機能は、「icmptype」がfirewalldによってサポートされているicmpタイプの一つであることです。サポートされているicmpタイプのリストを取得するには、以下のコマンドを使用できます。

# firewall-cmd --get-icmptypes

ステップ4: Firewalldで独自のサービスを作成する

8. サービスは、Firewalldによって使用されるポートとオプションの一連のルールです。有効になっているサービスは、Firewalldサービスが起動しているときに自動的にロードされます。

デフォルトでは、多くのサービスが利用可能であり、すべての利用可能なサービスのリストを取得するには、次のコマンドを使用してください。

# firewall-cmd --get-services

9. 利用可能なデフォルトのサービスのリストを取得するには、次のディレクトリに移動してください。ここでサービスのリストを取得できます。

# cd /usr/lib/firewalld/services/

10. 自分のサービスを作成するには、次の場所でそれを定義する必要があります。例えば、ここではRTMPポート1935のサービスを追加したいと思いますが、まずはどれか1つのサービスをコピーしてください。

# cd /etc/firewalld/services/
cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/

そして、私たちのサービスファイルがコピーされた場所に移動し、次に、下の図に示されているようにファイル「ssh.xml」の名前を「rtmp.xml」に変更します。

# cd /etc/firewalld/services/
mv ssh.xml rtmp.xml
ls -l rtmp.xml

11. 次に、下の画像に示すように、RTMP サービスに使用するために 見出し、説明、プロトコル、および ポート 番号としてファイルを開いて編集します。

12. これらの変更を有効にするには、firewalldサービスを再起動するか、設定を再読み込みしてください。

# firewall-cmd --reload

13. 追加されているかどうかを確認するには、以下のコマンドを実行して利用可能なサービスのリストを取得してください。

# firewall-cmd --get-services

ステップ5: Firewalldゾーンへのサービスの割り当て

14. ここでは、firewall-cmdコマンドを使用してファイアウォールを管理する方法を見ていきます。ファイアウォールの現在の状態とすべてのアクティブゾーンを確認するには、次のコマンドを入力します。

# firewall-cmd --state
firewall-cmd --get-active-zones

15. インターフェース enp0s3 のパブリックゾーンを取得するには、これはデフォルトインターフェースであり、/etc/firewalld/firewalld.conf ファイル内で DefaultZone=public として定義されています。

このデフォルトインターフェースゾーンで利用可能なすべてのサービスをリストします。

# firewall-cmd --get-service

ステップ6: Firewalldゾーンにサービスを追加する

16. 上記の例では、rtmp サービスを作成することによって独自のサービスを作る方法を見てきましたが、ここでは rtmp サービスをゾーンに追加する方法についても見ていきます。

# firewall-cmd --add-service=rtmp

17. 追加されたゾーンを削除するには、タイプします。

# firewall-cmd --zone=public --remove-service=rtmp

上記のステップは一時的な期間のみでした。これを永久にするために、下記のコマンドを–permanentオプションを付けて実行する必要があります。

# firewall-cmd --add-service=rtmp --permanent
firewall-cmd --reload

18. ネットワークソース範囲のルールを定義し、ポートの一つを開きます。例えば、ネットワーク範囲「192.168.0.0/24」およびポート「1935」を開きたい場合、以下のコマンドを使用してください。

# firewall-cmd --permanent --add-source=192.168.0.0/24
firewall-cmd --permanent --add-port=1935/tcp

サービスやポートを追加または削除した後は、firewalldサービスを再読み込みすることを忘れないでください。

# firewall-cmd --reload 
firewall-cmd --list-all

ステップ7: ネットワーク範囲のためのFirewalldリッチルールの追加

19. http、https、vnc-server、PostgreSQLなどのサービスを許可したい場合、次のルールを使用します。まず、ルールを追加して永続的にし、ルールを再読み込みし、ステータスを確認します。

# firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.0.0/24" service name="http" accept' 
firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.0.0/24" service name="http" accept' --permanent

firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.0.0/24" service name="https" accept'
firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.0.0/24" service name="https" accept' --permanent

firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.0.0/24" service name="vnc-server" accept'
firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.0.0/24" service name="vnc-server" accept' --permanent

firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.0.0/24" service name="postgresql" accept'
firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.0.0/24" service name="postgresql" accept' --permanent

現在、ネットワーク範囲192.168.0.0/24は、私のサーバーから上記のサービスを利用できます。オプション–permanentはすべてのルールで使用できますが、ルールを定義し、その後クライアントのアクセスを確認してから、永久に設定する必要があります。

20. 上記のルールを追加した後は、ファイアウォールのルールを再読み込みし、次のコマンドを使用してルールをリストすることを忘れないでください:

# firewall-cmd --reload
firewall-cmd --list-all

Firewalldについてもっと知るために。

# man firewalld

それで、RHELベースのディストリビューションであるFedora、Rocky Linux、CentOS Stream、AlmaLinux、およびopenSUSEを使用して、Firewalldを使ったネットフィルターの設定方法を見てきました。

結論

ネットフィルターは、すべてのLinuxディストリビューション用のファイアウォールのフレームワークです。すべてのRHELおよびCentOS版では、iptablesを使用していましたが、新しいバージョンではFirewalldが導入されました。firewalldの方が理解しやすく、使いやすいです。この記事を楽しんでいただけたら幸いです。

関連記事: