ansible - 如何使用 ansible 清除不在列表中的任何 ufw 条目
问题描述
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
但是,我还想删除任何旧条目或错误到达那里的条目。
例如,如果旧版本有 192.168.8.8,我想删除它。或者,如果有人手动添加它。
有没有合理的方法来做到这一点?我想如果服务器只由ansible配置,当我从列表中删除一个IP地址时,我添加一个条目来删除它,我不会有这个问题。
解决方案
在尝试使用 Ansible v2.9 标准化服务器的 UFW 时,我遇到了类似的问题,因为每个服务器都有不同的规则。
该方法是reset
UFW,它删除所有现有规则,并创建我想要的规则,非常注意不要将我锁定在服务器之外。
编码:
- 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
一步一步解释
注意block: always:
参数。您将在内部设置几乎所有操作block:
并作为安全阀离开always:
,因此在发生任何故障时,您确信您仍然可以通过 SSH 访问您的服务器。
这也可以ignore_errors: yes
在块级别完成,但我从文档中看出这不是“最安全”的选项。
Allow outgoing
并Disallow ingoing
定义一般行为。
然后,您可以添加尽可能多的规则,并在always
允许 SSH 的情况下关闭,并启用您的防火墙,并拥有一个安全的剧本。
推荐
我强烈建议你不要在服务器上测试你的 UFW 剧本,如果出现问题,你会错过。
在您已经设置了一个或两个 SSH 连接的单个测试服务器中测试您的 UFW 剧本,因此如果您拒绝所有 SSH 连接,您仍然在里面并且可以ufw allow 22
推荐阅读
- android - 通过 HttpURLConnection 函数连接到 Internet 时出现 Android 应用程序错误
- github - 为什么即使没有任何更改,github 仍将我的所有代码突出显示为红色/绿色?
- ruby-on-rails - 在 Linux 上安装 Ruby on Rails Bundle 时出现问题
- android - 分离 React Native Expo 项目 Android 构建问题
- ios - 更改 iPhone 实时摄像头馈送中实时对象的颜色
- javascript - 使用html2pdf库时如何处理多种屏幕尺寸?
- c++ - 如何从第一个参数推断出第二个参数类型?
- swift - 如何在 Swift 中的 View 中控制 TableView
- math - 为什么 3D 旋转矩阵方法通常使用单独的向量和角度而不是常规的欧拉角?
- c++ - 结构数组的构造函数错误,错误消息:没有构造函数实例与参数列表匹配