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 |
判决映射的列表。 |
|
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
只是map
的一个特殊情况,其中values_type
始终是verdict
。因此,没有values_type
属性。此外,包含在verdict_map
中的元素具有verdict
属性而不是value
属性。
属性名 |
描述 |
name |
映射的名称。 |
keys_type |
键的类型。必须是ipv4_addr 、ipv6_addr 、ether_addr 、inet_service 、inet_proto 、icmp_type 、icmpv6_type 或mark 之一。 |
elements |
包含在判决映射中的元素列表。 |
判决映射元素属性
属性名 |
描述 |
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"
...
测试
测试步骤包括:
- 检查角色语法
- 进行第一次运行
- 进行第二次运行并检查幂等性。
适用的操作系统:
- Debian 9
- CentOS 7
- Ubuntu 18.04
贡献
欢迎提交代码审查、补丁、评论、错误报告和功能请求。请阅读贡献指南以获取更多细节。