Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
AnsibleでFortigateを操作してみた話
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
tatematsu_san
November 20, 2019
Technology
4.7k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
AnsibleでFortigateを操作してみた話
tatematsu_san
November 20, 2019
Other Decks in Technology
See All in Technology
[チョークトーク資料]AWS DevOps Agent を使いこなす / AWS Dev Ops Agent Chalk Talk AWS Summit Japan 2026
kinunori
3
600
When Platform Engineering Meets GenAI
sucitw
0
130
AI駆動開発を通して感じた、 AI時代のデザイナーの役割変化
whisaiyo
4
2.3k
人材育成分科会.pdf
_awache
4
300
【NRUG vol.18】KubernetesにおけるNew Relicデータ取得量削減の考え方
nrug_member
0
170
アジャイルな経理と Claude Code と経営の未来
kawaguti
PRO
3
170
【セミナー資料】Claude Code をセキュアに使うための考え方と設定の勘どころ / Claude Code Webinar 20260616
masahirokawahara
2
420
データレイクの「見えない問題」を可視化する
sansantech
PRO
1
120
Kubernetesにおける学習基盤とLLMOpsの概要
ry
1
320
2026TECHFRESH畢業分享會 - AI 時代的人生存檔點
line_developers_tw
PRO
0
1.3k
AIAU_UMEMOGU_ninomiya_slide
ninomiya_ii
0
240
エラーバジェットのアラートのタイミングを考える.pdf
kairim0
0
180
Featured
See All Featured
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
The Invisible Side of Design
smashingmag
302
52k
Six Lessons from altMBA
skipperchong
29
4.3k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
240
The agentic SEO stack - context over prompts
schlessera
0
820
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
170
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.3k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
1
350
The Pragmatic Product Professional
lauravandoore
37
7.3k
It's Worth the Effort
3n
188
29k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
3.5k
A Modern Web Designer's Workflow
chriscoyier
698
190k
Transcript
Ansibleで Fortigateを操作してみた話 2019/11/20 Ansiblejp ネットワーク部 @tk4_jj
自己紹介 - Name: tatematsu_san (たてまつ) - Twitter: @tk4_jj - Blog:
https://tenko.hatenablog.jp/ - Job: インフラエンジニア - オンプレ中心、ネットワークに限らずなんでも屋 - 最近はセキュリティ系サービスの運用が中心 - Ansible歴: ちゃんと勉強し始めてからは2か月目 - 2019年2月頃から、リモートで Ansibleもくもく会に参加 - 2019年10月からやっと自宅で学習開始
お話すること - Ansible2.9をインストールすると標準で入るfortios系モジュールの話 - Fortigateの運用におけるAnsible活用例 ※ Ansibleの機能をフルで生かしたような複雑な話はありません。
Fortigateの操作方法 - CLI - コンソール接続 - SSH - Telnet -
WebUI - REST API - FortiOS 5.2くらいから使えた模様 - 公式リファレンスが一般には非公開 サブスクリプション型の FNDNで入手可能 - ブラウザでも確認可能 ログインした状態で以下のようにアクセス https://<forti_ip>/api/v2/cmdb/firewall/address 【CLI】 【WebUI】 【REST API】 →2.8以降で大量に増えたモジュールはREST APIを利用
大量のモジュールの実態は? - モジュールが、config <hoge> <fuga>毎に存在する - Configから対象モジュールが探しやすい ▪Configファイル ▪Playbook
どこまで自動化できそう? - 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用)
ポリシー追加をやってみた - 以下のようなPlaybookでポリシーの追加が可能 ▪成果物→ ▪注意点 ・同じ結果にはなるが、毎回 changed ・FortiOS 5.4系では動かない(5.6は未テスト) →FortiOS
6.0以降の利用を推奨 ・公式のモジュールリファレンスでは、 最低限どこまでの要素が必要か判別が難しい (full-configレベルの要素が存在 ) ・WebUIやCLIと異なり、入力されるパラメータに対しての チェックが甘い →最低限どこまで書くべきかは都度動作確認が必要
抜けるものぜんぶ抜く - 要素をそぎ落としながら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 ▪成果物→
再起動するまで 油断してはいけない
わかったこと、感じたこと - 「設定の追加(上書き)」「削除」「無効化」は可能だが、 「既存設定に対してのオブジェクトの追加」はモジュール単体ではできない - ポリシーの並び替え(move)ができない - execute用のモジュールがない - network_cliを用いたSSH接続も、fortios専用のものは存在しない
→構築は問題なく出来そうだが、運用には工夫が必要(無理なものもありそう)
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
次にやること - 苦手なこと、できないことにフォーカスしてあきらめるより、 「できること」から活用の道を考えたい - read_csvを使ったExcelからのポリシー設定とか - SSL復号除外FQDNリストの複数異機種間での共有とか - 「それ、Ansibleでもできるよ」をもっと増やしていきたい
- 管理対象が少ない環境だったとしても、個別スクリプト化よりサイロ化は防げる - 一つの構成管理ツールに矛先をそろえやすい