はじめに
以下の記事をほぼほぼ参考にして試してみた備忘録記事です。
https://qiita.com/hana_shin/items/0f574358d040b4c60889
dockerによりcentos7を準備する。
まずはcentos7をpullする。
$ docker pull centos:centos7
client側とserver側のコンテナに分けて起動しておく。
※ server側コンテナに関しては、後ほどsystemctlを使うために、systemdへのリンクになっているはずの/sbin/initをコンテナ起動時に実行させておいて、privileged権限を付与しておく。
$ docker run -it -d --privileged --name server_centos centos:centos7 /sbin/init
$ docker run -it -d --name client_centos centos:centos7
サーバー側コンテナの設定
squidのインストール
$ docker exec -it server_centos /bin/bash
# yum -y install squid
# squid -v
Squid Cache: Version 3.5.20
firewalldの設定
Squidのポート番号開放するためにfirewalldのポート3128番を開く。
そもそもfirewalldが入ってないので、まずはインストール。
# yum -y install firewalld
続いて起動する。
# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1)
# systemctl start firewalld
# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2021-05-05 04:36:52 UTC; 18s ago
Docs: man:firewalld(1)
Main PID: 208 (firewalld)
CGroup: /docker/67c6d66ed30882f8008ebddab69a4b71331c21f04cb2a1888d1d5e190cf4feae/system.slice/firewalld.service
└─208 /usr/bin/python2 -Es /usr/sbin/firewalld --nofork --nopid
‣ 208 /usr/bin/python2 -Es /usr/sbin/firewalld --nofork --nopid
May 05 04:36:51 67c6d66ed308 systemd[1]: Starting firewalld - dynamic firewall daemon...
May 05 04:36:52 67c6d66ed308 systemd[1]: Started firewalld - dynamic firewall daemon.
May 05 04:36:53 67c6d66ed308 firewalld[208]: WARNING: AllowZoneDrifting is enabled. This i...w.
May 05 04:36:53 67c6d66ed308 firewalld[208]: WARNING: Failed to load nf_conntrack module: ...k'
modprobe: ERROR: could not insert 'nf_conntra...ed
modprobe: ERROR: Error running install command ...
Hint: Some lines were ellipsized, use -l to show in full.
firewalldの自動起動を有効化
# systemctl enable firewalld
続いてその確認。
# systemctl is-enabled firewalld
enabled
firewalldに、squidのポート番号である3128番だけ開ける
# firewall-cmd --add-port=3128/tcp
success
# firewall-cmd --list-ports
3128/tcp
BASIC認証の設定
一応、proxyサーバー上で(squidの設定により)、BASIC認証もできるみたいなので真似てみた。
# yum -y install httpd-tools
# ls -a /etc/squid/
. cachemgr.conf errorpage.css mime.conf squid.conf
.. cachemgr.conf.default errorpage.css.default mime.conf.default squid.conf.default
# htpasswd -c /etc/squid/.htpasswd user1
New password:(ここでは「test」と記述した。)
Re-type new password:(ここでは「test」と記述した。)
Adding password for user user1
# ls -a /etc/squid/
. cachemgr.conf errorpage.css.default squid.conf
.. cachemgr.conf.default mime.conf squid.conf.default
.htpasswd errorpage.css mime.conf.default
# vi /etc/squid/squid.conf
// 以下を追記。設定の意味は→http://www.squid-cache.org/Versions/v3/3.5/cfgman/auth_param.html
# Example rule allowing access from your local networks.
# Adapt to list your (internal) IP networks from where browsing
# should be allowed
-snip-
auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/.htpasswd
auth_param basic children 5 startup=5 idle=1
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
acl staff proxy_auth REQUIRED
-snip-
#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#
http_access allow staff
Squidの起動
# systemctl start squid
# yum -y install lsof
# lsof -c squid -a -i -P
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
squid 300 squid 6u IPv6 242058 0t0 UDP *:45944
squid 300 squid 8u IPv4 242059 0t0 UDP *:51532
squid 300 squid 21u IPv6 242072 0t0 TCP *:3128 (LISTEN)
// コマンドの説明は→https://qiita.com/hana_shin/items/cdc58fe8f4f7705c7a8a
クライアント側コンテナの設定
BASIC認証があるのでユーザーを作成する。
まずはユーザー作成まで。
$ docker exec -it client_centos /bin/bash
# useradd user1
# useradd user2
# ls /home
user1 user2
次にユーザー名とパスワードを環境変数http_proxyに紐づけるように設定する。
これでproxyを経由して外部にアクセスする際に自動で認証してくれる。
# su user1
# ls -a ~
. .. .bash_logout .bash_profile .bashrc
# hostname -i(server_centosのコンテナ内で実行して、proxyのipを調べる。)
172.17.0.3
# vi ~/.bashrc
# User specific aliases and functions
export http_proxy=http://user1:test@172.17.0.3:3128
export https_proxy=http://user1:test@172.17.0.3:3128
# source ~/.bashrc
# echo $http_proxy
http://user1:test@172.17.0.3:3128
# echo $https_proxy
http://user1:test@172.17.0.3:3128
# exit
続いて、user2を作成する。こちらはパスワード設定をせずに設定する。
# su user2
# vi ~/.bashrc
# User specific aliases and functions
export http_proxy=http://172.17.0.3:3128
export https_proxy=http://172.17.0.3:3128
# source ~/.bashrc
# echo $http_proxy
http://172.17.0.3:3128
# echo $https_proxy
http://172.17.0.3:3128
# exit
動作確認
user1で検証。
※ 以下、どのcurlコマンドを使ってもProxy経由でアクセスできる。
# su user1
# curl -I https://www.kantei.go.jp/
HTTP/1.1 200 Connection established
HTTP/1.1 200 OK
Date: Thu, 06 May 2021 04:05:31 GMT
X-Frame-Options: SAMEORIGIN
Last-Modified: Wed, 05 May 2021 11:55:08 GMT
ETag: "3f32-5c193ddca75e6"
Accept-Ranges: bytes
Content-Length: 16178
Cache-Control: no-cache
Expires: Thu, 06 May 2021 04:05:31 GMT
Pragma: no-cache
Content-Type: text/html
# curl -x http://user1:test@172.17.0.3:3128 https://www.kantei.go.jp/
# curl -U user1:test -x http://172.17.0.3:3128 -L https://www.google.com/
server_centos側でログ確認してみる。
# hostname -i
172.17.0.2
# cat /var/log/squid/access.log
1620273931.858 1770 172.17.0.2 TCP_TUNNEL/200 3914 CONNECT www.kantei.go.jp:443 user1 HIER_DIRECT/202.214.194.138 -
# exit
次にuser2で検証。
# su user2
# curl -I https://www.kantei.go.jp/
HTTP/1.1 407 Proxy Authentication Required
Server: squid/3.5.20
Mime-Version: 1.0
Date: Thu, 06 May 2021 04:10:40 GMT
Content-Type: text/html;charset=utf-8
Content-Length: 3547
X-Squid-Error: ERR_CACHE_ACCESS_DENIED 0
Vary: Accept-Language
Content-Language: en
Proxy-Authenticate: Basic realm="Squid proxy-caching web server"
X-Cache: MISS from 67c6d66ed308
X-Cache-Lookup: NONE from 67c6d66ed308:3128
Via: 1.1 67c6d66ed308 (squid/3.5.20)
Connection: keep-alive
curl: (56) Received HTTP code 407 from proxy after CONNECT
server_centos側でログ確認してみる。
# tail -f /var/log/squid/access.log
1620274240.510 62 172.17.0.2 TCP_DENIED/407 4025 CONNECT www.kantei.go.jp:443 - HIER_NONE/- text/html