[Sonar] 詳細情報の取得のためのアカウント情報の設定

ksocketは検知した機器に対して外部に公開されている情報を取得しますが、詳細情報の取得のためには、対象機器へのアカウント情報の設定が必要になります。本記事ではアカウント情報の設定方法に関してお伝えします。

対応プロトコル

ksocketは以下の形式のアクセスに対応しています。

  • SNMP(v2c/v3)
  • SSH
  • WInRM

設定ファイル

設定はtoml形式のファイルの記載し、以下のパスに格納します。

f:id:tomiyoichi:20190823110837p:plain
アカウント設定ディレクトリの構成

1つのアカウント情報ごとに1つのtomlファイルを作成します。また.skeletonファイルは記載方法のテンプレートとして用意されていますので、.tomlにコピーして利用してください。各プロトコルごとに記載し、ファイルのソート順の早い順で認証情報を適用してアクセスを試みます。

SNMP v2cの場合

例えば、以下のように記載します。

includes = ["10.10.0.0/24",
            "10.20.0.0/24"]

port = 161

[authData]
community = "public"

ここで"includes"ではアカウント情報を適用する対象のIPアドレスです。ksocketが検知した際に、ここに含まれているアドレスであった場合は記載されているアカウント情報を利用してアクセスを試みます。ここに記載したIPアドレス全てに対してksocketからアクセスを試みるわけでは無い点にご注意ください。

SNMP v3の場合

記述例です。

includes = ["10.10.0.0/24",
            "10.20.0.0/24"]

port = 161

[authData]
username = "snmp-user"

authProtocol = "usmHMACMD5AuthProtocol"
authKey = "your-password"

privProtocol = "usmAesCfb128Protocol"
privKey = "priv-password"

"authprotocol"には以下のいずれかを記載します。

  • 認証をしない場合: "usmNoAuthProtocol"
  • MD5を使用する場合: "usmHMACMD5AuthProtocol"
  • SHAを使用する場合: "usmHMACSHAAuthProtocol"

"privProtocol"には暗号化方式を記載します。

  • 暗号化をしない場合: "usmNoAuthProtocol"
  • DESを使用する場合: "usmDESPrivProtocol"
  • AESを使用する場合: "usmAesCfb128Protocol"

SSHの場合

パスワードログインの場合の例

includes = ["10.10.0.0/24"]

port = 22

[account]
username = "john"
password = "passw0rd"

鍵認証でのログインの場合の例

includes = ["10.10.0.0/24"]

port = 22

[account]
username = "john"

[[account.clientKeys]]
filename = "../../id_rsa.common"
passphrase = "secret_credential"

WinRMの場合

接続先側のWinRM接続を有効にするためには以下の記事を参照ください。 blog.cloud.kompira.jp

includes = ["10.10.0.0/24"]

port = 5985

authMethod = "ntlm"

[account]
username = "john"
password = "passw0rd"

"authMethod"には認証形式を記載します。"basic", "ntlm", "credssp"のいずれかから選択できます。

複数のアカウント情報が存在する場合

f:id:tomiyoichi:20190823113503p:plain
複数のアカウント情報が存在する場合

上記のように複数のアカウント情報ファイル(tomlファイル)が存在する場合には、以下の順序で処理されます。

  1. 100-test1.toml のアカウントを使ってsshアクセス試行する
  2. 200-test2.toml のアカウントを使ってsshアクセス試行する
  3. 300-test3.toml のアカウントを使ってsshアクセス試行する
  4. 999-example.toml のアカウントを使ってsshアクセス試行する

あるネットワークのゾーン内のアカウント情報を共通化させたい場合には、"includes"で指定する事が出来ます。言い換えれば、各接続先ごとに認証情報が異なる場合には、各接続先ごとにアカウント情報ファイルを用意する必要があります。

設定ファイルを暗号化/復号化する

TOML形式で保存されたアカウント情報は平文で保存されていますので、必要に応じて暗号化を行います。

$sudo /opt/fixpoint/ksocket/bin/ksocket encrypt (認証情報のtomlファイル名)

例
$sudo /opt/fixpoint/ksocket/bin/ksocket encrypt 999-sample.toml

拡張子".toml"が ".toml.kscrypt" という暗号化ファイルになります。 (ksocket本体はkscryptファイルを読み取り、内部的に復号処理を行って対象の機器にアクセスを行います。)

暗号化したアカウント情報ファイルを復号する際は以下のように行います。

$sudo /opt/fixpoint/ksocket/bin/ksocket decrypt (暗号化認証情報の.kscryptファイル名)

例
$sudo /opt/fixpoint/ksocket/bin/ksocket decrypt 999-sample.toml.kscrypt

拡張子".toml.kscrypt"ファイルが平文の".toml"に復号されます。複合後はテキストエディターで編集できるようになりますので、必要に応じて再度暗号化を行ってください。

暗号化設定ファイルの保存・バックアップ

ksocket は初回起動時に RSA 鍵ペアを作成保存します。暗号化・復号化では、ここで作成した RSA 鍵が利用されます。 暗号化されたファイルを別のksocket用サーバーに移動させるなど、 元のRSA鍵にアクセスできない場合には復号化は出来ません。 このためアカウント情報ファイルのバックアップや移動を行う際には、必ず復号化してから行ってください。

特に(コールドスタンバイ用などで)ksocketサーバーを複数運用してアカウント情報ファイルを共有する場合、kscryptファイルのコピーは利用出来ませんのでご注意ください。