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
tatematsu_san
November 20, 2019
Technology
4.8k
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
Databricks 生成AIガバナンス実践ワークショップ / LLMOps-workshop
databricksjapan
0
100
Making sense of Google’s agentic dev tools
glaforge
1
200
公式ドキュメントの歩き方etc
coco_se
0
100
クラウド上のデータ復旧で見落としがちな制約: 医療系 SaaS の BCP 設計から得た教訓
kakehashi
PRO
0
3.5k
LLMやAIエージェントをソフトウェアに組み込むプラクティス
shibuiwilliam
1
360
プロダクトだけじゃない、社内プロセスにおける自動化・省力化ノススメ
kakehashi
PRO
1
3.7k
Foxgloveについて 実際にExtensionを開発して公開するまでの話 / About Foxglove: The Story of Developing and Releasing an Extension
ry0_ka
0
210
DatabricksにおけるMCPソリューション
taka_aki
1
240
ボーイスカウトルールでメモリやスキルを改善しよう
azukiazusa1
3
1k
【Claude Code】鹿野さんに聞く 私の推しの並行開発環境 大公開 / claude-code-parallel-2026-07-15
tonkotsuboy_com
11
7.2k
AI Agent SaaS を支える自社仮想化基盤への挑戦と実運用 / ai-agent-saas-virtualization
flatt_security
2
3.9k
AIレビューはどこまで任せられるのか?自動化と人が背負うレビューの境界
sansantech
PRO
2
780
Featured
See All Featured
Producing Creativity
orderedlist
PRO
348
40k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.1k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
270
Ruling the World: When Life Gets Gamed
codingconduct
0
280
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
62
44k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.5k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.7k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
3
1.1k
Mind Mapping
helmedeiros
PRO
1
280
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.4k
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でもできるよ」をもっと増やしていきたい
- 管理対象が少ない環境だったとしても、個別スクリプト化よりサイロ化は防げる - 一つの構成管理ツールに矛先をそろえやすい