4.5. ファイアウォールの使用
firewalld は、動的に管理されるファイアウォールを提供し、信頼レベルをネットワークと関連する接続およびインターフェースに割り当てるネットワーク「ゾーン」をサポートします。これは、IPv4 および IPv6 のファイアウォール設定をサポートします。また、イーサネットブリッジをサポートし、実行時と永続的な設定オプションを別々にすることできます。ファイアウォールルールを直接追加するためのサービスやアプリケーション向けのインターフェースもあります。firewalld で完全な通信を行うには D-Bus を使用します。
注記
4.5.1. firewalld の概要
firewalld.conf ファイルで構成設定の IndividualCalls が yes に設定されている場合、またはルールがフォールバックの解決策としてリストアコマンドで適用できない場合には、通常のコマンドを使用します。通常のコマンドを使用すると、大幅に操作が遅くなります。
firewall と入力してから Enter を押します。firewall-config ツールが表示され、管理者パスワードの入力が求められます。
firewalld が提供するファイアウォールのサービスは、設定の変更はいつでも可能で即座に実行されるので、静的ではなく動的なものです。変更は保存したり適用したりする必要がありません。ファイアウォールはリロードの必要がないので、既存のネットワーク接続が意図せずに中断されることがありません。
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 コマンドはファイアウォールの設定のインストール中に使用されます。また、ファイアウォール設定を変更するためにインストール後の設定で使用してから、新規インストールされたシステムを起動することもできます。
firewalld の設定は、様々な XML ファイルで /usr/lib/firewalld/ と /etc/firewalld/ に保存されます。これらのファイルは修正、書き込み、バックアップ、他のインストールへのテンプレートとしての使用などができるので、柔軟性が高まります。/usr/lib/firewalld/ の設定はデフォルトでフォールバックの設定ですが、/etc/firewalld/ の設定はシステム固有の設定になっています。
D-Bus インターフェースを使って firewalld と通信できます。
4.5.1.1. firewalld と system-config-firewall および iptables との比較
firewalld と iptables (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では既存の接続が中断されることなく実行時に設定変更ができます。
注記
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 を使うと、ユーザーがネットワーク内のインターフェースとトラフィックに配置する信頼レベルに基づいて、ネットワークを異なるゾーンに分けることができます。NetworkManager が firewalld にインターフェースが所属するゾーンを通知します。インターフェースに割り当てられたゾーンは NetworkManager で、または関連する NetworkManager ウィンドウを開く firewall-config ツール経由で変更できます。firewall-cmd コマンドラインツールも使用できます。インターフェースが NetworkManager で制御されていて、ユーザーが firewall-cmd、firewall-offline-cmd または firewall-config を使用してインターフェースのゾーンを変更した場合には、この要求は NetworkManager に転送され、firewalld では処理されません。
/etc/firewalld/ におけるゾーン設定は、ネットワークインターフェースにすぐに適用可能な事前設定の範囲です。以下でこれらを簡単に説明します。
drop- 着信ネットワークパケットはすべて遮断され、返信されません。送信ネットワーク接続のみが可能です。
blockIPv4では icmp-host-prohibited メッセージで、IPv6では icmp6-adm-prohibited メッセージですべての着信ネットワーク接続が拒否されます。システム内で開始されたネットワーク接続のみが可能です。public- 公開エリア用です。自分のコンピューターを保護するため、ネットワーク上の他のコンピューターを信頼しません。選択された着信接続のみが許可されます。
external- マスカレードを特別にルーター用に有効にした外部ネットワーク上での使用向けです。自分のコンピューターを保護するため、ネットワーク上の他のコンピューターを信頼しません。選択された着信接続のみが許可されます。
dmz- 公開アクセスが可能ではあるものの、内部ネットワークへのアクセスには制限がある非武装地帯にあるコンピューター用。選択された着信接続のみが許可されます。
work- 作業エリア用です。自分のコンピューターを保護するため、ネットワーク上の他のコンピューターをほぼ信頼します。選択された着信接続のみが許可されます。
home- ホームエリア用です。自分のコンピューターを保護するため、ネットワーク上の他のコンピューターをほぼ信頼します。選択された着信接続のみが許可されます。
internal- 内部ネットワーク用です。自分のコンピューターを保護するため、ネットワーク上の他のコンピューターをほぼ信頼します。選択された着信接続のみが許可されます。
trusted- すべてのネットワーク接続が許可されます。
firewalld のデフォルトは public ゾーンに設定されます。
ネットワークゾーンの選択
firewall-cmd の永続設定にゾーンのデフォルト値を読みこませて、初期デフォルト値に設定を戻すことは可能です。
4.5.1.3. 事前定義のサービスについて
firewalld.service(5) man ページで説明されています。サービスは個別の XML 設定ファイルで指定されており、これらのファイル名の形式は、service-name.xml となります。firewalld では、プロトコル名よりもサービスまたはアプリケーション名が推奨されます。
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-cmd、firewall-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.xmlfirewalld は、/usr/lib/firewalld/services からファイルを読み込みます。ファイルが /etc/firewalld/services に配置されて有効な場合には、/usr/lib/firewalld/services にある対応のファイルを上書きします。/etc/firewalld/services にある対応のファイルが削除されるか、サービスのデフォルトを読みこむように firewalld に要求が出されるとすぐに、/usr/lib/firewalld/services の上書きされたファイルが使用されます。これが該当するのは永続環境のみで、ランタイム環境でフォールバックさせるには、再読み込みが必要です。
4.5.1.4. ダイレクトインターフェースについて
firewalld には、ルールを直接 iptables、ip6tables、および ebtables に渡せるようにする ダイレクトインターフェース が含まれます。これは主にアプリケーションによる使用が対象です。iptables に精通していないと意図せずにファイアウォール侵害を引き起こす可能性があるので、ダイレクトインターフェースを使用することは危険です。追跡のあるインターフェースパーツを使用している限り、firewalld をクエリーでき、このモードでアプリケーションが加えた変更を確認することができます。追跡のないパススルーモードは、libvirt および docker など、独自のルールセットに完全に対応するサービスのみを対象にしています。ダイレクトインターフェースはを使用するには、--direct オプションを firewall-cmd コマンドに追加します。
--permanent オプションを追加して firewall-cmd --permanent --direct コマンドを使用するか、/etc/firewalld/direct.xml を修正することで、ルールを永続的なものにできます。ルールが永続的になっていないと、D-Bus を使用して firewalld から開始、再開、リロードのメッセージを受け取るたびにルールを毎回適用する必要があります。ダイレクトインターフェースでは、チェーン、ルール、追跡あり/なしのパススルールールを追加できます。また、ゾーン固有のチェーンにダイレクトルールを使用することもできます。
4.5.2. firewalld のインストール
firewalld はデフォルトでインストールされます。必要な場合は、確実にインストールするために root で以下のコマンドを入力します。
~]# yum install firewalldroot で以下のコマンドを入力して、確実に firewall-config がインストールされるようにします。
~]# yum install firewall-configroot で以下のコマンドを実行します。
~]# yum install firewall-applet4.5.2.1. firewalld の停止
firewalld を停止するには、root で以下のコマンドを入力します。
~]# systemctl stop firewalldfirewalld がシステム起動時に自動的に起動しないようにするには、root で以下のコマンドを発行します。
~]# systemctl disable firewalldfirewalld D-Bus インターフェースにアクセスしても firewalld が起動されないようにする場合、他のサービスが firewalld を必要とする場合には、以下のコマンドを root として実行します。
~]# systemctl mask firewalld4.5.2.2. firewalld の起動
firewalld を起動するには、root で以下のコマンドを実行します。
~]#systemctl unmask firewalld~]#systemctl start firewalld
firewalld をシステム起動時に自動的に起動するには、root で以下のコマンドを入力します。
~]# systemctl enable firewalld4.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 --state
running4.5.3. firewalld の設定
firewalld デーモンにより実装されるファイアーウォールサービスは、firewall-config のグラフィカルユーザーインターフェースツールまたは firewall-cmd および firewall-offline-cmd のコマンドラインインターフェースツールを使用するか、XML 設定ファイルを編集して設定できます。これらの方法について順番に説明します。
4.5.3.1. グラフィカルユーザーインターフェースを使った firewalld の設定
4.5.3.1.1. グラフィカルファイアウォール設定ツールの起動
firewall と入力してから Enter を押します。firewall-config ツールが表示され、管理者パスワードの入力が求められます。
~]$ firewall-config
図4.2 ファイアウォール設定ツール
firewalld に接続されていることが分かります。ICMP タイプ、IPSets、ダイレクト設定、ロックダウンホワイトリスト タブは、表示 のドロップダウンメニューから選択した後にのみ、表示されることに注意してください。左側の アクティブバインディング のサイドバーはデフォルトで表示されます。
4.5.3.1.2. ファイアウォールの設定変更
注記
4.5.3.1.3. ゾーンへのインターフェースの追加
firewalld には保存されません。
4.5.3.1.4. デフォルトゾーンの設定
~]$ firewall-cmd --set-default-zone=zone-name4.5.3.1.5. サービスの設定
IPv4 または IPv6) へのトラフィックが制限できます。
注記
4.5.3.1.6. ファイアウォールのポート開放
4.5.3.1.7. ファイアウォールのプロトコル開放
4.5.3.1.8. ファイアウォールのソースポート開放
4.5.3.1.9. IPv4 アドレスのマスカレーディングの有効化
IPv4 アドレスを単一の外部アドレスに変換するには、firewall-config ツールを起動して、変換するアドレスのネットワークゾーンを選択します。 マスカレーディング タブを選択し、チェックボックスを選択して IPv4 アドレスの単一アドレスへの変換を有効にします。
注記
IPv6 のマスカレーディングを有効にするには、リッチルールを使用します。
4.5.3.1.10. ポート転送 (フォワーディング) の設定
IPv4 アドレスに転送するには、他のポートへの転送 チェックボックスを選択します。送信先の IP アドレスとポートまたはポート範囲を入力します。ポートのフィールドに入力がないと、デフォルトで同一ポートに送信されます。OK をクリックして変更を適用します。
4.5.3.1.11. ICMP フィルターの設定
ICMP フィルターを有効、無効にするには、firewall-config ツールを起動して、フィルターにかけるメッセージのネットワークゾーンを選択します。ICMP フィルター タブを選択し、フィルターにかける ICMP メッセージの各タイプのチェックボックスを選択します。フィルターを無効にするには、チェックボックスの選択を外します。これは方向ごとに設定され、デフォルトではすべてが許可されます。
ICMP タイプを編集するには、firewall-config ツールを起動してから 設定 ラベルのあるドロップダウンメニューで モードを選びます。 ウィンドウの下部に新たなアイコンが表示されます。以下のダイアログで を選択して、マスカレーディングを有効化し、別の機能するマシンに転送します。
ICMP タイプが受け入れられ、その他はすべて拒否されます。DROP ターゲットを使用するゾーンでは、ドロップされます。
4.5.3.2. 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= ディレクティブに従ってインターフェースがゾーンに自動的に追加されるためです。NetworkManager と ifcfg ファイルの使用については、『Red Hat Enterprise Linux 7 ネットワークガイド』 を参照してください。
4.5.3.3. コマンドラインインターフェース (CLI) を使ったファイアウォール設定の表示
firewalld の状態をテキスト表示するには、以下のコマンドを実行します。
~]$ firewall-cmd --state
~]$ firewall-cmd --get-active-zones
public
interfaces: em1
~]$ firewall-cmd --get-zone-of-interface=em1
public
root で以下のコマンドを実行します。
~]# firewall-cmd --zone=public --list-interfaces
em1 wlan0
この情報は NetworkManager から得られるもので、接続ではなくインターフェースのみを表示します。
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-panic0 で yes が出力され、無効の場合は終了ステータスが 1 で no が出力されます。
4.5.3.4.2. コマンドラインインターフェース (CLI) を使ったファイアウォール設定のリロード
root で以下のコマンドを実行します。
~]# firewall-cmd --reloadroot で以下のコマンドを実行します。
~]# firewall-cmd --complete-reload4.5.3.4.3. コマンドラインインターフェース (CLI) を使用してインターフェースをゾーンに追加する手順
public ゾーンに追加する場合など)、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='' を使用すると、デフォルトのゾーンが使用される点に注意してください。
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 --reload4.5.3.4.6. コマンドラインインターフェース (CLI) を使用したデフォルトゾーンの設定
public などにデフォルトのゾーンを設定するには、root で以下のコマンドを実行します。
~]# firewall-cmd --set-default-zone=public4.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 から 5061 を public ゾーンで許可するには、root で以下のコマンドを実行します。
~]# firewall-cmd --zone=public --add-port=5060-5061/udp--permanent オプションを追加してコマンドを繰り返します。
4.5.3.4.8. コマンドラインインターフェース (CLI) を使用したゾーンへのサービスの追加
SMTP を work ゾーンで許可するなど、サービスをゾーンに追加するには、root で以下のコマンドを実行します。
~]# firewall-cmd --zone=work --add-service=smtp--permanent オプションを追加してコマンドを繰り返します。
4.5.3.4.9. コマンドラインインターフェース (CLI) を使用したゾーンからのサービスの削除
SMTP を work ゾーンから削除するなど、サービスをゾーンから削除するには、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.oldwork ゾーンのファイルを追加するには、root で以下のコマンドを実行します。
~]# cp /usr/lib/firewalld/zones/work.xml /etc/firewalld/zones//etc/firewalld/zones/ ディレクトリー内のファイルを編集できます。ファイルを削除してしまった場合は、firewalld は /usr/lib/firewalld/zones/ にあるデフォルトファイルを使用してフォールバックします。
SMTP を work ゾーンで許可するなど、サービスをゾーンに追加するには、root で /etc/firewalld/zones/work.xml に以下の行を追加します。
<service name="smtp"/>
4.5.3.4.11. XML ファイルを編集してサービスをゾーンから削除する手順
root 権限でエディターを実行する必要があります。以前に設定されたゾーンのファイルを表示するには、root で以下のコマンドを実行します。
~]# ls /etc/firewalld/zones/
external.xml public.xml work.xmlwork ゾーンから 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-masquerade0 で yes が出力され、無効の場合は終了ステータスが 1 で no が出力されます。zone が省略されると、デフォルトのゾーンが使用されます。
root で以下のコマンドを発行します。
~]# firewall-cmd --zone=external --add-masquerade--permanent オプションを追加してコマンドを繰り返します。
root で以下のコマンドを発行します。
~]# firewall-cmd --zone=external --remove-masquerade--permanent オプションを追加してコマンドを繰り返します。
4.5.3.4.13. コマンドラインインターフェース (CLI) を使ったポート転送 (フォワーディング) の設定
root で以下のコマンドを実行して、ゾーン (例: external) の IP アドレスマスカレーディングを有効にします。
~]# firewall-cmd --zone=external --add-masqueraderoot で以下のコマンドを実行します。
~]# firewall-cmd --zone=external --add-forward-port=port=22:proto=tcp:toport=375322 に向けられていたパケットがポート 3753 に転送されます。元の宛先のポートは、port オプションで指定します。このオプションでは、プロトコルとともにポートまたはポート範囲を指定できます。プロトコルが指定された場合、プロトコルは tcp、または udp のいずれかにする必要があります。トラフィックの転送先となるポートまたはポート範囲である新しいローカルポートは、toport オプションで指定します。この設定を永続的にするには、--permanent オプションを追加してコマンドを繰り返します。
IPv4 アドレス (通常は内部アドレス) に転送するには、root で以下のコマンドを実行します。
~]# firewall-cmd --zone=external --add-forward-port=port=22:proto=tcp:toaddr=192.0.2.5522 に向けられていたパケットがポート 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 ファイルを使ったファイアウォールの設定
/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 設定ファイルについて説明しています。
4.5.3.6. ダイレクトインターフェースの使用
--direct オプションを使うと、ランタイム時にチェーンの追加、削除が可能になります。ここではいくつかの例を紹介していますが、詳細は firewall-cmd(1) man ページを参照してください。
--permanent オプションを追加して firewall-cmd --permanent --direct コマンドを使用するか、/etc/firewalld/direct.xml を修正することで、ルールを永続的なものにできます。/etc/firewalld/direct.xml ファイルの詳細は、firewalld.direct(5) の man ページを参照してください。
4.5.3.6.1. ダイレクトインターフェースを使用したカスタムルールの追加
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. ダイレクトインターフェースを使用したカスタムルールの削除
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. ダイレクトインターフェースを使用したカスタムルールの一覧表示
root で以下のコマンドを実行します。
~]# firewall-cmd --direct --get-rules ipv4 filter IN_public_allow--get-rules オプション) は、--add-rule オプションを使用して以前に追加されたルールのみを表示します。他の手段で追加された iptables ルールは表示されません。
4.5.3.7. 「リッチ言語」構文を使った複雑なファイアウォールルールの設定
4.5.3.7.1. リッチ言語コマンドの形式
root で実行する必要があります。ルールを追加するコマンド形式は以下のとおりです。
firewall-cmd [--zone=zone] --add-rich-rule='rule' [--timeout=timeval]s (秒)、m (分) または h (時間) を追加して、時間の単位を指定することができます。デフォルトは秒です。
firewall-cmd [--zone=zone] --remove-rich-rule='rule'firewall-cmd [--zone=zone] --query-rich-rule='rule'0 で yes が出力され、無効の場合は終了ステータスが 1 で no が出力されます。ゾーンが省略されると、デフォルトのゾーンが使用されます。
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 が提供されている場合は、
ipv4かipv6になり、ルールをIPv4またはIPv6に制限します。ルール family が提供されていない場合は、このルールはIPv4とIPv6の両方に追加されます。ルール内でソースまたは宛先のアドレスが使用されていると、ルール family を提供する必要があります。これは、ポート転送の場合でも同じです。
ソースおよび宛先のアドレス
source- ソースのアドレスを指定すると、接続試行の元を指定したソースアドレスに限定することができます。ソースアドレスまたはアドレスの範囲は、
IPv4またはIPv6のマスクを伴う IP アドレスかネットワーク IP アドレスになります。ネットワーク family (IPv4またはIPv6) が自動的に見つけられます。IPv4のマスクは、ネットワークマスクか単純な番号になります。IPv6のマスクは、単純な番号になります。ホスト名の使用はサポートされていません。invert="true" またはinvert="yes" を追加すると、ソースアドレスコマンドの意味が逆になり、提供されたアドレス以外のものがマッチすることになります。 destination- 宛先のアドレスを指定すると、ターゲットを指定した宛先アドレスに限定することができます。宛先アドレスでは、ソースアドレスと同様の構文を使用します。ソースおよび宛先アドレスの使用はオプションで、宛先アドレスの使用はすべての要素と使用できるわけではありません。これは、サービスエントリーにおける宛先アドレスの使用などによります。
要素
service、port、protocol、masquerade、icmp-block または forward-port です。
service- service 要素は、firewalld が提供するサービスのひとつです。事前定義のサービス一覧を入手するには、以下のコマンドを実行します。
~]$
サービスが宛先アドレスを提供する場合、ルール内の宛先アドレスと競合し、エラーが発生します。内部で宛先アドレスを使用するサービスのほとんどは、マルチキャストを使用するサービスです。コマンドは以下の形式になります。firewall-cmd --get-servicesservice name=service_name port- port 要素は、単一のポート番号か
5060-5062のようなポート範囲のどちらかで、その後にtcpかudpのプロトコルが続きます。コマンドは以下の形式になります。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-icmptypesicmp-blockはrejectのアクションを内部で使用します。コマンドは以下の形式になります。icmp-block name=icmptype_name masquerade- ルール内の IP マスカレードを有効にします。ソースアドレスを提供するとこの分野へのマスカレードを制限できますが、宛先アドレスは制限できません。ここではアクションの特定はできません。
forward-porttcpまたは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 などのカーネルロギングでルールへの新たな接続試行を記録します。ログメッセージに接頭辞として追加される接頭辞テキストを定義することができます。ログレベルは、
emerg、alert、crit、error、warning、notice、infoまたはdebugのいずれかになります。ログの使用はオプションです。ログの使用は以下のように制限できます。
rate は正の自然数 [1, ..] で、log [prefix=prefix text] [level=log level] limit value=rate/durations、m、h、dは時間の長さになります。sは秒数、mは分数、hは時間数、dは日数を表します。制限の最大値は1/dで、これは 1 日あたり最大 1 ログエントリーになります。 audit- Audit は、サービス
auditdに送信された監査記録を使ってロギングの別の方法を提供します。audit タイプはACCEPT、REJECTまたはDROPのいずれかになりますが、これはルールのアクションから自動的に獲得されるので、auditコマンドの後では指定されません。Audit にはそれ自体のパラメーターはありませんが、オプションで制限を加えることができます。Audit の使用はオプションになります。
アクション
accept|reject|drop- アクションは
accept、rejectまたはdropのいずれかになります。ルールに含めることができるのは、単一の要素またはソースのみになります。ルールに要素が含まれている場合、その要素のマッチする新たな接続はそのアクションで処理されます。ルールにソースが含まれている場合、そのソースアドレスからのものがすべて指定されたアクションで処理されます。accept | reject [type=reject type] | dropacceptを使うと、新たな接続試行がすべて許可されます。rejectを使うとそれらは拒否され、そのソースは拒否メッセージを受け取ります。拒否のタイプは、別の値を使用するように設定できます。dropを使うと、すべてのパケットが即座に切断され、ソースにはなにも情報が送られません。
4.5.3.7.4. リッチルールログコマンドの使用
deny チェーンの前に処理されます。ルールまたはルールの部分は以下のようにルールのアクションにしたがって、別個のチェーンに置かれます。
zone_log zone_deny zone_allow
reject および drop ルールはすべて 「zone_deny」 チェーンに置かれ、これは log チェーンの後に解析されます。accept ルールはすべて 「zone_allow」 チェーンに置かれ、これは deny チェーンの後に解析されます。ルールに log と deny または 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 --reloadwheel グループのユーザーとして (通常、システムの最初のユーザー) 以下のコマンドを実行し、デフォルトゾーンで imaps サービスの有効化を図ります。ユーザーパスワードが求められます。
~]$ firewall-cmd --add-service=imaps
Error: ACCESS_DENIED: lockdown is enabledroot で以下のコマンドを実行します。
~]# firewall-cmd --add-lockdown-whitelist-command='/usr/bin/python -Es /usr/bin/firewall-cmd*'--permanent オプションを追加します。
root でファイアウォールをリロードします。
~]# firewall-cmd --reloadimaps サービスの有効化を図ります。ユーザーパスワードが求められます。
~]$ firewall-cmd --add-service=imaps4.5.3.8.2. コマンドラインクライアントを使用したロックダウンの設定
root で以下のコマンドを実行します。
~]# firewall-cmd --query-lockdown
ロックダウンが有効な場合は終了ステータスが 0 で yes が出力され、無効の場合は終了ステータスが 1 で no が出力されます。
root で以下のコマンドを実行します。
~]# firewall-cmd --lockdown-on
root で以下のコマンドを実行します。
~]# firewall-cmd --lockdown-off
4.5.3.8.3. コマンドラインを使用したロックダウンホワイトリストオプションの設定
~]$ ps -e --context
このコマンドで、実行中のアプリケーションすべてが返されます。grep ツールを使用して、出力から目的のアプリケーションを以下のようにパイプ処理します。
~]$ ps -e --context | grep example_program
root で以下のコマンドを実行します。
~]# firewall-cmd --list-lockdown-whitelist-commands
root で以下のコマンドを実行します。
~]# firewall-cmd --add-lockdown-whitelist-command='/usr/bin/python -Es /usr/bin/command'
root で以下のコマンドを実行します。
~]# firewall-cmd --remove-lockdown-whitelist-command='/usr/bin/python -Es /usr/bin/command'
root で以下のコマンドを実行します。
~]# firewall-cmd --query-lockdown-whitelist-command='/usr/bin/python -Es /usr/bin/command'
True の場合は終了ステータスが 0 で yes が出力され、False の場合は終了ステータスが 1 で no が出力されます。
root で以下のコマンドを実行します。
~]# firewall-cmd --list-lockdown-whitelist-contexts
root で以下のコマンドを実行します。
~]# firewall-cmd --add-lockdown-whitelist-context=context
この設定を永続的にするには、--permanent オプションを追加します。
root で以下のコマンドを実行します。
~]# firewall-cmd --remove-lockdown-whitelist-context=context
この設定を永続的にするには、--permanent オプションを追加します。
root で以下のコマンドを実行します。
~]# firewall-cmd --query-lockdown-whitelist-context=context
コマンドがある場合は終了ステータスが 0 で yes が出力され、ない場合は終了ステータスが 1 で no が出力されます。
root で以下のコマンドを実行します。
~]# firewall-cmd --list-lockdown-whitelist-uids
root で以下のコマンドを実行します。
~]# firewall-cmd --add-lockdown-whitelist-uid=uid
この設定を永続的にするには、--permanent オプションを追加します。
root で以下のコマンドを実行します。
~]# firewall-cmd --remove-lockdown-whitelist-uid=uid
この設定を永続的にするには、--permanent オプションを追加します。
~]$ firewall-cmd --query-lockdown-whitelist-uid=uid
コマンドがある場合は終了ステータスが 0 で yes が出力され、ない場合は終了ステータスが 1 で no が出力されます。
root で以下のコマンドを実行します。
~]# firewall-cmd --list-lockdown-whitelist-users
root で以下のコマンドを実行します。
~]# firewall-cmd --add-lockdown-whitelist-user=user
この設定を永続的にするには、--permanent オプションを追加します。
root で以下のコマンドを実行します。
~]# firewall-cmd --remove-lockdown-whitelist-user=user
この設定を永続的にするには、--permanent オプションを追加します。
~]$ firewall-cmd --query-lockdown-whitelist-user=user
コマンドがある場合は終了ステータスが 0 で yes が出力され、ない場合は終了ステータスが 1 で no が出力されます。
4.5.3.8.4. 設定ファイルを使用したロックダウンホワイトリストオプションの設定
<?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 id と user name の両方が使われていますが、実際にはどちらか一方のみのオプションが必要になります。インタープリターは Python なので、コマンドラインに追加されています。または、以下のような明確なコマンドを使用することもできます。 /usr/bin/python /bin/firewall-cmd --lockdown-on この例では、--lockdown-on コマンドのみが許可されます。
注記
/usr/bin/ ディレクトリーに格納され、/bin/ ディレクトリーは /usr/bin/ ディレクトリーにシンボリックリンクされています。つまり、root で firewall-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 パッケージには、iptables と ip6tables のサービスが含まれています。
root で以下のコマンドを実行して、iptables および ip6tables のサービスを開始します。
~]#システム起動時にサービスの起動を有効にするには、以下のコマンドを入力します。systemctl start iptables~]#systemctl start ip6tables
~]#systemctl enable iptables~]#systemctl enable ip6tables
4.5.4.1. IPTables および IP セット
~]#セットは以下のように作成されます。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
~]#セットは、以下のように iptables コマンドで参照されます。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 -A INPUT -m set --set my-block-set src -j DROP
セットが複数回使用される場合は、設定時間が短縮されます。セットに多くのエントリーが含まれる場合は、処理時間が短縮されます。
4.5.4.1.1. firewalld での IP セットの使用
ipset に対して firewalld が起動する前にカスタムサービスを作成および起動する必要があります。永続的な直接ルールは、/etc/firewalld/direct.xml ファイルを使用して追加できます。
手順4.1 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 をリロードする必要があります。
~]#
この結果、状態情報を失わずにファイアーウォールがリロードされます (TCP セッションが中断されません) が、リロード中にサービスが破棄されることがあります。firewall-cmd --reload
4.5.4.1.2. ipset のインストール
root で実行します。
~]# yum install ipset
使用法のメッセージを表示するには、以下のコマンドを実行します。
~]$ ipset --help
ipset v6.11
Usage: ipset [options] COMMAND出力省略
4.5.4.1.3. 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 の場合は inet、IPv6 の場合は inet6。デフォルト値は inet)。
例4.2 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
timeout—createコマンドで提供された値は、作成されたセットのデフォルト値になります。addコマンドで提供された値は要素の非デフォルト初期値になります。counters— オプションがcreateコマンドで提供された場合は、セット内の各要素に対してパケットおよびバイトカウンターが作成されます。値がaddコマンドで提供されない場合、カウンターはゼロから始まります。comment— オプションがcreateコマンドで提供された場合は、追加される要素の目的を文書化するためにaddコマンドで引用符で囲まれたテキスト文字列を渡すことができます。引用符は文字列内で許可されず、エスケープ文字は IP セット内で無効になることに注意してください。
例4.3 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 セットの作成
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 セットの作成
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-rangeName: 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 セットの作成
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 セットの作成
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 セットの作成
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 オプションを使用すると、セット内の要素の合計数に制限され、メモリー使用量が節約されます。
~]# ipset add my-busy-addresses 192.168.60.0 timeout 100
以下の出力は時間のカウントダウンを示しています。
~]#タイムアウト期間が終了すると、要素がセットから削除されます。ipset list my-busy-addressesName: 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-addressesName: 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 ページ — ゾーンについての全般的な説明とそれらの設定方法が説明されています。

Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.