13
16

More than 1 year has passed since last update.

DockerとSquidを用いて、テスト用の認証プロキシサーバを構築する

Last updated at Posted at 2019-12-30

ここ数回、UiPath製品群をプロキシ環境内で運用する手順を整理しています。

残るは認証プロキシーを越える件を整理したいのですが、認証プロキシっていわゆる業務環境やお客さま環境にしかなかったりして、テストがしづらいです。ということで手元に「認証プロキシ」があればなーってことで、今回は「認証プロキシ」自体の構築手順を整理しました。

具体的には、

  • 仮想マシンを立ち上げるための Vagrant を用いてLinux環境を構築
  • そのLinuxにDockerをインストール
  • そのDocker上に、OSSのプロキシサーバ「Squid」のコンテナを構築
  • そのコンテナ上で、SquidのForward Proxy の機能で認証プロキシを設定

となります。書くと長いですが、Vagrantで構築はワンタッチです :-) 便利な世の中です。

Vagrant_Docker_squid.png

この記事の対象の方

  • 顧客環境でテストができないので、手元に認証プロキシサーバが欲しいヒト
  • 自宅のネット環境を認証プロキシ経由にしたいヒト :-)

あ、ちなみにコレで構築した認証プロキシは性能やセキュリティなどは考慮しておりませんのでご注意ください1。あくまでテスト環境ということで。

前提

一応 MacのVagrantで構築しますが、最終的にはDockerなので環境はなんでもダイジョブかと。また最後に、Dockerでなく通常のUbuntu Linuxへの構築手順も記載しておきます。

$ sw_vers
ProductName:	Mac OS X
ProductVersion:	10.15.2
BuildVersion:	19C57

$ vagrant --version
Vagrant 2.0.4
$

Vagrant上のDockerにSquidのコンテナをたてる

GitHubから、Vagrantfileなど設定情報を取得

$ git clone https://github.com/masatomix/environment_template.git
$ cd environment_template
$ cat Vagrantfile
..
..
config.vm.provision :shell, :path => "./script/provision_docker_squid.sh",:privileged   => false
$

↑デフォルトではSquidのコンテナ構築は無効にしてあるので、アンコメントして有効にします。

VagrantでUbuntu Linux環境構築、Dockerその他もインストール。その後 sshログイン

$ vagrant up
... いろいろインストールで結構時間がかかる、、、
$ vagrant ssh

Welcome to Ubuntu 16.04.6 LTS (GNU/Linux 4.4.0-154-generic x86_64)

*** System restart required ***
Last login: Sun Dec 29 21:15:59 2019 from 10.0.2.2

vagrant@ubuntu-xenial:~$

IPアドレス 確認

構築したLinuxのアドレスが、プロキシサーバのIPアドレスになります。下記の192.168.xx.xx にあるアドレスをメモっておきましょう。

vagrant@ubuntu-xenial:~$ /sbin/ifconfig
..
enp0s8    Link encap:イーサネット  ハードウェアアドレス xxx
          inetアドレス:192.168.xx.xx  ブロードキャスト:192.168.xx.255  マスク:255.255.255.0

起動確認・停止・起動

構築が正しく行われていると、Docker上のSquidはすでに起動しているはずです。

vagrant@ubuntu-xenial:~$ cd /vagrant/squid/
vagrant@ubuntu-xenial:/vagrant/squid$ 

起動確認
vagrant@ubuntu-xenial:/vagrant/squid$ sudo docker-compose ps
           Name                    Command         State           Ports
---------------------------------------------------------------------------------
squid_squid_1_d48da617dc4d   /sbin/entrypoint.sh   Up      0.0.0.0:3128->3128/tcp ← Stateが'Up'ならOK


停止
vagrant@ubuntu-xenial:/vagrant/squid$ sudo docker-compose down


起動
vagrant@ubuntu-xenial:/vagrant/squid$ sudo docker-compose up -d

疎通確認しましょう。インターネットオプションにプロキシとして上記の http://[IPアドレス]:3128 を指定して、ネットへアクセスしてみましょう。
プロキシ認証画面がでればOKです。 あらかじめおいてあるユーザ情報ファイル.htpasswdにはID/Passが

user01/user01

で登録されているので、プロキシ認証画面に入力してみてください。

p01.png

もしくは curlなどで、

$ curl https://qiita.com/ -x http://user01:user01@192.168.xx.xx:3128 -I

とうってみて、HTTP/2 200 などの応答が返ってくればOKです。

構築した環境の稼働確認は以上です。

ユーザの作成

今回はテスト環境なのでユーザの追加などは不要かもしれませんが、認証プロキシのユーザを追加したいときは以下のコマンドで。

vagrant@ubuntu-xenial:/vagrant/squid$ sudo htpasswd /vagrant/squid/.htpasswd user02

構築した環境の設定ファイルたち

Docker上に構築したSquidコンテナの設定ファイル docker-compose.ymlや、Squid自体の設定ファイルsquid.confは以下の通りに設定してあります。

まずはdocker-compose.yml

vagrant@ubuntu-xenial:~$ cat /vagrant/squid/docker-compose.yml
docker-compose.yml
version: '2'
services:
  squid:
    image: sameersbn/squid:3.5.27-2
    ports:
      - "3128:3128"
    volumes:
      - /srv/docker/squid/cache:/var/spool/squid
      - ./squid.conf:/etc/squid/squid.conf
      - ./.htpasswd:/etc/squid/.htpasswd
    restart: always

つづいてsquid.conf

vagrant@ubuntu-xenial:~$ cat /vagrant/squid/squid.conf
squid.conf
acl SSL_ports port 443
acl Safe_ports port 80          # http
acl Safe_ports port 21          # ftp
acl Safe_ports port 443         # https
acl Safe_ports port 70          # gopher
acl Safe_ports port 210         # wais
acl Safe_ports port 1025-65535  # unregistered ports
acl Safe_ports port 280         # http-mgmt
acl Safe_ports port 488         # gss-http
acl Safe_ports port 591         # filemaker
acl Safe_ports port 777         # multiling http
acl CONNECT method CONNECT

http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager
http_access deny manager
#http_access allow all
#http_access allow localhost
#http_access deny all

http_port 3128

coredump_dir /var/spool/squid
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
refresh_pattern (Release|Packages(.gz)*)$      0       20%     2880
refresh_pattern .               0       20%     4320

auth_param basic program /usr/lib/squid3/basic_ncsa_auth /etc/squid/.htpasswd
auth_param basic children 5
auth_param basic realm Squid Basic Authentication (user:[user01]/pass:[user01])
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off
acl pauth proxy_auth REQUIRED

http_access allow pauth

no_cache deny all

forwarded_for off
request_header_access Referer deny all
request_header_access X-FORWARDED-FOR deny all
request_header_access Via deny all
request_header_access Cache-Control deny all

logformat mycombined   %>a %[ui %[un [%tl] "%rm %>ru HTTP/%rv" %>Hs %<st "%{Referer}>h" "%{User-Agent}>h" %Ss:%Sh
access_log daemon:/var/log/squid/access.log mycombined
$

おつかれさまでした。

参考:Linux上にインストール

コンテナでなくLinuxへ直接Squidを入れたい場合の手順を記しておきます。
Ubuntu 16.04.6 LTS (Xenial Xerus) の例。

$ sudo apt install -y squid
$ sudo apt install -y apache2-utils
$ sudo htpasswd -c /etc/squid/.htpasswd user01

でパスワードファイルまでつくっておきましょう。
設定ファイルsquid.conf は上記GitHubにあるモノそのままを /etc/squid/squid.conf へ配置してください。

あとは起動・停止コマンド。

$ sudo systemctl status  squid
● squid.service - LSB: Squid HTTP Proxy version 3.x
   Loaded: loaded (/etc/init.d/squid; bad; vendor preset: enabled)
   Active: active (running) since 日 2019-12-29 21:44:26 JST; 11min ago
     Docs: man:systemd-sysv-generator(8)
  Process: 2043 ExecStop=/etc/init.d/squid stop (code=exited, status=0/SUCCESS)
  Process: 2079 ExecStart=/etc/init.d/squid start (code=exited, status=0/SUCCESS)
    Tasks: 5
   Memory: 21.1M
      CPU: 568ms
   CGroup: /system.slice/squid.service
           ├─2119 /usr/sbin/squid -YC -f /etc/squid/squid.conf
           ├─2121 (squid-1) -YC -f /etc/squid/squid.conf
           ├─2122 (logfile-daemon) /var/log/squid/access.log
           ├─2123 (pinger)
           └─2127 (basic_ncsa_auth) /etc/squid/.htpasswd

12月 29 21:44:26 ubuntu-xenial systemd[1]: Starting LSB: Squid HTTP Proxy version 3.x...
12月 29 21:44:26 ubuntu-xenial squid[2079]:  * Starting Squid HTTP Proxy squid
12月 29 21:44:26 ubuntu-xenial squid[2119]: Squid Parent: will start 1 kids
12月 29 21:44:26 ubuntu-xenial squid[2079]:    ...done.
12月 29 21:44:26 ubuntu-xenial systemd[1]: Started LSB: Squid HTTP Proxy version 3.x.
12月 29 21:44:26 ubuntu-xenial squid[2119]: Squid Parent: (squid-1) process 2121 started

停止
$ sudo systemctl stop  squid

起動
$ sudo systemctl start  squid

おつかれさまでした。

関連リンク

  1. 認証プロキシ経由でのみネット接続可能にするには、そもそもプロキシ経由以外のネット接続を遮断するなど、ネットワークレベルでの制御が必要ですしね。。

13
16
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
16