📄

仕様:NEEDLEWORK-ScenarioWriter-For-FortiGate

目次

 

ツールの動作概要

  • ツールは以下の順序で動作します。
      1. コンフィグファイル(.conf)およびconfigディレクトリ内のの読み込み
      1. シナリオの各データの取得
      1. シナリオの出力
  • シナリオの各データは以下の設定値(名)を元に取得します。
    • プロトコル: 各ポリシーのサービスの設定値
    • 送信元FW IP: 各ポリシーの着信インターフェースの設定名 ★
    • 宛先FW IP: 各ポリシーの発信インターフェースの設定名 ★
    • 送信元VLAN ID: 各ポリシーの着信インターフェースの設定名 ★
    • 送信元IP: 各ポリシーの送信元の設定値
    • 送信元ポート: 各ポリシーのサービスの設定値
    • 送信元NAT IP: 各ポリシーのNATの設定値
    • 宛先VLAN ID: 各ポリシーの発信インターフェースの設定名 ★
    • 宛先IP: 各ポリシーの宛先の設定値
    • 宛先ポート: 各ポリシーのサービスの設定値
    • 宛先NAT IP: 各ポリシーの宛先の設定値
    • 宛先NAT前ポート: 各ポリシーの宛先&サービスの設定値
    • URL/domain: 各ポリシーのWebフィルタの設定値
    • 期待値: 各ポリシーのアクションの設定値
    • その他設定: VDOM、または各ポリシーのインスペクションモードの設定値※ ★はconfigディレクトリ内のから値を読み込みます。(指定したコンフィグファイル(.conf)からはインターフェース名以外は読み込みません)
 

各データの取得について

以下にシナリオの各データの取得についての詳細を記載します。

プロトコルについて

  • シナリオに出力するプロトコルは下記の通りです。※ NEEDLEWORKがバージョン12.0.0までに対応している、全てのプロトコルでシナリオの出力が可能です。
    • icmp
    • tcp
    • udp
    • dns(t)
    • http(s)
    • ftp(a)
    • imap
    • smtp
  • ポリシーのサービスを元に、以下に倣ってプロトコルを取得します。
    • 宛先がバーチャルIP/サーバー,またはVIPグループではない場合
      • サービスに"ALL"が指定されている場合は、上記のプロトコルを全て出力します。
      • (サービスグループ内のサービス含め)下記に該当するサービスが指定された場合は、右側に記載しているプロトコルをそれぞれ取得します。
        • "DNS": dnst, dns
        • "FTP": ftp, ftpa
        • "HTTP": http
        • "HTTPS": https
        • "IMAP": imap
        • "SMTP": smtp
      • 上記に該当しないサービスは、サービスに割り当てられているプロトコルを元に出力します。
        • コンフィグファイル(.conf)例(一部抜粋):
      • 出力例:
      • ```
    • 宛先がバーチャルIP/サーバーまたはVIPグループの場合
 

送信元, 宛先FW IP, VLAN IDについて

  • ポリシーの送信、宛先インターフェースを元に、以下に倣って送信元, 宛先FW IP, VLAN IDを取得します。ポリシー例(一部抜粋):出力例:
    • configディレクトリ内のに該当するインターフェースの情報が記載されているか確認します。
    • 該当するインターフェースの情報がconfigディレクトリ内のに記載されている場合、その値を元に出力します。
    • 該当するインターフェースの情報がconfigディレクトリ内のに記載されていない場合、エラーが出力されます。※ シナリオは生成されません。以下にconfigディレクトリ内のの記載例およびポリシー例に応じた出力例を記載します。configディレクトリ内のの記載例:

送信元, 宛先IPアドレスについて

ポリシーの送信元や宛先を元に、以下に倣って送信元, 宛先IPアドレスを取得します。
  • 共通
    • サブネット
      • /32: そのIPアドレスを取得します。
      • /32以外: そのネットワーク内のネットワークアドレスとブロードキャストアドレスを除く、最初と最後のIPアドレスを取得します。例:
      • 10.10.10.0/24の場合、を取得します。
    • IP範囲
      • IP範囲で指定した最初と最後のIPアドレスを取得します。例:
      • 10.10.20.1-10.10.20.20の場合、を取得します。
    • all
      • スタティックルートやconfigディレクトリ内のに情報がある場合、そのネットワーク内の全てのIPアドレスから、ポリシーで使用しているIPアドレスを除いた始めのIPアドレスを取得します。以下の場合、を取得します。
        • 例: ルーティング: 10.0.0.0/24   ポリシーで使用しているIP: 10.0.0.1/32, 10.0.0.16/28
      • スタティックルートやconfigディレクトリ内のに情報がない場合、インターフェース毎に固有のIPアドレスを取得します。
      •   例: lan2, wan2のスタティックルートやconfigディレクトリ内のに情報がない場合の出力例
    • FQDN
      • 該当するFQDNを取得します。
      • FQDNが含まれるシナリオでテストを実行する際は、FortiGateのDNSサーバーにNEEDLEWORKの管理IPを指定してください。
        ※ 指定しない場合は正常にテストが行えません。 詳細は下記リファンレスマニュアルをご参照ください。 https://link.needlework.jp/reference-manual#heading=h.vzflfn6oeox1

送信元, 宛先ポート

  • ポリシーのサービスを元に、以下に倣って送信元, 宛先ポートを取得します。
  • 宛先がバーチャルIP/サーバーやVIPグループではない場合
    • 送信元ポートが指定されていない場合は空文字をデータとして使用します。
    • 基本的にポリシーのサービスで指定しているポートを取得します。
    • 上記2つに該当しない場合について、以下に記載します。
      • ポリシーのサービスが"ALL"の場合、以下を取得します。
        • 送信元: 空文字をデータとして使用します。
        • 宛先: 以下を取得します。
          • icmp: 空文字
          • tcp: 80
          • udp: 53
          • その他プロトコル: 各サービスで指定しているポート
      • ポリシーのサービスがポートを範囲指定している場合、開始ポートのみを取得します。(範囲指定した全ポートを出力しません)例: の場合、を出力
      • ポリシーのサービスがポートを複数指定している場合、始めに設定されているポートのみを取得します。(複数指定した全ポートを出力しません)例1:の場合送信元: 空文字を出力宛先: を出力例2: の場合送信元: を出力宛先: を出力

送信元NAT後IPについて

ポリシーのNATを元に、以下に倣って送信元NAT後IPを取得します。
  • 宛先がバーチャルIP/サーバーやVIPグループではない場合
    • 送信元NAT有効の場合
      • 発信インターフェースのIP: configディレクトリ内のを元に発信インターフェースのIPアドレスを取得します。
      • ダイナミックIPプールを使う: 外部IPアドレス/範囲の始めのIPアドレスを取得します。以下コンフィグファイル(.conf)例の場合、を取得します。コンフィグファイル(.conf)例(一部抜粋):
    • 送信元NAT無効の場合
      • 空文字をデータとして使用します。

宛先NAT前IPについて

ポリシーの宛先を元に、以下に倣って宛先NAT前IPを取得します。
  • 宛先がバーチャルIP/サーバーまたはVIPグループではない場合
    • 空文字をデータとして使用します。

宛先NAT前ポートについて

ポリシーの宛先を元に、以下に倣って宛先NAT前ポートを取得します。
  • 宛先がバーチャルIP/サーバーまたはVIPグループではない場合
    • 空文字をデータとして使用します。

URL/ドメインについて

ポリシーのウェブフィルタを元に、以下に倣ってURL/ドメインを取得します。
  • 宛先がバーチャルIP/サーバーまたはVIPグループではない場合
    • ウェブフィルタが有効な場合
      • 出力するシナリオのプロトコルがhttp(s)の場合
        • プロファイルで指定されたURLを取得します。
      • 出力するシナリオのプロトコルが上記以外の場合
        • 空文字をデータとして使用します。
    • ウェブフィルタが無効な場合
      • 空文字をデータとして使用します。

アンチウイルスについて

ポリシーのアンチウイルスを元に、以下に倣ってアンチウィルスのシナリオパラメーターを取得します。
  • 宛先がバーチャルIP/サーバーまたはVIPグループではない場合
    • 出力するシナリオのプロトコルがhttp(s), ftp(a), imap, smtpの場合
      • アンチウイルスが該当プロトコルで無効な場合
        • 空文字をデータとして使用します。
      • アンチウイルスが該当プロトコルで有効な場合
        • を取得します。
      • 以下にコンフィグファイル(.conf)例と出力例を記載します。コンフィグファイル(.conf)例(一部抜粋):出力例1: ポリシーのアンチウイルスで"default"が適用されている場合出力例2: ポリシーのアンチウイルスで"wifi-default"が適用されている場合
      • 出力するシナリオのプロトコルが上記以外の場合
        • 空文字をデータとして使用します。

    その他設定について

    以下の基準を元に、その他設定を取得します。
    • 宛先がバーチャルIP/サーバーまたはVIPグループではない場合
      • インスペクションモードがプロキシモードの場合
        • 現在、下記の基準A〜Dの全てに該当している場合,を取得します。基準A:
          • ポリシーまたはVDOMのインスペクションモードがプロキシベースである基準B:
          • ポリシーのセキュリティプロファイルでアンチウイルスが有効である基準C:
          • 出力するシナリオのプロトコルがである基準D:
          • プロトコルオプションで有効なポートが宛先ポートとなるサービス(例: )をポリシーで指定している※ プロトコルオプションので有効なポートはです。
        • 上記以外の場合
          • 空文字をデータとして使用します。
      • インスペクションモードがフローモードの場合
        • 空文字をデータとして使用します。

    期待値について

    ポリシーのアクションを元に、以下を上から優先的に確認し、該当するデータを取得します。
    • 宛先がバーチャルIP/サーバーまたはVIPグループではない場合
      • URLフィルタまたはアンチウイルスでblockとなっている場合
        • を取得します。
      • ポリシーのアクションがacceptとなっている場合
        • を取得します。
      • 上記以外の場合
        • を取得します。

    説明について

    • 以下の2つを元に、データを取得します。
      • ポリシーの送信元または宛先にFQDNが使用されているか否か
      • 送信元NAT IPアドレスにダイナミックIPプールが使用されているか否か
    • 送信元NAT IPアドレスにダイナミックIPプールが使用されている&FQDN指定有りのポリシーの場合
      • を取得します。
    • 送信元NAT IPアドレスにダイナミックIPプールが使用されているポリシーの場合
      • を取得します。
    • FQDN指定有りのポリシーの場合
      • を取得します。
    • 上記該当しないポリシーの場合
      • を取得します。

    その他のデータについて

    以下のデータは、ポリシーからデータの取得を行いません。
    • 送信元インターフェイス
    • 実機
    • 宛先インターフェイス
    • 最大実行回数
    • タイムアウト
    ヘッダーのみ出力し、ヘッダー以外のデータは空文字を取得および出力します。

    宛先がバーチャルIP/サーバーまたはVIPグループの場合について

    宛先がバーチャルIP/サーバーまたはVIPグループの場合、以下の取得データがとなる場合があります。
    • プロトコル
    • 宛先NAT前IP
    • 宛先NAT前ポート
    • 宛先IPアドレス
    • 宛先ポート
    • 送信元ポート
    • URL/ドメイン
    • アンチウイルス
    • その他設定
    • 期待値
    以下にそれぞれのパターンのデータの取得について記載します。
    • バーチャルIP/サーバーのオプションでサービスを指定している場合
      • 指定されているサービスとポリシーのサービスを元に各データを取得します。
      • プロトコルの取得例:
        • VIPのサービス
          "ALL""ALL_ICMP""NTP""FTP"
          ポリシーのサービス"ALL"icmp, tcp, udp, dnst, dns, http, https, ftp, ftpa, imap, smtpicmptcp,udpftp,ftpa
          ^"PING"icmpicmpundefinedundefined
          ^"NTP"tcp,udpundefinedtcp,udpundefined
          ^"ALL_TCP"tcpundefinedtcptcp
      • その他のデータの取得:
      • 下記に該当している場合は、を取得します。
        • 指定されているサービスまたはポリシーのサービスが"ALL_〇〇"または"PING"
          • もう一方のサービスとL4レベルで一致していない場合
        • 指定されているサービスまたはポリシーのサービスが"ALL"、"ALL_〇〇"、"PING"以外
          • もう一方のサービスが"ALL"、"ALL_〇〇"、"PING"のいずれかでかつL4レベルで一致していない場合
          • もう一方のサービスが"ALL"、"ALL_〇〇"、"PING"以外でかつL7レベルで一致していない場合
      • 上記に該当しない場合は右に記載のデータを取得します。
        • 宛先NAT前IP: 外部IPアドレス/範囲で指定されたIPアドレス
        • 宛先NAT前ポート: 外部サービスポートで指定されたポート※ オプションのフィルタが無効かつポートフォワードが有効な場合に限ります。
        • 宛先IPアドレス: マップされたIPアドレス/範囲に設定したIPアドレス
        • 宛先ポート: ポートへマップで指定されたポート
        • 送信元ポート: 送信元ポートのデータ取得規則に則る
        • URL/ドメイン: URL/ドメインのデータ取得規則に則る
        • アンチウイルス: アンチウイルスのデータ取得規則に則る
        • その他設定: その他設定のデータ取得規則に則る
        • 期待値: 期待値のデータ取得規則に則る
    • バーチャルIPのオプションでプロトコルを指定している場合※ undefinedの箇所はFortiGateでDropするため、現在はシナリオを出力していません。
      • ポリシーのサービスと指定したプロトコルがL4レベルで一致した場合に出力します。以下例のように、ポリシーのサービスが"NTP"で指定したプロトコルがICMPの場合は、となります。プロトコルの取得例:
        • 指定したプロトコル
          ICMPTCPUDP
          ポリシーのサービス"ALL"icmptcpudp
          ^"PING"icmpundefinedundefined
          ^"NTP"undefinedtcpudp
          ^"ALL_TCP"undefinedtcpundefined
      • その他のデータ
      • 下記に該当している場合は、を取得します。
        • ポリシーのサービスが"ALL_〇〇"または"PING"
          • 指定したプロトコルとL4レベルで一致していない場合
        • ポリシーのサービスが"ALL"、"ALL_〇〇"、"PING"以外
          • ポリシーのサービスで指定しているポートとポートへマップで指定されたポートが一致していない場合
      • 上記に該当していない場合、右に記載のデータを取得します。
        • 宛先NAT前IP: 外部IPアドレス/範囲で指定されたIPアドレス
        • 宛先NAT前ポート: 外部サービスポートで指定されたポート※ オプションのフィルタが無効かつポートフォワードが有効な場合に限ります。
        • 宛先IPアドレス: マップされたIPアドレス/範囲に設定したIPアドレス
        • 宛先ポート: ポートへマップで指定されたポート
        • 送信元ポート: 送信元ポートのデータ取得規則に則る
        • URL/ドメイン: URL/ドメインのデータ取得規則に則る
        • アンチウイルス: アンチウイルスのデータ取得規則に則る
        • その他設定: その他設定のデータ取得規則に則る
        • 期待値: 期待値のデータ取得規則に則る
    • 上記に該当しない場合
      • 各データの出力パターンに則ります。

    グループ要素の取得について

    送信元・宛先やサービスがグループの場合、グループに所属している全ての要素を出力します。以下は例になります。例1: 送信元に"testgrp"を指定した場合
    • コンフィグファイル(.conf)例(一部抜粋):
    • 出力例:
    例2: サービスに"Email Access"を指定した場合
    • コンフィグファイル(.conf)例(一部抜粋):
    • 出力例:

    送信元・宛先やサービスが複数指定されているポリシーの取得について

    送信元・宛先やサービスが複数指定されているポリシーは、全ての要素を出力します。以下は例になります。例1: 送信元に"1.1.1.1"と"gmail.com"を指定した場合
    • コンフィグファイル(.conf)例(一部抜粋):
    • 出力例:
    例2: サービスに"DNS"と"IMAP"を指定した場合
    • コンフィグファイル(.conf)例(一部抜粋):
    • 出力例:

    出力するシナリオ数について

    • 出力するシナリオ数は、以下の式より算出できます。
    • ウェブフィルタのデータが存在する場合
      • 出力するシナリオ数 = [送信元のデータ数 x 宛先のデータ数 x (サービスのデータ数 - 出力するプロトコルが以外のサービスのデータ数) x ウェブフィルタのデータ数] - がデータとなるシナリオ数
    • ウェブフィルタのデータが存在しない場合
      • 出力するシナリオ数 = 送信元のデータ数 x 宛先のデータ数 x サービスのデータ数 - がデータとなるシナリオ数
    • 以下に例を記載します。
      • 例1:データの取得例:出力するシナリオ数: 1 x 1 x 2 = 2 シナリオの出力例:
        • protocolsrc-fwsrc-vlan(option)src-ipsrc-port(option)src-nat-ip(option)s-if(option)is-receiver-physical(option)dst-fwdst-vlan(option)dst-nat-ip(option)dst-nat-port(option)dst-ipdst-portd-if(option)url/domain(option)anti-virus(option)timeout(option)try(option)other-settings(option)expectdescription
          dnst1.1.1.1192.168.1.1002.2.2.2228.8.4.453passpolicy = test
          dns1.1.1.1192.168.1.1002.2.2.2228.8.4.453passpolicy = test
      • 例2:データの取得例:出力するシナリオ数: 2 x 2 x 1 = 4 シナリオの出力例:
        • protocolsrc-fwsrc-vlan(option)src-ipsrc-port(option)src-nat-ip(option)s-if(option)is-receiver-physical(option)dst-fwdst-vlan(option)dst-nat-ip(option)dst-nat-port(option)dst-ipdst-portd-if(option)url/domain(option)anti-virus(option)timeout(option)try(option)other-settings(option)expectdescription
          icmp1.1.1.1192.168.1.1012.2.2.2228.8.4.5passpolicy = test2
          icmp1.1.1.1192.168.1.1012.2.2.2228.8.4.6passpolicy = test2
          icmp1.1.1.1192.168.1.1022.2.2.2228.8.4.5passpolicy = test2
          icmp1.1.1.1192.168.1.1022.2.2.2228.8.4.6passpolicy = test2
      • 例3:データの取得例:出力するシナリオ数: 1 x 1 x (1 - 0) x 2 = 2 シナリオの出力例:
        • protocolsrc-fwsrc-vlan(option)src-ipsrc-port(option)src-nat-ip(option)s-if(option)is-receiver-physical(option)dst-fwdst-vlan(option)dst-nat-ip(option)dst-nat-port(option)dst-ipdst-portd-if(option)url/domain(option)anti-virus(option)timeout(option)try(option)other-settings(option)expectdescription
          http1.1.1.1192.168.1.1032.2.2.2228.8.4.680hoge.compasspolicy = test3
          http1.1.1.1192.168.1.1032.2.2.2228.8.4.680sub.hoge.compasspolicy = test3
      • 例4:データの取得例:出力するシナリオ数: 2 x 1 x (3 - 2) x 2 = 4 シナリオの出力例:
        • protocolsrc-fwsrc-vlan(option)src-ipsrc-port(option)src-nat-ip(option)s-if(option)is-receiver-physical(option)dst-fwdst-vlan(option)dst-nat-ip(option)dst-nat-port(option)dst-ipdst-portd-if(option)url/domain(option)anti-virus(option)timeout(option)try(option)other-settings(option)expectdescription
          https1.1.1.1192.168.1.1042.2.2.2228.8.4.7443fuga.compasspolicy = test4
          https1.1.1.1192.168.1.1042.2.2.2228.8.4.7443sub.fuga.compasspolicy = test4
          https1.1.1.1192.168.1.1052.2.2.2228.8.4.7443fuga.compasspolicy = test4
          https1.1.1.1192.168.1.1052.2.2.2228.8.4.7443sub.fuga.compasspolicy = test4

    出力されるエラーメッセージについて

    出力されるエラーメッセージは以下の通りです。
    • 「実行パスの取得に失敗しました」
      • ツール実行時に取得している実行パスの取得に失敗した際に表示されます。ツールを管理者権限で実行しているかをご確認ください。
    • 「FortiGateのコンフィグファイル(.conf)のパスを指定してください」
      • FortiGateのコンフィグファイル(.conf)のパスが指定されていない場合に表示されます。FortiGateのコンフィグファイル(.conf)のパスを指定してください。
    • 「アドレスが"all"&インターフェースが"any"の場合は値を取得できません」
      • 以下のいずれかに該当する場合に表示されます。
        • ポリシーの送信元が"all"&着信インターフェースが"any"
        • ポリシーの宛先が"all"&発信インターフェースが"any"該当ポリシーを削除、またはアドレスかインターフェースのいずれかを指定してください。
    • 「正しいフォーマットでconfigディレクトリ内のを記載してください」
    • 「configディレクトリ内のの%+v行目に記載している~は不正なxxです」
      • configディレクトリ内のの%+v行目に記載している~がxxの値として不正な値の場合に表示されます。
      • 下記を参考に正しい値を記載してください。※ ()内はのヘッダー名です。
        • IPアドレス(ipaddress): の形式かつ正しいIPアドレス
        • VLAN ID(vlanid): 
        • サブネットマスク(subnetmask): の形式かつ正しいサブネットマスク
    • 「△△の情報はconfigディレクトリ内のに記載されていませんでした」
      • インターフェース名△△の情報がconfigディレクトリ内のに記載されていない場合に表示されます。下記の事前準備を参考に必要情報をconfigディレクトリ内のに記載ください。
    • 「〇〇はサポートされていません」
      • 〇〇というサービス名がツールでICMP,TCP,UDPのいずれにも分類できなかった場合に表示されます。ポリシーで設定されている〇〇がコンフィグファイル(.conf)でサービスとして定義されているかをご確認ください。
    • 「CSVの生成に失敗しました」
    • 「予期せぬエラーが発生しました」
    • 「panic: runtime error: index out of range ~」
      • ツールが想定していない動作をしている可能性があります。
      • 上記3種類のエラーが出力された場合はお手数ですが、下記情報を添付したissueを作成お願いいたします。※ 情報の取り扱いにご注意ください。
        • ツールで使用したコンフィグファイル(.conf)
        • ツール実行時に出力されたログ

    その他出力されるメッセージについての補足

    • 「ポリシー=〇〇の送信元NAT IPアドレスはダイナミックIPプールなため、生成したシナリオとテスト結果が異なる可能性があります」
    • 「本シナリオとテスト結果で送信元NAT IPアドレスが異なる場合は値を変更後、再度テストを実施してください」
      • ダイナミックIPプールから送信元NAT IPアドレスの値を取得した際に表示されます。
      • 以下の動作例のように、生成したシナリオとテスト結果で送信元NAT IPアドレスが異なる場合があります。
      • 上記動作の場合、送信元NAT IPアドレスの値を変更後、再度テストを実施してください。
    • 「ポリシー=〇〇は送信元、または宛先IPアドレスにFQDNが指定されています」
    • 「本シナリオでテストを実行する場合は、NEEDLEWORKのマニュアルの「送信元・宛先アドレスにFQDNを指定したシナリオでテストを実施する」をご確認ください」
      • ポリシー名、またはポリシーのUUIDが〇〇の送信元、または宛先IPアドレスにFQDNが指定されている場合に表示されます。
      • 本メッセージが表示された場合、下記のNEEDLEWORKの操作マニュアルの「送信元・宛先アドレスにFQDNを指定したシナリオでテストを実施する」をご確認ください。https://support.needlework.jp/manual
    • 「~はundefinedが存在するため出力をスキップします」
    データ例:
    シナリオ例:
    protocolsrc-fwsrc-vlan(option)src-ipsrc-port(option)src-nat-ip(option)s-if(option)is-receiver-physical(option)dst-fwdst-vlan(option)dst-nat-ip(option)dst-nat-port(option)dst-ipdst-portd-if(option)url/domain(option)anti-virus(option)timeout(option)try(option)other-settings(option)expectdescription
    udp1.1.1.1192.168.1.1062.2.2.2221.1.1.553200.200.200.24053000passpolicy = test_vip

    留意事項

    • 本リポジトリ内のconfigディレクトリ配下のFortiGateのコンフィグ(.conf)に含まれないポリシーの場合、正常にcsvが出力されない可能性がありますので、予めご了承ください。