ansibleguy.linux_ufw

已弃用

在自动化中使用 UFW 作为中间件没有真正的意义。

这会给单规则的更改带来不必要的复杂性!

在我看来,它不是为自动化设计的工具。

我实际上推荐使用 NFTables: ansibleguy.infra_nftables

Ansible 角色 - 简单防火墙 (UFW)

Ansible 角色用于在基于 Debian 的 Linux 服务器上部署/配置软件防火墙 'UFW'。

请给我喝咖啡

分子测试状态 YamlLint 测试状态 PyLint 测试状态 Ansible-Lint 测试状态 Ansible Galaxy

测试过:

  • Debian 11

安装

# 最新版本
ansible-galaxy role install git+https://github.com/ansibleguy/linux_ufw

# 从 galaxy 安装
ansible-galaxy install ansibleguy.linux_ufw

# 或指定自定义角色路径
ansible-galaxy install ansibleguy.linux_ufw --roles-path ./roles

# 安装依赖
ansible-galaxy install -r requirements.yml

功能

此 Ansible 角色将执行:

  • 软件包安装

    • UFW
  • 配置

    • 使用 两种模式之一 设置规则

      • 有状态 的方式 (默认)
        • 保留现有规则并使用规则状态添加/删除规则
      • 无状态 的方式
        • 每次重置 ufw 状态和规则
        • 然后应用新规则
    • 验证 ssh 规则是否存在

信息

  • 注意: 此角色的大部分功能可以选择启用或禁用。

    有关所有可用选项,请查看 主默认文件 中的默认配置!

  • 注意: 此角色目前仅支持基于 Debian 的系统

  • 警告: 并非您提供的每个设置/变量都会检查其有效性。错误的配置可能会导致角色失效!

用法

你想要一个简单的 Ansible GUI 吗?查看我的 Ansible WebUI

配置

只需根据需要定义 'ufw_rules' 字典:

ufw_rules:
  ruleShortName:
    rule: 'allow'  # 如果为空则为默认值
    port: 80
    proto: 'tcp'
    log: 'no'  # 如果为空则为默认值
    from_ip: 'any'  # 如果为空则为默认值
    to_ip: 'any'  # 如果为空则为默认值
    direction: 'in'  # 如果为空则为默认值
    present: true  # 如果为空则为默认值 => 将用于有状态规则检查 (别名 = 状态: present)
    position: 2  # 您可以定义规则在规则集中的位置 (别名 = 插入)
    comment: '您可以覆盖默认注释'

或简洁的方式:

ufw_rules: {
    ruleShortName: {rule: 'allow',  port: 80, proto: 'tcp', log: 'no', from_ip: 'any', to_ip: 'any', direction: 'in', state: 'present', position: 2, comment: '您可以覆盖默认注释'}
}

执行

运行剧本:

ansible-playbook -K -D -i inventory/hosts.yml playbook.yml

UFW 任务本身是 'community.general.ufw'

示例

执行前状态:

guy@ansible:~$ sudo ufw status numbered
状态:活动

     目标                         动作      来源
     --                         ------      ----
[ 1] 7424/tcp                   允许进入    任何地方                   # Ansible 管理 - confusedService
[ 2] 7429/tcp                   允许进入    任何地方                   (日志) # Ansible 管理 - nothingImportant

配置

ufw_rules:
  # 入站流量限制
  SecShöl:
    port: 22
    proto: 'tcp'
    log: true
    rule: 'limit'
  RandomWebServer:
    port: 8482
    proto: 'tcp'
  SecureLink:
    port: 54038:54085
    proto: 'udp'
    log: true
    from_ip: '192.168.194.0/28'
  ipsecESP:
    proto: 'esp'
    from_ip: '10.10.10.1'
    to_ip: '10.10.20.254'
  ipsecIKE:
    port: 500,4500
    proto: 'udp'
    from_ip: '10.10.10.1'
    to_ip: '10.10.20.254'
  
  # 出站流量限制
  denyNtpOutgoing:
    port: 123
    proto: 'udp'
    rule: 'deny'
    direction: 'out'

  # 删除这些规则:
  confusedService:
    port: 7424
    proto: 'tcp'
    state: 'absent'
  nothingImportant:
    port: 7429
    proto: 'tcp'
    log: true
    present: false

结果:

guy@ansible:~$ sudo ufw status numbered
状态:活动

     目标                         动作      来源
     --                         ------      ----
[ 1] 22/tcp                     限制进入    任何地方                   (日志) # Ansible 管理 - SecShöl
[ 2] 8482/tcp                   允许进入    任何地方                   # Ansible 管理 - RandomWebServer
[ 3] 54038:54085/udp            允许进入    192.168.194.0/28           (日志) # Ansible 管理 - SecureLink
[ 4] 10.10.20.254/esp           允许进入    10.10.10.1/esp             # Ansible 管理 - ipsecESP
[ 5] 10.10.20.254 500,4500/udp  允许进入    10.10.10.1                 # Ansible 管理 - ipsecIKE
[ 6] 123/udp                    拒绝出口    任何地方                   (出口) # Ansible 管理 - denyNtpOutgoing
关于项目

Role to install and configure ufw firewall-rules on a linux machine

安装
ansible-galaxy install ansibleguy.linux_ufw
许可证
gpl-3.0
下载
2.5k
拥有者
[email protected] | GPG: https://badges.ansibleguy.net/public.gpg