架設 Squid 代理與 iptables 防火牆是 Linux 系統管理員的必修課,但實務上常遇到效能瓶頸、快取失效、DNS 解析慢、核心參數調優等棘手問題。本文精選實戰高頻 Q&A,涵蓋 Squid 上層代理配置、快取機制、核心網路參數、硬體資源規劃,助你快速排除故障、優化架構。

客戶端透過 Squid 存取網頁,連線建立需 79 秒,之後傳輸正常。加入 /etc/hosts 後 Telnet 正常,但代理仍慢。
log_fqdn on 或 ACL 使用主機名)。關閉反查:log_fqdn off、ACL 改用 IP/CIDR。cache_peer 指向上游代理,確保上游 DNS 正常,或在 Squid 指定 dns_nameservers 指向快速解析器(如 114.114.114.114、8.8.8.8)。cache_mem 64 MB、maximum_object_size_in_memory 64 KB、增加 cache_dir 磁碟快取、調大 cache_swap_low/high 水位。cache_peer 170.169.5.71 parent 737 0 no-query
no-query 告訴 Squid 不向上層發送 ICP/HTCP 查詢,直接轉發請求。這不會關閉本地快取,但若上層回應 Cache-Control: private/no-store 或 Squid 判斷不可快取(如 POST、授權頁),本地仍不會快取。
no-query 讓 Squid 嘗試 ICP 查詢(需上層支援)。cache.log 中 TCP_MISS/TCP_HIT 比例,確認快取命中率。refresh_pattern 調整 TTL。舊文檔要求核心關閉 IP forwarding 隔離內外網,但在 Red Hat 6.1 (2.4 核心) 預設模組化,選項位於 Networking options → IP: forwarding/gatewaying。
sysctl 動態控制:net.ipv4.ip_forward = 0(/etc/sysctl.conf 永久生效)。# squid.conf
cache_peer proxy.upstream.example.com parent 8080 0 no-query default
never_direct allow all
default:標記為預設上層代理。never_direct allow all:強制所有請求經上層,不直接連目標站。squidclient -p 3128 mgr:info:CLI 獲取摘要資訊。calamaris / SARG:分析 access.log 產生報表。| 誤區 | 正確做法 |
|---|---|
| 只開放 80/443 就安全 | 需限制來源 IP、速率限制、狀態檢查(-m state --state ESTABLISHED,RELATED) |
| FORWARD 鏈預設 ACCEPT | 預設 DROP,僅放行 NAT 後的合法流量 |
| 儲存規則用 iptables-save > /etc/sysconfig/iptables | CentOS/RHEL 7+ 改用 firewall-cmd --runtime-to-permanent 或 iptables-save 配合 systemd 服務 |
async_io、diskd 快取儲存模式(高負載)。ulimit -n 65535(/etc/security/limits.conf)。net.core.somaxconn=65535、net.ipv4.tcp_max_syn_backlog=8192。squid -k rotate 切割日誌,避免磁碟爆滿。cache_hit_ratio > 40%、cpu_usage < 70%、swap_used = 0。Squid 與防火牆的穩定高效,仰賴精準的 DNS 解析、合理的快取策略、充足的硬體資源、核心參數調優、完善的監控告警。遇到問題時,優先查閱 cache.log、access.log、/var/log/messages,善用 squidclient 即時查詢內部狀態,多數疑難雜症皆可迎刃而解。