残念ながら、未だに稼働させる事が出来ておりません。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.
いくつかエラーが出ているようだ。後で調べてみる。
必要なパッケージ修正版