rsyslogのTLS(SSL)暗号化

rsyslogからrsyslogへ、WANを通してログ転送しよっかなーと思い立ったので、暗号化してみることにしました。

rsyslogも何気にキューを使えるので、fluentd と迷いましたが、そもそもログがsyslog系であり、流量もさほど多くないモノだったので、全サーバにいらっしゃるrsyslogさんに気張ってもらうことにしました。



リンク

  • TLS (SSL) Encrypting syslog rsyslog
  • TCP Syslog Input Module rsyslog
  • $MaxOpenFiles – rsyslog.conf file rsyslog
  • ssl encryption in rsyslog – Stack Overflow
  • Configuring Rsyslog to Encrypt Syslog Traffic with TLS in Ubuntu
  • Advent Calendar 2012 » Blog Archive » RSyslogを使ったログのセキュアな転送と集積
  • 黒ぶちメガネのblog » Blog Archiv » rsyslogの通信をTLS(SSL)化してみた


  • サーバ

    インストール

    サーバ側はWheezyでやっています。

    鍵の作成

    適当に鍵置き場を作成しておきます。

    CA証明書を作成します。
    対話部分のみ記載しておきます。

    サーバ証明書を作成します。

    設定

    TLS
    この設定で、鍵を持つクライアントからの暗号化通信しか受け付けなくなります。

    /etc/rsyslog.d/00-tls-server.conf

    保存
    ここではいったん、FORWARDログは適当なところに保存して破棄します。

    /etc/rsyslog.d/50-collector-file.conf

    動作確認

    設定の確認をします。

    問題なければ再起動します。

    クライアントから受けるアドレスで接続確認をします。失敗する場合は、$InputTCPServerRun の記述が最後になっているか、などを確認します。


    クライアント

    インストール

    バージョンは、4.6 以上にしておけば大丈夫みたいです。

    Debian Wheezy / Squeeze

    Debian Lenny
    標準は rsyslog3 なので、バックポートから持ってきます。

    CentOS 5
    標準が rsyslog じゃないので、入れ替えになります。リポジトリ書いて…

    /etc/yum.repos.d/rsyslog.repo

    インストールします。

    CA証明書

    クライアントにはサーバで作成したCA証明書のみコピーしておきます。

    設定

    TLS
    /etc/rsyslog.d/00-tls-client.conf

    FORWARD
    サーバダウン対策としてキューを利用しつつ、ここではsshdログだけリモートサーバに転送しています。
    /etc/rsyslog.d/50-forward.conf

    設定反映と動作確認

    再起動します。

    確認作業として、サーバ側で tailf /var/log/remote.log しておきつつ、適当なユーザでクライアント側にSSHログインしてみます。ログの転送が確認できればOKです。転送されなければ、鍵か設定が間違っているのでやり直します。

    FORWARD条件によっては、コマンドベースでログを吐き出してもテストできます。

    気が向いたら、サーバを落としてみて、その間にログを保存させて、サーバを復旧させてみます。キューが正しく動いていれば、ロストなく再送されるはずです。



    rsyslog自体なかなか好きですが、使い古されてるだけあって、調べるのが楽でいいですね。

    モジュールやら設定がいっぱいあるので、まだまだ楽しめそうです。