如何使用 ansible 清除不在列表中的任何 ufw 条目

Ale*_*502 5 ansible ufw ansible-2.x

https://docs.ansible.com/ansible/latest/modules/ufw_module.html

我已将 Ansible 2 配置为允许使用 ufw 的一堆 IP 地址,其条目如下:

  - name: allow from this one computer
    ufw:
      rule: allow
      port: 22
      src: 192.168.5.5
Run Code Online (Sandbox Code Playgroud)

但是,我还想删除所有旧条目或错误到达的条目。

例如,如果旧版本有192.168.8.8,我想删除它。或者如果有人手动添加它。

有什么合理的方法可以做到这一点吗?我想如果服务器仅由ansible配置,并且当我从列表中删除IP地址时,我添加一个条目来删除它,我就不会遇到这个问题。

Ric*_*pie 6

在尝试使用 Ansible v2.9 标准化服务器的 UFW 时,我遇到了类似的问题,因为每台服务器都有不同的规则。

方法是使用resetUFW,它删除所有现有规则,并创建我想要的规则,非常小心不要将我锁定在服务器之外

代码:


- name: Setup admin production UFW
  hosts: my_hosts
  gather_facts: no
  tasks:
    - block:
      - name: Reset UFW
        ufw: 
          state: reset

      - name: Allow outgoing
        ufw: 
          default: allow
          direction: outgoing

      - name: Disallow ingoing
        ufw: 
          default: deny
          direction: incoming

      - name: Establish regular admin rules
        ufw:
          rule: allow
          direction: in
          port: '5432'
          proto: tcp
          from_ip: '{{ item }}'
        loop:
          - 123.456.789/32
          - 987.654.321/32

      always:
        - name: Grant ssh access
          ufw:
            rule: allow
            direction: in
            port: '22'
            proto: tcp
            from_ip: 321.456.987/32
        
         - name: Enable Firewall
           ufw: 
            state: enabled

Run Code Online (Sandbox Code Playgroud)

一步步解释

注意block: always:参数。您将在内部设置几乎所有操作block:并保留always:为安全阀,这样万一发生任何故障,您确信您仍然可以通过 SSH 访问您的服务器。

ignore_errors: yes这也可以在块级别完成,但我从文档中发现这不是“最安全”的选项。

Allow outgoingDisallow ingoing定义一般行为。

然后,您可以添加任意数量的规则,并以always允许的 SSH 关闭,并启用您的防火墙,制定安全的剧本。

推荐

我强烈建议您不要在服务器中测试您的 UFW 剧本,如果出现问题您将会错过。

在已设置一两个 SSH 连接的单个测试服务器中测试您的 UFW playbook,因此,如果您规则拒绝所有 SSH 连接,您仍然可以在其中ufw allow 22


Vla*_*tka 1

问:“旧版本有 192.168.8.8,我想删除它。”

A:参见参数delete。例如

  - name: delete rule
    ufw:
      delete: true
      rule: allow
      port: 22
      src: 192.168.8.8
Run Code Online (Sandbox Code Playgroud)