使用 Ansible 将 UFW 端口开放至特定 IP

使用 Ansible 将 UFW 端口开放至特定 IP

我运行了从 Ansible 2.9 直接复制的以下任务 文档

- name: Allow all access from RFC1918 networks to this host
  ufw:
    rule: allow
    src: '{{ item }}'
  loop:
    - 10.0.0.0/8
    - 172.16.0.0/12
    - 192.168.0.0/16

当然,用我自己的IP。

问题是,尽管它循环遍历 IP(如下面的输出所示),但 UFW 规则仍然对任何地方开放。

TASK [Allow 5431] ***********************************************************************************************
changed: [database3] => (item=my_ip1)
changed: [database1] => (item=my_ip2)
changed: [database2] => (item=my_ip3)
ok: [database3] => (item=my_ip1)
ok: [database1] => (item=my_ip2)
ok: [database2] => (item=my_ip3)

我尝试成功删除允许规则,然后再次运行带有如下循环的规则,但是不起作用:

tasks:
    - name: Allow 5431
      ufw:
        rule: allow
        port: "5431"
        delete: yes

问题是:如何使用ufw模块来限制某个端口的IP访问?

更新

我正在循环遍历一系列如下所示的 IP:

  loop:
    - 10.0.0.0/0
    - 172.16.0.0/0
    - 192.168.0.0/0

答案1

通过直接进入服务器并运行 UFW 命令,我得到了

WARN: Rule changed after normalization
Rule added

UFW 正在更改我的 IP,因为它们都以 xxx.xx.xxx.xxx 结尾/0

通过移除子掩码指示器,一切正常工作。

问题是子掩码二进制与运算设置为 /0 会将所有二进制数转换为 False 或 0,因此正常化在这种情况下,将任何 IP 变为 0.0.0.0

答案2

您必须确保对子网(子网掩码)使用正确的 CIDR 表示法。根据 RFC1918 第 3 节,覆盖这些地址空间的正确子网是:

  • 10.0.0.0/8
  • 172.16.0.0/12
  • 192.168.0.0/16

使用这些,您的 UFW 规则将适用于所有私有地址空间。

来源:https://datatracker.ietf.org/doc/html/rfc1918#section-3

相关内容