ansibleのwin_firewall_ruleモジュールでは、symantec endpoint protection(以降SEP)でファイアウォールを管理している環境への設定はできなかったので、調べてやってみた。
以下のような感じでやったらできた
---
- name: Export current firewall rule
win_command: '"C:\Program Files (x86)\Symantec\Symantec Endpoint Protection\smc.exe" -exportadvrule {{ temp_dir }}\firewall_rule.xml'
- name: edit firewall rule
win_xml:
path: '{{ temp_dir }}\firewall_rule.xml'
xpath: '/AdvancedRules'
type: element
fragment: '<AdvancedRule EnableTimeGroup="0" Description="My Service" RuleEnabled="1"><Services><RawTcp LocalPort="30000,30001"/></Services>
<ActionGroup><Action Enable="1" LogEvent="1" LogRawTraffic="0" PacketProcess="PASS"/></ActionGroup></AdvancedRule>'
- name: Import firewall rule
win_command: '"C:\Program Files (x86)\Symantec\Symantec Endpoint Protection\smc.exe" -importadvrule {{ temp_dir }}\firewall_rule.xml'
ポイント1: SEPのコマンドライン操作
コマンドライン操作があるか探して、以下を見つけた。
https://techdocs.broadcom.com/jp/ja/symantec-security-software/endpoint-security-and-management/endpoint-protection/all/appendices/windows-commands-for-the-endpoint-protection-clien-v9567615-d19e6200.html
smc -exportadvrule
コマンドでfirewallの設定をxml形式のファイルでexportでき、
smc -importadvrule
コマンドでfirewallの設定をimportできるとのこと。
importのコマンドでは、import対象のファイルに書いていないルールは削除される挙動をした。
なので、追加したいルールだけではなく、既存のルールも書いておかないといけない。
ポイント2:xml操作
exportしたfirewall ruleのファイルに、追加したいルールを記述する。
ansibleには、win_xmlモジュールというものがあって、それでxmlファイルを編集できる。
https://docs.ansible.com/ansible/latest/collections/community/windows/win_xml_module.html
今回は単純に要素を追加しただけ。
冪等性が確保できてなくて、複数回実行すると同じルールが複数できてしまう。。。
冪等性を確保するためには、もう少し書き方の工夫が必要