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
貢献
コードレビュー、パッチ、コメント、バグ報告、および機能リクエストを歓迎します。詳細については 貢献ガイド をお読みください。