ここでは Ansible を使用した FortiGate の設定について記載しています。通常の方法で FortiGate のアドレスオブジェクトを設定する方法については次の記事を参照してください。
→ FortiGate でアドレスオブジェクトを作成する手順(v6.0.9)
作業環境
■ Ansible 側
- CentOS 8.0
- Python 3.7.7
- Ansible 2.9.6
■ FortiGate 側
- 型番:FortiGate 60E
- バージョン:v6.0.9
アドレスオブジェクトの設定
fortios_firewall_address モジュールを使用することで FortiGate のコンフィグにおける config firewall address の各項目を設定することができます。
- アドレスオブジェクトの追加/変更/削除
に利用できます。
主なパラメータ
パラメータ | 必須 | 選択肢/デフォルト | 説明 |
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_address | config firewall address の設定項目を 子要素として指定する | ||
– state | ● | ・present ・absent | present ⇒ オブジェクト作成/変更 absent ⇒ オブジェクト削除 ※Ansible 2.8 ではこのレベルで指定 |
– name | ● | オブジェクト名 | |
– type | ・ipmask ・iprange ・fqdn ・geography ・wildcard ・wildcard-fqdn ・dynamic | タイプ | |
– comment | コメント | ||
– visibility | ・enable ・disable | GUI で表示させるかどうか | |
– associated_interface | 紐づけるインターフェース | ||
– subnet | サブネット ※タイプが ipmask の場合 | ||
– start_ip | 開始アドレス ※タイプが iprange の場合 | ||
– end_ip | 最終アドレス ※タイプが iprange の場合 | ||
– fqdn | FQDN ※タイプが fqdn の場合 |
備考
- 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 で使用する変数をグループ変数として定義しています。
ipmask タイプのアドレスオブジェクトの作成
■ Playbook:address_ipmask.yml
- hosts: forti
gather_facts: no
tasks:
- name: "add address object (ipmask)"
fortios_firewall_address:
vdom: "root"
state: "present"
firewall_address:
name: "address_ipmask"
type: "ipmask"
comment: "ipmask"
visibility: "enable"
associated_interface: "internal1"
subnet: "192.168.10.0 255.255.255.0"
■ Playbook 実行
# ansible-playbook -i hosts address_ipmask.yml
PLAY [forti] ********************************************************************************************************
TASK [add address object (ipmask)] **********************************************************************************
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 full-configuration firewall address
config firewall address
#略
edit "address_ipmask"
set uuid f769b120-a220-51ea-07b9-86bd31ca9b57
set type ipmask
set comment "ipmask"
set visibility enable
set associated-interface "internal1"
set color 0
set allow-routing disable
set subnet 192.168.10.0 255.255.255.0
next
end
iprange タイプのアドレスオブジェクトの作成
■ Playbook:address_iprange.yml
- hosts: forti
gather_facts: no
tasks:
- name: "add address object (iprange)"
fortios_firewall_address:
vdom: "root"
state: "present"
firewall_address:
name: "address_iprange"
type: "iprange"
comment: "iprange"
visibility: "enable"
associated_interface: "internal1"
start_ip: "192.168.1.10"
end_ip: "192.168.1.200"
■ Playbook 実行
# ansible-playbook -i hosts address_iprange.yml
PLAY [forti] ********************************************************************************************************
TASK [add address object (iprange)] *********************************************************************************
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 full-configuration firewall address
config firewall address
#略
edit "address_iprange"
set uuid ad5c86f6-a221-51ea-c946-169ef4de2d0f
set type iprange
set comment "iprange"
set visibility enable
set associated-interface "internal1"
set color 0
set start-ip 192.168.1.10
set end-ip 192.168.1.200
next
end
fqdn タイプのアドレスオブジェクトの作成
■ Playbook:address_fqdn.yml
- hosts: forti
gather_facts: no
tasks:
- name: "add address object (fqdn)"
fortios_firewall_address:
vdom: "root"
state: "present"
firewall_address:
name: "address_fqdn"
type: "fqdn"
comment: "fqdn"
visibility: "enable"
associated_interface: "internal1"
fqdn: "nwengblog.com"
■ Playbook 実行
# ansible-playbook -i hosts address_fqdn.yml
PLAY [forti] ********************************************************************************************************
TASK [add address object (fqdn)] ************************************************************************************
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 full-configuration firewall address
config firewall address
#略
edit "address_fqdn"
set uuid 1aea16ca-a222-51ea-309b-32f4bbcc3310
set type fqdn
set comment "fqdn"
set visibility enable
set associated-interface "internal1"
set color 0
set allow-routing disable
set fqdn "nwengblog.com"
set cache-ttl 0
next
end
アドレスオブジェクトの削除
■ Playbook:address_delete.yml
- hosts: forti
gather_facts: no
tasks:
- name: "delete address objects"
fortios_firewall_address:
vdom: "root"
state: "absent"
firewall_address:
name: "{{ item }}"
with_items:
- "address_ipmask"
- "address_iprange"
- "address_fqdn"
■ Playbook 実行
# ansible-playbook -i hosts address_delete.yml
PLAY [forti] ********************************************************************************************************
TASK [delete address objects] ***************************************************************************************
changed: [10.1.10.100] => (item=address_ipmask)
changed: [10.1.10.100] => (item=address_iprange)
changed: [10.1.10.100] => (item=address_fqdn)
PLAY RECAP **********************************************************************************************************
10.1.10.100 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
アドレスグループオブジェクトの設定
fortios_firewall_addrgrp モジュールを使用することで FortiGate のコンフィグにおける config firewall addrgrp の各項目を設定することができます。
- アドレスグループオブジェクトの追加/変更/削除
に利用できます。
主なパラメータ
パラメータ | 必須 | 選択肢/デフォルト | 説明 |
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_addrgrp | config firewall addrgrp の設定項目を 子要素として指定する | ||
– state | ● | ・present ・absent | present ⇒ オブジェクト作成/変更 absent ⇒ オブジェクト削除 ※Ansible 2.8 ではこのレベルで指定 |
– name | ● | オブジェクト名 | |
– member | 所属アドレスをリストで指定 | ||
– name | 所属アドレス名 | ||
– comment | コメント | ||
– visibility | ・enable ・disable | GUI で表示させるかどうか |
備考
- 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 で使用する変数をグループ変数として定義しています。
アドレスグループオブジェクトの作成
■ Playbook:addrgrp_present.yml
- hosts: forti
gather_facts: no
tasks:
- name: "add address group object"
fortios_firewall_addrgrp:
vdom: "root"
state: "present"
firewall_addrgrp:
name: "Clients"
member:
- name: "Client01"
- name: "Client02"
- name: "Client03"
comment: "Clients"
visibility: "enable"
■ Playbook 実行
# ansible-playbook -i hosts addrgrp_present.yml
PLAY [forti] ********************************************************************************************************
TASK [add address group object] *************************************************************************************
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 full-configuration firewall addrgrp
config firewall addrgrp
edit "Clients"
set uuid 72b7913a-a226-51ea-a485-e726c3c03b43
set member "Client01" "Client02" "Client03"
set comment "Clients"
set visibility enable
set color 0
next
end
アドレスグループオブジェクトの削除
■ Playbook:address_iprange.yml
- hosts: forti
gather_facts: no
tasks:
- name: "delete address group object"
fortios_firewall_addrgrp:
vdom: "root"
state: "absent"
firewall_addrgrp:
name: "Clients"
■ Playbook 実行
# ansible-playbook -i hosts addrgrp_absent.yml
PLAY [forti] ********************************************************************************************************
TASK [delete address group object] **********************************************************************************
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
―――――――――――――