残念ながら、未だに稼働させる事が出来ておりません。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 |
|
愚痴はこれくらいにして、自分で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.
いくつかエラーが出ているようだ。後で調べてみる。