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
上記のコマンドは、名前 test と
IPv4
の 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 セットにエントリーがありません。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 セット構造を作成してロードするようにカスタムサービスを設定するには、以下を実行します。
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
- 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>
- 変更を有効にするには、
firewalld
のリロードが必要です。~]# firewall-cmd --reload
これにより、状態情報を失うことなくファイアウォールがリロードされます (TCP セッションは終了しません) が、リロード中にサービスが中断する可能性があります。
警告
Red Hat は、
firewalld
で管理されない IP セットを使用することは推奨していません。このような IP セットを使用すると、そのセットを参照する永続的なダイレクトルールが必要で、IP セットを作成するカスタムサービスを追加する必要があります。このサービスは、firewalld を起動する前に起動する必要があります。起動しないと、firewalld
はこのセットを使用してダイレクトルールを追加できません。/etc/firewalld/direct.xml
ファイルを使用して、永続的なダイレクトルールを追加できます。