※当サイトの記事には、広告・プロモーションが含まれます。

ネットワーク機器の設定情報をバックアップするツール「Oxidized」をdockerで動かす際に泥沼った

www.itmedia.co.jp

 米Microsoftは9月12日(現地時間)、米CrowdStrikeなどのセキュリティベンダーのソフトウェアが、Windowsカーネルの外で動作できるようWindowsに変更を加える計画を発表した。7月に発生し、世界中の850万台のWindows端末をブルースクリーンにしたCrowdStrikeのセキュリティ製品更新が引き起こした障害を受けて10日に開催したイベントで議論されたもの。

Microsoft、CrowdStrikeのブルスク障害を受けたセキュリティ機能構築へ - ITmedia NEWS

⇧ 変更を計画も何も、まぁ、バグの改修ってことですよね、言い方が腹立ちますな。

セキュリティ機能構築も何も、脆弱性の不具合を抱え続けていただけという話ですからな。

ネットワーク機器の設定情報をバックアップする「Oxidized」というツールの動作確認に必要な構成は

公式のドキュメントが酷過ぎて、泥沼にハマったので備忘録として。

ネットワーク機器の設定情報をバックアップする「Oxidized」というツールについては、

ts0818.hatenablog.com

⇧ 上記の記事の時に出てきたものになります。

ローカル環境で、最低限、必要な環境としては、最低限2台のVMがあれば、設定情報を取得する動作確認はできますと。

なので、イメージとしては、

⇧ 上図のようなシステム構成があれば、大丈夫そうではありますと。

で、「Oxidized」の公式のドキュメントにりますと、

github.com

⇧ とあり、

Vendor OS model oxidized model model maintainers comment / model notes
Linuxgeneric CentOS linuxgeneric   LinuxGeneric

⇧「CentOS」をサポートしているモデルが存在していますと。

ただ、「CentOS」は「EOL(End Of Life)」になっているはずですと。

なので、「CentOS」の代替となる「OS(Operation System)」が必要なのかと思って、「Rocky Linux 9系」で試したら、機能しました。

何と言うか、「Oxidized」の公式のドキュメントが酷過ぎて、辛い...

「Oxidized」の各ファイルの関係など

「Oxidized」の各ファイルの関係などの説明についても、公式のドキュメントが酷過ぎて、絶句するしかないのだけど、

No 項目 ファイル 説明
1 oxidized model oxidized/lib/oxidized/model/* 機器の設定情報を取得する処理クラス
2 Configuration [host directory]:/home/oxidized/.config/oxidized Oxidizedの設定ファイル
3 Authentication Information [host directory]/router.db 対象機器の認証情報

⇧ とりあえず、最低限、3ファイルは必要。

で、兎に角、公式のドキュメントの説明が無さ過ぎて、設定のルールが分からな過ぎるのだけど、

⇧ 上記を見た感じでは、関連して良そうなのだけど、「Oxidizedの設定ファイル」の「map」という設定項目として、どんな選択肢があるのか全く説明が無いのが有り得ないのですが、推測するに、「Oxidizedの設定ファイル」の設定項目「map」のkey名と「router.db」の設定は連動していそうではありますと。

「demiliter」は、「:(コロン)」が区切りってことを表わしていると仮定すると、

No Oxidizedの設定ファイルの設定項目mapのkey router.dbの設定値
0 name rtr01.local
1 ip 192.168.1.1
2 model ios:oxidized
3 username 5uP3R53cR3T
4 password T0p53cR3t

⇧ という感じにならざるを得ない気がするのだけど、「model」に該当する「router.dbの設定値」に「:(コロン)」が含まれているので、「demiliter」のルール無視されとるやん...という絶望...

ちなみに、

https://github.com/ytti/oxidized/blob/master/lib/oxidized/source/csv.rb

module Oxidized
  class CSV < Source
    def initialize
      @cfg = Oxidized.config.source.csv
      super
    end

    def setup
      if @cfg.empty?
        Oxidized.asetus.user.source.csv.file      = File.join(Config::ROOT, 'router.db')
        Oxidized.asetus.user.source.csv.delimiter = /:/
        Oxidized.asetus.user.source.csv.map.name  = 0
        Oxidized.asetus.user.source.csv.map.model = 1
        Oxidized.asetus.user.source.csv.gpg       = false
        Oxidized.asetus.save :user
        raise NoConfig, 'no source csv config, edit ~/.config/oxidized/config'
      end
      require 'gpgme' if @cfg.gpg?
    end

    def load(_node_want = nil)
      nodes = []
      open_file.each_line do |line|
        next if line =~ /^\s*#/

        data = line.chomp.split(@cfg.delimiter, -1)
        next if data.empty?

        # map node parameters
        keys = {}
        @cfg.map.each do |key, position|
          keys[key.to_sym] = node_var_interpolate data[position]
        end
        keys[:model] = map_model keys[:model] if keys.has_key? :model
        keys[:group] = map_group keys[:group] if keys.has_key? :group

        # map node specific vars
        vars = {}
        @cfg.vars_map.each do |key, position|
          vars[key.to_sym] = node_var_interpolate data[position]
        end
        keys[:vars] = vars unless vars.empty?

        nodes << keys
      end
      nodes
    end
  end
end    

⇧ 上記のクラスで、「Oxidizedの設定ファイル」の設定項目の「source」部分で「csv」についての場合の「router.db」との突き合わせをしているっぽいのだけど、「router.dbの設定値」で「model」に該当する部分だけ「:(コロン)」を含んで良い理由が分からん...

致し方ないので、自分は、「router.dbの設定値」で「model」に該当する部分については、「Oxidizedの設定ファイル」の「model_map」という設定項目のkey名を設定するようにしました。

ホストのディレクトリにアクセス権限の付与が必要

で、公式のドキュメントの不備が目立つのだけど、そもそも、Linuxのどのユーザーで各コマンドを実行するかについて、何の説明も無いという...

公式のドキュメントによると、

⇧ ホスト側で「/etc/oxidized」というディレクトリを作成して、Dockerコンテナ側のディレクトリとマウントさせようという意図らしいですと。

「/etc」配下にディレクトリが作成できるのが、rootユーザーっぽい気がするので、

chmod a+rw /etc/oxidized    

⇧ のような権限付与が必要と思われる。と言うか、付与した。

ホスト側のディレクトリの作成場所を変更すれば良いのかもしれないですが、公式のドキュメント通りの手順で進めて、上記のディレクトリに対する権限付与を行わないと、

『Docker: failed to start: Permission denied @ rb_sysopen - 』

というエラーが出てコンテナ起動に失敗するので気を付けよう。

そんなこんなで、「Oxidized」の公式のドキュメントが酷過ぎて、泥沼にハマったという話でした。

一次情報が、全く当てにできない時もあるので、システム障害とかで設定ミス起因によるものが多発するのも、然もありなんという気がしてならない...

毎度モヤモヤ感が半端ない…

今回はこのへんで。