自宅で通信ログ分析を始めるための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
次回はログフォーマットの設定を紹介したい。