labunix's blog

labunixのラボUnix

Fortigateのアドレス、サービス、ポリシーのCSVを作成するスクリプトを作ってみた。

■Fortigateのアドレス、サービス、ポリシーのCSVを作成するスクリプトを作ってみた。

 私の場合、評価目的で使っているので、評価の度に環境を変えてしまいます。
 LibreOfficeあたりで、静的にルールを保存しておきたいというのが目的です。

 githubに置いておきましたが、多くの制限事項があります。

$ GIT_PJ="https://raw.githubusercontent.com/labunix/fortigate-80c-settings"; \
  GIT_SH="/master/Fortigate_csv.sh"; \
  wget ${GIT_PJ}${GIT_SH}

■「REMOTESSH」に指定するssh情報はパスワード無しでのログインを想定。
 ただし、「terminal length 0」相当の下記は不要(パイプの「grep .」で代用)。
 リードオンリーのアカウントでTrustedHostsを設定すれば、
 それほど脆弱にはならないはず。

config system console
 set output standard
 end

■アドレスは「サブネット」のみに限定しているので、
 自身で作成したオブジェクトが「サブネット」のみである必要がある。

# show firewall address | grep -f Cisco
config firewall address
    edit "Cisco892J" <---
        set subnet 192.168.102.254 255.255.255.255
    next
end

■サービスはカテゴリ「Custom」に属している必要があるので、
 自身で作成したオブジェクトはすべて「Custom」カテゴリに追加済みである必要がある。

# show firewall service category Custom
config firewall service category
    edit "Custom"
    next
end

# show firewall service custom | grep -f Custom
config firewall service custom
    edit "MySSH_8022"
        set category "Custom" <---
        set tcp-portrange 8022
    next
end

■ポリシーは全ルールの最大列が分かっていれば、
 「MAXCOLUMNLINE」に指定したルールを最大列とした、
 登場するルールにおいての最小列でうまくいく。

$ ssh admin@172.31.31.252 'show firewall policy | grep .' | \
    sort | uniq -c | awk '($1<2){print}' | \
    grep -v "addr\|intf\|service" | grep set
      1         set ips-sensor "all_default"
      1         set spamfilter-profile "default"

$ ssh admin@172.31.31.252 'show firewall policy | grep -f spamfilter-profile' | \
    grep edit
    edit 4

■フルポリシーと言いつつ、ポリシーはすべての列を出せなかったので、
 「tcp-mss*」と「timeout-send-rst」はCSV化の対象外としている。
 それで十分であれば問題無いと思う。