ここ数回、UiPath製品群をプロキシ環境内で運用する手順を整理しています。
- UiPath製品群をプロキシ環境で使用するための環境設定(UiPath Enterprise版/認証なしプロキシのケース)
- UiPath製品群をプロキシ環境で使用するための環境設定(UiPath Community版/認証なしプロキシのケース)
残るは認証プロキシーを越える件を整理したいのですが、認証プロキシっていわゆる業務環境やお客さま環境にしかなかったりして、テストがしづらいです。ということで手元に「認証プロキシ」があればなーってことで、今回は「認証プロキシ」自体の構築手順を整理しました。
具体的には、
- 仮想マシンを立ち上げるための Vagrant を用いてLinux環境を構築
- そのLinuxにDockerをインストール
- そのDocker上に、OSSのプロキシサーバ「Squid」のコンテナを構築
- そのコンテナ上で、SquidのForward Proxy の機能で認証プロキシを設定
となります。書くと長いですが、Vagrantで構築はワンタッチです :-) 便利な世の中です。
この記事の対象の方
- 顧客環境でテストができないので、手元に認証プロキシサーバが欲しいヒト
- 自宅のネット環境を認証プロキシ経由にしたいヒト :-)
あ、ちなみにコレで構築した認証プロキシは性能やセキュリティなどは考慮しておりませんのでご注意ください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
で登録されているので、プロキシ認証画面に入力してみてください。
もしくは 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
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
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
おつかれさまでした。
関連リンク
- UiPath製品群をプロキシ環境で使用するための環境設定(UiPath Enterprise版/認証なしプロキシのケース)
- UiPath製品群をプロキシ環境で使用するための環境設定(UiPath Community版/認証なしプロキシのケース)
- sameersbn/squid:3.5.27-2
- Squid
- Vagrant
- Docker
- Squidでプロキシ(Basic認証)の設定
-
認証プロキシ経由でのみネット接続可能にするには、そもそもプロキシ経由以外のネット接続を遮断するなど、ネットワークレベルでの制御が必要ですしね。。 ↩