raspi:squid SSL Bump

残念ながら、未だに稼働させる事が出来ておりません。2018/10/9

https://plaza.rakuten.co.jp/tshinoza/diary/201710130000/?scid=we_blg_pc_lastctgy_2_title

こちらにも参考になる事が書いてあったので、メモしておく。

鍵の変換について

https://rms-digicert.ne.jp/howto/basis/file_types.html

pem→der

openssl x509 -in [input_file] -inform PEM -out [output_file] -outform DER

作っておく

openssl x509 -in cert.pem -inform PEM -out cert.der -outform DER

Squidで通過型Proxyを建てたが、https通信の中を見ることが出来ず、Proxyで判別することが出来ない。

SSL Bumpを利用すると、Squidの内部で暗号を解除し、中身を見た後に、再度SSLをかけるような処理をすると、httpsのアクセスでもproxy処理することが出来る。

外部に向けてSquid SSL Bumpを使うと、httpsであっても、アクセス解析が可能となるので、注意が必要になる。
今回は、内部のNetworkのみからアクセス可能としているので、その点は問題無いと思う。

raspbianのsquidはSSL Bumpに対応していないので、sourceからbuildする。

sourceを入手出来るよう、sources.listを変更する。

# vi /etc/apt/sources.list
deb http://raspbian.raspberrypi.org/raspbian/ stretch main contrib non-free rpi
# Uncomment line below then 'apt-get update' to enable 'apt-get source'
deb-src http://raspbian.raspberrypi.org/raspbian/ stretch main contrib non-free rpi

変更したら、apt-get updateする。

# apt-get update

Buildに必要になりそうなものをinstallする。

# apt install devscripts build-essential fakeroot libssl-dev libldap2-dev libpam0g-dev libdb-dev cdbs libsasl2-dev debhelper libcppunit-dev libkrb5-dev comerr-dev libcap-dev

rootから出る。
$ cd ~
$ mkdir squid-source
$ cd squid-source
$ apt-get source squid3
$ cd squid3-3.5.23/
$ vi debian/rules
DEB_CONFIGURE_EXTRA_FLAGS に option を追加する。
                --with-large-files \
                --with-openssl \
                --enable-ssl \
                --enable-ssl-crtd \
                --with-default-user=proxy

あとは、configureしてbuildする。

$ pwd
/home/username/squid-source/squid3-3.5.23
$ ./configure
$ debuild -us -uc -b
 dpkg-buildpackage -rfakeroot -us -uc
dpkg-buildpackage: info: source package squid3
dpkg-buildpackage: info: source version 3.5.23-5+deb9u1
dpkg-buildpackage: info: source distribution stretch-security
dpkg-buildpackage: info: source changed by Salvatore Bonaccorso <carnil@debian.org>
 dpkg-source --before-build squid3-3.5.23
dpkg-buildpackage: info: host architecture armhf
dpkg-checkbuilddeps: error: Unmet build dependencies: libecap3-dev (>= 1.0.1-2) libexpat1-dev libxml2-dev libnetfilter-conntrack-dev nettle-dev libgnutls28-dev
dpkg-buildpackage: warning: build dependencies/conflicts unsatisfied; aborting
dpkg-buildpackage: warning: (Use -d flag to override.)
debuild: fatal error at line 1116:
dpkg-buildpackage -rfakeroot -us -uc failed

packageが足らないらしい。

dpkg-checkbuilddeps: error: Unmet build dependencies: libecap3-dev (>= 1.0.1-2) libexpat1-dev libxml2-dev libnetfilter-conntrack-dev nettle-dev libgnutls28-dev

aptで入れる。

$ sudo apt-get install libexpat1-dev libxml2-dev libnetfilter-conntrack-dev nettle-dev libgnutls28-dev

これで、Buildする環境が整いました。

$ debuild -us -uc -b

makeするのにかなり時間が必要なるので、じっくり待つことにする。
待っている間に、apt-get でinstallしたsquidのバージョンを調べておく。

$ apt-cache policy squid
squid:
  Installed: 3.5.23-5+deb9u1
  Candidate: 3.5.23-5+deb9u1
  Version table:
 *** 3.5.23-5+deb9u1 500
        500 http://raspbian.raspberrypi.org/raspbian stretch/main armhf Packages
        100 /var/lib/dpkg/status
$ dpkg -l |grep squid
ii  squid                            3.5.23-5+deb9u1              armhf        Full featured Web Proxy cache (HTTP proxy)
ii  squid-common                     3.5.23-5+deb9u1              all          Full featured Web Proxy cache (HTTP proxy) - common files
ii  squid-langpack                   20150704-1                   all          Localized error pages for Squid

やっぱり、makeしているのと同じバージョンです。
squid本体だけ更新すればよいみたい。

makeしている途中で、エラーを吐いてしまっていた。

Makefile:796: recipe for target 'PortCfg.lo' failed
make[4]: *** [PortCfg.lo] Error 1
make[4]: Leaving directory '/home/kaz/squid-source/squid3-3.5.23/src/anyp'
Makefile:7291: recipe for target 'all-recursive' failed
make[3]: *** [all-recursive] Error 1
make[3]: Leaving directory '/home/kaz/squid-source/squid3-3.5.23/src'
Makefile:6152: recipe for target 'all' failed
make[2]: *** [all] Error 2
make[2]: Leaving directory '/home/kaz/squid-source/squid3-3.5.23/src'

調べてみると、

http://squid-web-proxy-cache.1019090.n4.nabble.com/Build-errors-with-Squid-3-5-24-under-Debian-td4681637.html

「Squid 3.5はOpenSSL v1.1に対応していないのが原因」らしいので、先人の知恵を借りて、

sudo apt-get install libssl1.0-dev

でもって、再buildする。

$ debuild -us -uc -b

makeを待っている間に、squid.confの修正箇所を確認しておこう。
httpsにするわけだから、鍵が必要です。
proftpdと同じく、Let’s Encryptで作成した鍵を流用する。どの鍵を使うかわからなかったので、とりあえず、後でオレオレ証明書を作成する事にする。
confのバックアップもしておこう。

$ sudo cp squid.conf squid.conf-http_only
$ vi /etc/squid.conf
http_port 3128 intercept
https_port 3129 intercept ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB cert=/etc/squid/ssl/cacert.pem key=/etc/squid/ssl/caprivatekey.pem

always_direct allow all

acl step1 at_step SslBump1
acl step2 at_step SslBump2
acl nobumpSites ssl::server_name [hostname]
ssl_bump peek step1 
ssl_bump splice step2 nobumpSites
ssl_bump bump all

sslcrtd_program /usr/lib/squid3/ssl_crtd -s /var/lib/ssl_db -M 4MB

#http_port 3128
http_port 3128 intercept
https_port 3129 intercept ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB cert=/etc/letsencrypt/live/ras.viasv.com/cacert.pem key=/etc/letsencrypt/live/ras.viasv.com/privkey.pem

always_direct allow all

acl step1 at_step SslBump1
acl step2 at_step SslBump2
acl nobumpSites ssl::server_name [hostname]
ssl_bump peek step1
ssl_bump splice step2 nobumpSites
ssl_bump bump all

sslcrtd_program /usr/lib/squid3/ssl_crtd -s /var/lib/ssl_db -M 4MB

request_header_access X-Forwarded-For deny all
request_header_access Via deny all
request_header_access Cache-Control deny all
reply_header_access X-Forwarded-For deny all
reply_header_access Via deny all
reply_header_access Cache-Control deny all

forwarded_for off
via off

ようやくBuildが終わった。Build始めてから5時間以上かかった計算だ。昔のマシンでkernel makeに12時間係ったことを思えば早いくらいだ。
出来上がったファイルは、たくさんある。5時間以上かかったので、バックアップでWEB上に上げておこう。

FILES MD5 CheckSum

squid-cgi_3.5.23-5+deb9u1_armhf.deb

d96d5240cd3a61683bc780cdf8887d5f
squid-common_3.5.23-5+deb9u1_all.deb c0faf3cbf4b5c6f1a2073f70ab44a28e
squid-dbg_3.5.23-5+deb9u1_armhf.deb
 22515b9967131a82190098fa9478e2e2
squid-purge_3.5.23-5+deb9u1_armhf.deb
e58a041efa8e2af2a499c5f04ce87602
squid_3.5.23-5+deb9u1_armhf.deb
4cc9b0a305517186dc741e658f64ed53
squidclient_3.5.23-5+deb9u1_armhf.deb 
fbce9256db550da79d45c5282ef14575

Download

愚痴はこれくらいにして、自分でBuildしたとはいえ、インストールしてどうなるかわからないので、インストール前に挙動の確認を行う。

$ sudo dpkg --no-act squid3_3.5.23-5+deb9u1_all.deb

問題なさそうなので、インストールする。

$ sudo dpkg -i squid_3.5.23-5+deb9u1_amd64.deb

squid.confの書き方が間違っていると思う。起動しないw
squid用にオレオレ証明書を作成する。

https://webnetforce.net/strongswan-ikev2-on-sakura-vps/

ipsecが使えるように、strongswanをインストール
後々ipsecを導入するかもしれないからとりあえず、一式作成しておく

$ sudo apt-get install strongswan strongswan-pki

鍵を作っていく

$ ipsec pki --gen --type rsa --size 4096 --outform der > caprivatekey.der
$ ipsec pki --self --ca --lifetime 3650 --in caprivatekey.der --type rsa --dn "C=JP, O=Kyoto, CN=Kyoto" --outform der > cacert.der

証明書の確認

$ ipsec pki --print --in cacert.der
  subject:  "C=JP, O=Kyoto, CN=Kyoto"
  issuer:   "C=JP, O=Kyoto, CN=Kyoto"
  validity:  not before Oct 04 23:30:49 2018, ok
             not after  Oct 01 23:30:49 2028, ok (expires in 3649 days)
  serial:    *****
  flags:     CA CRLSign self-signed 
  subjkeyId: *****
  pubkey:    RSA 4096 bits
  keyid:     *****
  subjkey:   *****

サーバー証明書

$ ipsec pki --gen --type rsa --size 4096 --outform der > serverkey.der
$ ipsec pki --pub --in serverkey.der --type rsa | ipsec pki --issue --lifetime 3650 --cacert cacert.der --cakey caprivatekey.der --dn "C=JP, O=Kyoto, CN=Kyoto" --san viasv --san @viasv --flag serverAuth --flag ikeIntermediate --outform der > servercert.der

クライアント証明書

$ ipsec pki --gen --type rsa --size 4096 --outform pem > client.pem
$ ipsec pki --pub --in client.pem --type rsa |
ipsec pki --issue --lifetime 3650 --cacert cacert.der --cakey caprivatekey.der --dn "C=JP, O=Kyoto, CN=client@viasav" --san client@Kyoto --outform pem > clientcert.pem
$ openssl x509 -inform DER -in cacert.der -out cacert.pem -outform PEM
$ openssl pkcs12 -export -inkey client.pem -in clientcert.pem -name "Client Certificarte" -certfile cacert.pem -caname "CA Certificate" -out viasv.p12
$ openssl rsa -in caprivatekey.der -inform der -out caprivatekey.pem

Buildしてdpkg -i して、conf書換、鍵の生成がおわり、起動してみる。

$ sudo service squid start

エラーが表示されなければ、うまく起動できている。
確認してみよう。

$ journalctl -xe
-- Unit squid.service has begun starting up.
Oct 05 00:09:57 ras squid[2656]: Starting Squid HTTP Proxy: squid2018/10/05 00:09:57| refreshAddToList: Unknown option '\.(gif|png|jpg|jpeg|ico)$': ignore-expire
Oct 05 00:09:57 ras squid[2656]: 2018/10/05 00:09:57| refreshAddToList: Unknown option '\.(iso|avi|wav|mp3|mp4|mpeg|swf|flv|x-flv)$': ignore-expire
Oct 05 00:09:57 ras squid[2656]: 2018/10/05 00:09:57| refreshAddToList: Unknown option '\.(deb|rpm|exe|zip|tar|tgz|ram|rar|bin|ppt|doc|tiff)$': ignore-expire
Oct 05 00:09:57 ras squid[2656]: 2018/10/05 00:09:57| ERROR: Directive 'upgrade_http0.9' is obsolete.
Oct 05 00:09:57 ras squid[2656]: 2018/10/05 00:09:57| ERROR: Directive 'broken_vary_encoding' is obsolete.
Oct 05 00:09:57 ras squid[2656]: 2018/10/05 00:09:57| ERROR: Directive 'extension_methods' is obsolete.
Oct 05 00:09:57 ras squid[2656]: 2018/10/05 00:09:57| ERROR: Directive 'hierarchy_stoplist' is obsolete.
Oct 05 00:09:58 ras squid[2695]: Squid Parent: will start 1 kids
Oct 05 00:09:58 ras squid[2695]: Squid Parent: (squid-1) process 2697 started
Oct 05 00:09:58 ras squid[2656]: .
Oct 05 00:09:58 ras systemd[1]: squid.service: PID file /var/run/squid.pid not readable (yet?) after start: No such file or directory
Oct 05 00:10:00 ras systemd[1]: squid.service: Supervising process 2697 which is not our child. We'll most likely not notice when it exits.
Oct 05 00:10:00 ras systemd[1]: Started LSB: Squid HTTP Proxy version 3.x.
-- Subject: Unit squid.service has finished start-up
-- Defined-By: systemd
-- Support: https://www.debian.org/support
-- 
-- Unit squid.service has finished starting up.
-- 
-- The start-up result is done.

いくつかエラーが出ているようだ。後で調べてみる。

raspi:squid SSL Bump” への1件のフィードバック

  1. taizho のコメント:

    必要なパッケージ修正版

    # apt install devscripts build-essential fakeroot libssl-dev libldap2-dev libpam0g-dev libdb-dev cdbs libsasl2-dev debhelper libcppunit-dev libkrb5-dev comerr-dev libcap-dev libecap3-dev libexpat1-dev libxml2-dev libnetfilter-conntrack-dev nettle-dev libgnutls28-dev libssl1.0-dev
    

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA