Ansible ロール: nftables
この Ansible ロールでは、nftables
のインストールと構成の管理が可能です。
nftables
についての詳細は 公式プロジェクトページ をご覧ください。
ロール変数
太字の変数およびプロパティは必須です。他はオプションです。
変数名 |
説明 |
デフォルト値 |
nftables_flush_ruleset |
現在のルールセットをフラッシュするかどうか。 |
yes |
nftables_config_file |
構成ファイルのパス。 |
/etc/nftables.conf |
nftables_tables |
テーブルのリスト。 |
[] |
テーブルプロパティ
プロパティ名 |
説明 |
デフォルト値 |
name |
テーブルの名前。 |
|
family |
テーブルのアドレスファミリー。指定した場合は ip 、ip6 、inet 、arp 、bridge または netdev のいずれかでなければならない。 |
ip |
sets |
セットのリスト。 |
|
maps |
マップのリスト。 |
|
verdict_maps |
VERDICT_MAPのリスト。 |
|
chains |
チェーンのリスト。 |
|
ドキュメント
セットプロパティ
プロパティ名 |
説明 |
name |
セットの名前。 |
type |
セット内の要素のタイプ。ipv4_addr 、ipv6_addr 、ether_addr 、inet_service 、inet_proto 、icmp_type 、icmpv6_type または mark のいずれかでなければならない。 |
size |
セットが保持できる要素の数。 |
policy |
セット選択ポリシー。指定する場合は performance または memory のいずれかでなければならない。 |
timeout |
要素がセットに残る時間。 |
flags |
フラグのリスト。指定する場合は少なくとも以下のいずれかを含める必要がある: constant 、interval 、timeout 。 |
gc_interval |
ガーベジコレクションの間隔。 |
elements |
セットに含まれる要素のリスト。要素はセットの type に準拠している必要がある。 |
ドキュメント
マッププロパティ
プロパティ名 |
説明 |
name |
マップの名前。 |
keys_type |
キーのタイプ。ipv4_addr 、ipv6_addr 、ether_addr 、inet_service 、inet_proto 、icmp_type 、icmpv6_type または mark のいずれかでなければならない。 |
values_type |
値のタイプ。ipv4_addr 、ipv6_addr 、ether_addr 、inet_service 、inet_proto 、mark 、counter または quota のいずれかでなければならない。 |
elements |
マップに含まれる 要素 のリスト。要素はマップの keys_type と values_type に準拠している必要がある。 |
ドキュメント
マップ要素プロパティ
プロパティ名 |
説明 |
key |
キー値。 |
value |
キーに関連付けられた値。 |
VERDICT_MAP プロパティ
verdict_map
は map
の特別なケースで、values_type
は常に verdict
です。そのため、values_type
プロパティはありません。また、verdict_map
に含まれる要素は value
プロパティの代わりに verdict
プロパティを持ちます。
プロパティ名 |
説明 |
name |
マップの名前。 |
keys_type |
キーのタイプ。ipv4_addr 、ipv6_addr 、ether_addr 、inet_service 、inet_proto 、icmp_type 、icmpv6_type または mark のいずれかでなければならない。 |
elements |
VERDICT マップに含まれる 要素 のリスト。 |
verdict_map 要素プロパティ
プロパティ名 |
説明 |
key |
キー値。 |
verdict |
キーに関連付けられた判決。 |
チェーンプロパティ
プロパティ名 |
説明 |
name |
チェーンの名前。 |
base |
チェーンのための ベースルール。 |
rules |
チェーンに含まれる ルール のリスト。 |
ドキュメント
ベースプロパティ
プロパティ名 |
説明 |
type |
チェーンのタイプ。filter 、nat または route のいずれかでなければならない。 |
hook |
チェーンが接続されているフック。利用可能な値は type に依存する。 |
priority |
同じ hook に接続されているチェーンの順序を決定する整数。 |
policy |
チェーンのデフォルトポリシー。指定する場合は accept または drop のいずれかでなければならない。 |
ドキュメント
ルールプロパティ
ドキュメント
プロパティ名 |
説明 |
position |
チェーン内のルールの順序を決定する整数。 |
statement |
ルール文。 |
comment |
ルールを説明するコメント。 |
例
以下は、ファイルの小さな例です。
重要: これをファイアウォールとして使用しないでください!
---
nftables_flush_ruleset: yes
nftables_config_path: /etc/nftables.rules
nftables_tables:
- name: firewall
family: inet
sets:
- name: "set1"
type:
size: 10
policy: "performance"
timeout: "1d"
flags:
- "timeout"
- "interval"
gc_interval: "12h"
elements:
- 192.0.2.1
- 192.0.2.2
maps:
- name: "map1"
keys_type: "inet_service"
values_type: "ipv4_addr"
elements:
- key: ssh
value: "192.0.2.10"
- name: "map2"
keys_type: "inet_service"
values_type: "ipv4_addr"
elements:
- key: ftp
value: "192.0.2.25"
verdict_maps:
- name: "vmap1"
keys_type: "inet_service"
elements:
- key: "192.0.2.10"
value: "accept"
chains:
- name: "My input filter"
base:
type: "filter"
hook: "input"
priority: 0
policy: "drop"
rules:
- position: 2
statement: "ct state invalid log prefix 'Invalid_IN: ' drop"
comment: "無効なパケットをログして削除します。"
- position: 1
statement: "iif lo accept"
- position: 3
statement: "ct state {established,related} accept"
- name: "My output filter"
base:
type: "filter"
hook: "output"
priority: -10
policy: "accept"
rules:
- position: 1
statement: "ip daddr 192.0.2.100 counter"
...
テスト
テストは以下のステップを含みます:
- ロールの構文をチェックします。
- 最初の実行を行います。
- 2回目の実行を行い、冪等性を確認します。
以下のOSで:
- Debian 9
- CentOS 7
- Ubuntu 18.04
貢献
コードレビュー、パッチ、コメント、バグ報告、および機能リクエストを歓迎します。詳細については 貢献ガイド をお読みください。