概要
squidによるProxyサーバで、こんなことがやりたい。
- ActiveDirectoryのセキュリティグループを利用して、アクセスログにユーザ名を残したい。
- セキュリティグループ毎に別のアクセス制限をかけたい。
- アップデートサイトなどはホワイトリストにして、NTLMのSSOを回避して無認証で通したい。
- SSLインターセプトして、HTTPSでもFQDN以降のフルパスでアクセス制限したい。
アクセス条件は次のとおり
ユーザ種別 | ホワイトリスト | イントラサイト | 特例サイト | 一般サイト | ブラックリスト |
---|---|---|---|---|---|
システムユーザ | 〇 | × | × | × | × |
通常ユーザ | 〇 | 〇 | × | × | × |
一部許可ユーザ | 〇 | 〇 | 〇 | × | × |
全許可ユーザ | 〇 | 〇 | 〇 | 〇 | × |
検証環境
機器など
- CentOS8(8.1.1911)
- squid(4.4)
- Windows Servr 2019
- Docker(19.03.5)
その他のパラメータ
以降の作業内容では、以下のパラメータにあわせて説明をしています。
カスタマイズする場合には、適宜修正をしてください。
ドメイン名
ADドメイン名:prosper2.net
NetBIOSドメイン名:PROSPER2
LDAPグループ検索用ユーザ
dn: CN=searchuser,CN=Users,DC=prosper2,DC=net
sAMAccountName: searchuser
userPrincipalName: searchuser@prosper2.net
パスワード:s3arch#PWD
SSLを終端するためのCA証明書
秘密鍵ファイル名:icaprivkey.pem
証明書ファイル名:icacert.pem
X509v3基本制限(critical): CA
X509v3鍵使用法(critical): Digital Signature, Certificate Sign, CRL Sign
Docker環境
Dockerコンテナ
コンテナ名:proxy-ad
ホスト名:proxy-ad
ポートバインド:8081:8081/tcp
Dockerネットワーク
IPv6:有効
サブネット:fd5a:ceb9:ed8d:a::/64
ネットワーク名:br_proxy_nw
作業内容
事前準備
ADユーザの準備
以下のユーザを作成しておく。
squid検索ユーザ以外は、既存のユーザにセキュリティグループを割り当ててもOK
ユーザ種別 | ユーザ名 | OU | セキュリティグループ |
---|---|---|---|
通常ユーザ | josys.saburo | employee | - |
一部許可ユーザ | jinji.jiro | employee | ProxyLimit |
全許可ユーザ | soumu.taro | employee | ProxyUnlimit |
squid検索ユーザ | searchuser | - | - |
なお、検索用ユーザはLDAPでアクセスするだけなので、対話ログインができないようにポリシーで制御しておいたほうがよいでしょう。
searchuserのパスワードは s3arch#PWD
として説明します。
証明書の準備
参考エントリ
ActiveDirectory証明機関(ADCS)から中間CAを生成する
OpenSSLでプライベート認証局の構築(ルートCA、中間CA)
SSLインターセプトのため、中間CAでSSLを終端しています。
参考エントリは自身の環境の例で説明していますが、中間CAの機能を有していればどのような方法で取得しても問題ありません。
ブラウザでアクセスするクライアント側には、生成した中間CAの上位となるCAの証明書をインストールしておきます。
dockerネットワークのIPv6化
参考エントリ
dockerネットワークのipv6対応方法と通信経路の整理
squidがIPv6で自分自身にアクセスするため、dockerもIPv6にする必要があります。
dockerコンテナ
docker-compose.yml
でまとめてしまいたかったのですが、compose v3は、IPv6指定ができないので、ネットワーク作成は手動です。
構成ファイルの準備
ファイル構成
# tree ./ --charset=C
./
|-- docker-compose.yml
`-- proxy-ad
|-- Dockerfile
|-- blacklist
|-- docker-entrypoint.sh
|-- icacert.pem
|-- icaprivkey.pem
|-- intralist
|-- permlist
|-- rsyslog.conf
|-- smb.conf
|-- squid.conf
|-- squid_log
`-- whitelist
Dockerfile
version: '3'
services:
proxy-ad:
build: ./proxy-ad
image: infraserv:proxy-ad
container_name: proxy-ad
hostname: proxy-ad
restart: always
networks:
br_proxy_nw:
ports:
- 8081:8081
cap_add:
- SYS_ADMIN
security_opt:
- seccomp:unconfined
volumes:
- /sys/fs/cgroup:/sys/fs/cgroup:ro
environment:
TZ: 'Asia/Tokyo'
networks:
br_proxy_nw:
external: true
FROM centos:centos8
RUN ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime ; \
dnf -y update ; dnf -y install epel-release rsyslog logrotate cronie ; \
rm -f /etc/logrotate.d/syslog ; \
dnf -y install squid samba samba-winbind openldap-clients authselect samba-winbind-clients ; \
mkdir /etc/squid/certs ;\
systemctl enable squid
COPY squid.conf /etc/squid
COPY icacert.pem /etc/squid/certs
COPY icaprivkey.pem /etc/squid/certs
COPY squid_log /etc/logrotate.d
COPY blacklist /etc/squid
COPY whitelist /etc/squid
COPY permlist /etc/squid
COPY intralist /etc/squid
COPY rsyslog.conf /etc
COPY smb.conf /etc/samba
COPY docker-entrypoint.sh /usr/local/bin/
RUN mkdir /var/local/squid ;\
/usr/lib64/squid/security_file_certgen -c -s /var/local/squid/ssl_db -M 4MB ;\
chown -R squid.squid /var/local/squid ;\
ln -s usr/local/bin/docker-entrypoint.sh /
ENTRYPOINT ["docker-entrypoint.sh"]
CMD [ "/usr/sbin/init" ]
docker-entrypoint.sh
はヘルパースクリプトとして実行権限を与える必要があります。
以下ファイルを作成したら、 chmod 755 docker-entrypoint.sh
で権限付与してください。
#!/bin/sh
if [ ! -e /etc/systemd/system/multi-user.target.wants/smb.service ] ; then
authselect select winbind --force
net ads join -U searchuser%s3arch#PWD
systemctl enable smb
systemctl enable winbind
systemctl start smb
systemctl start winbind
fi
exec "$@"
samba
ドメイン名などは適宜修正してください。
[global]
workgroup = PROSPER2
server string = proxy-ad
security = ads
hosts allow = 127.
realm = PROSPER2.NET
squid
# ------------------------------------------------------
# authentication helpers
# ------------------------------------------------------
# NTLM authentication helper : ActiveDirectory SSO
# max processes : 5
auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 5
# LDAP search helper : check ActiveDirectory Security Group
# -v 3 : use LDAP version 3
# -P : persistent LDAP connection
# -R : do not follow referrals
# -S : Strip Domain name
# -b : Base DN (search group)
# -D -w : bind DN (search user) and password
# -h : LDAP server (AD DS)
# -f : filter %u:User %g:Gourp
# %LOGIN : SSO login user
external_acl_type security_group %LOGIN /usr/lib64/squid/ext_ldap_group_acl -v 3 -P -R -S -b "ou=employee,dc=prosper2,dc=net" -D searchuser@prosper2.net -w s3arch#PWD -h 10.254.10.241 -f '(&(objectclass=person)(sAMAccountName=%u)(memberOf=CN=%g,ou=employee,dc=prosper2,dc=net))'
external_acl_type ou_check %LOGIN /usr/lib64/squid/ext_ldap_group_acl -v 3 -P -R -S -b "ou=employee,dc=prosper2,dc=net" -D searchuser@prosper2.net -w s3arch#PWD -h 10.254.10.241 -f '(&(objectclass=person)(sAMAccountName=%u))'
acl gr_unlimit external security_group ProxyUnlimit
acl gr_limit external security_group ProxyLimit
acl gr_employee external ou_check employee
# ------------------------------------------------------
# original rules
# ------------------------------------------------------
acl manager proto cache_object
acl localhost src localhost
acl localhost src 127.0.0.1/32
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
# Allow cache
http_access allow localhost manager
http_access deny manager
# Deny not Safe_ports
http_access deny !Safe_ports
# Deny CONNECT request on not SSL_ports
http_access deny CONNECT !SSL_ports
# ------------------------------------------------------
# user rules
# ------------------------------------------------------
# Deny Blacklist sites
acl blacklist url_regex -i "/etc/squid/blacklist"
http_access deny blacklist
# Allow Whitelist sites
acl whitelist url_regex -i "/etc/squid/whitelist"
http_access allow whitelist
# Deny not Domain User
http_access deny !gr_unlimit !gr_limit !gr_employee
# permit : ProxyUnlimit
http_access allow gr_unlimit
# permit : ProxyLimit and permlist
acl permlist url_regex -i "/etc/squid/permlist"
http_access allow gr_limit permlist
# permit : No security gourp and intralist
acl intralist url_regex -i "/etc/squid/intralist"
http_access allow gr_employee intralist
# deny : default
http_access deny all
# ------------------------------------------------------
# SSL BUMP exeption whitelist
# ------------------------------------------------------
http_port 8081 ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB cert=/etc/squid/certs/icacert.pem key=/etc/squid/certs/icaprivkey.pem
sslcrtd_program /usr/lib64/squid/security_file_certgen -s /var/local/squid/ssl_db -M 4MB
sslcrtd_children 5
ssl_bump bump !whitelist
sslproxy_cert_error allow intralist
sslproxy_cert_error deny all
# ------------------------------------------------------
# default options
# ------------------------------------------------------
visible_hostname proxy-ad
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 . 0 20% 4320
URLフィルタのリスト
ブラックリストは空のファイルでも大丈夫です。
後述する動作確認の際のリストと同一です。
qiita.com/bashaway
ホワイトリストはひとまずwindowsとcentos(yum)の対応としています。
後述する動作確認の際のリストと同一です。
microsoft.com
www.msftconnecttest.com
onecs-live.azureedge.net
windowsupdate.com
google.com
google-analytics.com
fedoraproject.org
centos.org
ftp.nara.wide.ad.jp
ftp.jaist.ac.jp
ftp.riken.jp
ftp.iij.ad.jp
ftp.tsukuba.wide.ad.jp
mirror.fairway.ne.jp
ftp.yz.yamagata-u.ac.jp
ftp-srv2.kddilabs.jp
yum.mariadb.org
一部許可リストはブラックリストとの比較のため、これにしています。
後述する動作確認の際のリストと同一です。
qiita.com
イントラ用リストも通信確認のため、以下をサンプルにしていますが、ADのドメインとあわせておくとよいでしょう。
ugtop.com
syslog
syslogという名前で引けるサーバにむけて514/udpでsyslogを投げます。
対象は access.log
cache.log
の2種類です。
module(load="imfile")
input(type="imfile"
file="/var/log/squid/access.log"
tag="pseudolog_squid_access_log"
facility="local0"
severity="notice")
:syslogtag, isequal, "pseudolog_squid_access_log" @syslog:514
input(type="imfile"
file="/var/log/squid/cache.log"
tag="pseudolog_squid_cache_log"
facility="local0"
severity="notice")
:syslogtag, isequal, "pseudolog_squid_cache_log" @syslog:514
ログがたまるので、1週間でローテートします。
/var/log/squid/*.log {
daily
rotate 8
compress
missingok
notifempty
postrotate
/bin/systemctl restart rsyslog
endscript
}
証明書
このほか、証明書の準備 で作成した、秘密鍵と証明書も同じディレクトリに配置します。
コンテナの作成
まず、IPv6のネットワークをつくります。
サブネットは適宜修正ください。
# docker network create --ipv6 --driver=bridge --subnet=fd5a:ceb9:ed8d:a::/64 br_proxy_nw
でネットワークをつくったら、IPv6が有効になっているかを確認します。
# docker network inspect br_proxy_nw | grep IPv6
"EnableIPv6": true,
ビルドし、コンテナを起動させます。
# docker-compose build
# docker-compose up -d
動作確認
テストには上記の構成ファイルの説明で例示した URLフィルタのリスト を利用します。
動作確認用のユーザは前述の ADユーザの準備 で作成した、以下を利用します。
カテゴリ | ユーザ名 |
---|---|
全許可ユーザ | soumu.tarp |
一部許可ユーザ | jinji.jiro |
通常ユーザ | josys.saburo |
非ドメインユーザ | ローカルadministrator 認証ダイアログ表示はキャンセルする |
アクセス先と想定される動作は以下です。
URL | 想定される動作 |
---|---|
https://ftp.riken.jp/ | 全員アクセスOK |
https://ugtop.com/ | OU=employee所属の ユーザはアクセスOK |
https://qiita.com/ | OU=employee所属で セキュリティグループがProxyUnlimit/ProxyLimitの ユーザはアクセスOK |
https://crt.sh/ | OU=employee所属で セキュリティグループがProxyUnlimitの ユーザはアクセスOK |
https://qiita.com/bashaway | 全員アクセスNG |
また、非ドメインユーザの確認として、CentOSのyumアップデートを実施します。
インターセプト後の証明書
SSLをいったんsquidで終端し、プライベートPKI上の中間CAでサーバ証明書を動的に生成しなおしています。
そのため、インターネット上のサイトにアクセスすると、以下のようなサーバ証明書が返ってきます。
サブジェクト代替名にCNを入れてくれるみたいなので、chromeエラーもでません。よかった。
全許可ユーザ(soumu.taro)
https://ftp.riken.jp/
アクセスOK
TCP_TUNNEL/200 8880 CONNECT ftp.riken.jp:443 - HIER_DIRECT/134.160.38.1 -
TCP_TUNNEL/200 3729 CONNECT ftp.riken.jp:443 - HIER_DIRECT/134.160.38.1 -
TCP_TUNNEL/200 3729 CONNECT ftp.riken.jp:443 - HIER_DIRECT/134.160.38.1 -
https://ugtop.com/
アクセスOK
TCP_DENIED/407 4061 CONNECT ugtop.com:443 - HIER_NONE/- text/html
TCP_DENIED/407 4423 CONNECT ugtop.com:443 - HIER_NONE/- text/html
NONE/200 0 CONNECT ugtop.com:443 PROSPER2\\soumu.taro HIER_NONE/- -
TCP_MISS/200 2499 GET https://ugtop.com/ PROSPER2\\soumu.taro HIER_DIRECT/219.94.129.26 text/html
TCP_MISS/304 235 GET https://ugtop.com/index.css PROSPER2\\soumu.taro HIER_DIRECT/219.94.129.26 -
TCP_MISS/304 233 GET https://ugtop.com/title2002.gif PROSPER2\\soumu.taro HIER_DIRECT/219.94.129.26 -
TCP_DENIED/407 4120 GET http://www.ugtop.com/favicon.ico - HIER_NONE/- text/html
TCP_DENIED/407 4482 GET http://www.ugtop.com/favicon.ico - HIER_NONE/- text/html
TCP_MISS/302 556 GET http://www.ugtop.com/favicon.ico PROSPER2\\soumu.taro HIER_DIRECT/219.94.129.26 text/html
https://qiita.com/
アクセスOK
TCP_DENIED/407 4061 CONNECT qiita.com:443 - HIER_NONE/- text/html
TCP_DENIED/407 4423 CONNECT qiita.com:443 - HIER_NONE/- text/html
NONE/200 0 CONNECT qiita.com:443 PROSPER2\\soumu.taro HIER_NONE/- -
TCP_MISS/200 16714 GET https://qiita.com/ PROSPER2\\soumu.taro HIER_DIRECT/2406:da14:add:900:a151:96dc:63d3:7b6 text/html
TCP_DENIED/407 4077 CONNECT cdn.qiita.com:443 - HIER_NONE/- text/html
TCP_DENIED/407 4439 CONNECT cdn.qiita.com:443 - HIER_NONE/- text/html
NONE/200 0 CONNECT cdn.qiita.com:443 PROSPER2\\soumu.taro HIER_NONE/- -
TCP_MISS/304 435 GET https://cdn.qiita.com/assets/public/style-62725e4620e989e818f0a740fac95a08.min.css PROSPER2\\soumu.taro HIER_DIRECT/2600:9000:208e:bc00:13:f1f4:ebc0:93a1 -
TCP_MISS/304 435 GET https://cdn.qiita.com/assets/public/bundle-64959777c315371f97ccc3068267aeec.min.js PROSPER2\\soumu.taro HIER_DIRECT/2600:9000:208e:bc00:13:f1f4:ebc0:93a1 -
TCP_DENIED/407 4077 CONNECT cdn.qiita.com:443 - HIER_NONE/- text/html
TCP_DENIED/407 4439 CONNECT cdn.qiita.com:443 - HIER_NONE/- text/html
TCP_MISS/304 453 GET https://cdn.qiita.com/assets/public/hero-background-885fd333ab5d2e15054b2b2b3b970ebc.png PROSPER2\\soumu.taro HIER_DIRECT/2600:9000:208e:bc00:13:f1f4:ebc0:93a1 -
NONE/200 0 CONNECT cdn.qiita.com:443 PROSPER2\\soumu.taro HIER_NONE/- -
TCP_MISS/304 545 GET https://cdn.qiita.com/assets/public/fontawesome-webfont-674f50d287a8c48dc19ba404d20fe713.eot? PROSPER2\\soumu.taro HIER_DIRECT/2600:9000:208e:bc00:13:f1f4:ebc0:93a1 -
https://crt.sh/
アクセスOK
TCP_DENIED/407 4049 CONNECT crt.sh:443 - HIER_NONE/- text/html
TCP_DENIED/407 4411 CONNECT crt.sh:443 - HIER_NONE/- text/html
NONE/200 0 CONNECT crt.sh:443 PROSPER2\\soumu.taro HIER_NONE/- -
TCP_MISS/200 4530 GET https://crt.sh/ PROSPER2\\soumu.taro HIER_DIRECT/2a0e:ac00:c7:d449::5bc7:d449 text/html
TCP_DENIED/407 4049 CONNECT crt.sh:443 - HIER_NONE/- text/html
TCP_DENIED/407 4411 CONNECT crt.sh:443 - HIER_NONE/- text/html
NONE/200 0 CONNECT crt.sh:443 PROSPER2\\soumu.taro HIER_NONE/- -
TCP_MISS/200 4820 GET https://crt.sh/sectigo_s.png PROSPER2\\soumu.taro HIER_DIRECT/2a0e:ac00:c7:d449::5bc7:d449 image/png
https://qiita.com/bashaway
アクセスNG
TCP_DENIED/407 4061 CONNECT qiita.com:443 - HIER_NONE/- text/html
TCP_DENIED/407 4423 CONNECT qiita.com:443 - HIER_NONE/- text/html
NONE/200 0 CONNECT qiita.com:443 PROSPER2\\soumu.taro HIER_NONE/- -
TCP_DENIED/403 4604 GET https://qiita.com/bashaway PROSPER2\\soumu.taro HIER_NONE/- text/html
TCP_DENIED/407 4061 CONNECT qiita.com:443 - HIER_NONE/- text/html
TCP_DENIED/407 4423 CONNECT qiita.com:443 - HIER_NONE/- text/html
NONE/200 0 CONNECT qiita.com:443 PROSPER2\\soumu.taro HIER_NONE/- -
一部許可ユーザ(jinji.jiro)
https://ftp.riken.jp/
アクセスOK
TCP_TUNNEL/200 8880 CONNECT ftp.riken.jp:443 - HIER_DIRECT/134.160.38.1 -
TCP_TUNNEL/200 3729 CONNECT ftp.riken.jp:443 - HIER_DIRECT/134.160.38.1 -
TCP_TUNNEL/200 3729 CONNECT ftp.riken.jp:443 - HIER_DIRECT/134.160.38.1 -
https://ugtop.com/
アクセスOK
TCP_DENIED/407 4061 CONNECT ugtop.com:443 - HIER_NONE/- text/html
TCP_DENIED/407 4423 CONNECT ugtop.com:443 - HIER_NONE/- text/html
NONE/200 0 CONNECT ugtop.com:443 PROSPER2\\jinji.jiro HIER_NONE/- -
TCP_MISS/200 2499 GET https://ugtop.com/ PROSPER2\\jinji.jiro HIER_DIRECT/219.94.129.26 text/html
TCP_MISS/304 235 GET https://ugtop.com/index.css PROSPER2\\jinji.jiro HIER_DIRECT/219.94.129.26 -
TCP_MISS/304 233 GET https://ugtop.com/title2002.gif PROSPER2\\jinji.jiro HIER_DIRECT/219.94.129.26 -
TCP_DENIED/407 4120 GET http://www.ugtop.com/favicon.ico - HIER_NONE/- text/html
TCP_DENIED/407 4482 GET http://www.ugtop.com/favicon.ico - HIER_NONE/- text/html
TCP_MISS/302 556 GET http://www.ugtop.com/favicon.ico PROSPER2\\jinji.jiro HIER_DIRECT/219.94.129.26 text/html
https://qiita.com/
アクセスOK
TCP_DENIED/407 4061 CONNECT qiita.com:443 - HIER_NONE/- text/html
TCP_DENIED/407 4423 CONNECT qiita.com:443 - HIER_NONE/- text/html
NONE/200 0 CONNECT qiita.com:443 PROSPER2\\jinji.jiro HIER_NONE/- -
TCP_MISS/200 16734 GET https://qiita.com/ PROSPER2\\jinji.jiro HIER_DIRECT/2406:da14:add:902:a992:3bc3:1c46:cdfa text/html
TCP_DENIED/407 4077 CONNECT cdn.qiita.com:443 - HIER_NONE/- text/html
TCP_DENIED/407 4439 CONNECT cdn.qiita.com:443 - HIER_NONE/- text/html
NONE/200 0 CONNECT cdn.qiita.com:443 PROSPER2\\jinji.jiro HIER_NONE/- -
TCP_MISS/304 435 GET https://cdn.qiita.com/assets/public/style-62725e4620e989e818f0a740fac95a08.min.css PROSPER2\\jinji.jiro HIER_DIRECT/2600:9000:208e:ca00:13:f1f4:ebc0:93a1 -
TCP_MISS/304 435 GET https://cdn.qiita.com/assets/public/bundle-64959777c315371f97ccc3068267aeec.min.js PROSPER2\\jinji.jiro HIER_DIRECT/2600:9000:208e:ca00:13:f1f4:ebc0:93a1 -
TCP_DENIED/407 4077 CONNECT cdn.qiita.com:443 - HIER_NONE/- text/html
TCP_MISS/304 453 GET https://cdn.qiita.com/assets/public/hero-background-885fd333ab5d2e15054b2b2b3b970ebc.png PROSPER2\\jinji.jiro HIER_DIRECT/2600:9000:208e:ca00:13:f1f4:ebc0:93a1 -
TCP_DENIED/407 4439 CONNECT cdn.qiita.com:443 - HIER_NONE/- text/html
NONE/200 0 CONNECT cdn.qiita.com:443 PROSPER2\\jinji.jiro HIER_NONE/- -
TCP_MISS/304 545 GET https://cdn.qiita.com/assets/public/fontawesome-webfont-674f50d287a8c48dc19ba404d20fe713.eot? PROSPER2\\jinji.jiro HIER_DIRECT/2600:9000:208e:ca00:13:f1f4:ebc0:93a1 -
TCP_DENIED/407 4049 CONNECT crt.sh:443 - HIER_NONE/- text/html
TCP_DENIED/407 4411 CONNECT crt.sh:443 - HIER_NONE/- text/html
TCP_DENIED/200 0 CONNECT crt.sh:443 PROSPER2\\jinji.jiro HIER_NONE/- -
NONE/403 4622 GET https://crt.sh/ PROSPER2\\jinji.jiro HIER_NONE/- text/html
TCP_DENIED/407 4049 CONNECT crt.sh:443 - HIER_NONE/- text/html
TCP_DENIED/407 4411 CONNECT crt.sh:443 - HIER_NONE/- text/html
TCP_DENIED/200 0 CONNECT crt.sh:443 PROSPER2\\jinji.jiro HIER_NONE/- -
TCP_DENIED/407 4061 CONNECT qiita.com:443 - HIER_NONE/- text/html
TCP_DENIED/407 4423 CONNECT qiita.com:443 - HIER_NONE/- text/html
TCP_DENIED/200 0 CONNECT qiita.com:443 PROSPER2\\jinji.jiro HIER_NONE/- -
NONE/403 4633 GET https://qiita.com/bashaway PROSPER2\\jinji.jiro HIER_NONE/- text/html
TCP_DENIED/407 4061 CONNECT qiita.com:443 - HIER_NONE/- text/html
TCP_DENIED/407 4423 CONNECT qiita.com:443 - HIER_NONE/- text/html
TCP_DENIED/200 0 CONNECT qiita.com:443 PROSPER2\\jinji.jiro HIER_NONE/- -
通常ユーザの場合(josys.saburo)
https://ftp.riken.jp/
アクセスOK
TCP_TUNNEL/200 8880 CONNECT ftp.riken.jp:443 - HIER_DIRECT/134.160.38.1 -
TCP_TUNNEL/200 3729 CONNECT ftp.riken.jp:443 - HIER_DIRECT/134.160.38.1 -
TCP_TUNNEL/200 3729 CONNECT ftp.riken.jp:443 - HIER_DIRECT/134.160.38.1 -
https://ugtop.com/
アクセスOK
TCP_DENIED/407 4061 CONNECT ugtop.com:443 - HIER_NONE/- text/html
TCP_DENIED/407 4423 CONNECT ugtop.com:443 - HIER_NONE/- text/html
NONE/200 0 CONNECT ugtop.com:443 PROSPER2\\josys.saburo HIER_NONE/- -
TCP_MISS/200 2499 GET https://ugtop.com/ PROSPER2\\josys.saburo HIER_DIRECT/219.94.129.26 text/html
TCP_MISS/304 235 GET https://ugtop.com/index.css PROSPER2\\josys.saburo HIER_DIRECT/219.94.129.26 -
TCP_MISS/304 233 GET https://ugtop.com/title2002.gif PROSPER2\\josys.saburo HIER_DIRECT/219.94.129.26 -
TCP_DENIED/407 4120 GET http://www.ugtop.com/favicon.ico - HIER_NONE/- text/html
TCP_DENIED/407 4482 GET http://www.ugtop.com/favicon.ico - HIER_NONE/- text/html
TCP_MISS/302 556 GET http://www.ugtop.com/favicon.ico PROSPER2\\josys.saburo HIER_DIRECT/219.94.129.26 text/html
https://qiita.com/
アクセスNG
TCP_DENIED/407 4061 CONNECT qiita.com:443 - HIER_NONE/- text/html
TCP_DENIED/407 4423 CONNECT qiita.com:443 - HIER_NONE/- text/html
TCP_DENIED/200 0 CONNECT qiita.com:443 PROSPER2\\josys.saburo HIER_NONE/- -
NONE/403 4667 GET https://qiita.com/ PROSPER2\\josys.saburo HIER_NONE/- text/html
TCP_DENIED/407 4061 CONNECT qiita.com:443 - HIER_NONE/- text/html
TCP_DENIED/407 4423 CONNECT qiita.com:443 - HIER_NONE/- text/html
TCP_DENIED/200 0 CONNECT qiita.com:443 PROSPER2\\josys.saburo HIER_NONE/- -
https://crt.sh/
アクセスNG
TCP_DENIED/407 4049 CONNECT crt.sh:443 - HIER_NONE/- text/html
TCP_DENIED/407 4411 CONNECT crt.sh:443 - HIER_NONE/- text/html
TCP_DENIED/200 0 CONNECT crt.sh:443 PROSPER2\\josys.saburo HIER_NONE/- -
NONE/403 4660 GET https://crt.sh/ PROSPER2\\josys.saburo HIER_NONE/- text/html
TCP_DENIED/407 4049 CONNECT crt.sh:443 - HIER_NONE/- text/html
TCP_DENIED/407 4411 CONNECT crt.sh:443 - HIER_NONE/- text/html
TCP_DENIED/200 0 CONNECT crt.sh:443 PROSPER2\\josys.saburo HIER_NONE/- -
https://qiita.com/bashaway
アクセスNG
TCP_DENIED/407 4061 CONNECT qiita.com:443 - HIER_NONE/- text/html
TCP_DENIED/407 4423 CONNECT qiita.com:443 - HIER_NONE/- text/html
TCP_DENIED/200 0 CONNECT qiita.com:443 PROSPER2\\josys.saburo HIER_NONE/- -
NONE/403 4669 GET https://qiita.com/bashaway PROSPER2\\josys.saburo HIER_NONE/- text/html
TCP_DENIED/407 4061 CONNECT qiita.com:443 - HIER_NONE/- text/html
TCP_DENIED/407 4423 CONNECT qiita.com:443 - HIER_NONE/- text/html
TCP_DENIED/200 0 CONNECT qiita.com:443 PROSPER2\\josys.saburo HIER_NONE/- -
非ドメインユーザで認証キャンセル
ローカルユーザでログインすると、ダイアログが表示されるので、「キャンセル」で閉じる
https://ftp.riken.jp/
アクセスOK
TCP_TUNNEL/200 8880 CONNECT ftp.riken.jp:443 - HIER_DIRECT/134.160.38.1 -
TCP_TUNNEL/200 3729 CONNECT ftp.riken.jp:443 - HIER_DIRECT/134.160.38.1 -
TCP_TUNNEL/200 3729 CONNECT ftp.riken.jp:443 - HIER_DIRECT/134.160.38.1 -
https://ugtop.com/
アクセスNG
TCP_DENIED/407 4061 CONNECT ugtop.com:443 - HIER_NONE/- text/html
TCP_DENIED/407 4423 CONNECT ugtop.com:443 - HIER_NONE/- text/html
TCP_DENIED/407 4750 CONNECT ugtop.com:443 PROSPER2\\administrator HIER_NONE/- text/html
https://qiita.com/
アクセスNG
TCP_DENIED/407 4061 CONNECT qiita.com:443 - HIER_NONE/- text/html
TCP_DENIED/407 4423 CONNECT qiita.com:443 - HIER_NONE/- text/html
TCP_DENIED/407 4754 CONNECT qiita.com:443 PROSPER2\\administrator HIER_NONE/- text/html
https://crt.sh/
アクセスNG
TCP_DENIED/407 4049 CONNECT crt.sh:443 - HIER_NONE/- text/html
TCP_DENIED/407 4411 CONNECT crt.sh:443 - HIER_NONE/- text/html
TCP_DENIED/407 4740 CONNECT crt.sh:443 PROSPER2\\administrator HIER_NONE/- text/html
https://qiita.com/bashaway
アクセスNG
TCP_DENIED/407 4061 CONNECT qiita.com:443 - HIER_NONE/- text/html
TCP_DENIED/407 4423 CONNECT qiita.com:443 - HIER_NONE/- text/html
TCP_DENIED/407 4750 CONNECT qiita.com:443 PROSPER2\\administrator HIER_NONE/- text/html
この時の接続エラーはsquidのエラーページではなく、ブラウザのエラーページとなります。
システムユーザ(yumコマンドによるリポジトリへのアクセス)
以下のようにproxy設定を追記する。
--------8<----(snip)----8<--------
proxy=http://proxy-ad.prosper2.net:8081/
--------8<----(snip)----8<--------
あとは、 yum update
を走らせる。
TCP_MISS/200 995 GET http://mirrorlist.centos.org/? - HIER_DIRECT/2604:1580:fe02:2::10 text/plain
TCP_MISS/200 1025 GET http://mirrorlist.centos.org/? - HIER_DIRECT/2604:1580:fe02:2::10 text/plain
TCP_MISS/200 1049 GET http://mirrorlist.centos.org/? - HIER_DIRECT/2604:1580:fe02:2::10 text/plain
TCP_MISS/200 4110 GET http://ftp.jaist.ac.jp/pub/Linux/CentOS/7.7.1908/os/x86_64/repodata/repomd.xml - HIER_DIRECT/2001:df0:2ed:feed::feed application/xml
TCP_MISS/200 5854 GET http://ftp.jaist.ac.jp/pub/Linux/Fedora/epel/7/x86_64/repodata/repomd.xml - HIER_DIRECT/2001:df0:2ed:feed::feed application/xml
TCP_MISS/200 3367 GET http://ftp.jaist.ac.jp/pub/Linux/CentOS/7.7.1908/extras/x86_64/repodata/repomd.xml - HIER_DIRECT/2001:df0:2ed:feed::feed application/xml
TCP_MISS/200 3334 GET http://yum.mariadb.org/10.4/centos7-amd64/repodata/repomd.xml - HIER_DIRECT/142.4.217.28 application/xml
TCP_MISS/200 3381 GET http://ftp.jaist.ac.jp/pub/Linux/CentOS/7.7.1908/updates/x86_64/repodata/repomd.xml - HIER_DIRECT/2001:df0:2ed:feed::feed application/xml
TCP_MISS/200 1039445 GET http://ftp.jaist.ac.jp/pub/Linux/Fedora/epel/7/x86_64/repodata/66b3561eb58c5f02cd36cf21cb7a1a0a3f564932bfa268c1113e4f7741f93672-updateinfo.xml.bz2 - HIER_DIRECT/2001:df0:2ed:feed::feed application/x-bzip2
TCP_MISS/200 7053786 GET http://ftp.jaist.ac.jp/pub/Linux/Fedora/epel/7/x86_64/repodata/b4f2590ec8c2474cba36dd314b195fd8df46b7e51fc49eafabdf23b6c0219a23-primary.sqlite.bz2 - HIER_DIRECT/2001:df0:2ed:feed::feed application/x-bzip2
TCP_TUNNEL/200 11011 CONNECT mirrors.fedoraproject.org:443 - HIER_DIRECT/2604:1580:fe00:0:dead:beef:cafe:fed1 -
squidログの中身
whitelistの場合
インターセプトせず、トンネルしていることがわかる。
TCP_TUNNEL/200 8880 CONNECT ftp.riken.jp:443 - HIER_DIRECT/134.160.38.1 -
TCP_TUNNEL/200 3729 CONNECT ftp.riken.jp:443 - HIER_DIRECT/134.160.38.1 -
TCP_TUNNEL/200 3729 CONNECT ftp.riken.jp:443 - HIER_DIRECT/134.160.38.1 -
ユーザを認識したうえでアクセス可となる場合
コード 407 で認証要求が発せられ、ACLチェック後にAllowされる。
TCP_DENIED/407 4423 CONNECT ugtop.com:443 - HIER_NONE/- text/html
NONE/200 0 CONNECT ugtop.com:443 PROSPER2\\soumu.taro HIER_NONE/- -
TCP_MISS/200 2499 GET https://ugtop.com/ PROSPER2\\soumu.taro HIER_DIRECT/219.94.129.26 text/html
ユーザを認識したうえでアクセス不可となる場合
コード 407 で認証要求が発せられ、ACLチェック後にDenyされる。
TCP_DENIED/407 4411 CONNECT crt.sh:443 - HIER_NONE/- text/html
TCP_DENIED/200 0 CONNECT crt.sh:443 PROSPER2\\jinji.jiro HIER_NONE/- -
NONE/403 4622 GET https://crt.sh/ PROSPER2\\jinji.jiro HIER_NONE/- text/html
認証要求にこたえられない場合
コード 407 で認証要求が発せられ、応じられないので、クライアントとしてエラーになる。(ブラウザのエラー画面)
TCP_DENIED/407 4061 CONNECT ugtop.com:443 - HIER_NONE/- text/html
TCP_DENIED/407 4423 CONNECT ugtop.com:443 - HIER_NONE/- text/html
TCP_DENIED/407 4750 CONNECT ugtop.com:443 PROSPER2\\administrator HIER_NONE/- text/html
中身の解説
Dockerfile
Dockerfileの順番で解説していきます。
イメージCentOS8を利用してます。
NTLM認証によるAD連携をSSOで行うため、sambaとwinbindを入れています。
最後にSSLインターセプトのための証明書を保管するディレクトリを作成しています。
FROM centos:centos8
RUN ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime ; \
dnf -y update ; dnf -y install epel-release rsyslog logrotate cronie ; \
rm -f /etc/logrotate.d/syslog ; \
dnf -y install squid samba samba-winbind openldap-clients authselect samba-winbind-clients ; \
mkdir /etc/squid/certs ;\
systemctl enable squid
なお、手動で実施すると、以下のような出力になります。
(最初はディレクトリが無かったのでエラーになっています)
# /usr/lib64/squid/security_file_certgen -c -s /var/local/squid/ssl_db -M 4MB
Initialization SSL db...
/usr/lib64/squid/security_file_certgen: Cannot create /var/local/squid/ssl_db
# mkdir /var/local/squid
# chown squid.squid /var/local/squid
# /usr/lib64/squid/security_file_certgen -c -s /var/local/squid/ssl_db -M 4MB
Initialization SSL db...
Done
ここは必要なファイルをローカルからコンテナへコピーしているだけです。
ファイルは空でもよいですが、ファイル自体が存在していないとエラーになります。
COPY squid.conf /etc/squid
COPY icacert.pem /etc/squid/certs
COPY icaprivkey.pem /etc/squid/certs
COPY squid_log /etc/logrotate.d
COPY blacklist /etc/squid
COPY whitelist /etc/squid
COPY permlist /etc/squid
COPY intralist /etc/squid
COPY rsyslog.conf /etc
COPY smb.conf /etc/samba
COPY docker-entrypoint.sh /usr/local/bin/
squidでSSLインターセプトするため、一時的にsquid自身がアクセス先のサーバ証明書を作成します。
そのサーバ証明書を入れておくディレクトリの作成と、ディレクトリの初期化を行います。
squidがアクセスする必要があるので、オーナーを変更します。
RUN mkdir /var/local/squid ;\
/usr/lib64/squid/security_file_certgen -c -s /var/local/squid/ssl_db -M 4MB ;\
chown -R squid.squid /var/local/squid ;\
初回起動時の処理を行うためのヘルパースクリプトをコンテナ内にコピーしています。
ln -s usr/local/bin/docker-entrypoint.sh /
ENTRYPOINT ["docker-entrypoint.sh"]
CMD [ "/usr/sbin/init" ]
docker-entrypoint.sh
初回起動時のみ処理させたいものをここにまとめています。
ヘルパースクリプトの動作は dockerで初回起動時のみ特定の処理を行うヘルパースクリプト に書きました。
smbとwinbindはインストールしただけでは、enableになっていないので、それを初回起動の判断条件としています。
認証にwinbindを利用するコマンドを実施後、 net ads join -U
で自身のコンピュータをADに登録します。
登録時はドメインユーザであればOKですので、検索用に作成したユーザを指定しています。
その後、sambaとwinbindを有効化しています。
#!/bin/sh
if [ ! -e /etc/systemd/system/multi-user.target.wants/smb.service ] ; then
authselect select winbind --force
net ads join -U searchuser%s3arch#PWD
systemctl enable smb
systemctl enable winbind
systemctl start smb
systemctl start winbind
fi
exec "$@"
なお、手動で実施すると、以下のような出力になります。
# net ads join -U searchuser%s3arch#PWD
Using short domain name -- PROSPER2
Joined 'PROXY-AD' to dns domain 'prosper2.net'
No DNS domain configured for proxy-ad. Unable to perform DNS Update.
DNS update failed: NT_STATUS_INVALID_PARAMETER
エラーっぽい出力になっていますが、以下のようにコンピュータが登録されます。
squid.conf
認証がらみが多く出てきます。
各セクションごとに説明しますが、コメントは外しています。
NTLM認証のヘルパーを使います。
以下設定では子プロセスを5としているので、大量のユーザで利用する場合は、チューニングが必要です。
auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 5
ここは、SSOのユーザがどのセキュリティグループに所属しているのかを ext_ldap_group_acl
でチェックします。
セキュリティグループがProxyUnlimitなら、squid内でgr_unlimitというaclを定義しています。
セキュリティグループがProxyLimitなら、squid内でgr_limitというaclを定義しています。
このままだと、どちらのセキュリティグループにも所属していないと、後にでてくる http_access で不具合がでます。
なので、 ext_ldap_group_acl
を再度処理して、SSOユーザがOU=employeeに所属していれば、 gr_employee
をいうaclを定義しています。
ベースDNをそのままにして、検索フィルタでOUを抜き出したいのですが、OU=employee配下のユーザでOU=employee配下のセキュリティグループに所属していないと、memberOf属性で検索ができない。加えて、DN属性にはワイルドカードが利用できないので、 CN=*,OU=employee,DC=prosper2,DC=net
という検索ができない。そのため、このような回避策をしています。
external_acl_type security_group %LOGIN /usr/lib64/squid/ext_ldap_group_acl -v 3 -P -R -S -b "ou=employee,dc=prosper2,dc=net" -D searchuser@prosper2.net -w s3arch#PWD -h 10.254.10.241 -f '(&(objectclass=person)(sAMAccountName=%u)(memberOf=CN=%g,ou=employee,dc=prosper2,dc=net))'
external_acl_type ou_check %LOGIN /usr/lib64/squid/ext_ldap_group_acl -v 3 -P -R -S -b "ou=employee,dc=prosper2,dc=net" -D searchuser@prosper2.net -w s3arch#PWD -h 10.254.10.241 -f '(&(objectclass=person)(sAMAccountName=%u))'
acl gr_unlimit external security_group ProxyUnlimit
acl gr_limit external security_group ProxyLimit
acl gr_employee external ou_check employee
ext_ldap_group_acl
のオプションなどは、以下のとおりです。
# LDAP search helper : check ActiveDirectory Security Group
# -v 3 : use LDAP version 3
# -P : persistent LDAP connection
# -R : do not follow referrals
# -S : Strip Domain name
# -b : Base DN (search group)
# -D -w : bind DN (search user) and password
# -h : LDAP server (AD DS)
# -f : filter %u:User %g:Gourp
# %LOGIN : SSO login user
このあたりは、デフォルトの動作とほぼ同じです。
ただし、proxyで許可するポートを http/https/ftp に限定しています。
acl manager proto cache_object
acl localhost src localhost
acl localhost src 127.0.0.1/32
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
# Allow cache
http_access allow localhost manager
http_access deny manager
# Deny not Safe_ports
http_access deny !Safe_ports
# Deny CONNECT request on not SSL_ports
http_access deny CONNECT !SSL_ports
squidの条件判定はFWなんかと同じで、上からチェックしてマッチしたらそこで終了です。
前述した ext_ldap_group_acl
は http_access句でチェックされようとするタイミングで発動するため、blacklistとwhitelistはldap処理の前にもってきています。
# Deny Blacklist sites
acl blacklist url_regex -i "/etc/squid/blacklist"
http_access deny blacklist
# Allow Whitelist sites
acl whitelist url_regex -i "/etc/squid/whitelist"
http_access allow whitelist
ドメインユーザでなければ拒否します。(ホワイトリストは前述でallowのため、影響ありません。)
# Deny not Domain User
http_access deny !gr_unlimit !gr_limit !gr_employee
セキュリティグループ:ProxyUnlimit は、接続先によらず許可です。
# permit : ProxyUnlimit
http_access allow gr_unlimit
セキュリティグループ:ProxyLimit は、permlistにあるサイトは許可です。
# permit : ProxyLimit and permlist
acl permlist url_regex -i "/etc/squid/permlist"
http_access allow gr_limit permlist
OU:employeeのユーザはintralistにあるサイトは許可です。
# permit : No security gourp and intralist
acl intralist url_regex -i "/etc/squid/intralist"
http_access allow gr_employee intralist
これまでに許可されなかったクライアントは拒否です。
# deny : default
http_access deny all
待ち受けを8081/tcpとして、SSL_BUMPしています。
SSL_BUMPは子プロセスを5としているので、大量のユーザで利用する場合は、チューニングが必要です。
whitelistはSSL_BUMPせず、そのまま転送します。(これしないと yum でエラー出る)
http_port 8081 ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB cert=/etc/squid/certs/icacert.pem key=/etc/squid/certs/icaprivkey.pem
sslcrtd_program /usr/lib64/squid/security_file_certgen -s /var/local/squid/ssl_db -M 4MB
sslcrtd_children 5
ssl_bump bump !whitelist
sslproxy_cert_error allow intralist
sslproxy_cert_error deny all
あとはデフォルトのまま。
visible_hostname proxy-ad
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 . 0 20% 4320
トラブルシューティング
winbindがうまく動作しない場合、ldapフィルタが思うように動作しない場合など、以下の通りチェックしてみます。
winbindの動作
正常に接続できるかの確認
# wbinfo -t
checking the trust secret for domain PROSPER2 via RPC calls succeeded
ユーザリストが取得できるか
# wbinfo -u
PROSPER2\administrator
PROSPER2\guest
PROSPER2\krbtgt
PROSPER2\aad_7dfc1e6f942a
PROSPER2\msol_7dfc1e6f942a
PROSPER2\soumu.taro
PROSPER2\jinji.jiro
PROSPER2\josys.saburo
PROSPER2\searchuser
指定ユーザで認証できるか
# wbinfo -a PROSPER2.NET\\searchuser%s3arch#PWD
plaintext password authentication succeeded
challenge/response password authentication succeeded
ldapsearch
windowsのログインユーザを指定して、対象ユーザの情報を表示
# ldapsearch -b "dc=prosper2,dc=net" -D searchuser@prosper2.net -w s3arch#PWD -h 10.254.10.241 "sAMAccountName=soumu.taro"
フィルタを組み合わせて、対象ユーザの情報を表示
# ldapsearch -b "dc=prosper2,dc=net" -D searchuser@prosper2.net -w s3arch#PWD -h 10.254.10.241 \
'(&(objectclass=person)(sAMAccountName=soumu.taro)(memberOf=CN=ProxyUnlimit,OU=employee,DC=prosper2,DC=net))'
フィルタを組み合わせて、対象ユーザの情報を表示
(この場合、jinji.jiroはProxyUnlimitのmemberOfではないため、表示されない)
# ldapsearch -b "dc=prosper2,dc=net" -D searchuser@prosper2.net -w s3arch#PWD -h 10.254.10.241 \
'(&(objectclass=person)(sAMAccountName=jinji.jiro)(memberOf=CN=ProxyUnlimit,OU=employee,DC=prosper2,DC=net))'
ext_ldap_group_acl
squid.conf で記載しているコマンドは、そのままコマンドラインで確認できる。
ログイン名とセキュリティグループの組み合わせが正しいかをチェック
# /usr/lib64/squid/ext_ldap_group_acl -v 3 -P -R -S -b "dc=prosper2,dc=net" \
-D searchuser@prosper2.net -w s3arch#PWD -h 10.254.10.241 \
-f '(&(objectclass=person)(sAMAccountName=%u)(memberOf=CN=%g,ou=employee,dc=prosper2,dc=net))'
soumu.taro ProxyUnlimit
OK
jinji.jiro ProxyUnlimit
ERR
josys.saburo ProxyUnlimit
ERR
soumu.taro ProxyLimit
ERR
jinji.jiro ProxyLimit
OK
josys.saburo ProxyLimit
ERR
ログイン名とがOU:employeeに存在するかをチェック
(引数を1つしか指定していないため、第2引数はなんの文字列でもかまわない)
# /usr/lib64/squid/ext_ldap_group_acl -v 3 -P -R -S -b "ou=employee,dc=prosper2,dc=net" \
-D searchuser@prosper2.net -w s3arch#PWD -h 10.254.10.241 \
-f '(&(objectclass=person)(sAMAccountName=%u))'
soumu.taro ABCDEFG
OK
jinji.jiro ABCDEFG
OK
josys.saburo ABCDEFG
OK
searchuser ABCDEFG
ERR
さいごに
前回チャレンジしたのが2014年の squidとActiveDirectoryの連携 でした。
今回はSSLインターセプトを追加してDockerコンテナで作成しましたが、squid4.4になっても大きく変わっていなかったので、比較的すんなり検証できました。
次はKerberos認証にチャレンジ予定です。
出典
http://www.prosper2.org/devwiki/index.php?squid%E3%81%A8ActiveDirectory%E3%81%AE%E9%80%A3%E6%90%BA
https://www7390uo.sakura.ne.jp/wordpress/archives/777
https://smoothnet.org/squid-v3-5-proxy-with-ssl-bump/
https://social.technet.microsoft.com/Forums/lync/en-US/24e0eec0-7984-4bc3-b2e8-319be2d57112/ldap-filter-limiting-to-specific-ou
https://social.technet.microsoft.com/wiki/contents/articles/5392.active-directory-ldap-syntax-filters.aspx