Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AnsibleでFortigateを操作してみた話

tatematsu_san
November 20, 2019

 AnsibleでFortigateを操作してみた話

tatematsu_san

November 20, 2019
Tweet

Other Decks in Technology

Transcript

  1. Ansibleで
    Fortigateを操作してみた話
    2019/11/20 Ansiblejp ネットワーク部
    @tk4_jj

    View Slide

  2. 自己紹介
    - Name: tatematsu_san (たてまつ)
    - Twitter: @tk4_jj
    - Blog: https://tenko.hatenablog.jp/
    - Job: インフラエンジニア
    - オンプレ中心、ネットワークに限らずなんでも屋
    - 最近はセキュリティ系サービスの運用が中心
    - Ansible歴: ちゃんと勉強し始めてからは2か月目
    - 2019年2月頃から、リモートで Ansibleもくもく会に参加
    - 2019年10月からやっと自宅で学習開始

    View Slide

  3. お話すること
    - Ansible2.9をインストールすると標準で入るfortios系モジュールの話
    - Fortigateの運用におけるAnsible活用例
    ※ Ansibleの機能をフルで生かしたような複雑な話はありません。

    View Slide

  4. Fortigateの操作方法
    - CLI
    - コンソール接続
    - SSH
    - Telnet
    - WebUI
    - REST API
    - FortiOS 5.2くらいから使えた模様
    - 公式リファレンスが一般には非公開
      サブスクリプション型の FNDNで入手可能
    - ブラウザでも確認可能
     ログインした状態で以下のようにアクセス
     https:///api/v2/cmdb/firewall/address
    【CLI】
    【WebUI】
    【REST API】
    →2.8以降で大量に増えたモジュールはREST APIを利用

    View Slide

  5. 大量のモジュールの実態は?
    - モジュールが、config 毎に存在する
    - Configから対象モジュールが探しやすい
    ■Configファイル
    ■Playbook

    View Slide

  6. どこまで自動化できそう?
    - 2.9で追加された分も含めると、かなりの部分はカバーできそう
    やりたいこと モジュール名 備考
    ポリシーの設定 fortios_firewall_policy 46/64なども
    オブジェクトの設定 fortios_firewall_address
    IPSの設定 fortios_ips_settings
    HAの設定 fortios_system_ha
    Syslogの設定 fortios_log_setting logfilterなども可能
    ルーティング設定 fortios_router_setting
    SSL-VPNの設定 fortios_vpn_ssl_settings
    他にもたくさん!!( NWモジュールの3割がFortios用)

    View Slide

  7. ポリシー追加をやってみた
    - 以下のようなPlaybookでポリシーの追加が可能
    ■成果物→
    ■注意点
    ・同じ結果にはなるが、毎回 changed
    ・FortiOS 5.4系では動かない(5.6は未テスト)
     →FortiOS 6.0以降の利用を推奨
    ・公式のモジュールリファレンスでは、
     最低限どこまでの要素が必要か判別が難しい
     (full-configレベルの要素が存在 )
    ・WebUIやCLIと異なり、入力されるパラメータに対しての
     チェックが甘い
     →最低限どこまで書くべきかは都度動作確認が必要

    View Slide

  8. 抜けるものぜんぶ抜く
    - 要素をそぎ落としながらPlaybookを実行
    そぎ落とした要素 処理結果 どうなるか?
    action changed DENYで定義される
    srcintf / dstintf / service failed Status Code :500
    srcaddr / dstaddr changed 設定は可能だが通信不可
    schedule changed 通信も可能
    ※赤網掛けが欠けた場合、Fortigateを再起動するとエラーで削除される
    (FortiOS 6.0.6の結果であり、バージョン差異などで変わる可能性あり)
    実行結果などはブログを参照 : https://tenko.hatenablog.jp/entry/2019/11/04/152625
    ■成果物→

    View Slide

  9. 再起動するまで
    油断してはいけない

    View Slide

  10. わかったこと、感じたこと
    - 「設定の追加(上書き)」「削除」「無効化」は可能だが、
    「既存設定に対してのオブジェクトの追加」はモジュール単体ではできない
    - ポリシーの並び替え(move)ができない
    - execute用のモジュールがない
    - network_cliを用いたSSH接続も、fortios専用のものは存在しない
    →構築は問題なく出来そうだが、運用には工夫が必要(無理なものもありそう)

    View Slide

  11. Fortigateの運用におけるAnsible活用例
    - URIモジュールを利用して、ダイナミックな要素をJSON形式でGET
    - CSV形式にコンバートする際、テンプレート機能を活用
    "name","rule-id","severity","location","action","date"
    {% for results in get_obj['json']['results'] %}
    "{{results['name'] }}","{{ results['rule-id'] }}","{{ results['severity'] }}","{{ results['location'] }}","{{
    results['action'] }}","{{ results['date'] }}"
    {% endfor %}
    【例】IPSシグネチャリストの作成
    # get ips rule status をパースするよりも、とてもお手軽
    uri
    template

    View Slide

  12. 次にやること
    - 苦手なこと、できないことにフォーカスしてあきらめるより、
    「できること」から活用の道を考えたい
    - read_csvを使ったExcelからのポリシー設定とか
    - SSL復号除外FQDNリストの複数異機種間での共有とか
    - 「それ、Ansibleでもできるよ」をもっと増やしていきたい
    - 管理対象が少ない環境だったとしても、個別スクリプト化よりサイロ化は防げる
    - 一つの構成管理ツールに矛先をそろえやすい

    View Slide