03 – Ansible实现Windows 防火墙状态一键检查

编写inventory.ini

[windows]
WINSRV2022-01 ansible_host=受控主机IP ansible_user='用户名' ansible_password='密码'

[windows:vars]
ansible_port=5985
ansible_connection=winrm
ansible_winrm_transport=basic

编写check_firewall.yml

---
- name: 检查 Windows Server 2022 防火墙设置
  hosts: windows
  gather_facts: no
  tasks:
    - name: 获取域网络防火墙状态
      win_shell: Get-NetFirewallProfile -Profile Domain | Select-Object -Property Enabled
      register: domain_firewall_status

    - name: 检查域网络防火墙是否启用
      debug:
        msg: "域网络防火墙已启用。"
      when: "'True' in domain_firewall_status.stdout"

    - name: 检查域网络防火墙是否禁用
      debug:
        msg: "域网络防火墙已禁用。请出于安全原因启用防火墙。"
      when: "'False' in domain_firewall_status.stdout"

    - name: 获取专用网络防火墙状态
      win_shell: Get-NetFirewallProfile -Profile Private | Select-Object -Property Enabled
      register: private_firewall_status

    - name: 检查专用网络防火墙是否启用
      debug:
        msg: "专用网络防火墙已启用。"
      when: "'True' in private_firewall_status.stdout"

    - name: 检查专用网络防火墙是否禁用
      debug:
        msg: "专用网络防火墙已禁用。请出于安全原因启用防火墙。"
      when: "'False' in private_firewall_status.stdout"

    - name: 获取公用网络防火墙状态
      win_shell: Get-NetFirewallProfile -Profile Public | Select-Object -Property Enabled
      register: public_firewall_status

    - name: 检查公用网络防火墙是否启用
      debug:
        msg: "公用网络防火墙已启用。"
      when: "'True' in public_firewall_status.stdout"

    - name: 检查公用网络防火墙是否禁用
      debug:
        msg: "公用网络防火墙已禁用。请出于安全原因启用防火墙。"
      when: "'False' in public_firewall_status.stdout"

check_firewall.yml 内容分享

这个 check_firewall.yml 实现了对 Windows 防火墙状态的全面检查,确保域、专用和公用网络的防火墙配置都能被逐一确认。具体功能包括:

  1. 逐个网络配置检查防火墙状态,确保全面覆盖所有可能的网络类型。
  2. 根据防火墙状态分别显示消息,清楚地告诉用户哪些网络类型下的防火墙是启用的,哪些是禁用的。
  3. 更好的安全建议:如果防火墙未启用,脚本会提示用户启用防火墙来提高系统的安全性。

以下是YML内容各部分的讲解:

脚本结构

  1. 顶层结构
    • hosts: windows: 指定目标主机组为 windows,这些主机应该是 Windows 服务器。
    • gather_facts: no: 不收集默认的 Ansible facts,因为这里只需要执行防火墙状态的检查任务。
  2. 任务部分: 脚本包括多个任务,每个任务用于获取防火墙配置状态,并根据防火墙的状态进行条件输出。 获取防火墙状态
    • 使用 win_shell 执行 PowerShell 命令 Get-NetFirewallProfile -Profile <网络类型> | Select-Object -Property Enabled 来获取防火墙状态,分别针对三种网络类型(域、专用、公用)。结果会被存储在不同的变量中(如 domain_firewall_statusprivate_firewall_statuspublic_firewall_status)。
    • register 用于将命令的输出结果存储在指定的变量中,以便后续任务使用。
    检查防火墙是否启用
    • 分别为每种网络配置(域、专用、公用)检查防火墙的启用状态。
    • 使用 debug 模块显示相应的信息,如果防火墙状态为 “True”,则输出“<网络类型>防火墙已启用。”
    检查防火墙是否禁用
    • 如果防火墙状态为 “False”,则输出警告消息,提示防火墙已禁用,并建议启用防火墙以增强安全性。

执行命令

ansible-playbook -i inventory.ini check_firewall.yaml

执行结果

Pasted image 20241025213317

此文章为原创文章,作者:胖哥叨逼叨,如若转载,请与我联系并注明出处:https://www.pangshare.com/3118.htm

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 2024年10月23日 下午5:47
下一篇 2024年10月29日 下午2:53

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注