2026年11月11日 星期三

squid-openssl 設定範例

設定金鑰
sudo mkdir -p /etc/squid/certs
cd /etc/squid/certs

# 產生私鑰與根憑證
sudo openssl req -new -newkey rsa:2048 -days 3650 -nodes -x509 \
  -keyout squid-ca.key \
  -out squid-ca.pem \
  -subj "/CN=Debian-Squid-CA/O=Internal Proxy/C=TW"

# 產生瀏覽器/終端系統匯入用的 DER 格式 (選用)
sudo openssl x509 -in squid-ca.pem -outform DER -out squid-ca.der

# 設定安全權限,避免非授權存取私鑰
sudo chown -R proxy:proxy /etc/squid/certs
sudo chmod 400 /etc/squid/certs/squid-ca.key
sudo chmod 444 /etc/squid/certs/squid-ca.pem


編輯 /etc/squid/squid.conf
# 1. 網路監聽與 SSL-Bump 核心配置

# 監聽 3128 埠並啟用 SSL-Bump 支援
http_port 3128 tcpkeepalive=60,30,3 ssl-bump \
  cert=/etc/squid/certs/squid-ca.pem \
  key=/etc/squid/certs/squid-ca.key \
  generate-host-certificates=on \
  dynamic_cert_mem_cache_size=20MB

# 憑證產生輔助程式 (Debian 13 預設路徑)
sslcrtd_program /usr/lib/squid/security_file_certgen -s /var/lib/squid/ssl_db -M 20MB
sslcrtd_children 8 startup=2 idle=1

# 信任系統預設 CA 憑證庫
sslproxy_cafile /etc/ssl/certs/ca-certificates.crt

# 2. ACL 定義 (Access Control Lists)
# 允許連線的內網來源網段 (請依實際內網配置調整)
acl localnet src 192.168.0.0/16
acl localnet src 10.0.0.0/8
acl localnet src 172.16.0.0/12

# 連接埠與協定定義
acl SSL_ports port 443
acl Safe_ports port 80          # http
acl Safe_ports port 443         # https
acl Safe_ports port 1025-65535  # unregistered ports
acl CONNECT method CONNECT

# 欲阻擋的 HTTP 寫入 / 上傳方法
acl UploadMethods method POST PUT PATCH

# 內部自簽測試主機 (針對先前 10.6.140.1 除錯)
acl InternalTestServer dst 10.6.140.1
acl InternalTestSNI ssl::server_name apache2-test.loc

# 3. 憑證錯誤處理 (排除 503 / broken_cert 核心設定)
# 允許內部測試主機略過自簽憑證驗證
#sslproxy_cert_error allow InternalTestServer
#sslproxy_cert_error allow InternalTestSNI

# 關閉對端強制憑證驗證,避免 IP 存取時因主機名稱不符造成連線中斷
sslproxy_flags DONT_VERIFY_PEER

# 其餘外部網站維持嚴格憑證驗證
sslproxy_cert_error deny all

# 4. HTTP 存取控制規則 (順序關鍵:deny 必須置於 allow 之前)
# 基本安全檢查:拒絕非安全連接埠與非 SSL 埠的 CONNECT
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports

# 快取管理員權限
http_access allow localhost manager
http_access deny manager

# 【核心阻擋】拒絕所有 POST / PUT / PATCH 請求
http_access deny UploadMethods

# 允許內網與本機發起其餘合法連線 (GET, HEAD, CONNECT 等)
http_access allow localnet
http_access allow localhost

# 預設拒絕其餘未定義來源
http_access deny all

# 5. SSL-Bump 處理流程
# 步驟 1:窺探連線取得 SNI 與 IP
acl step1 at_step SslBump1
ssl_bump peek step1

# (備用選項) 若希望特定主機直接穿透而不進行任何解密檢視,可取消註解下一行:
# ssl_bump splice InternalTestServer
# 步驟 2/3:對其餘所有 HTTPS 流量執行解密 (Bump),以落實 POST/PUT 檢查

ssl_bump bump all

# 6. 快取與系統日誌
access_log daemon:/var/log/squid/access.log squid
coredump_dir /var/spool/squid
shutdown_lifetime 3 seconds

沒有留言: