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
toio・myCobotでフィジカルAIっぽいことを行うための検討(とりあえず調査) / フィジカルAI LT(IoTLTによる開催)
you
PRO
0
300
SmartHR Engineering Team Deck
smarthr
1
1.1k
20260807_第6回_関東kaggler会LT_claw系bot xangiと始める、"寂しくない" kaggle
sugupoko
0
200
トヨタ⽣産⽅式(TPS)⼊⾨
recruitengineers
PRO
2
640
変化の早いClaude Codeを 書籍に落とし込む
oikon48
7
1.3k
攻撃と防御で学ぶAI時代のプロダクトセキュリティ演習
recruitengineers
PRO
6
2.2k
[しろおび夏祭り2026] チャットするAIから、作業するAIへ - 使われ方の変化と、その裏側で起きていること
kk0n
0
1.7k
オートロックマンションなのに、各部屋は施錠なし!? 攻撃者が組織内ネットワークで大暴れする理由 / The Front Door Is Locked, but the Rooms Are Wide Open: Why Attackers Move Freely Inside Enterprise Networks
nttcom
1
1.6k
ガバメント AI 源内を地方自治体は活用できるのか可能性と課題、期待について
takeda_h
1
360
サイバー捜査員研修(前半)
nomizone
1
1.9k
Agent 時代の Kaggle 展望 / kaggle-in-the-agentic-era
upura
1
670
AI ネイティブな組織に Gemini Enterprise Agent Platform がなぜ必要なのか
asei
1
190
Featured
See All Featured
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6k
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
Six Lessons from altMBA
skipperchong
29
4.4k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
380
Music & Morning Musume
bryan
47
7.3k
Navigating Weather and Climate Data
rabernat
0
460
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
760
Exploring anti-patterns in Rails
aemeredith
3
460
The Language of Interfaces
destraynor
162
27k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
610
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でもできるよ」をもっと増やしていきたい
- 管理対象が少ない環境だったとしても、個別スクリプト化よりサイロ化は防げる - 一つの構成管理ツールに矛先をそろえやすい