米Microsoftは9月12日(現地時間)、米CrowdStrikeなどのセキュリティベンダーのソフトウェアが、Windowsカーネルの外で動作できるようWindowsに変更を加える計画を発表した。7月に発生し、世界中の850万台のWindows端末をブルースクリーンにしたCrowdStrikeのセキュリティ製品更新が引き起こした障害を受けて10日に開催したイベントで議論されたもの。
⇧ 変更を計画も何も、まぁ、バグの改修ってことですよね、言い方が腹立ちますな。
セキュリティ機能構築も何も、脆弱性の不具合を抱え続けていただけという話ですからな。
ネットワーク機器の設定情報をバックアップする「Oxidized」というツールの動作確認に必要な構成は
公式のドキュメントが酷過ぎて、泥沼にハマったので備忘録として。
ネットワーク機器の設定情報をバックアップする「Oxidized」というツールについては、
⇧ 上記の記事の時に出てきたものになります。
ローカル環境で、最低限、必要な環境としては、最低限2台のVMがあれば、設定情報を取得する動作確認はできますと。
なので、イメージとしては、
⇧ 上図のようなシステム構成があれば、大丈夫そうではありますと。
で、「Oxidized」の公式のドキュメントにりますと、
⇧ とあり、
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」の公式のドキュメントが酷過ぎて、泥沼にハマったという話でした。
一次情報が、全く当てにできない時もあるので、システム障害とかで設定ミス起因によるものが多発するのも、然もありなんという気がしてならない...
毎度モヤモヤ感が半端ない…
今回はこのへんで。