Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

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
上記のコマンドは、名前 testIPv4hash: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 セットにエントリーがありません。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 セットに記載されるアドレスから受信するすべてのトラフィックを処理します。たとえば、テスト IP セットをソースとして drop ゾーンに追加し、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 ファイルを使用して、永続的なダイレクトルールを追加できます。