API on Sophos: Sophos UTMを使ってみる (REST)

このエントリーはSophos UTMでのRESTの概要と、REST APIを使ってSophos UTMから情報を取得するところまで。

API概要


参考URL:Sophos UTM RESTful API

 

ラボ環境を作る


AWSでSophos UTMを立ち上げる。

    1. FWを立ち上げる
    2. sshでFWにアクセス
    3. RESTでアクセスできるように設定。

最初、キーが手元になかったので、WebGUIでSSH鍵認証を無効(パスワード認証)にしましたが、今回起動したUTM(version 9.506)ではパスワード認証は”Access Denied”となってしまいうまくいきませんでした。SophosUTMではSSHパスワード認証に難があるようで、フォーラムを見てもバージョンごとに修復、再発を繰り返しているようです。

 

APIを使ってみる


APIの構成は、”https://<FWのIPアドレス>:<ポート番号(デフォルトは4444)>/api/definitions”からたどることが出来る。下の例ではethernetのインタフェース情報は”/objects/interface/ethernet/”で取得できることがわかる

Sophos UTMのAPI認証は、ユーザー名とパスワードをリクエストと一緒に送る(BASIC認証)と、事前にTOKENを発行しておく二種類の方法がある。今回はBASIC認証を使う。

これを実行するとこんな感じで情報が返ってくる

 

API on PaloAlto: PANOS 使ってみる (REST)

このエントリーはPANOSでのRESTの概要と、REST APIを使ってPaloAltoファイアウォールから情報を読むところまで。

API概要


参考URL: PAN-OS® and Panorama™ 8.0 XML API Usage Guide

 

ラボ環境を作る


AWSでVM Series PaloAlto FWを立ち上げる。

    1. FWを立ち上げる
    2. sshでFWにアクセス
    3. RESTでアクセスできる設定は特に必要なし

APIを使ってみる


コマンドに対応した情報は、CLIから実行したいコマンドを打ってXPATHを確認するのが楽。下の例では”show interface logical”のXPATHは”<operations><show><interface>logical</interface></show></operations>”とわかる

PAN-OSの場合はCiscoやJuniperと異なり、実際のAPIリクエストをする前にキーを取得する必要がある。

こんな感じで情報が返ってくる

 

API on Juniper: JUNOS 使ってみる (REST)

このエントリーはJUNOSでのRESTの概要と、SRXファイアウォールから情報を引きだせるところまで。

API概要


参考URL: REST API Guide

  • Retrieve configuration information in XML, ASCII (plain text), or JSON.
  • Retrieve operational data in XML, ASCII, or JSON.

 

ラボ環境を作る


AWSでvSRXを立ち上げる。

    1. vSRXを立ち上げる
    2. sshでvSRXにアクセス
    3. RESTでアクセスできる設定

 

RESTを使ってみる


JUNOSでのXMLデザインはJunos XML API Operational Developer Reference dが参考になる。ただし16,000ページ以上の大長編。JUNOSコマンドに対応した情報は、CLIからメソッドを確認するのが楽。

この例では、http://”vSRXのIPアドレス”:”ポート”/rpc/get-interface-information/interface-name=fxp0.0 にリクエストを送ればいい。

このようなスクリプトを実行すると

こんな感じで情報が返ってくる

 

API on Cisco: IOS-XE 使ってみる (RESTCONF)

NETCONFに続き、RESTCONFのエントリー

 

このエントリーはRESTCONFの概要と、ルータから情報を引きだせるところまで。

ビデオで概要を知る


参考モジュール: Network Device APIs

  1. Learn to CRUD with GET, POST and DELETE using RESTCONF … RESTCONFの使い方概要

 

ラボ環境を作る


AWSに立てたCSR1000Vでテストを行う

    1. CSR1000Vを立ち上げる
    2. sshでCSR1000Vにアクセス
    3. RESTCONFでアクセスできる設定

 

RESTCONFを使ってみる


GigabitEthernet1の状態を確認するスクリプト

CSR1000Vに対して実行したところ。インタフェースの情報が取得できた。

GigabitEthernet1の設定を変更するスクリプト

実行した結果がこちら。ステータスコードは204なので成功。

もう一度インターフェース情報を取得すると、descriptionが追加されているのが確認できる

 

API on Cisco: IOS-XE 使ってみる (NETCONF)

CiscoのAPI関連はDEVNET(https://developer.cisco.com/)に情報が集まっている。

 

このエントリーはNETCONFの概要と、ルータから情報を引きだせるところまで。

ビデオで概要を知る


参考モジュール: Network Device APIs

  1. Getting the “YANG” of it with Standard Data Models … YANGとは何者か。RPC, NETCONFとの関係
  2. Goodbye SNMP <hello> NETCONF! … NETCONFの仕様。PythonでNETCONFを使ってみる

 

ラボ環境を作る


DEVNETにログインすると、Always-On Sandbox(Cisco各種機能が試せるラボ)にアクセスできるはずだが、接続できなかったので、AWSでCSR1000Vを立ち上げてみる。小さいインスタンスであれば1時間10c以下なので、問題なし。

    1. CSR1000Vを立ち上げる
    2. sshでCSR1000Vにアクセス
    3. NETCONFでアクセスできる設定

 

NETCONFを使ってみる


参考モジュール:Introduction to Device Level Interfaces (ex: NETCONF/YANG)

YANGモデル(ietf-interfaces-model)の例を見てみる… このような形で、編集できる部分(設定)と読み込みのみの部分(状態やパケット統計)が別れている。

CSR1000Vに対して実行したところ。インタフェースの情報が取得できた。

 

API on Network Devices

実際に使用されているかは別として、何でもかんでもAPIが必要とされている。
私はずっとネットワーク周りを担当して来たが、今のところまだ実際の案件でAPIの必要に迫られたことはない。
基本的には、旧来のSNMPなどで賄うことができている。

ただ、明らかにSDNやNFVなども案件としては増えてきているし、SNMPもいちいちMIBを確認するもの面倒くさい、ましてや一部のネットワークサービスはSNMPではなくREST APIでしか情報引き出せない、などがあるので少し勉強してみたい。

仕事でもよく使う↓の公開情報を元にまとめるつもり。

Cisco … IOS-XE ISRルータやCatalystSwitchなど
Cisco Meraki … Meraki Cloud
Juniper … Junos SRXなど
Fortigate … FortiOS Fortigateなど

ちなみに言語はPython3をメインで使う

AtCoder Beginners Contest 077 [A-C]

AtCoder ABC077 Note

A. Rotation … If second input is same as the reverse of the first input, it is true.

B. Around Square … Get the square root of the input, print out the square number based on the floor of the obtained number.

C. Snuke Festival … First I used product module to list out all the combination, but it takes O(n^3) and caused TimeOut.

Solution is – Sort the top parts list and bottom parts list. For each mid parts, count the number of top parts which is smaller than the mid parts, and count the number of the bottom parts which is bigger than the mid parts. I used bisect module to get the respective index.

AtCoder Beginners Contest 078 [A to C]

AtCoder 初心者向けコンテスト078のメモ

A. HEX … Just a simple comparison of two characters.

B. ISU … Subtract the edge width from the seat length, and just need to divide the remaining length divided by the width of the person and the required gap.

C. HSI … Calculate the duration of a trial. Respective trial has the chance of 1/2^m to get all test cases passed. So it’s just a one-liner to get the correct answer.