Show Table of Contents
このページには機械翻訳が使用されている場合があります (詳細はこちら)。
5.15. 「リッチ言語」構文を使用した複雑なファイアウォールルールの設定
「リッチ言語」 構文を使用すると、ダイレクトインターフェースよりも理解しやすい方法で複雑なファイアウォールルールが作成できます。さらに、設定を永続的にできます。この言語は値の付いたキーワードを使用するもので、iptables ルールの抽象表現です。ゾーンはこの言語を使用して設定でき、現行の設定方式もそのままサポートされます。
5.15.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 に追加されたかどうかを返します。有効な場合は終了ステータスが
0
で yes
が出力され、無効の場合は終了ステータスが 1
で no
が出力されます。ゾーンを省略すると、デフォルトのゾーンが使用されます。
ゾーン設定ファイルで使用されるリッチ言語表現に関する詳細は、man ページの firewalld.zone(5) を参照してください。
5.15.2. リッチルールの構造について
リッチルールコマンドの形式または構造は、以下のようになります。
rule [family="rule family"] [ source [NOT] [address="address"] [mac="mac-address"] [ipset="ipset"] ] [ destination [NOT] address="address" ] [ element ] [ log [prefix="prefix text"] [level="log level"] [limit value="rate/duration"] ] [ audit ] [ action ]
注記
このファイルにおけるリッチルールの構造は、ソースおよび宛先アドレスのコマンドの意味を反転させる
NOT
キーワードを使用しています。ただし、コマンドラインは invert
="true" オプションを使用します。
ルールは特定のゾーンに関連付けられます。ゾーンには複数のルールを関連付けることができます。いくつかのルールが相互に作用する、または矛盾する場合は、パケットに適合する最初のルールが適用されます。
5.15.3. リッチルールのコマンドオプションについて
family
- ルールのファミリーを指定している場合は、
ipv4
かipv6
になり、ルールをIPv4
またはIPv6
に制限します。ルールのファミリーを使用しないと、ルールがIPv4
とIPv6
の両方に追加されます。ルール内でソースまたは宛先のアドレスを使用している場合は、ルールのファイミリーを提供する必要があります。これは、ポート転送の場合でも同じです。
ソースアドレスおよび宛先のアドレス
source
- ソースのアドレスを指定すると、接続試行の元を指定したソースアドレスに限定できます。ソースアドレスまたはアドレスの範囲は、
IPv4
またはIPv6
のマスクを伴う IP アドレスかネットワーク IP アドレスになります。IPv4
のマスクは、ネットワークマスクまたは単純な番号になります。IPv6
のマスクは単純な番号になります。ホスト名の使用はサポートされていません。NOT
キーワードを追加すると、ソースアドレスコマンドの意味が逆になり、提供されたアドレス以外のものがマッチすることになります。そのルールにfamily
が指定されていない場合は、MAC アドレスと、 を持つ IP セットを、IPv4
およびIPv6
に追加できます。その他の IP は、ルールのfamily
設定に一致させる必要があります。 destination
- 宛先のアドレスを指定すると、ターゲットを指定した宛先アドレスに限定できます。宛先アドレスでは、IP アドレスまたはアドレス範囲のソースアドレスと同様の構文を使用します。ソースアドレスおよび宛先アドレスの使用はオプションで、宛先アドレスをすべての要素とともに使用できるわけではありません。これは、サービスエントリーにおける宛先アドレスの使用などによって異なります。
destination
とaction
は組み合わせることができます。
要素
要素は、要素タイプ
service
、port
、protocol
、masquerade
、icmp-block
、forward-port
、および source-port
に対して 1 つだけ になります。
service
service
要素は、firewalld が提供したサービスのひとつです。事前定義したサービスの一覧を取得するには、以下のコマンドを実行します。~]$
サービスが宛先アドレスを提供する場合、ルール内の宛先アドレスと競合し、エラーが発生します。内部で宛先アドレスを使用するサービスのほとんどは、マルチキャストを使用するサービスです。コマンドは以下の形式になります。firewall-cmd --get-services
service name=service_name
port
port
要素は、1 つのポート番号またはポート範囲 (5060-5062
など) のいずれかの後にプロトコル (tcp
またはudp
のいずれか) が続きます。コマンドは以下の形式になります。port port=number_or_range protocol=protocol
protocol
protocol
値は、プロトコル ID 番号またはプロトコル名となります。許可されているprotocol
エントリーは/etc/protocols
を参照してください。コマンドは以下の形式になります。protocol value=protocol_name_or_ID
icmp-block
- 1 つ以上の
ICMP
タイプをブロックするには、このコマンドを使用します。ICMP
タイプは、firewalld がサポートするICMP
タイプのひとつになります。サポートされるICMP
タイプの一覧を確認するには、以下のコマンドを実行します。~]$
ここではアクションの特定はできません。firewall-cmd --get-icmptypes
icmp-block
はreject
のアクションを内部で使用します。コマンドは以下の形式になります。icmp-block name=icmptype_name
masquerade
- ルール内の IP マスカレードを有効にします。ソースアドレスを提供するとこのエリアへのマスカレードを制限できますが、宛先アドレスは制限できません。ここではアクションの特定はできません。
forward-port
tcp
またはudp
として指定されたプロトコルのローカルポートから別のローカルポート、別のマシン、または別のマシン上の別のポートにパケットを転送します。port
およびto-port
は、1 つのポート番号もしくはポート範囲のどちらでも構いません。宛先アドレスは、単純な IP アドレスになります。ここではアクションの特定はできません。forward-port
コマンドは、accept
のアクションを内部で使用します。コマンドは以下の形式になります。forward-port port=number_or_range protocol=protocol /
to-port=number_or_range to-addr=address
source-port
- パケットのソースポートに一致します。そのポートは、接続試行の発信元として使用されます。現在のマシンのポートに一致させる場合は、
port
要素を使用します。source-port
要素は、1 つのポート番号またはポート範囲 (たとえば 5060-5062) のいずれかの後にプロトコル (tcp
またはudp
のいずれか) が続きます。コマンドは以下の形式になります。source-port port=number_or_range protocol=protocol
ロギング
log
- syslog などのカーネルロギングでルールへの新たな接続試行を記録します。ログメッセージに接頭辞として追加される接頭辞テキストを定義できます。ログレベルは、
emerg
、alert
、crit
、error
、warning
、notice
、info
、またはdebug
のいずれかになります。ログの使用はオプションです。ログの使用は以下のように制限できます。
rate は正の自然数 [1, ..] で、log [prefix=prefix text] [level=log level] limit value=rate/duration
s
、m
、h
、d
は時間の長さになります。s
は秒数、m
は分数、h
は時間数、d
は日数を表します。制限の最大値は1/d
で、これは 1 日あたり最大 1 ログエントリーになります。 audit
- Audit は、サービス
auditd
に送信された監査記録を使ってロギングの別の方法を提供します。audit タイプはACCEPT
、REJECT
、またはDROP
のいずれかになりますが、これはルールのアクションから自動的に獲得されるので、audit
コマンドの後では指定されません。Audit にはそれ自体のパラメーターはありませんが、オプションで制限を加えることができます。Audit の使用はオプションになります。
アクション
accept|reject|drop|mark
- アクションは、
accept
、reject
、drop
、またはmark
のいずれかに設定できます。このルールには、要素またはソースのいずれかにすることができます。要素と一致する新しい接続は、そのアクションで処理されます。ルールにソースが含まれ、ソースアドレスからのものはすべて指定したアクションで処理されます。accept | reject [type=reject type] | drop | mark set="mark[/mask]"
accept
アクションを使用すると、新たな接続試行がすべて許可されます。reject
を使用するとそれは拒否され、そのソースは拒否メッセージを受け取ります。拒否のタイプは、別の値を使用するように設定できます。drop
を使用すると、すべてのパケットが即座に破棄され、ソースには何も情報が送られません。mark
を使用すると、すべてのパケットには、指定した mark と、オプションの mask でマークされます。
5.15.4. リッチルールログコマンドの使用
ロギングは Netfilter ログターゲットおよび audit ターゲットを使用して実行できます。「zone_log」 という形式の名前で新たなチェーンがすべてのゾーンに追加されます。ここでの zone はゾーン名になります。適切な順序にするために、これは
deny
チェーンの前に処理されます。ルールまたはルールの一部は、以下のようにルールのアクションに従い、複数のチェーンに置かれます。
zone_log zone_deny zone_allow
ロギングのルールはすべて 「zone_log」 チェーンに置かれ、これが最初に解析されます。
reject
ルールおよび drop
ルールはすべて 「zone_deny」 チェーンに置かれ、これは log チェーンの後に解析されます。accept
ルールはすべて 「zone_allow」 チェーンに置かれ、これは deny
チェーンの後に解析されます。ルールに log
と deny
または allow
アクションが含まれる場合、これらのアクションを指定しているルールの一部は、一致するチェーンに置かれます。
5.15.4.1. リッチルールログコマンドの使用例 1
認証ヘッダープロトコル
AH
用に新たな IPv4
接続および IPv6
接続を有効にします。
rule protocol value="ah" accept
5.15.4.2. リッチルールログコマンドの使用例 2
プロトコル
FTP
および audit を使用した 1 分あたり 1 件のログ用に新たな IPv4
および IPv6
接続を許可します :
rule service name="ftp" log limit value="1/m" audit accept
5.15.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
5.15.4.4. リッチルールログコマンドの使用例 4
プロトコル
RADIUS
用の 1:2:3:4:6::
からの新たな IPv6
接続はすべて拒否され、1 分あたり 3 件のログが作成されます。その他のソースからの新たな 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
5.15.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"
5.15.4.6. リッチルールログコマンドの使用例 6
ソースアドレスをホワイトリスト化してそのソースからの接続をすべて許可します。
rule family="ipv4" source address="192.168.2.2" accept
その他の例は、man ページの
firewalld.richlanguage(5)
を参照してください。
このページには機械翻訳が使用されている場合があります (詳細はこちら)。