4.5. ファイアウォールの使用

動的ファイアウォールデーモンである firewalld は、動的に管理されるファイアウォールを提供し、信頼レベルをネットワークと関連する接続およびインターフェースに割り当てるネットワークゾーンをサポートします。これは、IPv4 および IPv6 のファイアウォール設定をサポートします。また、イーサネットブリッジをサポートし、実行時と永続的な設定オプションを別々にすることできます。ファイアウォールルールを直接追加するためのサービスやアプリケーション向けのインターフェースもあります。firewalld で完全な通信を行うには D-Bus を使用します。

注記

専門知識をさらに得るために、Red Hat Server Hardening (RH413) トレーニングコースが用意されています。

4.5.1. firewalld の概要

ファイアウォールデーモンは、デフォルトで iptablesip6tablesebtables のリストアコマンドを使用し、ルールセットを変更する全ファイアウォールアクションを高速化します。firewalld.conf ファイルで構成設定の IndividualCallsyes に設定されている場合、またはルールがフォールバックの解決策としてリストアコマンドで適用できない場合には、通常のコマンドを使用します。通常のコマンドを使用すると、大幅に操作が遅くなります。
グラフィカルの firewall-config ツールを使用するには、Super キーを押してアクティビティーを開き、firewall と入力してから Enter を押します。firewall-config ツールが表示され、管理者パスワードの入力が求められます。
左側のサイドバーは、アクティブゾーンの アクティブバインディング が表示されます。これらは 接続 別にグループ化され、NetworkManager、インターフェース および ソース で処理されます。
firewall-config ツールには、設定 のラベルが付いたドロップダウンメニューがあります。ここで、実行時永続 のモードが選べます。永続 を選ぶと、左下に新たなアイコンの列が表示されます。サービスのパラメーターは 実行時 モードでは変更できないため、これらのアイコンは永続設定モードでのみ表示されます。この設定は、アクティブバインディング のサイドバーには影響ありません。
firewalld が提供するファイアウォールのサービスは、設定の変更はいつでも可能で即座に実行されるので、静的ではなく動的なものです。変更は保存したり適用したりする必要がありません。ファイアウォールはリロードの必要がないので、既存のネットワーク接続が意図せずに中断されることがありません。
コマンドラインクライアントである firewall-cmd が提供され、これを使うと man firewall-cmd(1) で説明されている永続および非永続の実行時の変更を行うことができます。永続的な変更は、firewalld(1) man ページの説明にしたがってください。firewall-cmd コマンドは、root ユーザーと管理者ユーザーといういわゆる wheel グループのメンバーのみが実行できることに注意してください。管理者ユーザーの場合は、polkit メカニズム経由でコマンドが承認されます。
コマンドラインクライアント firewall-offline-cmd は、root ユーザーのみが使用して永続的に環境を変更することができます。このクライアントは、firewalld と対話せずに、firewalld コアおよび I/O バックエンドの一部を使用して設定を変更します。firewalld がアクティブな状態でこのツールを使用することは推奨していません。使用は可能ですが、firewall-offline-cmd での変更は firewalld に即座に適用されません。変更は、firewalld がファイルシステムのファイルの変更を検出できてから永続的な環境に適用されます。たとえば、firewall-offline-cmd コマンドはファイアウォールの設定のインストール中に使用されます。また、ファイアウォール設定を変更するためにインストール後の設定で使用してから、新規インストールされたシステムを起動することもできます。
firewall-applet アプリケーションにより、使用中の接続を NetworkManager 設定タブにすぐに表示することもできます。全般 タブを使用して割り当てたファイアウォールゾーンに変更を加えることができます。Red Hat Enterprise Linuxでは、このアプレットはデフォルトでインストールされていません。
firewalld の設定は、様々な XML ファイルで /usr/lib/firewalld//etc/firewalld/ に保存されます。これらのファイルは修正、書き込み、バックアップ、他のインストールへのテンプレートとしての使用などができるので、柔軟性が高まります。/usr/lib/firewalld/ の設定はデフォルトでフォールバックの設定ですが、/etc/firewalld/ の設定はシステム固有の設定になっています。
アプリケーションはすべて、D-Bus インターフェースを使って firewalld と通信できます。

4.5.1.1. firewalld と system-config-firewall および iptables との比較

firewalldiptables (and ip6tables) の本質的な違いは、以下の通りです。
  • iptables service は設定を /etc/sysconfig/iptables および /etc/sysconfig/ip6tables に保存しますが、firewalld は様々な XML ファイルで /usr/lib/firewalld/ および /etc/firewalld/ に保存します。Red Hat Enterprise Linux では firewalld がデフォルトでインストールされるので、/etc/sysconfig/iptables ファイルがないことに注意してください。
  • iptables service では変更のひとつひとつで古いルールがフラッシュされ新しいルールが /etc/sysconfig/iptables から読み込まれますが、firewalld ではそのようなすべてのルールの再生はなく、差異のみが適用されます。このため、firewalld では既存の接続が中断されることなく実行時に設定変更ができます。
これら両方が iptables tool を使用してカーネルパケットフィルターと通信します。

注記

firewalld は、/etc/sysconfig/ip*tables ファイルからファイアウォールの設定をインポートできません。lokkit または system-config-firewall の設定をインポートするには、firewall-offline-cmd/etc/sysconfig/system-config-firewall ファイルを使用します。カスタムのルールファイルは、⁠firewalld にインポートできません。インポートした設定は、デフォルトゾーンに適用されます。

図4.1 ファイアウォールスタック

4.5.1.2. ネットワークゾーンについて

firewalld を使うと、ユーザーがネットワーク内のインターフェースとトラフィックに配置する信頼レベルに基づいて、ネットワークを異なるゾーンに分けることができます。NetworkManagerfirewalld にインターフェースが所属するゾーンを通知します。インターフェースに割り当てられたゾーンは NetworkManager で、または関連する NetworkManager ウィンドウを開く firewall-config ツール経由で変更できます。firewall-cmd コマンドラインツールも使用できます。インターフェースが NetworkManager で制御されていて、ユーザーが firewall-cmdfirewall-offline-cmd または firewall-config を使用してインターフェースのゾーンを変更した場合には、この要求は NetworkManager に転送され、firewalld では処理されません。
/etc/firewalld/ におけるゾーン設定は、ネットワークインターフェースにすぐに適用可能な事前設定の範囲です。以下でこれらを簡単に説明します。
drop
着信ネットワークパケットはすべて遮断され、返信されません。送信ネットワーク接続のみが可能です。
block
IPv4 では icmp-host-prohibited メッセージで、IPv6 では icmp6-adm-prohibited メッセージですべての着信ネットワーク接続が拒否されます。システム内で開始されたネットワーク接続のみが可能です。
public
公開エリア用です。自分のコンピューターを保護するため、ネットワーク上の他のコンピューターを信頼しません。選択された着信接続のみが許可されます。
external
マスカレードを特別にルーター用に有効にした外部ネットワーク上での使用向けです。自分のコンピューターを保護するため、ネットワーク上の他のコンピューターを信頼しません。選択された着信接続のみが許可されます。
dmz
公開アクセスが可能ではあるものの、内部ネットワークへのアクセスには制限がある非武装地帯にあるコンピューター用。選択された着信接続のみが許可されます。
work
作業エリア用です。自分のコンピューターを保護するため、ネットワーク上の他のコンピューターをほぼ信頼します。選択された着信接続のみが許可されます。
home
ホームエリア用です。自分のコンピューターを保護するため、ネットワーク上の他のコンピューターをほぼ信頼します。選択された着信接続のみが許可されます。
internal
内部ネットワーク用です。自分のコンピューターを保護するため、ネットワーク上の他のコンピューターをほぼ信頼します。選択された着信接続のみが許可されます。
trusted
すべてのネットワーク接続が許可されます。
これらのゾーンのいずれかをデフォルトに指定することができます。インターフェース接続が NetworkManager に追加されると、デフォルトのゾーンに割り当てられます。インストール時には、firewalld のデフォルトは public ゾーンに設定されます。
ネットワークゾーンの選択
ネットワークゾーンの名前は、すぐに分かりユーザーが妥当な決定をすばやく下せるように付けられています。ただし、ユーザーのニーズおよびリスク評価に合わせて、デフォルト設定の見直しを行ったり、不要なサービスを無効にしてください。
ゾーン名および設定は一例で、必要に応じて変更できます。組み込まれているゾーンは削除できませんが、firewall-config または firewall-cmd の永続設定にゾーンのデフォルト値を読みこませて、初期デフォルト値に設定を戻すことは可能です。

4.5.1.3. 事前定義のサービスについて

サービスは、ローカルポート、プロトコル、セキュアなポートと宛先のリストの場合や、サービスが有効であれば自動的に読み込まれるファイアウォールヘルパーのモジュールのリストの場合があります。事前定義サービスを使用すると、ユーザーによるサービスへのアクセスの有効、無効の切り替えが容易になります。ポートやポート範囲を開くのではなく、事前定義のサービスまたはカスタム定義のサービスを使用すると、管理が容易になる場合があります。サービスの設定オプションと一般的なファイル情報は、firewalld.service(5) man ページで説明されています。サービスは個別の XML 設定ファイルで指定されており、これらのファイル名の形式は、service-name.xml となります。firewalld では、プロトコル名よりもサービスまたはアプリケーション名が推奨されます。
グラフィカルの firewall-config ツールを使用してサービス一覧を表示するには、Super キーを押してアクティビティを開き、firewall と入力してから Enter を押します。firewall-config ツールが表示され、管理者パスワードの入力が求められます。サービスタブでサービスの一覧を確認できます。
システム上で利用可能な全サービスを一覧表示するには、以下のコマンドを実行します。
~]$ firewall-cmd --get-services
サービスの設定を取得するには、以下のコマンドを使用します。
~]$ firewall-cmd --info-service=service-name
コマンドラインを使用して、デフォルトで事前定義されていて利用可能なサービスのみを表示するには、以下のコマンドを実行します。
~]$ ls /usr/lib/firewalld/services/

注記

/usr/lib/firewalld のファイルを表示するには、root 権限は必要ありません。カスタムのプライベートファイルを追加した後に、属性を適宜変更するようにしてください。
/usr/lib/firewalld/services/ にあるファイルは編集しないでください。/etc/firewalld/services/ にあるファイルのみを編集してください。
システムもしくはユーザーが作成したサービスを一覧表示するには、root で以下のコマンドを実行します。
~]# ls /etc/firewalld/services/
サービスの追加もしくは削除は、グラフィカルな firewall-config ツール、firewall-cmdfirewall-offline-cmd を使用するか、/etc/firewalld/services/ にある XML ファイルを編集することで実行できます。ユーザーがサービスを追加もしくは変更していない場合には、そのサービスに対応する XML ファイルは /etc/firewalld/services/ にありません。サービスの追加または変更には、/usr/lib/firewalld/services/ のファイルをテンプレートとして使用してください。
ターミナルで新規サービスを追加するには firewall-cmd を使用してください。firewalld がアクティブでない場合には firewall-offline-cmd を使用してください。新規サービスや空のサービスを追加するには以下のコマンドを実行します。
~]$ firewall-cmd --permanent --new-service=service-name
ローカルファイルを使用して新規サービスを追加するには以下のコマンドを使用します。
~]$ firewall-cmd --permanent --new-service-from-file=service-name.xml
--name=service-name オプションを指定して、サービス名を変更できます。
サービス設定が変更されたらすぐに、サービスの更新コピーが /etc/firewalld/services/ に配置されます。
root として、以下のコマンドを実行しサービスを手動でコピーします。
~]# cp /usr/lib/firewalld/services/service-name.xml /etc/firewalld/services/service-name.xml
firewalld は、/usr/lib/firewalld/services からファイルを読み込みます。ファイルが /etc/firewalld/services に配置されて有効な場合には、/usr/lib/firewalld/services にある対応のファイルを上書きします。/etc/firewalld/services にある対応のファイルが削除されるか、サービスのデフォルトを読みこむように firewalld に要求が出されるとすぐに、/usr/lib/firewalld/services の上書きされたファイルが使用されます。これが該当するのは永続環境のみで、ランタイム環境でフォールバックさせるには、再読み込みが必要です。

4.5.1.4. ダイレクトインターフェースについて

firewalld には、ルールを直接 iptablesip6tables、および ebtables に渡せるようにする ダイレクトインターフェース が含まれます。これは主にアプリケーションによる使用が対象です。iptables に精通していないと意図せずにファイアウォール侵害を引き起こす可能性があるので、ダイレクトインターフェースを使用することは危険です。追跡のあるインターフェースパーツを使用している限り、firewalld をクエリーでき、このモードでアプリケーションが加えた変更を確認することができます。追跡のないパススルーモードは、libvirt および docker など、独自のルールセットに完全に対応するサービスのみを対象にしています。ダイレクトインターフェースはを使用するには、--direct オプションを firewall-cmd コマンドに追加します。
直接インターフェースモードは、サービスまたはアプリケーションが実行時に特定のファイアーウォールルールを追加するためのものです。--permanent オプションを追加して firewall-cmd --permanent --direct コマンドを使用するか、/etc/firewalld/direct.xml を修正することで、ルールを永続的なものにできます。ルールが永続的になっていないと、D-Bus を使用して firewalld から開始、再開、リロードのメッセージを受け取るたびにルールを毎回適用する必要があります。ダイレクトインターフェースでは、チェーン、ルール、追跡あり/なしのパススルールールを追加できます。また、ゾーン固有のチェーンにダイレクトルールを使用することもできます。

4.5.2. firewalld のインストール

Red Hat Enterprise Linux 7 では、firewalld はデフォルトでインストールされます。必要な場合は、確実にインストールするために root で以下のコマンドを入力します。
~]# yum install firewalld
グラフィカルユーザーインターフェース設定ツール firewall-config は一部のバージョンの Red Hat Enterprise Linux 7 でデフォルトでインストールされます。必要な場合は、root で以下のコマンドを入力して、確実に firewall-config がインストールされるようにします。
~]# yum install firewall-config
オプションの firewalld をインストールするには、root で以下のコマンドを実行します。
~]# yum install firewall-applet
次のログインでデスクトップのパネルに、アプレットは表示されます。アプレットの GNOME ルールによって、GNOME でのアプレットの使用には制約があります。

4.5.2.1. firewalld の停止

firewalld を停止するには、root で以下のコマンドを入力します。
~]# systemctl stop firewalld
firewalld がシステム起動時に自動的に起動しないようにするには、root で以下のコマンドを発行します。
~]# systemctl disable firewalld
firewalld D-Bus インターフェースにアクセスしても firewalld が起動されないようにする場合、他のサービスが firewalld を必要とする場合には、以下のコマンドを root として実行します。
~]# systemctl mask firewalld

4.5.2.2. firewalld の起動

firewalld を起動するには、root で以下のコマンドを実行します。
~]# systemctl unmask firewalld
~]# systemctl start firewalld
firewalld をシステム起動時に自動的に起動するには、root で以下のコマンドを入力します。
~]# systemctl enable firewalld

4.5.2.3. firewalld の稼働確認

firewalld が稼働しているかどうかを確認するには、以下のコマンドを実行します。
~]$ systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2016-10-11 09:15:58 CEST; 2 days ago
     Docs: man:firewalld(1)
 Main PID: 721 (firewalld)
   CGroup: /system.slice/firewalld.service
           └─721 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid

Oct 11 09:15:57 localhost.localdomain systemd[1]: Starting firewalld - dynami...
Oct 11 09:15:58 localhost.localdomain systemd[1]: Started firewalld - dynamic...
Hint: Some lines were ellipsized, use -l to show in full.
さらに、firewall-cmd がデーモンに接続可能かどうかを確認するには、以下のコマンドを実行します。
~]$ firewall-cmd --state
	running

4.5.3. firewalld の設定

firewalld デーモンにより実装されるファイアーウォールサービスは、firewall-config のグラフィカルユーザーインターフェースツールまたは firewall-cmd および firewall-offline-cmd のコマンドラインインターフェースツールを使用するか、XML 設定ファイルを編集して設定できます。これらの方法について順番に説明します。

4.5.3.1. グラフィカルユーザーインターフェースを使った firewalld の設定

4.5.3.1.1. グラフィカルファイアウォール設定ツールの起動
グラフィカルの firewall-config ツールを起動するには、Super キーを押してアクティビティを開き、firewall と入力してから Enter を押します。firewall-config ツールが表示され、管理者パスワードの入力が求められます。
コマンドラインを使ってグラフィカルなファイアウォール設定ツールを起動するには、以下のコマンドを実行します。
~]$ firewall-config
ファイアウォールの設定 ウィンドウが開きます。このコマンドは一般ユーザーとしても実行できますが、管理者パスワードが求める場合があります。

図4.2 ファイアウォール設定ツール

左下に表示されている Connection to firewalld established とのメッセージを探します。これにより、firewall-config ツールが firewalld に接続されていることが分かります。ICMP タイプIPSetsダイレクト設定ロックダウンホワイトリスト タブは、表示 のドロップダウンメニューから選択した後にのみ、表示されることに注意してください。左側の アクティブバインディング のサイドバーはデフォルトで表示されます。
4.5.3.1.2. ファイアウォールの設定変更
現行のファイアウォール設定を直ちに変更するには、現在の表示が 実行時 に設定されていることを確認してください。次回のシステム起動時またはファイアウォールの再読み込み時に設定が適用されるようにするには、ドロップダウンリストから 永続 を選択します。

注記

実行時 モードでファイアウォール設定を変更する際には、サービスに関連するチェックボックスにチェックを入れたり消したりすると、その選択が直ちに反映されます。他のユーザーが使用している可能性のあるシステムでこの作業を行う場合は、この点を考慮してください。
永続 モードでファイアウォール設定を変更すると、ファイアウォールを再読み込みした場合か、またはシステムの再起動時にのみ変更が反映されます。オプション メニューを選択して Firewalld の再読み込み を選択します。
ゾーンは左側のコラムで選択できます。ゾーンには有効になっているサービスがいくつかあり、すべてを閲覧するにはウィンドウのサイズを変更するか、スクロールする必要がある場合があります。サービスを選択および選択解除することで、設定をカスタマイズできます。
4.5.3.1.3. ゾーンへのインターフェースの追加
ゾーンに接続 (接続に使用するインターフェース) を追加するには、firewall-config を起動します。左側のゾーン一覧のゾーンをクリックして、右側の インターフェース タブを選択します。追加 ボタンをクリックするとインターフェース追加の新しいダイアログが表示されます。
インターフェースのゾーン設定を変更するには、アクティブバインディング のサイドバーのインターフェースで適切な接続をダブルクリックします。以下のダイアログのドロップダウンメニューから新しいファイアウォールゾーンを選択して、OK をクリックして確定します。
または、接続インターフェースのゾーンへの追加や再度割り当ては、firewall-config を開始して、メニューバーから オプション を選び、ドロップダウンメニューから 接続のゾーンの変更 を選択します。すると、ネットワーク接続インターフェースソース のリストが表示されます。ここで、再度割り当てる接続を選択します。接続のゾーンを選択する のウィンドウが表示されます。ドロップダウンメニューから新規のファイアウォールゾーンを選択して OK をクリックします。
NetworkManager で処理される接続は、ゾーン変更の要求は NetworkManager に転送されます。ゾーンのインターフェース設定は、firewalld には保存されません。
接続、インターフェース、ソースのゾーンを変更する際に、firewall-cmd コマンドラインツールまたは firewall-applet アプレットも使用できます。
4.5.3.1.4. デフォルトゾーンの設定
新たなインターフェースに割り当てるデフォルトのゾーンを設定するには、firewall-config を開始して、メニューバーから オプション を選び、ドロップダウンメニューから 標準のゾーンの変更 を選択します。標準ゾーン のウィンドウが表示されるので、デフォルトのゾーンとして使用するゾーンをリストから選択して OK をクリックします。または、以下のコマンドを実行します。
~]$ firewall-cmd --set-default-zone=zone-name
4.5.3.1.5. サービスの設定
事前定義またはカスタマイズサービスを有効、無効にするには、firewall-config ツールを起動して、設定するサービスのネットワークゾーンを選択します。サービス タブを選択し、信頼するサービスの各タイプのチェックボックスを選択します。サービスをブロックするには、チェックボックスを外します。
サービスを編集するには、firewall-config ツールを起動してから 設定 ラベルのあるドロップダウン選択メニューで 永続 モードを選びます。サービス ウィンドウの下部に新たなアイコンとメニューボタンが表示されます。設定するサービスを選びます。
ポートプロトコルソースポート のタブでは、選択されたサービスのポート、プロトコルおよびソースポートの追加、変更、削除 ができます。モジュールタブでは、Netfilter ヘルパーモジュールの設定を行います。送信先 タブでは、特定の送信先アドレスとインターネットプロトコル (IPv4 または IPv6) へのトラフィックが制限できます。

注記

実行時 モードのサービス設定は変更できません。
4.5.3.1.6. ファイアウォールのポート開放
特定のポートへのトラフィックがファイアウォールを通過できるようにするには、firewall-config ツールを起動して、設定を変更するネットワークゾーンを選択します。ポート タブを選んで 追加 ボタンをクリックします。ポートとプロトコル ウィンドウが開きます。
許可するポート番号またはポートの範囲を入力します。ドロップダウンリストから tcp または udp を選択します。
4.5.3.1.7. ファイアウォールのプロトコル開放
特定のプロトコルへのトラフィックがファイアウォールを通過できるようにするには、firewall-config ツールを起動して、設定を変更するネットワークゾーンを選択します。プロトコル タブを選んで 追加 ボタンをクリックします。プロトコル ウィンドウが開きます。
ドロップダウンリストからプロトコルを選択するか、他のプロトコル のチェックボックスを選択して、フィールドにプロトコルを入力します。
4.5.3.1.8. ファイアウォールのソースポート開放
特定のポートへのトラフィックがファイアウォールを通過できるようにするには、firewall-config ツールを起動して、設定を変更するネットワークゾーンを選択します。ソースポート タブを選んで 追加 ボタンをクリックします。ソースポート ウィンドウが開きます。
許可するポート番号またはポートの範囲を入力します。ドロップダウンリストから tcp または udp を選択します。
4.5.3.1.9. IPv4 アドレスのマスカレーディングの有効化
IPv4 アドレスを単一の外部アドレスに変換するには、firewall-config ツールを起動して、変換するアドレスのネットワークゾーンを選択します。 マスカレーディング タブを選択し、チェックボックスを選択して IPv4 アドレスの単一アドレスへの変換を有効にします。

注記

IPv6 のマスカレーディングを有効にするには、リッチルールを使用します。
4.5.3.1.10. ポート転送 (フォワーディング) の設定
特定のポートに向けられた受信ネットワークトラフィック または パケット を、内部アドレスまたは別のポートに転送するには、まず IP アドレスのマスカレーディングを有効にしてから、ポート転送 タブを選択します。
受信トラフィックのプロトコルとポートもしくはポート範囲をウィンドウの上部で選択します。
ローカルポートにトラフィックを転送する、つまり同一システム上のポートに転送するには、ローカル転送 のチェックボックスを選択します。トラフィックの送信先となるローカルポートまたはポート範囲を入力します。
トラフィックを別の IPv4 アドレスに転送するには、他のポートへの転送 チェックボックスを選択します。送信先の IP アドレスとポートまたはポート範囲を入力します。ポートのフィールドに入力がないと、デフォルトで同一ポートに送信されます。OK をクリックして変更を適用します。
4.5.3.1.11. ICMP フィルターの設定
ICMP フィルターを有効、無効にするには、firewall-config ツールを起動して、フィルターにかけるメッセージのネットワークゾーンを選択します。ICMP フィルター タブを選択し、フィルターにかける ICMP メッセージの各タイプのチェックボックスを選択します。フィルターを無効にするには、チェックボックスの選択を外します。これは方向ごとに設定され、デフォルトではすべてが許可されます。
ICMP タイプを編集するには、firewall-config ツールを起動してから 設定 ラベルのあるドロップダウンメニューで 永続 モードを選びます。サービス ウィンドウの下部に新たなアイコンが表示されます。以下のダイアログで はい を選択して、マスカレーディングを有効化し、別の機能するマシンに転送します。
ICMP フィルター の反転を有効化するには、右側の フィルターの反転 チェックボックスをクリックします。マークが付いた ICMP タイプが受け入れられ、その他はすべて拒否されます。DROP ターゲットを使用するゾーンでは、ドロップされます。

4.5.3.2. firewall-cmd コマンドラインツールを使用したファイアウォールの設定

firewall-cmd コマンドラインツールは、デフォルトでインストールされる firewalld アプリケーションの一部です。これがインストールされているかどうかを確認するには、バージョンを確認するか、ヘルプの出力を表示させます。バージョンのチェックは以下のコマンドで実行します。
~]$ firewall-cmd --version
ヘルプの出力を表示するには、以下のコマンドを実行します。
~]$ firewall-cmd --help
以下でコマンドをいくつか紹介しています。完全一覧については、man firewall-cmd(1) man ページを参照してください。

注記

コマンドを永続的にするには、--direct コマンド (これらは元々一時的なもの) を除いて すべてのコマンドに --permanent オプションを追加します。こうすると変更が永続的になるだけではなく、変更はファイアウォールのリロード、サービスの再起動、もしくはシステムの再起動後にのみ適用されることに注意してください。--permanent オプションなしで firewall-cmd を使って設定すると、変更は即座に適用されますが、有効なのは次回のファイアウォールのリロード、システム再起動、または firewalld サービスの再起動が行われるまでです。ファイアウォールのリロード自体は接続を切断しませんが、一時的な変更が破棄されることに注意してください。
コマンドを永続的にし、すぐに有効にするには、コマンドを --permanent を使用して 1 回、オプションなしで 1 回の合計 2 回入力します。これは、ファイアウォールのリロードには単にコマンドを繰り返すよりも時間がかかるためです (すべての設定ファイルをリロードし、ファイアウォール設定全体を再作成する必要があります)。リロード中に、安全上の理由により組み込みチェーンのポリシーは DROP に設定され、最終的に ACCEPT に再設定されます。したがって、リロード中にサービスが破棄されることがあります。

重要

--permanent --add-interface オプションは、NetworkManager ユーティリティーによって管理されないインターフェースのみに使用します。これは、NetworkManager (つまり、従来のネットワークサービス) では、ifcfg インターフェース設定ファイルの ZONE= ディレクティブに従ってインターフェースがゾーンに自動的に追加されるためです。NetworkManagerifcfg ファイルの使用については、『Red Hat Enterprise Linux 7 ネットワークガイド』 を参照してください。

4.5.3.3. コマンドラインインターフェース (CLI) を使ったファイアウォール設定の表示

firewalld の状態をテキスト表示するには、以下のコマンドを実行します。
~]$ firewall-cmd --state
アクティブなゾーンと、それらに割り当てられているインターフェースの一覧を表示するには、以下のコマンドを実行します。
~]$ firewall-cmd --get-active-zones
public
  interfaces: em1
たとえば、インターフェース em1 が現在割り当てられているゾーンを確認するには、以下のコマンドを実行します。
~]$ firewall-cmd --get-zone-of-interface=em1
public
public ゾーンなど、ゾーンに割り当てられているすべてのインターフェースを確認するには、root で以下のコマンドを実行します。
~]# firewall-cmd --zone=public --list-interfaces
			em1 wlan0
この情報は NetworkManager から得られるもので、接続ではなくインターフェースのみを表示します。
public ゾーンなどのゾーンの全設定を確認するには、root で以下のコマンドを実行します。
~]# firewall-cmd --zone=public --list-all
public
  interfaces: 
  services: mdns dhcpv6-client ssh
  ports: 
  forward-ports: 
  icmp-blocks: source-quench
現在読み込まれているサービスを一覧表示するには、root で以下のコマンドを実行します。
~]# firewall-cmd --get-services
cluster-suite pop3s bacula-client smtp ipp radius bacula ftp mdns samba dhcpv6-client dns openvpn imaps samba-client http https ntp vnc-server telnet libvirt ssh ipsec ipp-client amanda-client tftp-client nfs tftp libvirt-tls
ここで表示されるのは、/usr/lib/firewalld/services/ から読み込まれた事前定義サービスの名前と、現在読み込まれているカスタムサービスになります。設定ファイル自体は service-name.xml. と命名されることに注意してください。
カスタムが作成されていても読み込まれていない場合は、以下のコマンドで確認できます。
~]# firewall-cmd --permanent --get-services
ここでは、サービスが読み込まれていなくても、/etc/firewalld/services/ で設定されたカスタムサービスを含めたすべてのサービスが一覧表示されます。

4.5.3.4. コマンドラインインターフェース (CLI) を使ったファイアウォール設定の変更

4.5.3.4.1. 全パケットの遮断 (パニックモード)
すべての送受信パケットの遮断を開始するには、root で以下のコマンドを実行します。
~]# firewall-cmd --panic-on
これですべての送受信パケットが遮断されます。アクティブな接続は、一定期間アクションがないと切断されます。この期間は、個別のセッションタイムアウト値によって異なります。
すべての送受信パケットの受け渡しを再開するには、root で以下のコマンドを実行します。
~]# firewall-cmd --panic-off
パニックモードの有効期間が短かった場合、パニックモードを無効にすると、確立されていた接続が再度機能する可能性があります。
パニックモードの有効、無効を確認するには、以下のコマンドを実行します。
~]$ firewall-cmd --query-panic
有効な場合は終了ステータスが 0yes が出力され、無効の場合は終了ステータスが 1no が出力されます。
4.5.3.4.2. コマンドラインインターフェース (CLI) を使ったファイアウォール設定のリロード
ユーザー接続を切断せず (状態情報を失わずに) ファイアーウォールをリロードするには、root で以下のコマンドを実行します。
~]# firewall-cmd --reload
ファイアーウォールをリロードするには、すべての設定ファイルをリロードし、ファイアーウォール設定全体を再作成する必要があります。リロード中に、安全上の理由により組み込みチェーンのポリシーは DROP に設定され、最終的に ACCEPT に再設定されます。したがって、リロード中にサービスが破棄されることがあります。
ユーザー接続を切断し、状態情報を破棄してファイアーウォールをリロードするには、root で以下のコマンドを実行します。
~]# firewall-cmd --complete-reload
このコマンドは通常、重大なファイアウォール問題の場合にのみ使用されます。たとえば、状態情報に問題があって接続が確立されないものの、ファイアウォールルール自体は適正な場合などには、このコマンドを使用します。
4.5.3.4.3. コマンドラインインターフェース (CLI) を使用してインターフェースをゾーンに追加する手順
インターフェースをゾーンに追加するには (例: em1public ゾーンに追加する場合など)、root で以下のコマンドを実行します。
~]# firewall-cmd --zone=public --add-interface=em1
この設定を永続的にするには、--permanent オプションを追加してコマンドを繰り返します。
4.5.3.4.4. インターフェース設定ファイルを編集してインターフェースをゾーンに追加する
ifcfg-em1 設定ファイル (例: work ゾーンへの em1 の追加) を編集してゾーンにインターフェースを追加するには、root として以下の行を ifcfg-em1 に追加します。
ZONE=work
ZONE オプションを省略するか、ZONE= または ZONE='' を使用すると、デフォルトのゾーンが使用される点に注意してください。
NetworkManager が自動的に再接続を行い、ゾーンがそれに応じて設定されます。
4.5.3.4.5. ファイアウォール設定ファイルを編集してデフォルトゾーンを設定する手順
root/etc/firewalld/firewalld.conf ファイルを開き、以下のように編集します。
# default zone
# The default zone used if an empty zone string is used.
# Default: public
DefaultZone=home
root で以下のコマンドを実行して、ファイアウォールをリロードします。
~]# firewall-cmd --reload
この結果、状態情報を失わずにファイアーウォールがリロードされます (TCP セッションが中断されません) が、リロード中にサービスが破棄されることがあります。
4.5.3.4.6. コマンドラインインターフェース (CLI) を使用したデフォルトゾーンの設定
public などにデフォルトのゾーンを設定するには、root で以下のコマンドを実行します。
~]# firewall-cmd --set-default-zone=public
この変更は即座に有効になり、今回の場合はファイアウォールのリロードは不要です。
4.5.3.4.7. コマンドラインインターフェース (CLI) を使用したファイアウォールのポート開放
dmz など、ゾーンで開放されている全ポートを一覧表示するには、root で以下のコマンドを実行します。
~]# firewall-cmd --zone=dmz --list-ports
--add-services コマンドで開いたポートはここで表示されないことに注意してください。
(dmz ゾーンに対して、ポート 8080 への TCP トラフィックを許可するなど) ゾーンにポートを追加するには、root で以下のコマンドを実行します。
~]# firewall-cmd --zone=dmz --add-port=8080/tcp
この設定を永続的にするには、--permanent オプションを追加してコマンドを繰り返します。
ポート範囲をゾーンに追加するには、たとえばポート5060 から 5061public ゾーンで許可するには、root で以下のコマンドを実行します。
~]# firewall-cmd --zone=public --add-port=5060-5061/udp
この設定を永続的にするには、--permanent オプションを追加してコマンドを繰り返します。
4.5.3.4.8. コマンドラインインターフェース (CLI) を使用したゾーンへのサービスの追加
SMTPwork ゾーンで許可するなど、サービスをゾーンに追加するには、root で以下のコマンドを実行します。
~]# firewall-cmd --zone=work --add-service=smtp
この設定を永続的にするには、--permanent オプションを追加してコマンドを繰り返します。
4.5.3.4.9. コマンドラインインターフェース (CLI) を使用したゾーンからのサービスの削除
SMTPwork ゾーンから削除するなど、サービスをゾーンから削除するには、root で以下のコマンドを実行します。
~]# firewall-cmd --zone=work --remove-service=smtp
この変更を永続的にするには、--permanent オプションを追加してコマンドを繰り返します。この変更を加えても、確立されている接続は切断されません。切断する場合は --complete-reload オプションを使えますが、この場合切断されるのは削除したサービスだけでなく、確立されている接続がすべて切断されることに注意してください。
4.5.3.4.10. XML ファイルを編集してゾーンにサービスを追加する手順
デフォルトゾーンのファイルを表示するには、root で以下のコマンドを実行します。
~]# ls /usr/lib/firewalld/zones/
block.xml  drop.xml      home.xml      public.xml   work.xml
dmz.xml    external.xml  internal.xml  trusted.xml
これらのファイルは、編集しないでください。これらのファイルは、/etc/firewalld/zones/ ディレクトリーに同等のファイルがない場合に、デフォルトで使用されます。
デフォルトから変更されたゾーンファイルを表示するには、root で以下のコマンドを実行します。
~]# ls /etc/firewalld/zones/
external.xml  public.xml  public.xml.old
上記の例では、work ゾーンのファイルは存在しません。work ゾーンのファイルを追加するには、root で以下のコマンドを実行します。
~]# cp /usr/lib/firewalld/zones/work.xml /etc/firewalld/zones/
これで /etc/firewalld/zones/ ディレクトリー内のファイルを編集できます。ファイルを削除してしまった場合は、firewalld/usr/lib/firewalld/zones/ にあるデフォルトファイルを使用してフォールバックします。
SMTPwork ゾーンで許可するなど、サービスをゾーンに追加するには、root/etc/firewalld/zones/work.xml に以下の行を追加します。
<service name="smtp"/>
4.5.3.4.11. XML ファイルを編集してサービスをゾーンから削除する手順
XML ゾーンファイルを編集するには、root 権限でエディターを実行する必要があります。以前に設定されたゾーンのファイルを表示するには、root で以下のコマンドを実行します。
~]# ls /etc/firewalld/zones/
external.xml  public.xml  work.xml
work ゾーンから SMTP を削除するなど、ゾーンからサービスを削除するには root 権限で /etc/firewalld/zones/work.xml ファイルを編集して以下の行を削除します。
<service name="smtp"/>
work.xmlファイルにそれ以外の変更がなされない場合には、これでこの行は削除され、firewalld は次回のリロード時またはシステム起動時にデフォルトの /usr/lib/firewalld/zones/work.xml 設定ファイルを使用します。
4.5.3.4.12. IP アドレスのマスカレードの設定
external ゾーンなどで IP マスカレーディングが有効かどうかを確認するには、root で以下のコマンドを実行します。
~]# firewall-cmd --zone=external --query-masquerade
有効な場合は終了ステータスが 0yes が出力され、無効の場合は終了ステータスが 1no が出力されます。zone が省略されると、デフォルトのゾーンが使用されます。
IP マスカレーディングを有効にするには、root で以下のコマンドを発行します。
~]# firewall-cmd --zone=external --add-masquerade
この設定を永続的にするには、--permanent オプションを追加してコマンドを繰り返します。
IP マスカレーディングを無効にするには、root で以下のコマンドを発行します。
~]# firewall-cmd --zone=external --remove-masquerade
この設定を永続的にするには、--permanent オプションを追加してコマンドを繰り返します。
4.5.3.4.13. コマンドラインインターフェース (CLI) を使ったポート転送 (フォワーディング) の設定
受信ネットワークパケットをポートから別のポートやアドレスに転送するには、まず root で以下のコマンドを実行して、ゾーン (例: external) の IP アドレスマスカレーディングを有効にします。
~]# firewall-cmd --zone=external --add-masquerade
パケットをローカルポート (同一システム上の別のポート) に転送するには、root で以下のコマンドを実行します。
~]# firewall-cmd --zone=external --add-forward-port=port=22:proto=tcp:toport=3753
この例では、ポート 22 に向けられていたパケットがポート 3753 に転送されます。元の宛先のポートは、port オプションで指定します。このオプションでは、プロトコルとともにポートまたはポート範囲を指定できます。プロトコルが指定された場合、プロトコルは tcp、または udp のいずれかにする必要があります。トラフィックの転送先となるポートまたはポート範囲である新しいローカルポートは、toport オプションで指定します。この設定を永続的にするには、--permanent オプションを追加してコマンドを繰り返します。
宛先ポートを変更せずに、パケットを別の IPv4 アドレス (通常は内部アドレス) に転送するには、root で以下のコマンドを実行します。
~]# firewall-cmd --zone=external --add-forward-port=port=22:proto=tcp:toaddr=192.0.2.55
この例では、ポート 22 に向けられていたパケットがポート toaddr で指定したアドレスと同じポートに転送されます。元の宛先のポートは、port オプションで指定します。このオプションでは、プロトコルとともにポートまたはポート範囲を指定できます。プロトコルが指定された場合、プロトコルは tcp、または udp のいずれかにする必要があります。トラフィックの転送先となるポートまたはポート範囲である新しい宛先ポートは、toport オプションで指定します。この設定を永続的にするには、--permanent オプションを追加してコマンドを繰り返します。
パケットを別の IPv4 アドレス (通常は内部アドレス) の別のポートに転送するには、root で以下のコマンドを実行します。
~]# firewall-cmd --zone=external \
      --add-forward-port=port=22:proto=tcp:toport=2055:toaddr=192.0.2.55
この例では、ポート 22 に向けられていたパケットがポート toaddr オプションで指定したアドレスの 2055 ポートに転送されます。元の宛先のポートは、port オプションで指定します。このオプションでは、プロトコルとともにポートまたはポート範囲を指定できます。プロトコルが指定された場合、プロトコルは tcp、または udp のいずれかにする必要があります。トラフィックの転送先となるポートまたはポート範囲である新しい宛先ポートは、toport オプションで指定します。この設定を永続的にするには、--permanent オプションを追加してコマンドを繰り返します。

4.5.3.5. XML ファイルを使ったファイアウォールの設定

firewalld の設定は、XML ファイルで /etc/firewalld/ ディレクトリーに保存されています。/usr/lib/firewalld/ ディレクトリー内のファイルは (デフォルト設定なので)、変更しないでください。XML ファイルの閲覧と変更には、root ユーザー権限が必要になります。XML ファイルは、以下の 3 つの man ページで説明されています。
  • firewalld.icmptype(5) man ページ — ICMP フィルタリングの XML 設定ファイルについて説明しています。
  • firewalld.service(5) man ページ — firewalld service の XML 設定ファイルについて説明しています。
  • firewalld.zone(5) man ページ — firewalld ゾーン設定の XML 設定ファイルについて説明しています。
XML ファイルは直接作成、編集するか、グラフィカルおよびコマンドラインツールを使って間接的に作成することができます。組織内では RPM ファイルでこれらを配布することで、管理とバージョンコントロールが容易になります。Puppet のようなツールを使うと、このような設定ファイルの配布が可能になります。

4.5.3.6. ダイレクトインターフェースの使用

firewall-cmd ツールで --direct オプションを使うと、ランタイム時にチェーンの追加、削除が可能になります。ここではいくつかの例を紹介していますが、詳細は firewall-cmd(1) man ページを参照してください。
ダイレクトインターフェースの使用は意図せずにファイアウォール侵害を引き起こす可能性があるので、iptables に精通していない場合には危険です。
ダイレクトインターフェースモードは、サービスもしくはアプリケーションが実行時に特定のファイアウォールルールを追加するためのものです。--permanent オプションを追加して firewall-cmd --permanent --direct コマンドを使用するか、/etc/firewalld/direct.xml を修正することで、ルールを永続的なものにできます。/etc/firewalld/direct.xml ファイルの詳細は、firewalld.direct(5) の man ページを参照してください。
4.5.3.6.1. ダイレクトインターフェースを使用したカスタムルールの追加
IN_public_allow チェーンにカスタムルールを追加するには、root で以下のコマンドを実行します。
~]# firewall-cmd --direct --add-rule ipv4 filter IN_public_allow \
        0 -m tcp -p tcp --dport 666 -j ACCEPT
--permanent オプションを追加して設定を永続化します。
4.5.3.6.2. ダイレクトインターフェースを使用したカスタムルールの削除
IN_public_allow チェーンからカスタムルールを削除するには、root で以下のコマンドを実行します。
~]# firewall-cmd --direct --remove-rule ipv4 filter IN_public_allow \
        0 -m tcp -p tcp --dport 666 -j ACCEPT
--permanent オプションを追加して設定を永続化します。
4.5.3.6.3. ダイレクトインターフェースを使用したカスタムルールの一覧表示
IN_public_allow のルールを表示するには、root で以下のコマンドを実行します。
~]# firewall-cmd --direct --get-rules ipv4 filter IN_public_allow
このコマンド (--get-rules オプション) は、--add-rule オプションを使用して以前に追加されたルールのみを表示します。他の手段で追加された iptables ルールは表示されません。

4.5.3.7. 「リッチ言語」構文を使った複雑なファイアウォールルールの設定

リッチ言語 構文を使用すると、ダイレクトインターフェースよりも理解しやすい方法で複雑なファイアウォールルールが作成できます。さらに、設定を永続的にすることができます。この言語は値の付いたキーワードを使用するもので、iptables ルールの抽象表現です。ゾーンはこの言語を使って設定することができ、現行の設定方式もそのままサポートされます。
4.5.3.7.1. リッチ言語コマンドの形式
このセクションのコマンドはすべて root で実行する必要があります。ルールを追加するコマンド形式は以下のとおりです。
firewall-cmd [--zone=zone] --add-rich-rule='rule' [--timeout=timeval]
これでリッチ言語ルール (rule) がゾーン (zone) に追加されます。このオプションは複数回指定することができます。ゾーンが省略されると、デフォルトのゾーンが使用されます。タイムアウトが指定されていれば、ルールは指定の秒数の間、アクティブになり、その後に自動的に削除されます。時間の値の後に s (秒)、m (分) または h (時間) を追加して、時間の単位を指定することができます。デフォルトは秒です。
ルールの削除
firewall-cmd [--zone=zone] --remove-rich-rule='rule'
これでゾーン (zone) のリッチ言語のルール (rule) が削除されます。このオプションは複数回指定することができます。ゾーンが省略されると、デフォルトのゾーンが使用されます。
ルールが存在するかの確認
firewall-cmd [--zone=zone] --query-rich-rule='rule'
このコマンドは、リッチ言語ルールの rule がゾーン zone に追加されたかどうかを返します。有効な場合は終了ステータスが 0yes が出力され、無効の場合は終了ステータスが 1no が出力されます。ゾーンが省略されると、デフォルトのゾーンが使用されます。
ゾーン設定ファイルで使用されるリッチ言語表現についての詳細情報は、firewalld.zone(5) man ページを参照してください。
4.5.3.7.2. リッチルールの構造について
リッチルールコマンドの形式または構造は、以下のようになります。
rule [family="rule family"]
    [ source address="address" [invert="True"] ]
    [ destination address="address" [invert="True"] ]
    [ element ]
    [ log [prefix="prefix text"] [level="log level"] [limit value="rate/duration"] ]
    [ audit ]
    [ action ]
ルールは特定のゾーンに関連付けられます。ゾーンには複数のルールを関連付けることができます。いくつかのルールが相互に作用する、または矛盾する場合は、パケットに適合する最初のルールが適用されます。
4.5.3.7.3. リッチルールのコマンドオプションについて
family
ルール family が提供されている場合は、ipv4ipv6 になり、ルールを IPv4 または IPv6 に制限します。ルール family が提供されていない場合は、このルールは IPv4IPv6 の両方に追加されます。ルール内でソースまたは宛先のアドレスが使用されていると、ルール family を提供する必要があります。これは、ポート転送の場合でも同じです。
ソースおよび宛先のアドレス
source
ソースのアドレスを指定すると、接続試行の元を指定したソースアドレスに限定することができます。ソースアドレスまたはアドレスの範囲は、IPv4 または IPv6 のマスクを伴う IP アドレスかネットワーク IP アドレスになります。ネットワーク family (IPv4 または IPv6) が自動的に見つけられます。IPv4 のマスクは、ネットワークマスクか単純な番号になります。IPv6 のマスクは、単純な番号になります。ホスト名の使用はサポートされていません。invert="true" または invert="yes" を追加すると、ソースアドレスコマンドの意味が逆になり、提供されたアドレス以外のものがマッチすることになります。
destination
宛先のアドレスを指定すると、ターゲットを指定した宛先アドレスに限定することができます。宛先アドレスでは、ソースアドレスと同様の構文を使用します。ソースおよび宛先アドレスの使用はオプションで、宛先アドレスの使用はすべての要素と使用できるわけではありません。これは、サービスエントリーにおける宛先アドレスの使用などによります。
要素
要素は、以下のいずれか ひとつのみ のタイプになります。serviceportprotocolmasqueradeicmp-block または forward-port です。
service
service 要素は、firewalld が提供するサービスのひとつです。事前定義のサービス一覧を入手するには、以下のコマンドを実行します。
~]$ firewall-cmd --get-services
サービスが宛先アドレスを提供する場合、ルール内の宛先アドレスと競合し、エラーが発生します。内部で宛先アドレスを使用するサービスのほとんどは、マルチキャストを使用するサービスです。コマンドは以下の形式になります。
service name=service_name
port
port 要素は、単一のポート番号か 5060-5062 のようなポート範囲のどちらかで、その後に tcpudp のプロトコルが続きます。コマンドは以下の形式になります。
port port=number_or_range protocol=protocol
protocol
プロトコルの値は、プロトコル ID 番号かプロトコル名になります。利用可能なプロトコルエントリーについては、/etc/protocols を参照してください。コマンドは以下の形式になります。
protocol value=protocol_name_or_ID
icmp-block
ひとつ以上の ICMP タイプをブロックするには、このコマンドを使用します。ICMP タイプは、firewalld がサポートする ICMP タイプのひとつになります。サポートされる ICMP タイプの一覧を入手するには、以下のコマンドを実行します。
~]$ firewall-cmd --get-icmptypes
ここではアクションの特定はできません。icmp-blockreject のアクションを内部で使用します。コマンドは以下の形式になります。
icmp-block name=icmptype_name
masquerade
ルール内の IP マスカレードを有効にします。ソースアドレスを提供するとこの分野へのマスカレードを制限できますが、宛先アドレスは制限できません。ここではアクションの特定はできません。
forward-port
tcp または udp として指定されたプロトコルのローカルポートから別のローカルポート、別のマシン、または別のマシン上の別のポートにパケットを転送します。port および to-port は、単一のポート番号もしくはポート範囲のどちらでも構いません。宛先アドレスは、単純な IP アドレスになります。ここではアクションの特定はできません。forward-port コマンドは accept のアクションを内部で使用します。コマンドは以下の形式になります。
forward-port port=number_or_range protocol=protocol /
            to-port=number_or_range to-addr=address
ロギング
log
syslog などのカーネルロギングでルールへの新たな接続試行を記録します。ログメッセージに接頭辞として追加される接頭辞テキストを定義することができます。ログレベルは、emergalertcriterrorwarningnoticeinfo または debug のいずれかになります。ログの使用はオプションです。ログの使用は以下のように制限できます。
log [prefix=prefix text] [level=log level] limit value=rate/duration
rate は正の自然数 [1, ..] で、smhd は時間の長さになります。s は秒数、m は分数、h は時間数、d は日数を表します。制限の最大値は 1/d で、これは 1 日あたり最大 1 ログエントリーになります。
audit
Audit は、サービス auditd に送信された監査記録を使ってロギングの別の方法を提供します。audit タイプは ACCEPTREJECT または DROP のいずれかになりますが、これはルールのアクションから自動的に獲得されるので、audit コマンドの後では指定されません。Audit にはそれ自体のパラメーターはありませんが、オプションで制限を加えることができます。Audit の使用はオプションになります。
アクション
accept|reject|drop
アクションは acceptreject または drop のいずれかになります。ルールに含めることができるのは、単一の要素またはソースのみになります。ルールに要素が含まれている場合、その要素のマッチする新たな接続はそのアクションで処理されます。ルールにソースが含まれている場合、そのソースアドレスからのものがすべて指定されたアクションで処理されます。
accept | reject [type=reject type] | drop
accept を使うと、新たな接続試行がすべて許可されます。reject を使うとそれらは拒否され、そのソースは拒否メッセージを受け取ります。拒否のタイプは、別の値を使用するように設定できます。drop を使うと、すべてのパケットが即座に切断され、ソースにはなにも情報が送られません。
4.5.3.7.4. リッチルールログコマンドの使用
ロギングは Netfilter ログターゲットおよび audit ターゲットを使用して実行できます。zone_log という形式の名前で新たなチェーンがすべてのゾーンに追加されます。ここでの zone はゾーン名になります。適切な順序にするために、これは deny チェーンの前に処理されます。ルールまたはルールの部分は以下のようにルールのアクションにしたがって、別個のチェーンに置かれます。
zone_log
zone_deny
zone_allow
ロギングのルールはすべて zone_log チェーンに置かれ、これが最初に解析されます。reject および drop ルールはすべて zone_deny チェーンに置かれ、これは log チェーンの後に解析されます。accept ルールはすべて zone_allow チェーンに置かれ、これは deny チェーンの後に解析されます。ルールに logdeny または allow アクションが含まれる場合、これらのアクションを指定しているルールの部分は一致するチェーンに置かれます。
4.5.3.7.4.1. リッチルールログコマンドの使用例 1
認証ヘッダープロトコル AH 用に新たな IPv4 および IPv6 接続を有効にします :
rule protocol value="ah" accept
4.5.3.7.4.2. リッチルールログコマンドの使用例 2
プロトコル FTP および audit を使用した 1 分あたり 1 件のログ用に新たな IPv4 および IPv6 接続を許可します :
rule service name="ftp" log limit value="1/m" audit accept
4.5.3.7.4.3. リッチルールログコマンドの使用例 3
プロトコル TFTP と syslog を使用した毎分 1 件のログ用にアドレス 192.168.0.0/24 からの新たな IPv4 接続を許可します。
rule family="ipv4" source address="192.168.0.0/24" service name="tftp" log prefix="tftp" level="info" limit value="1/m" accept
4.5.3.7.4.4. リッチルールログコマンドの使用例 4
プロトコル RADIUS 用の 1:2:3:4:6:: からの新たな IPv6 接続はすべて拒否されます。他のソースからの新たな IPv6 接続は許可されます:
rule family="ipv6" source address="1:2:3:4:6::" service name="radius" log prefix="dns" level="info" limit value="3/m" reject
rule family="ipv6" service name="radius" accept
4.5.3.7.4.5. リッチルールログコマンドの使用例 5
プロトコル TCP を使ってポート 4011 で 1:2:3:4:6:: から受信した IPv6 パケットを、ポート 4012 上の 1::2:3:4:7 に転送します。
rule family="ipv6" source address="1:2:3:4:6::" forward-port to-addr="1::2:3:4:7" to-port="4012" protocol="tcp" port="4011"
4.5.3.7.4.6. リッチルールログコマンドの使用例 6
ソースアドレスをホワイトリスト化してそのソースからの接続すべてを許可します。
rule family="ipv4" source address="192.168.2.2" accept
他の例については、firewalld.richlanguage(5) man ページを参照してください。

4.5.3.8. ファイアウォールのロックダウン

ローカルのアプリケーションやサービスは、root で実行していれば (たとえば libvirt) ファイアウォール設定を変更することができます。この機能を使うと、管理者はファイアウォール設定をロックして、どのアプリケーションもファイアウォール変更を要求できなくするか、ロックダウンのホワイトリストに追加されたアプリケーションのみがファイアウォール変更を要求できるようにすることが可能になります。ロックダウン設定はデフォルトで無効になっています。これを有効にすると、ローカルのアプリケーションやサービスによるファイアウォールの望ましくない変更を確実に防止することができます。
4.5.3.8.1. ファイアウォールロックダウンの設定
root でエディターを使用し、以下の行を /etc/firewalld/firewalld.conf ファイルに追加します。
Lockdown=yes
root で以下のコマンドを実行して、ファイアウォールをリロードします。
~]# firewall-cmd --reload
管理ユーザーとして、つまり wheel グループのユーザーとして (通常、システムの最初のユーザー) 以下のコマンドを実行し、デフォルトゾーンで imaps サービスの有効化を図ります。ユーザーパスワードが求められます。
~]$ firewall-cmd --add-service=imaps
Error: ACCESS_DENIED: lockdown is enabled
firewall-cmd の使用を有効にするには、root で以下のコマンドを実行します。
~]# firewall-cmd --add-lockdown-whitelist-command='/usr/bin/python -Es /usr/bin/firewall-cmd*'
この設定を永続的にするには、--permanent オプションを追加します。
root でファイアウォールをリロードします。
~]# firewall-cmd --reload
管理ユーザーとして以下のコマンドを実行し、再度、デフォルトゾーンで imaps サービスの有効化を図ります。ユーザーパスワードが求められます。
~]$ firewall-cmd --add-service=imaps
これでコマンド実行が成功します。
4.5.3.8.2. コマンドラインクライアントを使用したロックダウンの設定
ロックダウンが有効になっているかどうかを確認するには、root で以下のコマンドを実行します。
~]# firewall-cmd --query-lockdown
ロックダウンが有効な場合は終了ステータスが 0yes が出力され、無効の場合は終了ステータスが 1no が出力されます。
ロックダウンを有効にするには、root で以下のコマンドを実行します。
~]# firewall-cmd --lockdown-on
ロックダウンを無効にするには、root で以下のコマンドを実行します。
~]# firewall-cmd --lockdown-off
4.5.3.8.3. コマンドラインを使用したロックダウンホワイトリストオプションの設定
ロックダウンのホワイトリストには、コマンドやセキュリティーのコンテキスト、ユーザー、およびユーザー ID を含めることができます。ホワイトリストのコマンドエントリーがアスタリスク * で終わっている場合、そのコマンドで始まるすべてのコマンドラインがマッチすることになります。* がなければ、引数を含めたコマンドが完全に一致する必要があります。
ここでのコンテキストは、実行中のアプリケーションやサービスのセキュリティー (SELinux) コンテキストです。実行中のアプリケーションのコンテキストを確認するには、以下のコマンドを実行します。
~]$ ps -e --context
このコマンドで、実行中のアプリケーションすべてが返されます。grep ツールを使用して、出力から目的のアプリケーションを以下のようにパイプ処理します。
~]$ ps -e --context | grep example_program
ホワイトリストにあるコマンドラインすべてを一覧表示するには、root で以下のコマンドを実行します。
~]# firewall-cmd --list-lockdown-whitelist-commands
ホワイトリストにコマンド command を追加するには、root で以下のコマンドを実行します。
~]# firewall-cmd --add-lockdown-whitelist-command='/usr/bin/python -Es /usr/bin/command'
ホワイトリストからコマンド command を削除するには、root で以下のコマンドを実行します。
~]# firewall-cmd --remove-lockdown-whitelist-command='/usr/bin/python -Es /usr/bin/command'
ホワイトリストにコマンド command があるかどうかを確認するには、root で以下のコマンドを実行します。
~]# firewall-cmd --query-lockdown-whitelist-command='/usr/bin/python -Es /usr/bin/command'
True の場合は終了ステータスが 0yes が出力され、False の場合は終了ステータスが 1no が出力されます。
ホワイトリストにあるセキュリティーコンテキストすべてを一覧表示するには、root で以下のコマンドを実行します。
~]# firewall-cmd --list-lockdown-whitelist-contexts
ホワイトリストにコンテキスト context を追加するには、root で以下のコマンドを実行します。
~]# firewall-cmd --add-lockdown-whitelist-context=context
この設定を永続的にするには、--permanent オプションを追加します。
ホワイトリストからコンテキスト context を削除するには、root で以下のコマンドを実行します。
~]# firewall-cmd --remove-lockdown-whitelist-context=context
この設定を永続的にするには、--permanent オプションを追加します。
ホワイトリストにコンテキスト context があるかどうかを確認するには、root で以下のコマンドを実行します。
~]# firewall-cmd --query-lockdown-whitelist-context=context
コマンドがある場合は終了ステータスが 0yes が出力され、ない場合は終了ステータスが 1no が出力されます。
ホワイトリストにあるユーザー ID すべてを一覧表示するには、root で以下のコマンドを実行します。
~]# firewall-cmd --list-lockdown-whitelist-uids
ホワイトリストにユーザー ID uid を追加するには、root で以下のコマンドを実行します。
~]# firewall-cmd --add-lockdown-whitelist-uid=uid
この設定を永続的にするには、--permanent オプションを追加します。
ホワイトリストからユーザー ID uid を削除するには、root で以下のコマンドを実行します。
~]# firewall-cmd --remove-lockdown-whitelist-uid=uid
この設定を永続的にするには、--permanent オプションを追加します。
ホワイトリストにユーザー ID uid があるかどうかを確認するには、以下のコマンドを実行します。
~]$ firewall-cmd --query-lockdown-whitelist-uid=uid
コマンドがある場合は終了ステータスが 0yes が出力され、ない場合は終了ステータスが 1no が出力されます。
ホワイトリストにあるユーザー名すべてを一覧表示するには、root で以下のコマンドを実行します。
~]# firewall-cmd --list-lockdown-whitelist-users
ホワイトリストにユーザー名 user を追加するには、root で以下のコマンドを実行します。
~]# firewall-cmd --add-lockdown-whitelist-user=user
この設定を永続的にするには、--permanent オプションを追加します。
ホワイトリストからユーザー名 user を削除するには、root で以下のコマンドを実行します。
~]# firewall-cmd --remove-lockdown-whitelist-user=user
この設定を永続的にするには、--permanent オプションを追加します。
ホワイトリストにユーザー名 user があるかどうかを確認するには、以下のコマンドを実行します。
~]$ firewall-cmd --query-lockdown-whitelist-user=user
コマンドがある場合は終了ステータスが 0yes が出力され、ない場合は終了ステータスが 1no が出力されます。
4.5.3.8.4. 設定ファイルを使用したロックダウンホワイトリストオプションの設定
デフォルトのホワイトリスト設定ファイルには、NetworkManager コンテキストと libvirt のデフォルトのコンテキストが含まれています。また、ユーザー ID 0 がリストに含まれています。
<?xml version="1.0" encoding="utf-8"?>
<whitelist>
  <selinux context="system_u:system_r:NetworkManager_t:s0"/>
  <selinux context="system_u:system_r:virtd_t:s0-s0:c0.c1023"/>
  <user id="0"/>
</whitelist>
以下のホワイトリスト設定ファイルの例では、firewall-cmd ユーティリティーのコマンドと、ユーザー ID が 815 である user のコマンドすべてを有効にしています。
<?xml version="1.0" encoding="utf-8"?>
<whitelist>
  <command name="/usr/bin/python -Es /bin/firewall-cmd*"/>
  <selinux context="system_u:system_r:NetworkManager_t:s0"/>
  <user id="815"/>
  <user name="user"/>
</whitelist>
上記の例では user iduser name の両方が使われていますが、実際にはどちらか一方のみのオプションが必要になります。インタープリターは Python なので、コマンドラインに追加されています。または、以下のような明確なコマンドを使用することもできます。
/usr/bin/python /bin/firewall-cmd --lockdown-on
この例では、--lockdown-on コマンドのみが許可されます。

注記

Red Hat Enterprise Linux 7 では、すべてのユーティリティーが /usr/bin/ ディレクトリーに格納され、/bin/ ディレクトリーは /usr/bin/ ディレクトリーにシンボリックリンクされています。つまり、rootfirewall-cmd のパスを実行すると /bin/firewall-cmd に対して解決しますが、/usr/bin/firewall-cmd が使用できるようになっています。新たなスクリプトはすべて新しい格納場所を使うべきですが、root で実行するスクリプトが /bin/firewall-cmd のパスを使用するようなっていれば、通常 root ユーザー以外のみに使用される /usr/bin/firewall-cmd パスに加えてこのコマンドパスもホワイトリストに加える必要があります。
コマンドの名前属性の最後にある * は、それで始まるすべてのコマンドが一致することを意味します。* がなければ、引数を含めたコマンドが完全に一致する必要があります。

4.5.4. iptables サービスの使用

firewalld の代わりにiptables および ip6tables の各サービスを使用するには、まず root で以下のコマンドを実行して firewalld を無効にします。
~]# systemctl disable firewalld
~]# systemctl stop firewalld
そして root で以下のコマンドを実行して、iptables-services パッケージをインストールします。
~]# yum install iptables-services
iptables-services パッケージには、iptablesip6tables のサービスが含まれています。
インストール後に root で以下のコマンドを実行して、iptables および ip6tables のサービスを開始します。
~]# systemctl start iptables
~]# systemctl start ip6tables
システム起動時にサービスの起動を有効にするには、以下のコマンドを入力します。
~]# systemctl enable iptables
~]# systemctl enable ip6tables

4.5.4.1. IPTables および IP セット

ipset ユーティリティーは、Linux カーネルで IP セットを管理するために使用します。IP セットは IP アドレス、ポート番号、IP と MAC アドレスのペア、または IP アドレスとポート番号のペアを格納するフレームワークです。IP セットが非常に大きい場合であっても IP セットに対する照合が非常に高速に行われるよう IP セットにはインデックスが作成されます。IP セットにより、設定が簡素化され、管理しやすくなり、iptables を使用した場合にパフォーマンスが向上します。セットを参照する iptables のマッチとターゲットにより、カーネルの該当するセットを保護するリファレンスが作成されます。セットを参照するリファレンスが 1 つでもある限り、セットを破棄することはできません。
ipset を使用すると、以下のような iptables コマンドをセットに置き換えることができます。
~]# iptables -A INPUT -s 10.0.0.0/8 -j DROP
~]# iptables -A INPUT -s 172.16.0.0/12 -j DROP
~]# iptables -A INPUT -s 192.168.0.0/16 -j DROP
セットは以下のように作成されます。
~]# ipset create my-block-set hash:net
~]# ipset add my-block-set 10.0.0.0/8
~]# ipset add my-block-set 172.16.0.0/12
~]# ipset add my-block-set 192.168.0.0/16
セットは、以下のように iptables コマンドで参照されます。
~]# iptables -A INPUT -m set --set my-block-set src -j DROP
セットが複数回使用される場合は、設定時間が短縮されます。セットに多くのエントリーが含まれる場合は、処理時間が短縮されます。
4.5.4.1.1. firewalld での IP セットの使用
firewalld で IP セットを使用するには、セットを参照するために永続的な直接ルールが必要であり、各 ipset に対して firewalld が起動する前にカスタムサービスを作成および起動する必要があります。永続的な直接ルールは、/etc/firewalld/direct.xml ファイルを使用して追加できます。

手順4.1 IP セットのカスタムサービスの設定

firewalld が起動する前に、カスタムサービスが IP セット構造を作成およびロードするよう設定します。
  1. root でエディターを使用して、以下のようにファイルを作成します。
    ~]# vi /etc/systemd/system/ipset_name.service
    [Unit]
    Description=ipset_name
    Before=firewalld.service
    
    [Service]
    Type=oneshot
    RemainAfterExit=yes
    ExecStart=/usr/local/bin/ipset_name.sh start
    ExecStop=/usr/local/bin/ipset_name.sh stop
    
    [Install]
    WantedBy=basic.target
  2. firewalld で IP セットを永続的に使用します。
    ~]# vi /etc/firewalld/direct.xml
    <?xml version="1.0" encoding="utf-8"?>
    <direct>
       <rule ipv="ipv4" table="filter" chain="INPUT" priority="0">-m set
    --match-set <replaceable>ipset_name</replaceable> src -j DROP</rule>
    </direct>
  3. 変更を反映するには firewalld をリロードする必要があります。
    ~]# firewall-cmd --reload
    この結果、状態情報を失わずにファイアーウォールがリロードされます (TCP セッションが中断されません) が、リロード中にサービスが破棄されることがあります。
4.5.4.1.2. ipset のインストール
ipset ユーティリティーをインストールするには、以下のコマンドを root で実行します。
~]# yum install ipset
使用法のメッセージを表示するには、以下のコマンドを実行します。
~]$ ipset --help
ipset v6.11

Usage: ipset [options] COMMAND出力省略
4.5.4.1.3. ipset コマンド
ipset コマンドの形式は以下のようになります。
ipset [options] command [command-options]
Where command is one of:
create | add | del | test | destroy | list | save | restore | flush | rename | swap | help | version | - 
Allowed options are:
-exist | -output [ plain | save | xml ] | -quiet | -resolve | -sorted | -name | -terse
create コマンドは、IP データのセットを格納する新しいデータ構造を作成するために使用します。add コマンドを使用すると、セットに新しいデータが追加され、追加されたデータはセットの要素として参照されます。
-exist オプションを使用すると、要素がすでに存在する場合に、エラーメッセージが表示されず、タイムアウト値を更新する特別なロールが提供されます。タイムアウトを変更するには、ipset add コマンドを使用し、必要に応じてタイムアウト値のみを変更して -exist オプションを使用することにより要素のすべてのデータを再び指定します。
test オプションは、要素がすでにセット内に存在する場合のテスト用です。
create コマンドの形式は以下のようになります。
ipset create set-name type-name [create-options]
set-name は、ユーザーにより選択された適切な名前であり、type-name はセットを構成するデータを格納するために使用するデータ構造の名前です。type-name の形式は以下のとおりです。
method:datatype[,datatype[,datatype]]
データの格納に許可される方法は以下のとおりです。
 bitmap | hash | list 
許可されるデータタイプは以下のとおりです。
ip | net | mac | port | iface 
セット内でエントリー追加、削除、またはテストする場合は、セット内で 1 つのエントリー (つまり要素) を構成するデータに、カンマで区切られた同じデータを使用する必要があります。以下に例を示します。
ipset add set-name ipaddr,portnum,ipaddr

注記

セットには IPv4 アドレスと IPv6 アドレスを同時に含めることはできません。セットは作成されたときにファミリーにバインドされます (IPv4 の場合は inetIPv6 の場合は inet6。デフォルト値は inet)。

例4.2 IP セットの作成

ソース IP アドレス、ポート、および宛先 IP アドレスで構成される IP セットを作成するには、コマンドを以下のように実行します。
~]# ipset create my-set hash:ip,port,ip
セットが作成されると、エントリーは以下のように追加できます。
~]# ipset add my-set 192.168.1.2,80,192.168.2.2
~]# ipset add my-set 192.168.1.2,443,192.168.2.2
セットタイプには共通して以下のオプションのパラメーターがあります。これらのパラメーターを使用するには、セットの作成時にパラメーターを指定する必要があります。
  • timeoutcreate コマンドで提供された値は、作成されたセットのデフォルト値になります。add コマンドで提供された値は要素の非デフォルト初期値になります。
  • counters — オプションが create コマンドで提供された場合は、セット内の各要素に対してパケットおよびバイトカウンターが作成されます。値が add コマンドで提供されない場合、カウンターはゼロから始まります。
  • comment — オプションが create コマンドで提供された場合は、追加される要素の目的を文書化するために add コマンドで引用符で囲まれたテキスト文字列を渡すことができます。引用符は文字列内で許可されず、エスケープ文字は IP セット内で無効になることに注意してください。

例4.3 IP セットのリスト

特定の IP セットである my-set の内容をリストするには、以下のようにコマンドを実行します。
~]# ipset list my-set
Name: my-set
Type: hash:ip,port,ip
Header: family inet hashsize 1024 maxelem 65536
Size in memory: 8360
References: 0
Members:
192.168.1.2,tcp:80,192.168.2.2
192.168.1.2,tcp:443,192.168.2.2
すべてのセットをリストするにはセット名を省略します。

例4.4 IP セットの要素のテスト

大きいセットの内容をリストするには時間がかかります。以下のように、要素があるかどうかテストできます。
~]# ipset test my-set 192.168.1.2,80,192.168.2.2
192.168.1.2,tcp:80,192.168.2.2 is in set my-set.
4.5.4.1.4. IP セットタイプ
bitmap:ip
セットの作成時に netmask オプションが使用される場合は、IPv4 ホストアドレス、ネットワーク範囲、またはプレフィックス長が CIDR 表記の IPv4 ネットワークアドレスを格納します。オプションでタイムアウト値、カウンター値、およびコメントを格納できます。最大で 65536 のエントリーを格納できます。bitmap:ip セットを作成するコマンドの形式は以下のとおりです。
ipset create set-name range start_ipaddr-end_ipaddr |ipaddr/prefix-length [netmask prefix-length] [timeout value] [counters] [comment]

例4.5 プレフィックス長を使用したアドレス範囲の IP セットの作成

プレフィックス長を使用してアドレス範囲の IP セットを作成するには、以下のように bitmap:ip セットタイプを使用します。
~]# ipset create my-range bitmap:ip range 192.168.33.0/28
セットが作成されると、エントリーは以下のように追加できます。
~]# ipset add my-range 192.168.33.1
リストのメンバーを確認します。
~]# ipset list my-range
Name: my-range
Type: bitmap:ip
Header: range 192.168.33.0-192.168.33.15
Size in memory: 84
References: 0
Members:
192.168.33.1
アドレス範囲を追加するには、以下のようにコマンドを実行します。
~]# ipset add my-range 192.168.33.2-192.168.33.4
リストのメンバーを確認します。
~]# ipset list my-range
Name: my-range
Type: bitmap:ip
Header: range 192.168.33.0-192.168.33.15
Size in memory: 84
References: 0
Members:
192.168.33.1
192.168.33.2
192.168.33.3
192.168.33.4

例4.6 ネットマスクを使用したアドレス範囲の IP セットの作成

ネットマスクを使用してアドレス範囲の IP セットを作成するには、以下のように bitmap:ip セットタイプを使用します。
~]# ipset create my-big-range bitmap:ip range 192.168.124.0-192.168.126.0 netmask 24
セットが作成されると、エントリーは以下のように追加できます。
~]# ipset add my-big-range 192.168.124.0
アドレスを追加しようとすると、そのアドレスを含む範囲が追加されます。
~]# ipset add my-big-range 192.168.125.150
~]# ipset list my-big-range
Name: my-big-range
Type: bitmap:ip
Header: range 192.168.124.0-192.168.126.255 netmask 24
Size in memory: 84
References: 0
Members:
192.168.124.0
192.168.125.0
bitmap:ip,mac
IPv4 アドレスと MAC アドレスをペアとして格納します。最大で 65536 のエントリーを格納できます。
ipset create my-range bitmap:ip,mac range start_ipaddr-end_ipaddr | ipaddr/prefix-length [timeout value ] [counters] [comment]

例4.7 IPv4 MAC アドレスペアの範囲の IP セットの作成

IPv4 MAC アドレスペアの範囲の IP セットを作成するには、以下のように bitmap:ip,mac セットタイプを使用します。
~]# ipset create my-range bitmap:ip,mac range 192.168.1.0/24
セットを作成する場合に、MAC アドレスを指定する必要はありません。
セットが作成されると、エントリーは以下のように追加できます。
~]# ipset add my-range 192.168.1.1,12:34:56:78:9A:BC
bitmap:port
ポート範囲を格納します。最大で 65536 のエントリーを格納できます。
ipset create my-port-range bitmap:port range start_port-end_port [timeout value ] [counters] [comment]
設定されたマッチおよび SET ターゲット netfilter カーネルモジュールは、格納された番号を TCP または UDP ポート番号として解釈します。プロトコルはオプションでポートともに指定できます。サービス名が使用され、その名前が TCP サービスとして存在しない場合は、proto のみを指定する必要があります。

例4.8 ポート範囲の IP セットの作成

ポート範囲の IP セットを作成するには、以下のように bitmap:port セットタイプを使用します。
~]# ipset create my-permitted-port-range bitmap:port range 1024-49151
セットが作成されると、エントリーは以下のように追加できます。
~]# ipset add my-permitted-port-range 5060-5061
hash:ip
ホストまたはネットワークアドレスをハッシュ形式で格納します。デフォルトでは、ネットワークプレフィックス長なしで指定されたアドレスがホストアドレスになります。すべてがゼロの IP アドレスを格納することはできません。
ipset create my-addresses hash:ip [family[ inet | inet6 ]] [hashsize value] [maxelem value ] [netmask prefix-length] [timeout value ]
inet ファミリーがデフォルト値になります。family が省略されると、アドレスは IPv4 アドレスとして解釈されます。hashsize 値は使用する初期ハッシュサイズであり、デフォルトで 1024 に設定されます。maxelem 値はセットに格納できる要素の最大数であり、デフォルトで 65536 に設定されます。
netfilter ツールは最も明確なネットワークプレフィックスを検索し、一致するアドレスの最も小さいブロックを見つけようとします。

例4.9 IP アドレスの IP セットの作成

IP アドレスの IP セットを作成するには、以下のように hash:ip セットタイプを使用します。
~]# ipset create my-addresses hash:ip
セットが作成されると、エントリーは以下のように追加できます。
~]# ipset add my-addresses 10.10.10.0
ネットマスクやタイムアウトなどの追加のオプションが必要な場合は、セットの作成時にオプションを指定する必要があります。例を以下に示します。
~]# ipset create my-busy-addresses hash:ip maxelem 24 netmask 28 timeout 100
maxelem オプションを使用すると、セット内の要素の合計数に制限され、メモリー使用量が節約されます。
timeout オプションは、指定された秒数の間にだけ要素がセット内に存在することを意味します。以下に示します。
~]# ipset add my-busy-addresses 192.168.60.0 timeout 100
以下の出力は時間のカウントダウンを示しています。
~]# ipset list my-busy-addresses
Name: my-busy-addresses
Type: hash:ip
Header: family inet hashsize 1024 maxelem 24 netmask 28 timeout 100
Size in memory: 8300
References: 0
Members:
192.168.60.0 timeout 90
~]# ipset list my-busy-addresses
Name: my-busy-addresses
Type: hash:ip
Header: family inet hashsize 1024 maxelem 24 netmask 28 timeout 100
Size in memory: 8300
References: 0
Members:
192.168.60.0 timeout 83
タイムアウト期間が終了すると、要素がセットから削除されます。
他の例については、ipset(8) man ページを参照してください。

4.5.5. その他のリソース

以下の情報ソースでは、firewalld に関する追加リソースが提供されています。

4.5.5.1. インストールされているドキュメント

  • firewalld(1) man ページ — firewalld のコマンドオプションについて説明しています。
  • firewalld.conf(5) man ページ — firewalld の設定に関する情報が含まれています。
  • firewall-cmd(1) man ページ — firewalld コマンドラインクライアントのコマンドオプションについて説明しています。
  • firewalld.icmptype(5) man ページ — ICMP フィルタリングの XML 設定ファイルについて説明しています。
  • firewalld.service(5) man ページ — firewalld service の XML 設定ファイルについて説明しています。
  • firewalld.zone(5) man ページ — firewalld ゾーン設定の XML 設定ファイルについて説明しています。
  • firewalld.direct(5) man ページ — firewalld ダイレクトインターフェース設定ファイルについて説明しています。
  • firewalld.lockdown-whitelist(5) man ページ — firewalld ロックダウンホワイトリストの設定ファイルについて説明しています。
  • firewall.richlanguage(5) man ページ — firewalld リッチ言語ルールの構造について説明しています。
  • firewalld.zones(5) man ページ — ゾーンについての全般的な説明とそれらの設定方法が説明されています。