web-dev-qa-db-ja.com

tlsを介してrsyslogからgraylogにログを転送する

ログをrsyslogからtls経由でgraylogに転送しようとしています。

rsyslog構成:

# make gtls driver the default
$DefaultNetstreamDriver gtls
#
# # certificate files
$DefaultNetstreamDriverCAFile /etc/ssl/rsyslog/ca.pem
$DefaultNetstreamDriverCertFile /etc/ssl/rsyslog/rsyslog-cert.pem
$DefaultNetstreamDriverKeyFile /etc/ssl/rsyslog/rsyslog-key.pem
#
$ActionSendStreamDriverAuthMode x509/name
$ActionSendStreamDriverPermittedPeer graylog.mydomain.com
$ActionSendStreamDriverMode 1 # run driver in TLS-only mode
*.* @@graylog.mydomain.com:6514 # forward everything to remote server

Rsyslogのドキュメントに記載されているように、必要な証明書を生成しました。

certtool --pkcs8 --generate-privkey --outfile ca-key.pem
certtool --pkcs8 --generate-self-signed --load-privkey ca-key.pem --outfile ca.pem

certtool --pkcs8 --generate-privkey --outfile graylog.key.pem 
certtool --pkcs8 --generate-request --load-privkey graylog.key.pem --outfile graylog.request.pem
certtool --pkcs8 --generate-certificate --load-request graylog.request.pem --outfile graylog.cert.pem --load-ca-certificate ca.pem --load-ca-privkey ca-key.pem

certtool --pkcs8 --generate-privkey --outfile rsyslog.key.pem 
certtool --pkcs8 --generate-request --load-privkey rsyslog.key.pem --outfile rsyslog.request.pem
certtool --pkcs8 --generate-certificate --load-request rsyslog.request.pem --outfile rsyslog.cert.pem --load-ca-certificate ca.pem --load-ca-privkey ca-key.pem

グレイログ設定

すべての証明書ファイルは/ etc/ssl/Graylog/input-ca /にあります

グレイログ入力は次のように構成されます。

TLS cert file: /etc/ssl/graylog/input-ca/graylog-cert.pem
TLS private key file: /etc/ssl/graylog/input-ca/graylog-key.pem
TLS Client Auth Trusted Certs: /etc/ssl/graylog/input-ca

しかし、rsyslogがログメッセージをgarylogにプッシュすると、次のエラーが発生します。

2016-10-06T13:19:27.734+02:00 WARN  [AbstractNioSelector] Failed to initialize an accepted socket.
Java.security.cert.CertificateParsingException: signed fields invalid
    at Sun.security.x509.X509CertImpl.parse(X509CertImpl.Java:1791) ~[?:1.8.0_91]
    at Sun.security.x509.X509CertImpl.<init>(X509CertImpl.Java:195) ~[?:1.8.0_91]
    at Sun.security.provider.X509Factory.parseX509orPKCS7Cert(X509Factory.Java:469) ~[?:1.8.0_91]
    at Sun.security.provider.X509Factory.engineGenerateCertificates(X509Factory.Java:354) ~[?:1.8.0_91]
    at Java.security.cert.CertificateFactory.generateCertificates(CertificateFactory.Java:462) ~[?:1.8.0_91]
    at org.graylog2.plugin.inputs.transports.util.KeyUtil.loadCertificates(KeyUtil.Java:90) ~[graylog.jar:?]
    at org.graylog2.plugin.inputs.transports.util.KeyUtil.loadCertificates(KeyUtil.Java:100) ~[graylog.jar:?]
    at org.graylog2.plugin.inputs.transports.util.KeyUtil.initTrustStore(KeyUtil.Java:73) ~[graylog.jar:?]
    at org.graylog2.plugin.inputs.transports.AbstractTcpTransport$1.createSslEngine(AbstractTcpTransport.Java:199) ~[graylog.jar:?]
    at org.graylog2.plugin.inputs.transports.AbstractTcpTransport$1.call(AbstractTcpTransport.Java:186) ~[graylog.jar:?]
    at org.graylog2.plugin.inputs.transports.AbstractTcpTransport$1.call(AbstractTcpTransport.Java:182) ~[graylog.jar:?]
    at org.graylog2.plugin.inputs.transports.NettyTransport$1.getPipeline(NettyTransport.Java:110) ~[graylog.jar:?]
    at org.jboss.netty.channel.socket.nio.NioServerBoss.registerAcceptedChannel(NioServerBoss.Java:134) [graylog.jar:?]
    at org.jboss.netty.channel.socket.nio.NioServerBoss.process(NioServerBoss.Java:104) [graylog.jar:?]
    at org.jboss.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.Java:337) [graylog.jar:?]
    at org.jboss.netty.channel.socket.nio.NioServerBoss.run(NioServerBoss.Java:42) [graylog.jar:?]
    at org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.Java:108) [graylog.jar:?]
    at org.jboss.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.Java:42) [graylog.jar:?]
    at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1142) [?:1.8.0_91]
    at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:617) [?:1.8.0_91]
    at Java.lang.Thread.run(Thread.Java:745) [?:1.8.0_91]

何が問題になるのか考えてみませんか?

2
Zombaya

Keytoolを使用して、証明書をJavaキーストアにインポートする必要があります。

keytool -import -alias mygraylogcertificate -file mygraylogcertificate.cer -keystore examplekeystore

キーストアの場所は、インストールによって異なります。

1
mzhaase

Graylogプロセスが証明書ファイルとキーを読み取れることを確認してください。 (通常、rootではなく「graylog」ユーザーとして実行されます。)「受け入れられたソケットの初期化に失敗しました」は、Graylogがこれらのファイルを読み取れないように見えるエラーです。

通常、キー、証明書、およびその他のファイルは/etc/graylog(私は/etc/graylog/keysを使用)の下にあり、graylogユーザーが所有します。キーがグループやその他に読み取れないことを確認してください。

1
cjs

最終的に、クライアントがTLSを介してrsyslogを使用してログを収集サーバー上のrsyslogにプッシュし、収集サーバー上のrsyslogがそれらをgraylog2に転送するようにすることでこれを解決しました。

概略:開発マシン1-> rsyslog-> TLS->収集サーバー:rsyslog-> Graylog2

0
Zombaya