pslaboが試したことの記録

はてなダイヤリーからはてなブログに引っ越してきました

この日記は現在実行中の減量記録を含む個人的なメモとして始めましたが、最近はコンピュータやガジェット、ハック、セキュリティネタのほうがメインになっております。

はてなダイヤリー時代はカテゴリ分けが適当だったのですが、これはそのうち直します。


Ubuntu 16.04 LTS で squid の透過型プロキシを立てるために squid をリビルドする

以前に、CentOS上のSquidSSLインターセプトしてフィルタリングする透過型プロキシを立てて、さらに Google の個人アカウント利用を禁止する設定を紹介しました。

pslabo.hatenablog.com

さて、同じことを Ubuntu 16.04 LTS で行おうとしてみたのですが、標準のリポジトリから配布されているバイナリでは、これは行えないようでした。その理由は下記の理由によります。

  • Ubuntu 向けの squid パッケージングは with-openssl を付けずにビルドされている

そこで、 Ubuntu 16.04 LTS で同じ設定を作るために、squid のリビルドを行ってみることにしました。

作業の流れ

概ね、以下の7ステップです。

  • source をダウンロードできるように apt の設定を変更する
  • ビルドに必要なパッケージをインストールする
  • ソースコードをダウンロードする
  • ビルドの設定を書き換える
  • ビルドする
  • ビルドしたパッケージをインストールする
  • apt update / apt upgrade で野良パッケージが標準リポジトリのパッケージで上書きされないようにする

source をダウンロードできるように apt の設定を変更する

sudo vim /etc/apt/sources.list します。ここで必要な設定は以下のエントリです。

deb-src http://jp.archive.ubuntu.com/ubuntu/ xenial main restricted

書き換えたら sudo apt update しておきます。

ビルドに必要なパッケージをインストールする

ここらへんをインストールしておきます。

sudo apt install devscripts build-essential fakeroot libssl-dev

ソースコードをダウンロードする

こんな感じですね。するとソースコードは git clone でもイケると言われます。しかしダウンロード自体は行なわれますので、今回はそのままで行くことにします。

$ apt source squid
Reading package lists... Done
Picking 'squid3' as source package instead of 'squid'
NOTICE: 'squid3' packaging is maintained in the 'Git' version control system at:
git://anonscm.debian.org/pkg-squid/pkg-squid3.git/
Please use:
git clone git://anonscm.debian.org/pkg-squid/pkg-squid3.git/
to retrieve the latest (possibly unreleased) updates to the package.
Skipping already downloaded file 'squid3_3.5.12-1ubuntu7.dsc'
Skipping already downloaded file 'squid3_3.5.12.orig.tar.gz'
Skipping already downloaded file 'squid3_3.5.12-1ubuntu7.debian.tar.xz'
Need to get 0 B of source archives.
Skipping unpack of already unpacked source in squid3-3.5.12

ま、今後は Git clone するかなあ。

ビルドの設定を書き換える

こんな感じで。

$ cd squid3-3.5.12/
$ vim debian/rules
"Configure the package” sectionに2行足す
--with-openssl=yes \
--enable-ssl-crtd

ビルドする

./configure
debuild -us -uc -b

ビルドしたパッケージをインストールする

一つ上の階層に、ビルドされたパッケージ (*.deb) がこんなふうにできているはずですので、これをインストールします。

$ ls squid*.deb
squid3_3.5.12-1ubuntu7_all.deb
squid_3.5.12-1ubuntu7_amd64.deb
squid-cgi_3.5.12-1ubuntu7_amd64.deb
squidclient_3.5.12-1ubuntu7_amd64.deb
squid-common_3.5.12-1ubuntu7_all.deb
squid-dbg_3.5.12-1ubuntu7_amd64.deb
squid-purge_3.5.12-1ubuntu7_amd64.deb

私が squid 関連でインストールするのは、ここらへんのパッケージです。ただし squid-purge や squidclient を入れるかどうかは個々人の好み次第ですかねえ。

$ sudo apt install ./squid3_3.5.12-1ubuntu7_all.deb ./squid_3.5.12-1ubuntu7_amd64.deb ./squid-common_3.5.12-1ubuntu7_all.deb ./squid-purge_3.5.12-1ubuntu7_amd64.deb ./squidclient_3.5.12-1ubuntu7_amd64.deb

apt update / apt upgrade で野良パッケージが標準リポジトリのパッケージで上書きされないようにする

こんなふうに実行しておけば、標準リポジトリのパッケージがアップデートされたときに上書きされることがないようです。

dpkg --set-selections <<EOF
squid hold
squid-common hold
squid-purge hold
squid3 hold
EOF

# dpkg --get-selections | grep squid
squid                                           hold
squid-common                                    hold
squid-langpack                                  install
squid-purge                                     hold
squid3                                          hold

ここまで出来ていれば squid による https の透過型プロキシを Ubuntu 16.04LTS 上でも構築する準備は完了です。あとは過去記事の内容で設定するだけです。