[Management][Network][Linux] 一部のlogstash設定にDNS逆引き処理を入れる

技術のお話し

ブログに対するアクセス元を確認できるようにしたい

ということで、鋭意logstashの設定を行ってきたんですが、得られた結果がIPアドレスであり、geoipでアクセス元の国は押さえやすいんですが、どこのネットワークから来たのかの判別が難しかったりするため、DNSの逆引き処理を加えることにしました。

ありがたいことに、logstashにはDNS逆引きをする処理を組み込むことができます。

logstashの設定に埋め込む構文

太字箇所が関わるところで、今回ブログサイトはCloudFlareとUTMを中継してやってくるため、元々のクライアント情報はx_forwarded_forで拾わざるを得ず、その値はx_forwarded_for_realipと言う変数で受け取るようにしてました。

まず一旦これをx_forwarded_for_fqdnに複写します。
続いて、この変数を用いて逆引き名前解決を行い、得られたFQDNをx_forwarded_for_fqdnへ置換してしまいます。これにより、IPアドレスをキャッシュDNSサーバと照会して、FQDNを取り出すことができます。

filter {
  grok{
    match => [
    :
    ]
    add_field => {
      "ipversion" => "4"
      "syslog_received_at" => "%{@timestamp}"
      "x_forwarded_for_fqdn" => "%{x_forwarded_for_realip}" 
    }
  }
    :
  dns {
    nameserver => [ "<キャッシュDNSサーバのIPアドレス>" ]
    hit_cache_size => 4096
    hit_cache_ttl => 900
    failed_cache_size => 512
    failed_cache_ttl => 900

    reverse => ["x_forwarded_for_fqdn"]
    action => replace
  }
}

これによって、x_forwarded_for_fqdnを参照すればホスト名ベースでアクセス元がわかると。

実際に見てみる

それではkibanaで集計をとってみる。

無事、いくつかの凡例がIPアドレスではなく、FQDNになっていますと。

逆引きできなかったIPアドレスはIPアドレスのままになっていました。その場合、logstashのログにはこんなメッセージも出力されていたり。

[2018-04-03T00:32:40,655][ERROR][logstash.filters.dns ] DNS: timeout on resolving address. {:field=>"srcfqdn", :value=>"*****"}

実際には、逆引きできたのもあるはあるんですが、うまく複数のIPアドレスを分解できてないケースもあったりするため、引き続き内容の見直しを続ける必要がありそうです。

 

Tags:

Comments are closed

PAGE TOP