てくなべ

インフラ、ネットワーク、自動化などの技術的なことを書いていきます。

PAN-OS(Paloalto)のXML APIの叩き方

■ はじめに

Paloalto Networks社のFWは、HTTP(S)経由のAPIに対応しています。 レスポンスはXMLで返ってきます。簡単な例でAPIを叩いてみます。

■ 準備

リクエストには毎回認証用のパラメータであるkeyを付加する必要があります。 そのkeyを発行するために、まず以下のリクエストを出してレスポンスを確認します。 GETで投げられるので履歴に残らないようにご注意下さい。(後述しますがPOSTも可能です)

https://PA管理IPアドレス/api/?type=keygen&user=管理者ユーザ名&password=パスワード

そうすると、XML形式のレスポンスが返ってきて、そこにkeyが含まれているので、 この値を控えておきます。パスワードを変更しない限りkeyも変更されません。 (以下例のkeyは適当です)

<response status=success”>
  <result>
   <key>93rfgdAGAa%fagwFGFADgfAgfadeDDYNa27Ab%aKLpPga=</key>
  </result>
</response>

APIを叩いてみる例

それでは実際に簡単な例として、ポリシー一覧を取得してみます。 クエリは以下の形式です。

https://PA管理IPアドレス/api/?type=op&cmd=<show><running><security-policy></security-policy></running></show>&key=発行したkey

結果例です。

<response cmd="status" status="success">
<result>
rule1 {
        from trust;
        source [ 192.168.0.101 192.168.0.102 192.168.0.103 ];
        source-region none;
        to untrust;
        destination any;
        destination-region none;
        user any;
        category any;
        application/service  any/any/any/any;
        action allow;
        terminal yes;
}

rule2 {
        from trust;
        source any;
        source-region none;
        to untrust;
        destination any;
        destination-region none;
        user any;
        category any;
        application/service  any/any/any/any;
        action deny;
        terminal no;
}
dynamic url: no
pol objs matched
</result>
</response>

■ 便利なAPIブラウザ

「他にAPIでどんなことできるかな?どう叩けばよいかな?」というときは 機器に入っているAPIブラウザが便利です。以下のURLで確認できます。

https://{PA管理IPアドレス}/php/rest/browse.php

こんな画面になります。 f:id:akira6592:20170605222022p:plain

ここから、たとえばルーティングテーブルを確認したい場合は 「API > 操作コマンド > show > routing > route」 と辿って行くと、

https://{PA管理IPアドレス}/api/?type=op&cmd=<show><routing><route></route></routing></show>

というクエリを叩けばいいことが分かります。 f:id:akira6592:20170605222059p:plain

実際にはkeyも付加してあげて試してみると、こんな感じになります。

<response status="success">
  <result>
    <flags>
      flags: A:active, ?:loose, C:connect, H:host, S:static, ~:internal, R:rip, O:ospf, B:bgp, Oi:ospf intra-area, Oo:ospf inter-area, O1:ospf ext-type-1, O2:ospf ext-type-2
    </flags>
    <entry>
      <virtual-router>default</virtual-router>
      <destination>0.0.0.0/0</destination>
      <nexthop>192.168.0.1</nexthop>
      <metric>10</metric>
      <flags>A S</flags>
      <age/>
      <interface>ethernet1/4</interface>
    </entry>
    <entry>
      <virtual-router>default</virtual-router>
      <destination>192.168.0.0/24</destination>
      <nexthop>192.168.0.10</nexthop>
      <metric>0</metric>
      <flags>A C</flags>
      <age/>
      <interface>ethernet1/4</interface>
    </entry>
    <entry>
      <virtual-router>default</virtual-router>
      <destination>192.168.0.10/32</destination>
      <nexthop>0.0.0.0</nexthop>
      <metric>0</metric>
      <flags>A H</flags>
      <age/>
      <interface/>
    </entry>
  </result>
</response>

■ 補足

今回は簡便さを優先してGETにしていますが、POSTも可能です。 また、情報の取得だけでなく、設定等も可能です。

■ 参考資料

・PAN‐OS REST API による レポート情報の取得https://live.paloaltonetworks.com/twzvq79624/attachments/twzvq79624/Management-TKB/860/1/PANOS-API-Report.pdf

→日本語の資料。準備のkeyの発行やレポート情報の取得方法が書かれています。

APIリファレンス(ここではver6.1) https://www.paloaltonetworks.com/content/dam/pan/en_US/assets/pdf/technical-documentation/pan-os-61/XML-API-6.1.pdf

→情報の取得だけでなく設定する例も書かれていて、広く浅くの資料です。要チェックです。

アイディア次第でいろいろできそうではないでしょうか。 以上です。