Ansible で Firewalld の設定を行ったところ、NIC の Zone の変更について、OS を再起動すると設定がリセットされる現象を確認しました。
具体的な例
環境
- Ansible 2.9.10
- CentOS 8.2 (2004)
Playbook
firewalld モジュールを使います。
- name: set eth0 internal
firewalld:
zone: internal
interface: eth0
permanent: yes
state: enabled
immediate: yes
実行前の状態
# firewall-cmd --list-interface --zone=public
eth0 eth1
実行結果
-v を付けた結果となりますが、実行直後は設定変更されているように見えます。
TASK [common : set eth0 internal] *
changed: [cent8-router-vm] => {"changed": true, "msg": "Permanent and Non-Permanent(immediate) operation, Changed eth0 to zone internal"}
# firewall-cmd --list-interface --zone=internal
eth0
再起動後
このように元の状態に戻ってしまいました。
# firewall-cmd --list-interface --zone=public
eth0 eth1
他の方の報告
この件は、2年前の2018年に最初の報告がありますが、現時点でも解消していないようです。
回避方法
Ansible の Firewalld モジュールではなく、firewall-cmd コマンドを実行するしかなさそうです。
- name: set eth0 internal
command: "firewall-cmd --zone=internal --permanent --add-interface=eth0"
- name: reload firewalld
command: "firewall-cmd --reload"
英語の情報はありましたが、日本語での事例はなかったので、今回ブログにまとめました。