RHEL、Rocky、AlmaLinux で FirewallD を構成する方法
ネットフィルター は、ご存知のとおり、Linux のファイアウォールです。 Firewalld は、ネットワーク ゾーンをサポートしてファイアウォールを管理する動的デーモンです。以前のバージョンの RHEL と CentOS では、パケット フィルタリング フレームワークのデーモンとして iptables を使用していました。
Fedora、Rocky Linux、CentOS Stream、AlmaLinux、< などの RHEL ベースのディストリビューションの新しいバージョンではstrong>openSUSE – iptables インターフェイスは firewalld に置き換えられます。
将来的に廃止される可能性があるため、iptables の代わりに Firewalld の使用を開始することをお勧めします。ただし、iptables は引き続きサポートされており、yum コマンドを使用してインストールできます。 Firewalld と iptables の両方を同じシステム内に維持することはできません。競合が発生する可能性があります。
iptables では、INPUT、OUTPUT、FORWARD CHAINS として設定していましたが、ここでは Firewalld<、コンセプトではゾーンを使用します。デフォルトでは、firewalld で使用できるさまざまなゾーンが存在します。これについては、この記事で説明します。
パブリックゾーンやプライベートゾーンと同じようなベーシックゾーンです。これらのゾーンで問題を回避するには、指定されたゾーンをサポートするインターフェイスを追加する必要があります。その後、ファイアウォールにサービスを追加できます。
デフォルトでは、利用可能なサービスが多数あります。firewalld の最も優れた機能の 1 つは、事前定義されたサービスが付属しており、これらのサービスを例としてコピーするだけでサービスを追加できることです。
ファイアウォールは、IPv4、IPv6、イーサネット ブリッジでもうまく動作します。 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 パッケージは、RHEL、Fedora、Rocky 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
以上です。Fedora や Rocky などの RHEL ベースのディストリビューションで Firewalld を使用してネットフィルターを設定する方法を見てきました。 Linux、CentOS ストリーム、AlmaLinux、およびopenSUSE。
結論
ネットフィルターは、あらゆる Linux ディストリビューションのファイアウォールのフレームワークです。以前は、すべての RHEL および CentOS エディションでは iptables を使用していましたが、新しいバージョンではFirewalld が導入されました。 firewalld を理解して使用する方が簡単です。記事をお楽しみいただければ幸いです。