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
[RSJ26] Flow as Flow: Modeling Robot Velocity Fields as Probability Velocity Fields
keio_smilab
PRO
0
160
dbt と Snowflake と tag
kevinrobot34
2
310
GopherCon @シアトル に行ってきました
logica0419
0
480
紙 to デジタル
ichien178
0
490
Claude Codeの体系的な理解と知識のフック
oikon48
10
6.3k
Eight Engineering Unit 紹介資料
sansan33
PRO
3
8.3k
Bet AI Day 2026丨バクラク Autopilot、業務システムの再設計
layerx
PRO
0
130
指示待ちから変化に応じるClaude Codeへ!~環境からAgentへの帰り道を作る~
gotalab555
9
1.7k
人気商品が「ちゃんと買える」をつくる ー ECの負荷改善
ykagano
1
150
【Oracle AI Spotlight ウェビナー】AWSか、Azureか、Google Cloudか。その議論にオラクルを含める意義。
oracle4engineer
PRO
1
130
「ミスを許さない手順書」を作ってみた 〜 個人的にはこれ以上できることはあまりなさそう/20260827-ssmjp-operation-procedure-update
opelab
17
17k
Introduction to Sansan Meishi Maker Development Engineer
sansan33
PRO
0
470
Featured
See All Featured
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
35
2.8k
Done Done
chrislema
186
16k
Building Flexible Design Systems
yeseniaperezcruz
330
41k
A Soul's Torment
seathinner
7
3.5k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
460
The Spectacular Lies of Maps
axbom
PRO
1
950
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.8k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
220
sira's awesome portfolio website redesign presentation
elsirapls
0
360
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
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でもできるよ」をもっと増やしていきたい
- 管理対象が少ない環境だったとしても、個別スクリプト化よりサイロ化は防げる - 一つの構成管理ツールに矛先をそろえやすい