自己証明書を使ったSplunk ForwarderのSSL転送設定方法
はじめに
- Fowarderからデータ転送する通信をセキュアに(データ転送をSSL暗号)
- 圧縮してトラフィック負荷を軽減(転送データを1/8程度に圧縮)
- Splunk社のデフォルト証明書を使うよりも、自己証明書でもっとセキュアにしたい
- ※デフォルト証明書は3年でExpireします。期限が切れた場合、インデクサーとのSSLコネクションを作ることができずにログ転送が失敗する仕様なので注意。
- セットアップのおすすめ方法は先にSplunk社のデフォルト証明書を使うを使ってSSL転送できることを確認した後で、自己証明書を用いた以下手順を実施したほうが、着実に問題切り分けや成功イメージがつくのでオススメです
更新履歴
- 2020.06.12 FWDの以下パスを修正
clientCert = $SPLUNK_HOME/etc/auth/mycerts/mySplunkForwarderCertificate.pem
↓
clientCert = $SPLUNK_HOME/etc/apps/100_ssl/default/mySplunkForwarderCertificate.pem
自己証明書を用意するパターン
検証構成イメージ
FWDとIDX間のSSL暗号は事前に秘密鍵をFWDとIDXで共有して暗号/復号処理を行う共通鍵暗号方式を元にしたデータ転送
-
参考元の本家ドキュメントは以下
HowTo
1. Root CAの公開鍵(自己署名ルート証明書)を作成
鍵、証明書の作成自体はすべてIDXサーバ(またはsplunkインスタンスならどこでも※)上でまとめてやります
※Splunkのopensslコマンドを使って証明書を作成するため
①証明書を配置するフォルダを作成
# mkdir /opt/splunk/etc/auth/mycerts/ && cd /opt/splunk/etc/auth/mycerts/
②まずは、Root CAの秘密鍵(myCAPrivateKey.key)を作成
# /opt/splunk/bin/splunk cmd openssl genrsa -aes256 -out myCAPrivateKey.key 2048
③次に、CSR(myCACertificate.csr)を作成
# /opt/splunk/bin/splunk cmd openssl req -new -key myCAPrivateKey.key -out myCACertificate.csr
-少なくともCommon Nameはユニークな名前にしてください※--
Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:
Email Address []:
※今回は利用していませんが、FWDとIDX間でCommon Nameを元にした認証を行うオプションもあるため
- sslCommonNameToCheck
- requireClientCert
-------------------------------------------------
④そして、CSRを利用しRootCAの10年有効な公開鍵(myCACertificate.pem)を作成
# /opt/splunk/bin/splunk cmd openssl x509 -req -in myCACertificate.csr -signkey myCAPrivateKey.key -out myCACertificate.pem -days 3650
2. FWDの秘密鍵とFWDの証明書を作成
ここでも鍵、証明書の作成自体はすべてIDXサーバ上でまとめてやります
①FWDの秘密鍵(myFWDPrivateKey.key)を作成
# /opt/splunk/bin/splunk cmd openssl genrsa -aes256 -out mySplunkFWIPrivateKey.key 2048
ややこしいポイント:
↑のmySplunkFWIPrivateKey.keyを使ってIDXとFWDそれぞれの公開鍵も作ります。
②CSR(mySplunkForwarderCert.csr)を作成
# /opt/splunk/bin/splunk cmd openssl req -new -key mySplunkFWIPrivateKey.key -out mySplunkForwarderCert.csr
-少なくともCommon Nameはユニークな名前にしてください。--
Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:
Email Address []:
-------------------------------------------------
③CSRを利用しFWDの3年有効な証明書(mySplunkForwarderCert.pem)を作成
# /opt/splunk/bin/splunk cmd openssl x509 -req -in mySplunkForwarderCert.csr -CA myCACertificate.pem -CAkey myCAPrivateKey.key -CAcreateserial -out mySplunkForwarderCert.pem -days 1095
3. IDXサーバの証明書を作成
ここでも鍵、証明書の作成自体はすべてIDXサーバ上でまとめてやります
①CSR(myIDXCertificate.csr)を作成 ※←ここでFWDの秘密鍵を使用
# /opt/splunk/bin/splunk cmd openssl req -new -key mySplunkFWIPrivateKey.key -out mySplunkIndexerCert.csr
-少なくともCommon Nameはユニークな名前にしてください。--
Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:
Email Address []:
-------------------------------------------------
②CSRを利用しIDXの3年有効な証明書(myIDXCertificate.pem)を作成
# /opt/splunk/bin/splunk cmd openssl x509 -req -in mySplunkIndexerCert.csr -CA myCACertificate.pem -CAkey myCAPrivateKey.key -CAcreateserial -out mySplunkIndexerCert.pem -days 1095
4. 証明書、秘密鍵、RootCA(自己署名ルート証明書)を1つのファイルにマージ
ここでも鍵、証明書の作成自体はすべてIDXサーバ上でまとめてやります
①これまで作成した鍵をまとめて1つのSplunk用のIDX証明書を作成
# cat mySplunkIndexerCert.pem mySplunkFWIPrivateKey.key myCACertificate.pem > mySplunkIndexerCertificate.pem
②これまで作成した鍵をまとめて1つのSplunk用のFWD証明書を作成
# cat mySplunkForwarderCert.pem mySplunkFWIPrivateKey.key myCACertificate.pem > mySplunkForwarderCertificate.pem
5. IDXサーバの設定
ここではIDXサーバ上作業
①inputs.confの編集
# vi /opt/splunk/etc/system/local/inputs.conf
------------------------------------------------
[splunktcp-ssl:9997]
[SSL]
serverCert = /opt/splunk/etc/auth/mycerts/mySplunkIndexerCertificate.pem
sslPassword = (IDX証明書作成時に指定したパスワード)
requireClientCert = false
------------------------------------------------
②server.confの追記
# vi /opt/splunk/etc/system/local/server.conf(IDXがWindows以外の時)
------------------------------------------------
sslRootCAPath = /opt/splunk/etc/auth/mycerts/myCACertificate.pem
------------------------------------------------
③設定の反映
# splunk restart
6. FWDの設定
ここではFWD上で作業
- 本手順ではDeployment-Server(DS)機能を使って、100_sslというappフォルダを用意し、その配下に必要な証明書とconfを配備して、DS機能を使って複数windowsに配る方法を想定した手順になっています
- 一台のwindowsPCにテストインストールする場合はFowarderインストール後に手動でetc/apps/100_sslフォルダを作成する必要があります。
①ファイルの配置(# $SPLUNK_HOME/etc/apps/100_ssl/default/配下に)
・mySplunkForwarderCertificate.pem
・myCACertificate.pem
※auth/mycertsフォルダを作成しその配下にpemを設置した際にファイルアクセス権のエラーが出たため、既存のauth配下に直接置きました。
②outputs.confに追記
# vi $SPLUNK_HOME/etc/apps/100_ssl/default/outputs.conf
------------------------------------------------
[tcpout]
defaultGroup = default-autolb-group
[tcpout:default-autolb-group]
server = 192.168.xxx.xxx:9997
clientCert = $SPLUNK_HOME/etc/apps/100_ssl/default/mySplunkForwarderCertificate.pem
sslPassword = (FWD証明書作成時に指定したパスワード)
[tcpout-server://192.168.246.185:9997]
------------------------------------------------
②server.confの追記
# vi $SPLUNK_HOME/etc/apps/100_ssl/default/server.conf
------------------------------------------------
[sslConfig]
caCertFile = myCACertificate.pem
caPath = $SPLUNK_HOME/etc/apps/100_ssl/default
------------------------------------------------
③テストでwindowsセキュリティイベントが取れるか確認(inputs.confの設定)
------------------------------------------------
[WinEventLog://Security]
disabled = 0
------------------------------------------------
④設定の反映
# splunk restart
動作確認
- Validationは以下ドキュメントを参考
②FWDのsplundログにSSL設定の有効化メッセージが出ていることを確認
まとめ
- まずはデフォルト証明書で試す。成功した場合、configの設定方法は問題ないことが分かる
- 次に自己証明書で試す。成功した場合、証明書が正確に作成できており、必要な場所に配置できていることが分かる。
- やや混乱しますが、Windowsに配置するFWDのconfig内に記載するパス指定で、「\, ¥」を使ったほうがいいのかと思っていましたが、↑の例のようにlinuxでも使える「/」をつかって記載してもWindowsで正常に認識されます
はまったポイント
証明書のパス記載ミス/アクセス権のミス?
私はTroubleshootingを見ながら、FWD上で以下コマンド
openssl s_client -connect {server}:{port}
を試した際に以下Windowsのメッセージが出たため、一度FWD自体を再インストールし直しました。結果、opensslコマンドを実行できたので、ファイルアクセス権の問題?と一旦理解して終えました。
outputs.confをDSから配る際の注意点
最初からsslPassword=$7$ndko3cuCHLRLd/6WMv0kV4P2ryc6+aTlHRBKDOERU1qN2uLW1/SCPA==
とhash化されたままFWDに配ると、復号できず以下エラーで失敗するので注意。
ERROR AesGcm - error:00000000:lib(0):func(0):reason(0)
ERROR AesGcm - AES-GCM Decryption failed!
ERROR Crypto - Decryption operation failed: AES-GCM Decryption failed!
WARN ConfigEncryptor - Decryption operation failed: AES-GCM Decryption failed!
参考情報
Should I include indexer's 3rd party cert AND private key in forwarder configuration
About configuration in forwarding by using SSL.
How do I set up SSL forwarding with new, self-signed certificates and authentication?
Author And Source
この問題について(自己証明書を使ったSplunk ForwarderのSSL転送設定方法), 我々は、より多くの情報をここで見つけました https://qiita.com/odorusatoshi/items/4a3bfbb9a207348e962c著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .