🎉

プロキシサーバ(Squid)コンテナでドメインフィルタを動作確認@Docker on Ubuntu 22.04.4

2024/03/29に公開

目的

  • 簡易的なプロキシサーバを作成したい
  • Squidの構築は面倒なのでDocker Hubで公開されているコンテナイメージを使う
  • Docker Desktopはライセンスの考慮が必要なので気にせず使いたいのでDocker Engineのみ
  • 動作確認として、任意のドメインフィルタを読み込ませたい

Docker環境構築

Linux環境

  • Ubuntu Server 22.04.4 (Minimized Install, OpenSSH Enable)

UbuntuでDocker Engineのインストール

今回はDocker公式手順

dockerコマンドをsudoなしで実行できるようにする

$ getent group docker
docker:x:999
$ sudo usermod -aG docker $USER
$ getent group docker
docker:x:999:kasumic

このままだとPermission Errorが出るので、一度ログアウトする

コンテナ準備

squidイメージの取得

プロキシサーバ用ソフトウェアとしてsquidを使う
Canonical公式のイメージを取得

$ docker pull ubuntu/squid

コンテナ実行テスト

外部から8080ポートで待ち受けるようしてコンテナを起動する

$ docker run -d --name proxy -p 8080:3128 ubuntu/squid

squidログの出力

接続ログをコンソールへ垂れ流す場合

$ docker logs -f proxy

コンテナの停止

$ CONTAINER_ID=`docker ps --filter name=proxy --format "{{.ID}}"`
$ docker stop $CONTAINER_ID
$ docker rm $CONTAINER_ID

squidの設定

初期のsquid.conf取得(イメージからのファイル抜出)

フィルタ設定を追加するためにコンテナイメージ内のsquid.confを取得する
イメージ内のsquid.confの場所は公式イメージ情報に記載がある

$ CONTAINER_ID=`docker ps --filter name=proxy --format "{{.ID}}"`
$ docker cp $CONTAINER_ID:/etc/squid/squid.conf .

拒否するドメインリストを作成

blacklist
qiita.com
google.com

squid.confに追記

squid.conf
acl blacklist dstdomain "/etc/squid/blacklist"
http_access deny blacklist

独自設定を読み込ませてコンテナ実行

docker run時に設定ファイルを読み込ませる

$ docker run -d --name my-squid -v ./squid.conf:/etc/squid/squid.conf -v ./blacklist:/etc/squid/blacklist -p 8080:3128 ubuntu/squid
$ docker ps
CONTAINER ID   IMAGE          COMMAND                   CREATED         STATUS          PORTS                    NAMES
614ed27fe6f8   ubuntu/squid   "entrypoint.sh -f /e…"   3 minutes ago   Up 15 seconds   0.0.0.0:8080->3128/tcp   my-squid

動作確認

ブラウザのプロキシ設定を変更して拒否リストに設定したドメインへアクセスしてみる


ちゃんと拒否されている

設定変更した場合の再実行方法

$ docker restart my-squid-container

まとめ

コンテナを利用することで簡単にプロキシサーバを準備することができました。
セットアップ済みで公開されているコンテナイメージに(Dockerfileを使ってbuildするほどではない)ちょっとした設定ならこれぐらいでいいでしょう

Discussion