My Home NW Lab

逸般の誤家庭のネットワーク

BIG-IP Forward ProxyのiRulesによるFirewall Policyライクな実装例

BIG-IP Forward Proxyでは標準機能による実装には限界があるため、iRulesによるコード拡張を用いざるを得ないケースがあります。 そのため、PoC (Proof of Concept)としてiRulesによるFirewall Policyライクな実装例をGitHubで公開しました。

github.com

実装例の特長

PoC (Proof of Concept)と強調しているように、本番環境での実用に耐えうるレベルの実装にはなっておりません。 あくまでもコンセプトの実証のために公開しました。

BIG-IP Forward Proxyでは開発者自らが定義した設定データの保持先として、KVS (Key-Value Store)のData Groupしか実質的な選択肢がない実情があります。 そして、Data Groupに設定データを保持すると、Forward Proxy構成の実装方法によってはData Group数が肥大化していく問題がありました。 そのため、管理対象であるData Group数を少なくして、少しでも運用面が楽になる方法がないかと思案したのが筆者の実装方法です。

Data GroupのKeyを処理順序が一意になるような制御に用い、Valueを複数のフィールドに分けてFirewall Policyのような複数要素を参照できる実装にしました。

Firewall-Policy-Like Data Group

なお、Data Groupに設定データを保持する問題に関しては、下記の記事にて詳しく記載しております。

myhomenwlab.hatenablog.com

実際のコードを見て頂くと分かりやすいですが、Forward Proxyが担うアクセス制御の主要機能の多くをコード拡張によって実現しているため、皮肉にもSoftware Defined Forward Proxy (SDFP)とでも表現すべき実装者依存の状態になっています。 アプライアンス製品であるのにも関わらず、その実装方法の多くがコード拡張を用いているとなると品質の維持が難しくなります。 また、業界トップレベルの多機能さを誇るProxySGからの移行だと、大半がiRulesによる実装になります。

ADC製品のコード拡張によってSDFP (Software Defined Forward Proxy)の概念が爆誕

3つのスパゲッティ (スパゲッティ コード, スパゲッティ ロジック, スパゲッティ データ)

BIG-IP Forward Proxyでのコード拡張の実装を複雑化している要素として、スパゲッティ コード , スパゲッティ ロジック , スパゲッティ データ3つのスパゲッティがあります。

BIG-IP Forward Proxyのコード拡張時におけるスパゲッティ コード, スパゲッティ ロジック, スパゲッティ データの調和

  • スパゲッティ コードは、複雑なロジックを実装したiRulesの実装コードを指します。
  • スパゲッティ ロジックは、機能アクセスの制約故に複雑化したロジックを指します。
  • スパゲッティ データは、設定データの保持構造を無理やりにData Groupで実装して複雑化したものを指します。

まず前提としてセキュリティ上の理由により、実装時の肝となるiRulesコマンドからのOSに紐付く機能アクセスは限定されます。そして、機能アクセスの範囲に制約がかかると実装可能なロジックの案が限定されます。 ロジックの案が限定されるとコードでの実装方法も限定されてループしているかのように相互影響して、スパゲッティ コードとスパゲッティ ロジックが生み出されるキッカケとなります。

補足ですが実装時に利用可能なiRulesコマンドは Master list of iRule Commands のリストにあるものとなります。

clouddocs.f5.com

更に、BIG-IP Forward Proxyで設定データの格納に採用可能な機能が、KVS (Key-Value Store)のData Groupしか実質的にないため、データの保持構造が複雑化してスパゲッティ データが生み出されます。 例えば、KVSのData Groupで疑似的なRDB (Relational DB)のデータ構造を無理やりに再現する複雑なやり方があります。 そして、データの保持構造が複雑化が、データ処理のロジックとコードからデータへのアクセスを複雑化してしまい悪影響のスパイラルに陥ります。

このように、3つのスパゲッティがお互いに調和して、熟練のエンジニアさえ手につけようのない巨大なスパゲッティに変貌を遂げます。

なお、リファクタリングはスパゲッティ コードに対しては効果を期待できますが、コード化の元になっているロジックとデータがスパゲッティとなっているので根本的な解決にはなり得ません。 ちなみに、筆者の実装案はスパゲッティ データの複雑性の低減に注力したものです。

理想案と妥協案

注記しますが、筆者の実装案は妥協案であり、理想的な実装案ではありません。 いくつもの実装案を考案しては機能制約のため実現性がなく廃案となり、その中で妥協案として生き残ったものをPoCレベルで実装しました。 裏を返せば、それだけBIG-IP Forward ProxyでiRulesによる実装を行うのが難しいと言えます。

筆者の意図しては、BIG-IP Forward Proxyへの移行や、案件の請負検討にあたり、参考例とするために公開しております。 繰り返しますが、本番環境にそのまま導入しようと考えないでください。筆者はコードに対してサポートを提供しませんし、何ならサポートを求めるスキル レベルであれば導入すべきではありません。

筆者はBIG-IP Forward Proxyの導入がより良いものになるように試行錯誤を繰り返しましたが、3つのスパゲッティが実装の難易度を異様なほど高くしているため、無理な導入が行われないように問題点を理論的に解説するために本記事を書きました。

Meraki Dashboardへの送信元IPアドレス制限の設定時は、許可対象のIPアドレスからアクセスする必要がある (Fool Proofの挙動)

Meraki Dashboardへの送信元IPアドレス制限の機能がありますが、設定時は許可対象のIPアドレスからアクセスしている必要があります。
設定変更作業によってロックアウトされないようにするためのFool Proofの挙動になっています。

そのため、許可対象のIPアドレスが特定の場所などに紐付いている場合は、作業調整が必要になる点に留意してください。

Meraki Dashboardへの送信元アドレス制限の設定時は、許可対象のIPアドレスからアクセスする必要がある

本件の想定ケースとしては、請負元から顧客 (導入先)へMeraki環境の運用引継ぎを行う段階で最終作業のハードニングをしており、請負元のIPアドレスを許可対象に含まないように設定するシナリオが想定されます。
ただ、そもそも論として設定の妥当性確認ができない設定作業は好ましくないため、Meraki Dashboardの管理アクセスできるのは設定直後に確実に確認すべきです。

想定ケース: 引継ぎ時のMeraki Dashboardへの送信元IPアドレス制限#1 (最終引継ぎの前)

想定ケース: 引継ぎ時のMeraki Dashboardへの送信元IPアドレス制限#2 (最終引継ぎ時)

最終的に顧客環境のみのアクセスに絞るのであれば、請負元の環境からはアクセスできなくなります。 その場合は、顧客の端末からの作業が想定されるので、「請負元と顧客の両者の立会いは大前提として、請負元と顧客のどちらが設定作業をするのか?」のような取り決めはしておいた方が良いでしょう。

設定箇所とエラー時の画面

送信元IPアドレスの制限は、メニュー: Organization > SettingsLogin ip ranges の中の Limit Dashboard and Dashboard API access to these IP ranges から行えます。

許可対象には含まれていないIPアドレスからアクセスして設定を保存しようとすると、下記のようなエラー メッセージが表示されて設定が保存されません。

One or more errors occurred. No changes have been saved.
- You must include your current IP address (#.#.#.#) in the login IP ranges.

エラー時 (設定は未保存の状態)

関連記事

myhomenwlab.hatenablog.com

DatadogでMerakiのイベント ログ種別ごとの比率を割り出す

Datadogの使い方を学ぶ一例として、Merakiのイベント ログ種別ごとの比率を割り出す手順を書き留めます。
自環境でどのようなイベント ログの種別が多いのかを大まかに把握するのを目的にしています。

Merakiのイベント ログ種別ごとの比率

手順

  • メニュー: Logs > Search を開きます。Search for の検索ボックスに source:meraki (表示上: Source:meraki) と入力し、Merakiのログを検索対象にします。ログの検索期間は適宜変更してください。

    検索対象と検索期間の指定

    検索期間の変更後

  • Visual as から Pie Chart を指定して、円グラフ (Pie Chart)が表示されるのを確認します。

    Visual as: Pie Chart (円グラフ)

  • イベント種別ごとにグルーピングして、ログのカウント数を割り出したいため、ByEvent Name (@evt.name) に指定します。

    By: Event Name (@evt.name)

  • 画面右下に @EVT.NAME としてイベント ログの種別が表示されるのを確認します。

    @EVT.NAME (イベント ログ種別)の確認

  • デフォルトでは上位 (1位から10位まで)のイベント ログ種別しか表示されていないため、limit totop (上位)から何位まで表示するかを適宜指定します。

    limit to (表示数の限定)

  • limit to を変更した場合は、必要な数のイベント ログ種別が表示されたのを確認します。

    グルーピング時の表示数 (limit to)の確認

筆者の環境の例

  • 筆者の環境では意図的にMeraki MXのセキュリティ機能で通信を検知させているため、Events dropped の出力数が異様なほど多くなっております。

    Events dropped の比率

    なお、検知テストの方法に関しては、下記の記事を参考にしてください。

    myhomenwlab.hatenablog.com

    myhomenwlab.hatenablog.com

  • Meraki Dashboard上でSecurity Centerを見ると、一日当たりの検知件数が1万 (10,000)件を超えてる日が多いのが分かります。

    Meraki DashboardのSecurity Center

  • Event log 上ではセキュリティ機能での検知対象となった通信が多いため Events dropped で定期的にドロップしているように見受けられます。そのため筆者の環境で Events dropped の比率が最も高かったのは想定内となりました。

Meraki DashboardのEvent log

関連記事

myhomenwlab.hatenablog.com

DatadogでMeraki Dashboard APIを用いてMerakiのログを取得する

DatadogでMeraki Dashboard APIを用いてMerakiのログを取得する設定方法を紹介します。 DatadogのTrial期間の機能で試せるので、Merakiの検証環境があるのであれば使用感の確認に活用できます。

DatadogのMerakiの連携のサンプル画面

DatadogのサービスからMeraki Cloudに対してMeraki Dashboard APIを用いて通信が行われるため、利用者側ではログ取得に際してのエージェント導入は不要になるのが利点です。

DatadogによるMerakiのログの取り込み

設定手順

Meraki Dashboard APIの有効化

MarketplaceからMeraki Integrationの設定

  • メニュー: Integrations > Marketplace を開きます。

    メニュー: Integrations > Marketplace

  • 検索ワードに Meraki と入力して Meraki のAppを見つけて開きます。

    MerakiのApp

  • Meraki Integration のポップアップ画面で Configuration タブに移動して、Create the Integration のセクションより Add new ボタンを押下します。

    Meraki Integration の設定画面

  • Account NameAPI KEY を設定します。

    Account Name と API KEY の設定

    1. Account Name には任意の名称を入力します。Merakiアカウントのメール アドレスを指定する箇所ではありません。 また、画面上のメッセージにも記載がありますが、入力規則があり、英数字とアンダースコア (_)のみを受け付けます。

      Create the Integration
      1. Choose an account name for the integration account. The account name can only contain alphanumeric values and underscores.
      2. Add the previously generated Meraki API key.

    2. API KEY には、予め生成しておいたMeraki Dashboard APIAPI Keyを指定します。

    3. 入力が完了したら Save ボタンの押下を忘れないようにしてください。設定が保存されると下記のような画面になります。

      Account Name と API KEY の保存後

Merakiのログの確認

  • メニュー: Logs > Configuration を開きます。

  • Pipelines タブが表示されるので、PIPELINE NAME: Cisco Meraki のセクションを探して、View in Log Explorer ボタンを押下します。

    PIPELINE NAME: Cisco Meraki のセクションと View in Log Explorer ボタン

    View in Log Explorer ボタンは BY のカラム付近をマウス オーバーすると表示されるので注意してください。

    View in Log Explorer (BY のカラム付近)

  • Search for の検索ボックスに Source:meraki と表示された状態で Logs (メニュー: Logs > Search) の画面が開きます。

    Logs (メニュー: Logs > Search) 画面の表示

  • Meraki側のログの出力状況によっては、直近の期間では何も出力されていない可能性もあるため、必要に応じて表示期間を切り替えます。

    ログの表示期間の切り替え

  • 下記のサンプル画面は 1w (Past 7 Days / 1 Week) に表示を切り替えて、Merakiのログが確認できた例です。

    Merakiログの確認 (表示期間の切り替え後)

Meraki Integration の関連ドキュメント

備考

Meraki Dashboard APIAPI Keyに複数のOrganizationが紐付いている場合は、それら複数のOrganizationに対してログの取得処理が走るように見受けられました。
なお、ドキュメントに詳細な挙動が載っていなかったので実機ベースで確認した情報となります。

複数のOrganizationに対してAPIリクエストの処理が走っているのは、 GET /organizations/{organizationId}/apiRequestsAPIでログを出力して確認しました。
User Agentの情報に "userAgent": "MerakiIntegration/1.0 Datadog" とDatadogの文字列があり、ログ取得のAPIを叩いていたので識別は容易でした。

developer.cisco.com

GET /organizations/{organizationId}/apiRequests によるDatadogからのAPIリクエストの確認

ThousandEyesで新しいAccount Groupを作成して切り替える (切り替えメニューの表示には要再ログイン)

ThousandEyesで新しいAccount Groupを作成して切り替える[移動する]一連の手順を紹介します。
注意点ですが、新しく作成されたAccount Groupへ切り替えるためのポップアップ メニューを表示するには、一度ログアウトしてから再度ログインする必要があります。
また、ログイン時のデフォルトのAccount Groupを指定するための設定 (Login Account Group)もあります。

設定手順

設定概要

本記事の例では、現状で所属しているAccount Groupが SampleCorp の状態で、新たに ExampleCorp を作成してAccount Groupを切り替えます。
補足ですが、「切り替え」は設定対象のAccount Groupを移動するニュアンスで用いています。 そのため、対象Account自体は SampleCorp と ExampleCorp に所属するようになっています。(所属対象のAccount Groupから SampleCorp の割り当てを外して、ExampleCorp を新たに割り当てるのではありません。)

そして最後に、ログイン時のデフォルトのAccount Groupを指定する方法を確認します。

現状のAccount Groupの確認

  • メニュー: Account Settings > User and RolesAccount Groups タブを表示して、現状で存在するAccount Groupを確認します。また、画面右上のAccountの情報を見ると現在のAccount Groupを確認できます。

    現状のAccount Groupの確認

新しいAccount Groupの作成と確認

  • Account Groups タブの画面から New Account Group ボタンを押下します。

    新しいAccount Groupの作成

  • Account Group Name に任意の名称をつけます。Enterprise Agent は必要に応じて割り当ててください。

    Add New Account Group 画面

  • 新しいAcount Groupが作成されたのを確認します。

    新しいAccount Groupの確認

Account Groupの切り替えが表示されない状態 (ログアウト前)

  • 画面右上のAccountを押下してサブ メニューを表示します。ログアウト前では Current Account Group の項目で、Account Groupの切り替えができなくなっています。

    Account Groupの切り替えが表示されない状態 (ログアウト前)

Account Groupの切り替えが表示される状態 (再ログイン後)

  • 再ログイン後に、画面右上のAccountを押下してサブ メニューを表示します。再ログインすると Current Account Group の項目のポップアップ メニューが表示されてAccount Groupの切り替えが行えるようになっています。

    Account Groupの切り替えが表示される状態 (再ログイン後)

Account Groupの切り替え後 (例: SampleCorp => ExampleCorp)

  • 実際にAccoount Groupの切り替えができるか試してみましょう。

    Account Groupの切り替え後 (例: SampleCorp => ExampleCorp)

ログイン時のデフォルトのAccount Groupの設定 (Login Account Group)

  • ログイン時のデフォルトのAccount Groupを変更したい際は、メニュー: Account Settings > User and RolesProfile タブを表示して、Login Account Group の項目をログイン対象のAcount Groupに指定します。

    ログイン時のデフォルトのAccount Groupの設定 (Login Account Group)

ThousandEyesのDashboardにEnterprise & Endpoint Agentを世界地図上に表示する

ThousandEyesのDashboardEnterprise AgentとEndpoint Agentを世界地図上に表示する設定方法を記載します。

設定イメージは下記の画面キャプチャになります。

設定イメージ

基礎的な設定となりますが、世界地図上にAgentが点在している絵面があると見栄えが良く見えるかもしれませんので参考例として書き起こしました。
ただし、見栄えだけ良くして意思決定者から導入の許可が下りても、ThousandEyesを活用できなければ投資する意味がない点には留意してください。

設定手順

Dashboardの作成

  • メニュー: Dashboard を開き、右上の Options (...) ボタンより Create New Dashboard を押下します。

    Dashboardの作成

  • Create New Dashboard の設定画面でのパラメータは適宜修正してください。Account Group VisibilityView Settings は、Dashboardが見える範囲 (他のAccount Groupへの公開/非公開)や、デフォルトのDashboardにするか否かを制御できます。

    Create New Dashboard の設定画面

  • Dashboardが作成されて表示ができるのを確認してください。

    Dashboardの選択

    現在表示しているDashboardの確認

    新規作成したばかりのDashboardは、Widgetが表示されていない状態になっています。

Enterprise Agent向けWidgetの作成

  • 対象のDashboardに移動してから Add Widget ボタンより Agent Status を指定します。

    Add Widget ボタン

    Agent Status の指定

  • Editing Agent Status の画面が表示されます。下記の例を参考にして設定してください。

    設定項目 設定値 備考
    Wdiget 名 Enterprise Agent Status 任意の名称を指定します。本例ではAgent種別を区別するためにEnterprise Agentを明記するようにしています。
    Agents Enterprise Agent Agent種別を指定します。
    Show 任意 Owned Agents は自信のAccount Grupに所属するEnterprise Agentのみを対象にします。他のAccount GroupのEnterprise Agentも含めたい場合は All Assigned Agents を指定します。

    Editing Agent Status 画面

  • 先ほどの Show のパラメータの指定による見え方の違いを参考例として掲載します。

    まず設定の前提情報ですが、Account Groupが異なるEnterprise Agentの Country のみが Chad (アフリカ大陸に位置するチャド共和国) になるように指定しています。また、設定確認に用いているAccount Group名が SampleCorp で、異なるAccount Group名が ExampleCorp になります。

    • Primary Account Group が ExampleCorp のEnterprise Agentを、SampleCorp にも所属させています。

      Enterprise Agentの設定確認

    • Show: All Assigned Agents の設定時は、世界地図上のChadの付近にEnterprise Agentが表示されています。

      Show: All Assigned Agents の設定時

    • Show: Owned Agents の設定時は、他のAccount GroupのEnterprise Agentは表示しないため、世界地図上のChadの付近には何も表示されていません。

      Show: Owned Agents の設定時

Endpoint Agent向けWidgetの作成

  • 対象のDashboardに移動してから Add Widget ボタンより Agent Status を指定します。

    Agent Status の指定

  • Editing Agent Status の画面が表示されます。下記の例を参考にして設定してください。

    設定項目 設定値 備考
    Wdiget 名 Endpoint Agent Status 任意の名称を指定します。本例ではAgent種別を区別するためにEndpoint Agentを明記するようにしています。
    Agents Ednpoint Agent Agent種別を指定します。

    Editing Agent Status 画面

  • Endpoint Agent向けのWidgetが作成できたのを確認します。

    Endpoint Agent向けのWidgetの作成

関連ドキュメント

docs.thousandeyes.com

MerakiのRelease NotesはDashboardが一次情報源になる

Merakiの各製品のFirmwareのRelease Notesは、Meraki Dashboardのメニュー: Organization > Firmware upgrades が一次情報源になります。

ニュー: Organization > Firmware upgrades

Release Notesの情報には、主に下記の観点が含まれています。

  • Important notice
  • Legacy products notice
  • Bug fixes
  • Known issues

Release Notesの情報

また、古すぎるVersionの情報には遡れません。

Older changelogs not available

補足

Merakiクラウド管理型の製品であるため日々改修されていきます。 それを過去の情報にまで遡って、追及するような厳格なビジネス要求があるような環境にMerakiの導入は不向きです。

なお、Release Notesの書いてある以上の情報をサポートに問い合わせても、公開可能な詳細情報がない場合があります。 筆者は本記事の執筆時点 (2022年08月頃)で1回ほど「Meraki MXの安定性の向上はどの点が改修されてるのか?」を問い合わせた経験がありますが、Release Notes以上の公開情報はありませんでした。

筆者の主観が混じりますが、Merakiはシンプルさを実現するために、良い意味でも悪い意味でもアバウト (大雑把)な側面が見受けられます。 良く言えばアバウトさがあるからこそ、細かいことまでチューニングせずに大規模展開しやすい利点が生まれています。 また悪く言えば、アバウトさと対局に位置するような細かい要件がある環境にMerakiを導入しようとしてクレームに発展するのを見かけます。

そのアバウトさがRelease Notesにも反映されているように見受けられます。