作業環境
■ Ansible 側
- CentOS 8.0
- Python 3.7.7
- Ansible 2.9.6
■ FortiGate 側
- 型番:FortiGate 60E
- バージョン:v6.0.9
ポリシーの設定
fortios_firewall_policy モジュールを使用することで FortiGate のコンフィグにおける config firewall policy の各項目を設定することができます。
- ポリシーの追加/変更/削除
に利用できます。
主なパラメータ
パラメータ | 必須 | 選択肢/デフォルト | 説明 |
host | 対象機器のIPアドレス | ||
username | SSH用のユーザ | ||
password | ・”” ← | SSH用のパスワード | |
vdom | ・root ← | 対象機器のバーチャルドメイン | |
https | ・no ・yes ← | HTTPSを使用するかどうか | |
ssl_verify | ・no ・yes ← | 対象機器の証明書を検証するかどうか | |
state | ● | ・present ・absent | present ⇒ オブジェクト作成/変更 absent ⇒ オブジェクト削除 ※Ansible 2.9 からはこのレベルで指定 |
firewall_policy | 各設定項目を子要素に指定 | ||
– state | ● | ・present ・absent | present ⇒ オブジェクト作成/変更 absent ⇒ オブジェクト削除 ※Ansible 2.8 ではこのレベルで指定 |
– policyid | ● | ポリシー ID | |
– name | オブジェクト名 | ||
– srcintf | 送信元インターフェースをリストで指定 | ||
– name | インターフェース名 | ||
– dstintf | 宛先インターフェースをリストで指定 | ||
– name | インターフェース名 | ||
– srcaddr | 送信元アドレスをリストで指定 | ||
– name | アドレス名 | ||
– dstaddr | 宛先アドレスをリストで指定 | ||
– name | アドレス名 | ||
– action | ・accept ・deny ・ipsec | アクション | |
– status | ・enable ・disable | ステータス | |
– schedule | ・always ・none など | スケジュール | |
– service | サービスをリストで指定 | ||
– name | サービス名 | ||
– logtraffic | ・all ・utm ・disable | ログ取得設定 | |
– logtraffic_start | ・enable ・disable | セッションの開始時と終了時にログ取得 | |
– comments | コメント | ||
– nat | ・enable ・disable | ソース IP NAT の使用 |
備考
- Ansible 2.8 から追加されたモジュール
- Legacy モードでの実行のためには fortiosapi が必要
- httpapi での実行が可能
使用例
httpapi を使用してモジュールを実行する例です。
■ インベントリ:hosts
[forti]
10.1.10.100
[forti:vars]
ansible_user=admin
ansible_password=password
ansible_network_os=fortios
ansible_connection=httpapi
ansible_httpapi_use_ssl=yes
ansible_httpapi_validate_certs=no
10.1.10.100 は操作対象の FortiGate のIPアドレスです。
httpapi で使用する変数をグループ変数として定義しています。
ポリシーの追加(NAT 無し)
■ Playbook:policy_no_nat_present.yml
- hosts: forti
gather_facts: no
tasks:
- name: "add policy (no nat)"
fortios_firewall_policy:
vdom: "root"
state: "present"
firewall_policy:
policyid: "3"
name: "test_policy"
srcintf:
- name: "internal1"
dstintf:
- name: "wan1"
srcaddr:
- name: "all"
dstaddr:
- name: "all"
action: "accept"
status: "enable"
schedule: "always"
service:
- name: "ALL"
logtraffic: "utm"
logtraffic_start: "disable"
comments: "test_policy"
nat: "disable"
■ Playbook 実行
# ansible-playbook -i hosts policy_no_nat_present.yml
PLAY [forti] ********************************************************************************************************
TASK [add policy (no nat)] ******************************************************************************************
changed: [10.1.10.100]
PLAY RECAP **********************************************************************************************************
10.1.10.100 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
■ 実行後の FortiGate のコンフィグ
FGT # show firewall policy
config firewall policy
#略
edit 3
set name "test_policy"
set uuid bcb77c6e-a23f-51ea-e86a-9e610b1732d5
set srcintf "internal1"
set dstintf "wan1"
set srcaddr "all"
set dstaddr "all"
set action accept
set schedule "always"
set service "ALL"
set comments "test_policy"
next
end
ポリシーの削除
ポリシー ID 3 のポリシーを削除する例です。
■ Playbook:service_absent.yml
- hosts: forti
gather_facts: no
tasks:
- name: "delete policy"
fortios_firewall_policy:
vdom: "root"
state: "absent"
firewall_policy:
policyid: "3"
■ Playbook 実行
# ansible-playbook -i hosts policy_absent.yml
PLAY [forti] ********************************************************************************************************
TASK [delete policy] ************************************************************************************************
changed: [10.1.10.100]
PLAY RECAP **********************************************************************************************************
10.1.10.100 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
―――――――――――――