🦑

SquidのTips集

2022/06/18に公開

Squid を実運用する際に覚えておくとよいことについてメモ✍
特に、簡易的なフォワードプロキシとして使うケースについて紹介します

https://www.f5.com/ja_jp/services/resources/glossary/forward-proxy

BASIC認証を設定

auth_param basic で指定する

https://www.robata.org/docs/squid/Reference/squid3.4.0.3/auth_param.html

squid.conf
auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/.htpasswd
auth_param basic children 5 startup=5 idle=1
auth_param basic realm hello
auth_param basic credentialsttl 1 minute
.htpasswd
user1:$xxxxxxxxxxxxxxxxxxxxxxxxxxxx
user2:$xxxxxxxxxxxxxxxxxxxxxxxxxxxx
user3:$xxxxxxxxxxxxxxxxxxxxxxxxxxxx

パスワードは pwgen コマンドで発行するとよい

https://linuxfan.info/pwgen

username="user1"
pw="$(pwgen 16 1 | tr -d '\r\n')"
echo "password: $pw"
echo "$(htpasswd -nb "$username" "$pw" | tr -d '\r\n')" >> "/etc/squid/.htpasswd"

特定のドメインへのアクセスのみ許可する

特定のユーザーグループごとに特定のドメインへのアクセス許可をしたい場合は以下

squid.conf
# groups
acl group1 proxy_auth "/etc/squid/groups/group1.txt"
acl group2 proxy_auth "/etc/squid/groups/group2.txt"
acl admin proxy_auth "/etc/squid/groups/admin.txt"

# domains
acl domains_domain1 dstdom_regex "/etc/squid/domains/domain1.txt"
acl domains_domain2 dstdom_regex "/etc/squid/domains/domain2.txt"

# allow
http_access allow admin
http_access allow domains_domain1 group1
http_access allow domains_domain1 group2
http_access allow domains_domain2 group2
http_access deny all

groupsファイルのイメージ
.htpasswd 作成時に指定したユーザー名を列挙する

/etc/squid/groups/group1.txt
user1
user3

domainsファイルのイメージ
ドメイン名を正規表現で指定する

/etc/squid/domains/domain1.txt
^intra\.example\.com$

特定のポートへのアクセスのみ許可する

proxyから接続する先の特定のポートへのアクセスのみ許可する

https://blog.cybozu.io/entry/2017/02/03/080000

squid.conf
acl Safe_ports port 80
acl Safe_ports port 443
acl Safe_ports port 1025-65535
http_access deny !Safe_ports

クライアントに返却する情報を減らす

エラー時に失敗理由を具体的に返さないようにする

https://www.robata.org/docs/squid/Reference/squid3.4.0.3/deny_info.html

Squidを使っているとわかるようなHTTPヘッダを削除

https://www.robata.org/docs/squid/Reference/squid3.4.0.3/reply_header_access.html

squid.conf
acl errors http_status 400-599
deny_info TCP_RESET errors
http_reply_access deny errors

reply_header_access X-Squid-Error deny all
reply_header_access X-Cache deny all
reply_header_access X-Cache-Lookup deny all
reply_header_access Server deny all
reply_header_access Via deny all
reply_header_access Vary deny all
reply_header_access Mime-Version deny all
reply_header_access Content-Language deny all

ログ

アクセスログは /var/log/squid/access.log に吐かれる

access.log
# 転送拒否された場合は TCP_DENIED が出力される
1632751525.920      0 172.17.0.1 TCP_DENIED/403 4129 CONNECT xxx.intra.example.com:443 user1 HIER_NONE/- text/html

# TCP_TUNNEL ないし TAG_NONE の場合は転送されたということっぽい
1632751444.516 240848 172.17.0.1 TCP_TUNNEL/200 6661 CONNECT xxx.intra.example.com:443 user1 HIER_DIRECT/xxx.xxx.xxx.xxx -
1632751457.182 180026 172.17.0.1 TAG_NONE/503 0 CONNECT xxx.intra.example.com:443 user1 HIER_NONE/- -

Dockerイメージ

Dockerで運用する場合これをベースにするとよさそう

https://hub.docker.com/r/ubuntu/squid

そんだけ😌

Discussion