lnav-LinuxターミナルからApacheログを監視および分析する


2週間も経たないうちに、Wannacryランサムウェア攻撃により数千台のコンピューターが侵害され、大企業と個人の両方にかなりの損失が発生しました。これは、近年発見された他の広範な脆弱性(Shellshockバグなど)とともに、ミッションクリティカルなシステムを常に把握することの重要性を浮き彫りにします。

多くの場合、脆弱性は1つの特定のオペレーティングシステムまたはソフトウェアコンポーネントを対象としていますが、ネットワークに出入りするトラフィックを調べることは、責任のある資産を保護するための重要な助けになります。

ご存じのとおり、この情報を探す最初の場所はシステムログです。このタスクを簡単にするために、この記事では、高度なログファイルビューアであるlnavをインストールして使用する方法について説明します。 lnavを使用すると、複数の種類のログを同時に監視し、ホットキーを使用してファイルをナビゲートし、アクセスとエラーの要約ヒストグラムを生成できます。だから読み続けてください!

Linuxでのlnavのインストールと起動

lnavをインストールするには、ディストリビューションのパッケージ管理システムを使用してください。

# aptitude install lnav          [Debian and derivatives]
# yum install epel-release lnav  [CentOS 7 and similar]

インストールが完了したら、lnavを起動し、続いて検査対象のログが配置されているディレクトリへの絶対パスを起動します。これは通常/var/log になるため、次のようにします。

# lnav /var/log/httpd

CentOS7でApacheWebサーバーのログを検査するには:

前の画像に示されている出力を簡単に調べてみましょう。

  • The top right corner shows the files currently being inspected (access_log-20170519 and access_log). As you scroll down or up, you will note that the file names may change as you go from one to another.
  • 40x HTTP responses (for example, Not Found or Forbidden) are displayed in bold, whereas 20x responses are shown in regular text.
  • IP addresses appear in bold green.

確かに見栄えがいいですね。しかし、もう少し深く掘り下げてみましょう。lnavがきれいな色の出力以上のものを提供することがわかります。

エラーログが表示されない理由について知りたい場合は、この記事の後半で答えを見つけることができます。だから読み続けてください!

オプションとホットキーを使用した出力の変更

先に進む前に、lnavの出力と使用可能なビューをより簡単に移動できるようにするいくつかのホットキーをリストしましょう。

  • e or E to jump to the next / previous error message.
  • w or W to jump to the next / previous warning message.
  • b or Backspace to move to the previous page.
  • Space to move to the next page.
  • g or G to move to the top / bottom of the current view.

ログがローテーションされると、logrotate構成ファイルで指定された設定に応じて、古いファイルが圧縮される(または圧縮されない)場合があります。圧縮ファイルを出力に含めるには、次のようにlnavを起動します。

# lnav -r /var/log/httpd

lnavの動作を詳しく調べたい場合は、次のように、 -d オプションに続けて、デバッグ情報が書き込まれるファイル名を指定してプログラムを起動できます。

# lnav /var/log/httpd -d lnav.txt

この例では、lnavの起動時に生成されるデバッグ情報は、現在の作業ディレクトリ内のlnav.txtという名前のファイルに書き込まれます。

そのファイルの最初の数行を次の画像に示します。

強調表示されたテキストは、lnavがデフォルトのフォーマットファイル、より具体的には、Apacheアクセスログを解析するためのaccess_logフォーマットをロードしたことを示しています。さらに、lnavを使用すると、各出力行を解析できるため、出力の視覚化と理解が容易になります。

この機能を使用するには、プログラムを起動して、解析する行を選択します。選択した行は常にウィンドウの上部にある行です。次に、 p を押すと、次の結果が表示されます。

通常モードに戻るには、もう一度 p を押します。

ここで、日付と時刻ごとにログの要約を表示する場合は、 i を押します。たとえば、強調表示されたテキストは、4月10日月曜日の午後10時から午後11時の間に37件のHTTPリクエストがあり、14件でエラーが発生したことを示しています。

上記のヒストグラムに基づいて潜在的な問題を特定したら、 i を押してビューを終了し、前述のようにパーサーを使用してビューを詳細に調べることができます。または、セミコロンを入力して標準クエリを作成することにより、組み込みのSQL機能を使用することもできます。たとえば、次のようにします。

;.schema

データベーススキーマで使用可能なテーブルを表示します。適切なテーブル(この場合はaccess_log)を特定したら、 q を押してから、次のクエリを使用して、195.154.230.31からのリクエストに関する利用可能なすべての情報を返します。

;SELECT * FROM access_log WHERE c_ip='195.154.230.31'

log_timeで結果をフィルタリングすることもできることに注意してください。重要なのは、小さなSQLを投入すると、lnavで何ができるかについては空が限界になります。

Apacheのデフォルトのログ形式

多くのログ形式はデフォルトでlnavでロードされるため、私たちの介入なしに解析されます。このリストは、公式ドキュメントの「ログ形式」セクションで確認できます。

デフォルトの形式は〜/ .lnav/formats/default/default-formats.json.sampleで指定され、その他は .json 拡張子を使用して〜/ .lnav/formatsに追加できます。

ただし、これらのファイルを編集するには、JSON(Javascript Object Notation)およびPCRE(Perl-Compatible Regular Expressions)ライブラリにある程度精通している必要があります。

では、なぜlnavはApacheエラーログファイルを表示しなかったのですか?その理由は、これらのログが既存の形式ファイルの正規表現と一致しないため、通常のテキストファイル(特定のログ形式のないファイルを意味する)として扱われるためです。

前述のように、JSONとPCREに少なくともある程度慣れれば、独自の形式を作成できます。これは、たとえば、カスタムApacheログを定義した場合に役立ちます。

Apacheアクセスログを使用してlnavの使用方法を示しましたが、このツールを使用して表示および解析できるログには他にもいくつかの種類があることに注意してください。ツールが特定のログを認識しない場合は、追加のフォーマットを作成し、ここに示されている指示に従ってそれらをインストールできます。

この記事について質問やコメントがありますか?いつものように、以下のフォームを使用してお気軽にお知らせください。返信お待ちしています!