Frzk.nftables

Ansible角色: nftables

构建状态

这个Ansible角色允许你安装nftables并管理其配置。

有关nftables的更多信息,请查看官方项目页面

角色变量

加粗的变量和属性是必需的。其他的是可选的。

变量名 描述 默认值
nftables_flush_ruleset 是否应该清除当前的规则集。 yes
nftables_config_file 配置文件的路径。 /etc/nftables.conf
nftables_tables 的列表。 []

表属性

属性名 描述 默认值
name 表的名称。
family 表的地址族。如果指定,必须是ipip6inetarpbridgenetdev之一。 ip
sets 集合的列表。
maps 映射的列表。
verdict_maps 判决映射的列表。
chains 的列表。

文档

集合属性

属性名 描述
name 集合的名称。
type 集合中元素的类型。必须是ipv4_addripv6_addrether_addrinet_serviceinet_protoicmp_typeicmpv6_typemark之一。
size 集合可以容纳的元素数量。
policy 集合选择策略。如果指定,必须是performancememory
timeout 元素在集合中停留的时间。
flags 标志列表。如果指定,必须至少包含以下之一:constantintervaltimeout
gc_interval 垃圾收集间隔。
elements 集合中包含的元素列表。元素必须符合集合的type

文档

映射属性

属性名 描述
name 映射的名称。
keys_type 键的类型。必须是ipv4_addripv6_addrether_addrinet_serviceinet_protoicmp_typeicmpv6_typemark之一。
values_type 值的类型。必须是ipv4_addripv6_addrether_addrinet_serviceinet_protomarkcounterquota之一。
elements 包含在映射中的元素列表。元素必须符合映射的keys_typevalues_type

文档

映射元素属性

属性名 描述
key 键值。
value 与键关联的值。

判决映射属性

verdict_map只是map的一个特殊情况,其中values_type始终是verdict。因此,没有values_type属性。此外,包含在verdict_map中的元素具有verdict属性而不是value属性。

属性名 描述
name 映射的名称。
keys_type 键的类型。必须是ipv4_addripv6_addrether_addrinet_serviceinet_protoicmp_typeicmpv6_typemark之一。
elements 包含在判决映射中的元素列表。

判决映射元素属性

属性名 描述
key 键值。
verdict 与键关联的判决。

链属性

属性名 描述
name 链的名称。
base 链的基础规则
rules 包含在链中的规则列表。

文档

基础属性

属性名 描述
type 链的类型。必须是filternatroute之一。
hook 链附加的钩子。可用值取决于type
priority 确定附加到同一hook的链的顺序的整数。
policy 链的默认策略。如果指定,必须是acceptdrop

文档

规则属性

文档

属性名 描述
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"
...

测试

测试步骤包括:

  1. 检查角色语法
  2. 进行第一次运行
  3. 进行第二次运行并检查幂等性。

适用的操作系统:

  • Debian 9
  • CentOS 7
  • Ubuntu 18.04

贡献

欢迎提交代码审查、补丁、评论、错误报告和功能请求。请阅读贡献指南以获取更多细节。

安装
ansible-galaxy install Frzk.nftables
许可证
apache-2.0
下载
136
拥有者