logstudy01 & mailerstudy 02 に参加しました

logstudy と mailerstudyの合同勉強会に参加しました。

※翌日更新ですが、今回はblogを書きながら聴講するというスタイルをとりました。後半は電池が切れ気味だったため、後で書いてます。このやり方だとメモのようになってしまうので、ちょっと今後はどうしようか考えてます。

全体の感想

@ttkzwさんの丁寧な解説で、基本的なところをしっかり学べました。
rsyslogについては基本がしっかり解説されていて、実際に使えるような内容でした。syslogの問題点を列挙していただいたのがとても理解に役立ちました。

暗号化周りの話、特にSSLはなかなか複雑ですが、綺麗にまとまっていてよかったと思います。

@qryuuさんのLTも現場レベルの話が聞けてとても面白く、実際にありそうな話なので、同じ現象になったら気をつけようと思います。

※デジタル署名の際には秘密鍵と公開鍵が逆転していて、この辺の理解が僕はいつもぐちゃぐちゃになるんです。ちょっとこの辺は勉強しなおしてから書きたいと思います。

logstudyセッション「rsyslog入門」

@ttkzwさん

syslogの復習

まずはsyslogの復習から。

  • Facility:メッセージの種類
  • Severity:メッセージの重要度

Facilityを8倍してSeverityを加えたものがPRIになる
HEADERはTIMESTAMPとHOSTNAME
MSGはプログラム名(TAG)とメッセージの内容(CONTENT)

syslog.confの書き方

ルールはセレクタとアクションから構成される。セレクタに一致したものをアクションに記録。
あるルールにしても、その後のルールも評価する

これらの組み合わせをsyslog.confに書いて、ログの出力先などを設定する。

アクションはファイル名、パイプ、ユーザー端末にメッセージを送るなどができる

従来のsyslogの問題点
  • メッセージの転送に信頼性がない

UDPの使用、応答確認がない

  • 暗号化できない

FacilityとSeverityでの制御しかできない

  • ローテートが単独でできない
  • ディスクI/Oの処理が非効率

fsyncを毎回やるので、システムのパフォーマンスに影響

代替syslogデーモン
  • syslog-ng

従来のsyslogサーバーと設定ファイルの互換性がない

  • rsyslog

syslogdからフォークしたため、syslogサーバーとの互換性を保っている。

rsyslog

メッセージ転送の信頼性を重視している。

rsyslogの特徴
  • メッセージ転送の信頼性の向上

TCP対応、TLSによる暗号化、RELP対応、RFC3195の受信に対応

  • ログファイルの扱いの改善

2GB以上のログファイルに対応、ログのローテーションに対応、動的ファイル名に対応

  • データベースへの出力
  • 多様な出力先

メール、SNMPトラップ、HadoopのHDF

  • 出力するメッセージのカスタマイズ

テンプレートによって出力内容をカスタマイズ。マイクロ秒単位でタイムスタンプ出力

  • 柔軟なルールの記述

フィルタにより、細かな条件をかける。破棄がかける

サードパーティー製のモジュールも作成可能

rsyslogは2004年にsysklogdからフォークしてrsyslogプロジェクトを立ち上げる。

v6で後方互換性は無くなった。

バージョン番号の付け方
majar.minor.patchlevel

minorは偶数が安定版、奇数が開発版

rsyslogの設定について

設定ファイルの構成は従来と代わり、以下の四つ

  • グローバルディレクティブ

rsyslogの動作に影響を与える設定を記述。モジュール読み込み、モジュール固有の設定など

  • テンプレート

テンプレートを定義してアクションに割り当てると、メッセージの形式を制御できる
ex)ログをcsv形式で出力する
動的なファイル名をテンプレートで定義する。アクションに?テンプレート名を記述

  • アウトプットチャネル

アクションに大して様々な処理を行うことを目指した機能。現状ではファイいるとファイルの最大サイズに対する処理しかかけない
ex)ログのローテーション

  • ルール

セレクタとアクションの区切りにはタブ文字とスペースが使える(syslogはタブ文字だけ)
severityにnoneを記載するとそのfacilityには一致しない
ファイル名の先頭に-をつけると非同期書き込み
セレクターの代わりにフィルタを書くことができる。

    • プロパティベースフィルタ 条件に一致するかで判断する
    • 式ベースフィルタ 複雑な条件式を記述できる。文字列処理の関数も用意されてる

アクション。"@@hostname"でTCPでメッセージ転送、">"でDBに。"~"破棄、"^program"プログラムを実行

タイムスタンプはsyslogとはデフォルトの形式が違うので、syslogと同じ形式にしたい場合はディレクティブで設定しよう

サーバーがダウンしたらキューイングする機能がある。

mailerstudyセッション「メール暗号化入門」

@ttkzwさん

メールを利用する上での脅威
  • 盗聴
  • 否認
  • 改竄
  • 詐称
暗号

暗号文なら→盗聴されても内容がわからない

暗号の要素はアルゴリズムと鍵から成り立つ

現代の暗号に求められていることは、広く公開されていること、数学的に強度があること

共通鍵暗号方式では鍵の受け渡しが問題。信頼できる方法であらかじめ渡す必要がある。また、人数が増えると鍵の管理が大変

公開鍵暗号方式は暗号化と復号化を別々の鍵で行う。公開鍵は公開されてもいいので、配送問題が解決する。
ボブの公開鍵が本物であるかどうかを確認する必要がある

一方向ハッシュ関数

メッセージが改竄されればハッシュ値が変わるので、改竄が検知できる

ただし、ハッシュ値そのものの改竄の可能性がある→公開鍵暗号と組み合わせる(デジタル署名)

メッセージ認証コード

共通鍵とメッセージを使ってメッセージの人称のための値を算出する方法

MAC値が同じであれば同じ共通鍵と同じメッセージであることが確認できる。

共通鍵を使うので、鍵配送問題がある。

デジタル署名

メッセージのハッシュ値をプライベート鍵で暗号化したもの。

公開鍵と同じ問題が発生。

公開鍵証明書と公開鍵基盤

中間認証局はルート認証局に認証されている(中間証明書)

ルート認証鍵はOSやソフトウェアにバンドルされている形で配布する。

SSLのお話

今使われているのはSSL3.0。

TLS1.0はSSL3.0をベースにして開発。1999年にRFC2246に。CBC攻撃リスクを抱えている

TLS1.1 RFC4346 CBC攻撃に対する耐性の強化。

TLS1.1,1.2は実装があまり進んでいない

SSL2.0は無効にしないといけない。
SSL3.0、TLS1.0がよく使われているが、CBC攻撃のリスクあり
TLS1.1以降の利用が望ましいが、実装があまり進んでいない。

TLSプロトコルについて

ちょっとあとでまとめます。

サーバーの管理者が設定すること

公開鍵証明書

  • プライベート鍵
  • 中間証明書
  • サーバー公開鍵証明書

利用するバージョン
SSLv3、TLSv1

利用する暗号スイート

SMTPS

SMTPSSLTLSで暗号化する。
TCP465は正式なポート番号じゃない。IANAに登録していない。

STARTTLS

SMTPセッション中にTLS通信に切り替えるコマンド
RFC3207

LT「logと監視の微妙な関係 〜こんなlogはイヤだ〜」

@qryuuさん

Windowsのログイベントの話や、zabbixでの改行位置の扱いなど、現場で起こりそうな話が聞けてとても良かったです。