ウェブサイト検索

RHEL、Rocky、AlmaLinux で FirewallD を構成する方法


ネットフィルター は、ご存知のとおり、Linux のファイアウォールです。 Firewalld は、ネットワーク ゾーンをサポートしてファイアウォールを管理する動的デーモンです。以前のバージョンの RHELCentOS では、パケット フィルタリング フレームワークのデーモンとして iptables を使用していました。

FedoraRocky LinuxCentOS StreamAlmaLinux、< などの RHEL ベースのディストリビューションの新しいバージョンではstrong>openSUSE – iptables インターフェイスは firewalld に置き換えられます。

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

iptables では、INPUTOUTPUTFORWARD CHAINS として設定していましたが、ここでは Firewalld<、コンセプトではゾーンを使用します。デフォルトでは、firewalld で使用できるさまざまなゾーンが存在します。これについては、この記事で説明します。

パブリックゾーンプライベートゾーンと同じようなベーシックゾーンです。これらのゾーンで問題を回避するには、指定されたゾーンをサポートするインターフェイスを追加する必要があります。その後、ファイアウォールにサービスを追加できます。

デフォルトでは、利用可能なサービスが多数あります。firewalld の最も優れた機能の 1 つは、事前定義されたサービスが付属しており、これらのサービスを例としてコピーするだけでサービスを追加できることです。

ファイアウォールは、IPv4IPv6イーサネット ブリッジでもうまく動作します。 firewalld で個別の実行時構成と永続的な構成を行うことができます。

ゾーンを操作して独自のサービスを作成する方法と、Linux でのファイアウォールのさらに魅力的な使用方法を始めましょう。

弊社のテスト環境

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 パッケージは、RHELFedoraRocky Linux にデフォルトでインストールされます。 、CentOS ストリームAlmaLinux、およびopenSUSE。そうでない場合は、次の yum コマンドを使用してインストールできます。

yum install firewalld -y

2. firewalld パッケージがインストールされたら、iptables サービスが実行されているかどうかを確認します。実行されている場合は、次のことを行う必要があります。以下のコマンドを使用して、iptables サービスを停止してマスクします (今後は使用しません)。

systemctl status iptables
systemctl stop iptables
systemctl mask iptables

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

3.ファイアウォールの構成に進む前に、各ゾーンについて説明します。デフォルトでは、いくつかのゾーンが利用可能です。インターフェイスをゾーンに割り当てる必要があります。ゾーンは、接続を取得するためのインターフェイスに対して信頼または拒否されたレベルのゾーンを定義します。ゾーンにはサービスとポートを含めることができます。

ここでは、ファイアウォールで利用できる各ゾーンについて説明します。

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

これで、ゾーンについてよく理解できたので、次のコマンドを使用して、利用可能なゾーンとデフォルトのゾーンを調べて、すべてのゾーンをリストしてみましょう。

ファイアウォール ゾーンの一覧表示

firewall-cmd --get-zones

Firewalld のデフォルト ゾーンの一覧表示

firewall-cmd --get-default-zone

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

firewall-cmd --list-all-zones

: 上記のコマンドの出力は、block、dmz、drop、external、home、internal、などのすべてのゾーンをリストするため、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 のもう 1 つの興味深い機能は、「icmptype」 が firewalld でサポートされている icmp タイプの 1 つであることです。サポートされている icmp タイプのリストを取得するには、以下のコマンドを使用できます。

firewall-cmd --get-icmptypes

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

8. サービスは、ファイアウォールによって使用されるポートとオプションを含む一連のルールです。有効になっているサービスは、Firewalld サービスが起動して実行されているときに自動的に読み込まれます。

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

firewall-cmd --get-services

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

cd /usr/lib/firewalld/services/

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

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 サービスを追加する方法を見ていきます。ゾーンへのstrong>サービスも同様です。

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

以上です。FedoraRocky などの RHEL ベースのディストリビューションで Firewalld を使用してネットフィルターを設定する方法を見てきました。 LinuxCentOS ストリームAlmaLinux、およびopenSUSE

結論

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