5.12. firewalld を使用した IP セットの設定および制御

firewalld でサポートする IP セットタイプの一覧を表示するには、root で以下のコマンドを実行します。
~]# firewall-cmd --get-ipset-types
hash:ip hash:ip,mark hash:ip,port hash:ip,port,ip hash:ip,port,net hash:mac hash:net hash:net,iface hash:net,net hash:net,port hash:net,port,net

5.12.1. コマンドラインクライアントを使用して IP セットオプションの設定

IP セットは、firewalld ゾーンでソースとして使用でき、リッチルールでソースとして使用できます。Red Hat Enterprise Linux 7 では、推奨される方法は、ダイレクトルールで firewalld を使用して作成した IP セットを使用します。
永続的な環境で firewalld に認識されている IP セットをリストするには、以下のコマンドを root で実行します。
~]# firewall-cmd --permanent --get-ipsets
新しい IP セットを追加するには、永続化環境を使用した以下のコマンドを root で実行します。
~]# firewall-cmd --permanent --new-ipset=test --type=hash:net
success
以前のコマンドは、IPv4test 名前と、hash:net タイプで新しい IP セットを作成します。IPv6 で使用するために IP セットを作成するには、--option=family=inet6 オプションを追加します。ランタイム環境で新しい設定を有効にするには、firewalld を再ロードします。root で以下のコマンドを実行して、新しい IP セットを一覧表示します。
~]# firewall-cmd --permanent --get-ipsets
test
IP セットの詳細は、以下のコマンドを root として実行します。
~]# firewall-cmd --permanent --info-ipset=test
test
type: hash:net
options: 
entries:
この時点で、IP セットにエントリーがありません。test IP セットにエントリーを追加するには、以下のコマンドを root で実行します。
~]# firewall-cmd --permanent --ipset=test --add-entry=192.168.0.1
success
以下のコマンドは、IP アドレス 192.168.0.1 を IP セットに追加します。IP セットで現在のエントリーの一覧を取得するには、以下のコマンドを root で実行します。
~]# firewall-cmd --permanent --ipset=test --get-entries
192.168.0.1
IP アドレスの一覧を含むファイルを生成します。以下のコマンドを実行します。
~]# cat > iplist.txt <<EOL
192.168.0.2
192.168.0.3
192.168.1.0/24
192.168.2.254
EOL
IP セットの IP アドレスの一覧が含まれるファイルには、行ごとにエントリーが含まれる必要があります。ハッシュ、セミコロン、また空の行から始まる行は無視されます。
iplist.txt ファイルからアドレスを追加するには、以下のコマンドを root で実行します。
~]# firewall-cmd --permanent --ipset=test --add-entries-from-file=iplist.txt
success
IP セットの拡張エントリーの一覧を表示するには、root で以下のコマンドを実行します。
~]# firewall-cmd --permanent --ipset=test --get-entries
192.168.0.1
192.168.0.2
192.168.0.3
192.168.1.0/24
192.168.2.254
IP セットからアドレスを削除し、更新したエントリー一覧を確認するには、以下のコマンドを root で実行します。
~]# firewall-cmd --permanent --ipset=test --remove-entries-from-file=iplist.txt
success
~]# firewall-cmd --permanent --ipset=test --get-entries 192.168.0.1
IP セットをゾーンへのソースとして追加して、ゾーンを使用して IP セットに一覧表示したアドレスから受信するすべてのトラフィックを処理します。たとえば、test IP セットをソースとして drop ゾーンに追加すると、test IP セットに一覧表示するすべてのエントリーから発信されるパケットをすべて破棄するには、root で以下のコマンドを実行します。
~]# firewall-cmd --permanent --zone=drop --add-source=ipset:test
success
ソースの ipset: 接頭辞は、ソースが IP セットで、IP アドレスまたはアドレス範囲ではない firewalld を示しています。
IP セットの作成および削除は、永続環境に限定されており、その他の IP セットオプションは、--permanent オプションを使用しないランタイム環境で使用できます。

5.12.2. 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 セッションは終了しません) が、再起動時にサービスが中断する可能性があります。

警告

Red Hat は、firewalld. を介して管理されない IP セットを使用することは推奨しません。このような IP セットを使用すると、そのセットを参照するために永続的なダイレクトルールが必要で、IP セットを作成するためにカスタムサービスを追加する必要があります。このサービスは、firewalld を起動する前に起動する必要があります。先に起動しておかないと、firewalld が、このセットを使用してダイレクトルールを追加できません。/etc/firewalld/direct.xml ファイルを使用して、永続的なダイレクトルールを追加できます。