Squidのログフォーマット設定
設定はsquid.confで行います。
※私の環境では「/usr/local/squid/etc/squid.conf」でした。
必須の設定は2つで「ログフォーマットの定義」と「ログ出力ファイルの指定」です。
ログフォーマットの定義
以下のように名前とログフォーマットの指定を行います。
logformat <名前> <ログフォーマット指定>
デフォルトで定義されているものは以下の5種類のようです。
logformat squid %ts.%03tu %6tr %>a %Ss/%03>Hs %<st %rm %ru %[un %Sh/%<a %mt logformat common %>a %[ui %[un [%tl] "%rm %ru HTTP/%rv" %>Hs %<st %Ss:%Sh logformat combined %>a %[ui %[un [%tl] "%rm %ru HTTP/%rv" %>Hs %<st "%{Referer}>h" "%{User-Agent}>h" %Ss:%Sh logformat referrer %ts.%03tu %>a %{Referer}>h %ru logformat useragent %>a [%tl] "%{User-Agent}>h"
ログ出力ファイルの指定
定義したログフォーマットとログ出力先を指定します。
以下は定義済みの「combined」をフォーマットとして利用する例です。
access_log daemon:/usr/local/squid/var/logs/access.log combined
フォーマットコード
リンクから公式サイトのフォーマット一覧が確認できます。 squid : logformat configuration directive よく利用するフォーマットコードを以下に記載します。
時間
フォーマットコード | 意味 | 例 |
---|---|---|
%ts | エポック秒 | 1561905301 |
%tu | エポックミリ秒 | 001 |
%tl | ローカル時間 | 30/Jun/2019:23:30:16 +0900 |
* 通りがかりの人のコメント通りで修正しました。ありがとうございます。
一般に%tsと%tuは組み合わせて使われることが多いようです。 「%ts.%03tu」→「03」は0で埋めて3桁にするということです。
%tlは更に細かくフォーマットの順番を指定できます。
日本でなれた形式にするには以下のようにします。
%{%Y/%m/%d %H:%M:%S}tl → 2019/07/01 00:00:00
通信
フォーマットコード | 意味 | 例 |
---|---|---|
%>a | 接続元のIPアドレス | 192.168.1.2 |
%<a | 宛先のIPアドレス | 192.168.1.1 |
%>Hs | HTTPステータスコード | 200 |
%mt | MIMEコンテントタイプ | text/html, text/plain |
%rm | リクエストメソッド | GET |
%ru | リクエストURL(クエリなし) | http://192.168.1.1/hoge? |
%>ru | リクエストURL(フル) | http://192.168.1.1/hoge?fuga |
%{Referer}>h | リファラ | http://192.168.1.1/login.html?test |
%{User-Agent}>h | ユーザエージェント | Mozilla/5.0 (compatible; MSIE 10.0; ) |
squidのデフォルトがクエリなし「%ru」なので出力したい方は 「%ru」ではなく「%>ru」を使うようにしましょう。
※クエリにはセンシティブな情報が含まれることもあるのでログファイルの扱いにはご注意ください。
ssl/tls
ssl/tlsのロギングを有効にするにはssl bumpを有効にする必要があります。
これについては別記事でご紹介します。
フォーマットコード | 意味 | 例 |
---|---|---|
%ssl::<cert_subject | 接続先サイトのSubject | /C=US/ST=California/L=Mountain View/O=Google LLC/CN=www.google.com |
%ssl::<cert_issuer | 接続先サイトのIssuer | /C=US/O=Google Trust Services/CN=Google Internet Authority G3 |
%ssl::>negotiated_version | クライアントが要求したTLSバージョン | TLS/1.2 |
%ssl::<negotiated_version | サーバが応答したTLSバージョン | TLS/1.2 |
%ssl::>received_hello_version | クライアントHelloメッセージのTLSバージョン | TLS/1.0 |
%ssl::<received_hello_version | サーバHelloメッセージのTLSバージョン | TLS/1.2 |
%ssl::>received_supported_version | クライアントがサポートする最大のTLSバージョン | TLS/1.2 |
%ssl::<received_supported_version | サーバがサポートする最大のTLSバージョン | TLS/1.2 |
%ssl::>negotiated_cipher | クライアントが要求したCipher Suite | AES256-GCM-SHA384 |
%ssl::<negotiated_cipher | サーバが応答したCipher Suite | ECDHE-ECDSA-AES128-GCM-SHA256 |
色々見ましたが最終的に私はcombinedをベースにして、足りないと感じた値を追加し以下にしました。 ※後ほどこのログをSplunkに取り込んでパースしたいと思います。
logformat mycombined "%{%Y/%m/%d %H:%M:%S}tl.%03tu" %>a %>st %<a %<st %>rP %mt "%rm %>ru HTTP/%rv" %>Hs "%{Referer}>h" "%{User-Agent}>h" "%Ss:%Sh" "%ssl::<cert_subject" "%ssl::<cert_issuer" "%ssl::<received_hello_version" access_log daemon:/usr/local/squid/var/logs/access.log mycombined