pimvh.nftables

分子测试

需求

  1. 安装 Ansible:
sudo apt install python3
python3 -m ensurepip --upgrade
pip3 install ansible

所需变量

查看默认配置中的变量。

你可以使用以下结构,为你的主机(../host_vars/[主机名].yaml)或主机组(../group_vars/[组名].yaml)添加防火墙定义(参见 molecule.default.vars/test.yaml 示例):

# 该变量指向推送到远程主机的规则
# 它是一个包含表、链和规则的字典,参见 molecule/default/vars/test.yaml
nftables_ruleset:
  # 这些键变成表
  # 必须是:
  # 防火墙家族和名称,例如:
  "inet firewall":

    # 表的描述
    comment: "设备的防火墙"

    chains:

      # 相应链的名称
      input:
        # 你希望放入此链的 nftables_rules 中的变量名称
        - input_hook
        - valid_connections
        - ...

  # 另一个具有相同结构的表
  # 有效的家族有 inet、inet6、netdev 等
  # 有关完整参考,参见 nftables 文档
  "inet foo":

# 潜在的规则在 `nftables_rules` 下定义
# 每条规则有两个属性:
# -> def: 规则或规则集的有效 nftables 语法定义
# -> depends_on: 可选的来自 nftables_variables 的变量依赖列表
# 参见 molecule/default/vars/test.yaml 示例

nftables_rules:
  input_hook: >
    type filter hook input priority 0; policy drop;
  valid_connections:
    def: |
        ct state established, related accept
        ct state invalid drop

  new_connections:
    def: |
        ct state new accept


# 这些是变量定义,包含在 depends_on 中
# 确保键匹配
# 参见 molecule/default/vars/test.yaml 示例
nftables_variables:

  tcp_ports:
    comment: tcp 端口配置
    def: |
      {% if nftables_open_tcp_ports_global %}define OPEN_TCP_PORTS = { {{ nftables_open_tcp_ports_global | join(",") }} }{% endif +%}
      {% if nftables_open_tcp_ports_local %}define LOCAL_OPEN_TCP_PORTS = { {{ nftables_open_tcp_ports_local | join(",") }} }{% endif +%}
      {% if nftables_open_tcp_ports_vpn %}define VPN_TCP_PORTS = { {{ nftables_open_tcp_ports_vpn | join(",") }} }{% endif +%}

  ...

Ansible 剧本将验证是否将正确的变量传递给角色,使用 argument_spec。

示例剧本

最小化(假设你在其他地方传递了变量):

hosts:
  - foo
roles:
  - pimvh.nftables

简短说明 - 如果我运行这个会发生什么

  • 验证规则/其他变量是否已定义
  • 安装 nftables 和 Python 接口
  • 创建所需的 nftable 表
  • 创建动态表作为空表
  • 创建一个空的黑名单
  • 拷贝 nftables 模板到 nftables 目录
  • 编辑 nftables 服务,使其指向我们的新主文件
  • 创建脚本重新加载防火墙,该脚本将我们无法控制的表转储到文件,并在之后重新加载防火墙
  • 当 nftables_abuseip_api_key 被定义时,添加脚本通过他们的 api 拉取黑名单,并使其成为 systemd 服务
  • 当请求时启用 nftable 服务
  • 当请求时卸载 iptables

未来改进

  • 简化需要传递的规则结构
  • 改进 nftables_variablesnftables_ruleset 的 argument_specs
关于项目

role to configure nftables using a YAML file

安装
ansible-galaxy install pimvh.nftables
许可证
gpl-3.0
下载
110
拥有者