Squidを使ったHTTPS復号プロキシの構築+Splunkでのログ取り込み

CentOS7上にSSL Bump機能を持つSquidProxyサーバの構築+Splunkでのログ取り込みの手順メモ

CentOS 7のインストール

  1. CentOS7を最小インストールする

  2. パッケージのアップデートを行う
    yum update

  3. GUIで操作できるよう、パッケージをインストールする。
    yum -y groupinstall "GNOME Desktop"

  4. GUIで起動するように設定し、再起動する。
    systemctl set-default graphical.target
    reboot

CentOS7を選んだ理由として、Squidのオプションに以下2つがデフォルトで入っているため
・ --with-openssl
・ --enable-ssl-crtd

Squidのインストール

  1. Squidのインストール
    yum install squid

  2. 自己証明書を作成する
    cd /etc/pki/CA/private
    openssl req -new -newkey rsa:2048 -sha256 -days 3650 -nodes -x509 -keyout oreoreCA.pem -out oreoreCA.pem

  3. ブラウザにインポートするための証明書を作成する。
    openssl x509 -in oreoreCA.pem -outform DER -out oreoreCA.der

  4. 証明書データベース用ディレクトリを作成し、データベースを初期化する
    /usr/lib64/squid/ssl_crtd -c -s /var/lib/ssl_db

  5. 所有者をsquidユーザに変更
    chown -R squid:squid /var/lib/ssl_db

  6. SELINUXコンテキストの変更
    chcon -R -t squid_cache_t /var/lib/ssl_db

  7. Squidの設定を変更する。
    vi /etc/squid/squid.conf
    Recommended minimum configuration:の下に以下を記載する。

http_port 3128 ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB cert=/etc/pki/CA/private/oreoreCA.pem

always_direct allow all
ssl_bump client-first all

sslproxy_cert_error allow all
sslproxy_flags DONT_VERIFY_PEER

cache_dir aufs /var/spool/squid 100 16 256

logformat elff %{%Y-%m-%d}tg %{%H:%M:%S}tg.%03tu %tr %>a %[un - - - - "%{Referer}>h" %03>Hs %Ss %rm %mt %>rs %>rd %>rP %>ru - - "%{User-Agent}>h" %<la %<st %>st - %>p %Sh %<a "%{Cookie}>h"
access_log /var/log/squid/access_elff.log elff

 8. ブラウザにプロキシ設定を行う。
  プロキシサーバを127.0.0.1:3128に設定する。
  oreoreCA.derを認証局証明書に追加する。

SplunkでSquidログの取り込み設定

  1. splunk のインストール
    rpm -ivh <splunk_package_name>.rpm

  2. /opt/splunk/etc/apps/search/local/以下のファイルに追記する。

inputs.conf

[monitor:///var/log/squid]
disabled = false
index = proxy
whitelist = access_elff*
sourcetype = squid_elff

props.conf

[squid_elff]
SHOULD_LINEMERGE=true
NO_BINARY_CHECK=true
CHARSET=UTF-8
disabled=false
KV_MODE = none
TZ=UTC
REPORT-squid_elff = squid_elff

transforms.conf

[squid_elff]
REGEX = ^([^ ]+\s[^ ]+)\s+(?<duration>\d+)\s+(?<src_ip>[^\s]+)\s+(?<user>[^\s]+)\s+(-)\s+(-)\s+(-)\s+(?<category>[^\s]+)\s+"(?<http_referrer>[^\s]+)"\s+(?<status>\d+)\s+(?<vendor_action>[^\s]+)\s+(?<http_method>[^\s]+)\s+(?<http_content_type>[^\s]+)\s+([^\s]+)\s+(?<url_host>[^\s]+)\s+(?<dest_port>[^\s]+)\s+(?<url>(\w+://)?[a-zA-Z0-9\-.:]+(?<uri_path>[^\s\?"]+)(?<uri_query>\??[^\s"]*))\s+([^\s]+)\s+([^\s]+)\s+"(?<http_user_agent>.*)"\s+([^\s]+)\s+(?<bytes_in>\d+)\s+(?<bytes_out>\d+)\s+([^\s]+)\s+(?<src_port>\d+)\s+(?<dest_status>[^\s]+)\s+(?<dest_ip>[^\s]+)\s+"(?<cookie>.*)"