じゅのぶろ

社内SEが自宅でSOC/CSIRTするために色々頑張っていきたいブログ 画像が見れない場合はjavascriptを有効にするかデスクトップからご覧下さい。

自宅で通信ログ分析を始めるためのWebプロキシ構築

今日は我が家のPCやスマホ等の通信をロギングするためのプロキシサーバーを構築しようと思います。
まずこの記事ではインストールと起動まで

このブログではOSはKali linuxを使っていきます。

OS情報
Linux kali 4.19.0-kali4-amd64 #1 SMP Debian 4.19.28-2kali1 (2019-03-18) x86_64 GNU/Linux

Webプロキシは有名どころのSquidを利用します。 www.squid-cache.org

今回は最新版を使うためaptからではなくソースからインストールしてみようと思います(ソースからやってみたいだけ)。
Squid4の機能はこちら

インストール

トップページの右上「Download」を選択し
ページ遷移後、Stable(安定)Versionから今回は4.7を選択しました。





どの圧縮形式でもいいのですが、今回は「tar.gz」のリンクをコピーしwgetでファイル取得しました。

jnox@kali:~$ wget http://www1.jp.squid-cache.org/Versions/v4/squid-4.7.tar.gz
〜省略〜
‘squid-4.7.tar.gz’ saved [5246626/5246626]

取得したファイルをtarコマンドで展開します。

jnox@kali:~$ tar xf squid-4.7.tar.gz 
jnox@kali:~$ ls
squid-4.7  squid-4.7.tar.gz
jnox@kali:~$ cd squid-4.7/
jnox@kali:~/squid-4.7$ ls
acinclude   bootstrap.sh  ChangeLog  configure     contrib       COPYING  doc     icons    INSTALL  libltdl      Makefile.in  QUICKSTART  RELEASENOTES.html  SPONSORS  test-suite
aclocal.m4  cfgaux        compat     configure.ac  CONTRIBUTORS  CREDITS  errors  include  lib      Makefile.am  po4a.conf    README      scripts            src       tools

「./configure」の際に指定したいOptionあれば以下を参考にしてください。
今回は証明書の情報をロギングしたいため、「--with-openssl」を指定しました。 https://wiki.squid-cache.org/SquidFaq/CompilingSquid#configure_options http://www.squid-cache.org/Doc/config/ssl_bump/

jnox@kali:~/squid-4.7$ ./configure --with-openssl --enable-ssl-crtd
checking for a BSD-compatible install... /usr/bin/install -c
〜省略〜
checking for gawk... no
checking for gcc... no
checking for cc... no
checking for cl.exe... no
See `config.log' for more details

色々noとなっており足りませんでした。
「apt install gawk gcc g++」しました。
インストール後Makefileができあがりました。
makeコマンドはCPUのコア数に応じて並列化のjオプションを指定しましょう、
短時間で終わるようになるので。

jnox@kali:~/squid-4.7$ ./configure --with-openssl --enable-ssl-crtd
checking for a BSD-compatible install... /usr/bin/install -c
〜省略〜
config.status: creating Makefile
config.status: creating config.h
config.status: executing depfiles commands
config.status: executing libtool commands
jnox@kali:~/squid-4.7$ make all -j4 && make install

Optionを指定しない場合は「/usr/local/squid/sbin」にインストールされた。
ここからはrootユーザで作業します。

root@kali# /usr/local/squid/sbin/squid -v
Squid Cache: Version 4.7
Service Name: squid
configure options:  --enable-ltdl-convenience

PATHが通っていなかったので以下のコマンドでPATHを通しました。

root@kali# export PATH=$PATH:/usr/local/squid/sbin
//一時的な設定なのでログイン時に読み込むように.profile等に書き込むことをオススメします。

起動

公式サイトより「-k parse」オプションで起動時設定のチェックができるらしい。

root@kali# /usr/local/squid/sbin/squid -k parse
WARNING: Cannot write log file: /usr/local/squid/var/logs/cache.log
/usr/local/squid/var/logs/cache.log: Permission denied
         messages will be sent to 'stderr'.

rootユーザだが「Permission denied」エラーがでた。
ファイルがなかったので作成後、chmod 666でread/write権限を付与したところエラーが消えた。

root@kali# ls /usr/local/squid/var/logs/cache.log
ls: cannot access '/usr/local/squid/var/logs/cache.log': No such file or directory
root@kali# touch /usr/local/squid/var/logs/cache.log
root@kali# chmod 666 /usr/local/squid/var/logs/cache.log 

エラーが消えたら初回起動をする。
※ キャッシュフォルダを設定した場合は「-z」オプションを指定した起動 +キャッシュフォルダの作成+キャッシュフォルダのrw権限を付与する必要ありです。
デバッグオプション「-NCd1」を指定し、起動すると、エラーが出てしまった。

root@kali# /usr/local/squid/sbin/squid -NCd1
~省略~
2019/06/28 22:49:42| logfileHandleWrite: daemon:/usr/local/squid/var/logs/access.log: error writing ((32) Broken pipe)

これはファイルがないためエラーとなっているので、
ファイルを作成しrw権限を付与した。

root@kali# ls /usr/local/squid/var/logs/access.log
ls: cannot access '/usr/local/squid/var/logs/access.log': No such file or directory
root@kali# touch !$
touch /usr/local/squid/var/logs/access.log
root@kali# chmod 666 !$
chmod 666 /usr/local/squid/var/logs/access.log

再度デバッグオプションを付けて実行すると正常に起動した。
正常起動が確認できたらバックグラウンドで起動するため、一旦プロセスを停止し デバッグオプション無しでコマンドを実行すればOK。
初期設定では3128ポートでリッスンしている。

root@kali# /usr/local/squid/sbin/squid -NCd1
~省略~
2019/06/28 22:54:59| storeLateRelease: released 0 objects
///Ctrl + Cで終了
root@kali# /usr/local/squid/sbin/squid
root@kali# lsof -i:3128
COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
squid   9434 nobody   11u  IPv6  59183      0t0  TCP *:3128 (LISTEN)

実際にプロキシを経由して動作を確認する。 以下のようにcurlでプロキシを経由してgoogle.comに接続したところ
access.logにアクセスログが記録された。

curl -x http://127.0.0.1:3128 https://www.google.com
root@kali# cat /usr/local/squid/var/logs/access.log 
1561730444.497    270 127.0.0.1 TCP_TUNNEL/200 16541 CONNECT www.google.com:443 - HIER_DIRECT/172.217.26.36 -

再起動してもsquidサービスが起動するように公式サイトとinit.dテンプレートを参考にして
以下のファイル「/etc/init.d/squid」を作成した。

#!/bin/sh

### BEGIN INIT INFO
# Provides:            squid
# Required-Start:
# Should-Start:
# Required-Stop:
# Should-Stop:
# Default-Start:
# Default-Stop:
# Short-Description:
# Description:
# X-LFS-Provided-By:
### END INIT INFO

. /lib/lsb/init-functions

case "${1}" in
   start)
      log_info_msg "Starting..."
      /usr/local/squid/sbin/squid
      ;;

   stop)
      /usr/local/squid/sbin/squid -k shutdown
      n=120
      while /usr/local/squid/sbin/squid -k check && [ $n -gt 0 ]; do
    sleep 1
    echo -n .
    n=`expr $n - 1`
      done
      ;;

   restart)
      ${0} stop
      sleep 1
      ${0} start
      ;;

   *)
      echo "Usage: ${0} {start|stop|restart}"
      exit 1
      ;;
esac

exit 0

# End scriptname

ファイル作成後、権限を変更し「sysv-rc-conf」で自動起動設定をonにした。
reboot後もsquidサービスが起動することを確認できた。

root@kali# chmod 755 /etc/init.d/squid 
root@kali# sysv-rc-conf squid on
root@kali# sysv-rc-conf --list squid
squid        2:on   3:on    4:on    5:on

次回はログフォーマットの設定を紹介したい。