Ubuntu 16.04 LTS で squid の透過型プロキシを立てるために squid をリビルドする
以前に、CentOS上のSquidでSSLをインターセプトしてフィルタリングする透過型プロキシを立てて、さらに Google の個人アカウント利用を禁止する設定を紹介しました。
さて、同じことを Ubuntu 16.04 LTS で行おうとしてみたのですが、標準のリポジトリから配布されているバイナリでは、これは行えないようでした。その理由は下記の理由によります。
そこで、 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 上でも構築する準備は完了です。あとは過去記事の内容で設定するだけです。