community.hrobot.firewall 模块 – 管理 Hetzner 专用服务器防火墙

注意

此模块是 community.hrobot 集合 (版本 2.0.2) 的一部分。

如果您使用的是 ansible 包,则您可能已经安装了此集合。它不包含在 ansible-core 中。要检查它是否已安装,请运行 ansible-galaxy collection list

要安装它,请使用:ansible-galaxy collection install community.hrobot。您需要其他要求才能使用此模块,有关详细信息,请参阅 要求

要在 playbook 中使用它,请指定:community.hrobot.firewall

概要

  • 管理 Hetzner 的专用服务器防火墙。

  • 请注意,TCP 标志的幂等性检查只是比较字符串,不会尝试解释规则。这将来可能会改变。

要求

执行此模块的主机需要以下要求。

  • ipaddress

参数

参数

注释

allowlist_hos

别名:whitelist_hos

布尔值

Hetzner 服务是否可以访问。

选项

  • false

  • true

filter_ipv6

布尔值

在 community.hrobot 1.8.0 中添加

是否也过滤 IPv6 流量。

IPv4 流量始终被过滤,IPv6 流量过滤需要显式启用。

选项

  • false

  • true

hetzner_password

字符串 / 必需

Robot 网络服务用户的密码。

hetzner_user

字符串 / 必需

Robot 网络服务用户的用户名。

port

字符串

防火墙的交换机端口。

选项

  • "main" ← (默认)

  • "kvm"

rules

字典

防火墙规则。

input

列表 / 元素=字典

输入防火墙规则。

action

字符串 / 必需

如果规则匹配则执行的操作。

选项

  • "accept"

  • "discard"

dst_ip

字符串

目标 IP 地址或子网地址。

CIDR 表示法。

dst_port

字符串

目标端口或端口范围。

ip_version

字符串

互联网协议版本。

忽略此项以过滤两种协议。请注意,在这种情况下,不能指定 rules.input[].dst_iprules.input[].src_iprules.input[].protocol

name

字符串

防火墙规则的名称。

请注意,Hetzner 限制了可以用于规则名称的字符。目前,只允许字母 a-zA-Z、空格以及符号 .-+_@

protocol

字符串

IP 层之上的协议。

src_ip

字符串

源 IP 地址或子网地址。

CIDR 表示法。

src_port

字符串

源端口或端口范围。

tcp_flags

字符串

TCP 标志或标志的逻辑组合。

Hetzner 支持的标志是 synfinrstpshurg

它们可以与 |(逻辑或)和 &(逻辑与)组合。

有关更多信息,请参阅 文档

output

列表 / 元素=字典

在 community.hrobot 1.8.0 中添加

输出防火墙规则。

action

字符串 / 必需

如果规则匹配则执行的操作。

选项

  • "accept"

  • "discard"

dst_ip

字符串

目标 IP 地址或子网地址。

CIDR 表示法。

dst_port

字符串

目标端口或端口范围。

ip_version

字符串

互联网协议版本。

忽略此项以过滤两种协议。请注意,在这种情况下,不能指定 rules.output[].dst_iprules.output[].src_iprules.output[].protocol

name

字符串

防火墙规则的名称。

请注意,Hetzner 限制了可以用于规则名称的字符。目前,只允许字母 a-zA-Z、空格以及符号 .-+_@

protocol

字符串

IP 层之上的协议。

src_ip

字符串

源 IP 地址或子网地址。

CIDR 表示法。

src_port

字符串

源端口或端口范围。

tcp_flags

字符串

TCP 标志或标志的逻辑组合。

Hetzner 支持的标志是 synfinrstpshurg

它们可以与 |(逻辑或)和 &(逻辑与)组合。

有关更多信息,请参阅 文档

server_ip

字符串

服务器的主 IP 地址。

必须指定 server_ipserver_number 之一。

请注意,Hetzner 已弃用使用服务器主 IP 来标识服务器防火墙。因此,使用此选项在将来任何时候都可能停止工作。请改用server_number

server_number

整数

在 community.hrobot 1.8.0 中添加

服务器编号。

必须指定 server_ipserver_number 之一。

state

字符串

防火墙状态。

如果 state 为present,则防火墙处于活动状态;如果 state 为absent,则防火墙处于禁用状态。

选项

  • "present" ← (默认)

  • "absent"

timeout

整数

等待防火墙配置完成的超时时间(以秒为单位)。

默认值: 180

update_timeout

整数

配置防火墙时使用的超时时间。

请注意,API 调用在防火墙成功设置之前返回。

默认值: 30

wait_delay

整数

再次检查防火墙是否已配置完成之前的等待延迟(以秒为单位)。

默认值: 10

wait_for_configured

布尔值

是否等待防火墙成功配置完成再确定要执行的操作,以及模块返回之前。

当防火墙当前正在配置时,API 返回状态in progress。如果发生这种情况,模块将尝试再次运行,直到状态更改为activedisabled

请注意存在请求限制。如果您需要进行多次更新,最好禁用等待,并定期使用community.hrobot.firewall_info查询状态。

选项

  • false

  • true ← (默认)

属性

属性

支持

描述

action_group

动作组: community.hrobot.robot

添加于 community.hrobot 1.6.0

module_defaults中使用group/community.hrobot.robot来设置此模块的默认值。

check_mode

支持: 完全支持

可以在check_mode下运行,并在不修改目标的情况下返回更改状态预测。

diff_mode

支持: 完全支持

在差异模式下,将返回有关已更改内容(或可能需要在check_mode中更改的内容)的详细信息。

另请参阅

另请参阅

防火墙文档

Hetzner 关于专用服务器无状态防火墙的文档

community.hrobot.firewall_info

检索防火墙配置信息。

示例

- name: Configure firewall for server with main IP 1.2.3.4
  community.hrobot.firewall:
    hetzner_user: foo
    hetzner_password: bar
    server_ip: 1.2.3.4
    state: present
    filter_ipv6: true
    allowlist_hos: true
    rules:
      input:
        - name: Allow ICMP protocol
          # This is needed so you can ping your server
          ip_version: ipv4
          protocol: icmp
          action: accept
          # Note that it is not possible to disable ICMP for IPv6
          # (https://robot.hetzner.com/doc/webservice/en.html#post-firewall-server-id)
        - name: Allow responses to incoming TCP connections
          protocol: tcp
          dst_port: '32768-65535'
          tcp_flags: ack
          action: accept
        - name: Allow restricted access from some known IPv4 addresses
          # Allow everything to ports 20-23 from 4.3.2.1/24 (IPv4 only)
          ip_version: ipv4
          src_ip: 4.3.2.1/24
          dst_port: '20-23'
          action: accept
        - name: Allow everything to port 443
          dst_port: '443'
          action: accept
        - name: Drop everything else
          action: discard
      output:
        - name: Accept everything
          action: accept
  register: result

- ansible.builtin.debug:
    msg: "{{ result }}"

返回值

常见的返回值已在此处记录,以下是此模块特有的字段

描述

firewall

字典

防火墙配置。

返回:成功

allowlist_hos

布尔值

添加于 community.hrobot 1.2.0

Hetzner 服务是否可以访问。

返回:成功

示例: true

port

字符串

防火墙的交换机端口。

mainkvm

返回:成功

示例: "main"

rules

字典

防火墙规则。

返回:成功

input

列表 / 元素=字典

输入防火墙规则。

返回:成功

action

字符串

如果规则匹配则执行的操作。

acceptdiscard

返回:成功

只能返回

  • "accept"

  • "discard"

示例: "accept"

dst_ip

字符串

目标 IP 地址或子网地址。

CIDR 表示法。

返回:成功

示例: "1.2.3.4/32"

dst_port

字符串

目标端口或端口范围。

返回:成功

示例: "443"

ip_version

字符串

互联网协议版本。

无值表示规则同时适用于 IPv4 和 IPv6。

返回:成功

示例: "ipv4"

name

字符串

防火墙规则的名称。

返回:成功

示例: "Allow HTTP access to server"

protocol

字符串

IP 层之上的协议。

返回:成功

示例: "tcp"

src_ip

字符串

源 IP 地址或子网地址。

CIDR 表示法。

返回:成功

src_port

字符串

源端口或端口范围。

返回:成功

tcp_flags

字符串

TCP 标志或标志的逻辑组合。

返回:成功

output

列表 / 元素=字典

输出防火墙规则。

返回:成功

action

字符串

如果规则匹配则执行的操作。

acceptdiscard

返回:成功

只能返回

  • "accept"

  • "discard"

示例: "accept"

dst_ip

字符串

目标 IP 地址或子网地址。

CIDR 表示法。

返回:成功

示例: "1.2.3.4/32"

dst_port

字符串

目标端口或端口范围。

返回:成功

示例: "443"

ip_version

字符串

互联网协议版本。

无值表示规则同时适用于 IPv4 和 IPv6。

返回:成功

name

字符串

防火墙规则的名称。

返回:成功

示例: "Allow HTTP access to server"

protocol

字符串

IP 层之上的协议。

返回:成功

示例: "tcp"

src_ip

字符串

源 IP 地址或子网地址。

CIDR 表示法。

返回:成功

src_port

字符串

源端口或端口范围。

返回:成功

tcp_flags

字符串

TCP 标志或标志的逻辑组合。

返回:成功

server_ip

字符串

服务器的主 IP 地址。

返回:成功

示例: "1.2.3.4"

server_number

整数

Hetzner 的内部服务器编号。

返回:成功

示例: 12345

status

字符串

防火墙状态。

activedisabled

如果防火墙当前正在更新,并且wait_for_configured设置为falsetimeout设置为过小的值,则将为in process

返回:成功

示例: "active"

whitelist_hos

布尔值

Hetzner 服务是否可以访问。

返回值allowlist_hos的旧名称,最终将被删除。

返回:成功

示例: true

作者

  • Felix Fontein (@felixfontein)