Squid 是功能最完整的開源 HTTP/HTTPS 代理快取伺服器。結合 iptables NAT 與 REDIRECT 機制,可部署為透明代理網關:客戶端無需任何瀏覽器設定,所有 HTTP 流量自動經過 Squid 快取與存取控制。本文以 CentOS 為例,完整示範從安裝、NAT 設定、透明代理配置、多層 ACL 策略(檔案類型/大小/域名/關鍵字)到驗證封鎖效果的全流程。

yum install -y squid
systemctl enable --now squid

# 1. 開啟 IP 轉發
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p
# 2. SNAT 規則(假設 eth1 為 WAN 介面)
iptables -t nat -A POSTROUTING -o eth1 -s 192.168.100.0/24 -j MASQUERADE
service iptables save

編輯 /etc/squid/squid.conf 關鍵段落:
# 監聽 LAN 介面 3128 埠,啟用透明模式
http_port 192.168.100.254:3128 transparent
# 基礎權限
acl all src all
http_access allow all
# 快取參數
maximum_object_size 3 MB # 超過 3MB 不快取
reply_body_max_size 8 MB all # 禁止下載超過 8MB 檔案
# 日誌
access_log /var/log/squid/access.log squid
# 將 LAN 來自 80 埠的 TCP 流量重導至本機 3128
iptables -t nat -A PREROUTING -i eth0 -s 192.168.100.0/24 -p tcp --dport 80 -j REDIRECT --to-ports 3128
service iptables save


客戶端直接瀏覽 https://test.server/largefile.zip,觀察 Squid access.log 確認 TCP_HIT/TCP_MISS 狀態。

在 squid.conf 中新增:
# 定義 LAN 網段
acl lan100 src 192.168.100.0/24
# 1. 封鎖特定域名
acl denydomain dstdomain .qq.com .tencent.com .xxxx.com
# 2. 關鍵字過濾(URL 路徑含 sex/adult)
acl denywords urlpath_regex -i sex adult
# 3. 副檔名過濾(禁止下載 rmvb/mp3)
acl realfile urlpath_regex -i \.rmvb$ \.mp3$
# 應用拒絕規則(順序很重要:先匹配越精確的規則)
http_access deny lan100 denydomain
http_access deny lan100 denywords
http_access deny lan100 realfile
# 保留原有允許規則
http_access allow lan100
http_access deny all
systemctl reload squid





含 "sex"、"adult" 的 URL 直接回傳 403/錯誤頁。
cache_dir ufs /var/spool/squid 10240 16 256 依磁碟容量調整。sarg、lightsquid 產生報表。maximum_object_size_in_memory、memory_cache_size 依實體記憶體設定。