Ansible:FortiGate のアドレスオブジェクトを設定する

ネットワーク

ここでは 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アドレス
usernameSSH用のユーザ
password・”” ←SSH用のパスワード
vdom・root ←対象機器のバーチャルドメイン
https・no
・yes ←
HTTPSを使用するかどうか
ssl_verify・no
・yes ←
対象機器の証明書を検証するかどうか
state・present
・absent
present ⇒ オブジェクト作成/変更
absent ⇒ オブジェクト削除
※Ansible 2.9 からはこのレベルで指定
firewall_addressconfig 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 の場合
 – fqdnFQDN
※タイプが 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アドレス
usernameSSH用のユーザ
password・”” ←SSH用のパスワード
vdom・root ←対象機器のバーチャルドメイン
https・no
・yes ←
HTTPSを使用するかどうか
ssl_verify・no
・yes ←
対象機器の証明書を検証するかどうか
state・present
・absent
present ⇒ オブジェクト作成/変更
absent ⇒ オブジェクト削除
※Ansible 2.9 からはこのレベルで指定
firewall_addrgrpconfig 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

―――――――――――――

タイトルとURLをコピーしました