ネットワーク ACL を設定するには¶
注釈
ネットワーク ACL は OVN NIC タイプ、OVN ネットワーク と ブリッジネットワーク(いくつか制限あり、ブリッジの制限 参照)で利用できます。
ネットワーク ACL は同じネットワークに接続された異なるインスタンス間のネットワークアクセスや、他のネットワークとのアクセスを制御するトラフィクルールを定義します。
ネットワーク ACL は インスタンスの NIC やネットワークに直接適用できます。 ネットワークに適用するときは、ネットワークに接続されたすべての NIC に ACL が適用されます。
特定の ACL を(明示的にあるいはネットワークから暗黙的に)適用したインスタンス NIC は論理的なグループを形成し、他のルールから送信元あるいは送信先として参照できます。 より詳細な情報は ACL グループ を参照してください。
ACL を作成する¶
ACL を作成するには以下のコマンドを使用します:
incus network acl create <ACL_name> [configuration_options...]
このコマンドはルール無しの ACL を作成します。 次のステップとして ACL に ルールを追加します。
有効なネットワーク ACL の名前は以下のルールに従う必要があります。
名前は 1 文字から 63 文字の間である。
名前は ASCII の文字、数字、ハイフンからのみなる。
名前は数字やハイフンから始まらない。
名前はハイフンで終わらない。
ACL のプロパティ¶
ACL のプロパティには次のものがあります:
プロパティ |
型 |
必須 |
説明 |
---|---|---|---|
|
string |
yes |
プロジェクト内でユニークなネットワーク ACL の名前 |
|
string |
no |
ネットワーク ACL の説明 |
|
rule list |
no |
内向きのトラフィックルールのリスト |
|
rule list |
no |
外向きのトラフィックルールのリスト |
|
string set |
no |
キー・バリューペア形式での設定オプション( |
ルールの追加と削除¶
それぞれの ACL はルールの 2 つのリストを含みます。
イングレス (ingress) ルールは NIC に向かう内向きのトラフィックに適用されます。
エグレス (egress) ルールは NIC から出ていく外向きのトラフィックに適用されます。
ACL にルールを追加するには、以下のコマンドを使います。 <direction>
には ingress
か egress
のどちらかを指定します:
incus network acl rule add <ACL_name> <direction> [properties...]
このコマンドは指定した方向(direction)に対応するリストにルールを追加します。
(ACL 全体を編集する 場合を除き)ルールを編集することはできませんが、以下のコマンドでルールを削除はできます:
incus network acl rule remove <ACL_name> <direction> [properties...]
ユニークにルールを特定するのに必要なすべてのプロパティを指定するか、またはマッチしたすべてのルールを削除するためコマンドに --force
を追加する必要があります。
ルールの順番と優先度¶
ルールはリストとして提供されます。 しかしリスト内のルールの順番は重要ではなくフィルタリングには影響しません。
Incus は以下のように action
プロパティに基づいてルールの順番を自動的に決めます:
drop
reject
allow
上記のすべてにマッチしなかったトラフィックに対する自動のデフォルトアクション(デフォルトでは
reject
、デフォルトアクションの設定 参照)。
これは NIC に複数の ACL を適用する際、組み合わせたルールの順番を指定する必要がないことを意味します。 ACL 内のあるルールがマッチすれば、そのルールが採用され、他のルールは考慮されません。
ルールのプロパティ¶
ACL ルールには次のプロパティがあります:
プロパティ |
型 |
必須 |
説明 |
---|---|---|---|
|
string |
yes |
マッチしたトラフィックに適用するアクション( |
|
string |
yes |
ルールの状態( |
|
string |
no |
ルールの説明 |
|
string |
no |
CIDR か IP の範囲、送信元の ACL の名前、あるいは(ingress ルールに対しての) ソースサブジェクト名セレクターのカンマ区切りリスト、または any の場合は空を指定 |
|
string |
no |
CIDR か IP の範囲、送信先の ACL の名前、あるいは(egress ルールに対しての) デスティネーションサブジェクト名セレクターのカンマ区切りリスト、または any の場合は空を指定 |
|
string |
no |
マッチ対象のプロトコル( |
|
string |
no |
protocol が |
|
string |
no |
protocol が |
|
string |
no |
protocol が |
|
string |
no |
protocol が |
ルール内でセレクタを使う¶
注釈
この機能は OVN NIC タイプ と OVN ネットワーク でのみサポートされます。
(ingress ルールの)source
フィールドと (egress ルールの)destination
フィールドは CIDR や IP の範囲の代わりにセレクタの使用をサポートします。
この機能を使えば、 IP のリストを管理したり追加のサブネットを作ることなしに、 ACL グループかネットワークセレクタを使ってインスタンスのグループに対するルールを定義できます。
ACL グループ¶
(明示的にあるいはネットワーク経由で暗黙的に)特定の ACL を適用されたインスタンス NIC は論理的なポートグループを形成します。
そのような ACL グループは サブジェクト名セレクタ と呼ばれ、他の ACL グループ内で ACL 名を用いて参照できます。
たとえば foo
という名前の ACL がある場合、この ACL が適用されたインスタンス NIC のグループを source=foo
で参照できます。
ネットワークセレクタ¶
ネットワークサブジェクトセレクタ を用いて、ネットワーク上の外向きと内向きのトラフィックにルールを定義できます。
@internal
と @external
という 2 つの特別なネットワークサブジェクトセレクタがあります。
これらはそれぞれネットワークのローカルと外向きのトラフィックを示します。
たとえば:
source=@internal
ネットワークが ネットワークピア をサポートする場合、ピア接続間のトラフィックを
@<network_name>/<peer_name>
という形式のネットワークサブジェクトセレクタで参照できます。
たとえば:
source=@ovn1/mypeer
ネットワークサブジェクトセレクターを使用する際は、 ACL 適用先のネットワークは指定されたピア接続を持っていなければなりません。 持っていない場合 ACL は適用できません。
トラフィックのログ¶
一般的には ACL はインスタンスとネットワーク間のネットワークトラフィックを制御するためのものです。 しかし、特定のネットワークトラフィックをログ出力するためにルールを使うこともできます。 これはモニタリングや、ルールを実際に有効にする前にテストするのに役立ちます。
ログのためにルールを追加するには state=logged
プロパティ付きでルールを作成してください。
ACL 内のすべてのログのルールに対するログ出力は以下のコマンドで表示できます:
incus network acl show-log <ACL_name>
ACL を編集する¶
ACL を編集するには以下のコマンドを使用します:
incus network acl edit <ACL_name>
このコマンドは ACL を編集用に YAML 形式でオープンします。 ACL 設定とルールの両方を編集できます。
ACL の適用¶
ACL の設定が終わったらネットワークかインスタンス NIC に適用する必要があります。
そのためにはネットワークか NIC の設定の security.acls
リストに ACL を追加してください。
ネットワークの場合は、以下のコマンドを使います:
incus network set <network_name> security.acls="<ACL_name>"
インスタンス NIC の場合は、以下のコマンドを使います:
incus config device set <instance_name> <device_name> security.acls="<ACL_name>"
デフォルトアクションの設定¶
1 つ以上の ACL が NIC に(明示的にあるいはネットワーク経由で暗黙的に)適用されると、 NIC にデフォルトの reject ルールが追加されます。 このルールは適用された ACL 内のどのルールにもマッチしないすべてのトラフィックを拒否(reject)します。
この挙動はネットワークと NIC レベルの security.acls.default.ingress.action
と security.acls.default.egress.action
設定で変更できます。
NIC レベルの設定はネットワークレベルの設定を上書きします。
たとえば、ネットワークに接続されたすべてのインスタンスの内向きのトラフィックを許可(allow
)するには以下のコマンドを使用します:
incus network set <network_name> security.acls.default.ingress.action=allow
インスタンス NIC に同じデフォルトアクションを設定するには以下のコマンドを使用します:
incus config device set <instance_name> <device_name> security.acls.default.ingress.action=allow
ブリッジの制限¶
ブリッジネットワークにネットワーク ACL を使用する場合は以下の制限に気を付けてください。
OVN ACL とは違い、ブリッジ ACL はブリッジと Incus ホストの間の境界のみに適用されます。これは外部へと外部からのトラフィックにネットワークポリシーを適用するために使うことしかできないことを意味します。ブリッジ間のファイアウォール、つまり同じブリッジに接続されたインスタンス間のトラフィックを制御するファイアウォールには使えません。
ACL グループとネットワークセレクタ はサポートされません。
iptables
ファイアウォールドライバーを使う際は、 IP レンジサブジェクト(例:192.0.2.1-192.0.2.10
)は使用できません。ベースラインのネットワークサービスルールが(対応する INPUT/OUTPUT チェイン内の) ACL ルールの前に適用されます。これは一旦 ACL チェインに入ってしまうと INPUT/OUTPUT と FORWARD トラフィックを区別できないからです。このため ACL ルールはベースラインのサービスルールをブロックするのには使えません。