Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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を利用

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

どこまで自動化できそう? - 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用)

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

抜けるものぜんぶ抜く - 要素をそぎ落としながら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 ■成果物→

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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