🦑
SquidのTips集
Squid を実運用する際に覚えておくとよいことについてメモ✍
特に、簡易的なフォワードプロキシとして使うケースについて紹介します
BASIC認証を設定
auth_param basic
で指定する
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
コマンドで発行するとよい
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から接続する先の特定のポートへのアクセスのみ許可する
squid.conf
acl Safe_ports port 80
acl Safe_ports port 443
acl Safe_ports port 1025-65535
http_access deny !Safe_ports
クライアントに返却する情報を減らす
エラー時に失敗理由を具体的に返さないようにする
Squidを使っているとわかるようなHTTPヘッダを削除
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で運用する場合これをベースにするとよさそう
そんだけ😌
Discussion