我运行了从 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 规则将适用于所有私有地址空间。