Apacheアクセスログからユーザーエージェントを取り出す


Apacheのアクセスログからユーザーエージェントを抽出してTLS1.2以上に対応していないOS、ブラウザからどれくらいアクセスがあるかを調査する機会があったのでそのアウトプットです。

ユーザーエージェント?TLS?

最初聞いたときは私はどちらも理解していなかったのでまずは用語を調べるところから始めました。

ユーザーエージェント

インターネット利用者が利用しているOS、ブラウザの情報のことです。実際は下記の様な文字列が記載されています。(下記引用)

たとえば、「Windows 10ユーザーがChrome バージョン90を使ってアクセスしてきた場合」は、以下のような文字列が、ユーザーエージェントとして識別される。
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36

TLS

TLS(Transport Layer Security)とは、安全に通信をするためのセキュリティプロトコルのことで、第三者が通信を覗けたり、改ざんできない様にするための仕組みです。同じセキュリティプロトコルのSSLの後継です。

今回行った作業はApacheのアクセスログからユーザーエージェント情報を抜き出して、利用者の使用しているOS、ブラウザがTLS1.2以上に対応したブラウザであるかの確認を行いました。現在はTLSv1.0,1.1は非推奨なので無効化したときのクライアントへの影響を調査するためです。

アクセスログの確認

私が作業した環境は設定ファイルで別の場所に出力していましたが、ログの出力先はデフォルトで/var/log/httpd/配置されている様です。

少数のアクセスログから抽出するだけなら目視で確認も良いかもしれませんが、今回は一年分の膨大な情報を確認することがあったのでユーザーエージェントのみを抽出して種類ごとにカウントする集計コマンドを使用しました。

awkコマンド

入力として受け取った文字列に対して、フィールド区切り文字やレコード区切り文字を指定し、「列」に対する処理を行うためのコマンドです。

実際に使用したコマンドは以下になります。

コマンド実行により負荷をかけると問題があるので本番環境で直接行わない方がよいです。

cat access_log* | awk -F '"' '{print $6}' | sort | uniq -c | sort -n -r

ログの設定にも依ると思いますが、私の作業した環境では1列目にユーザーエージェント種類ごとの数、2列目にユーザーエージェントの内容が出力されました。

このユーザーエージェントの内容をもとにTLS1.2以上に対応していない物はどれくらいあるのかをチェックしました。

参考にした情報

数が多いのと、知らないことばかりで大変でしたが多くの学びになりました。