Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Squid 透明代理完整部署指南:從核心編譯到 iptables 轉向實戰

編輯:Linux 教學

透明代理讓用戶端**無需任何瀏覽器設定**,流量經由網關強制導向 Squid 代理伺服器,實現統一存取控制、內容快取與頻寬管理。本文詳細記錄 Linux 2.2/2.4/2.6 核心下透明代理的完整部署流程,涵蓋 Squid 設定、核心選項編譯、防火牆轉向規則與常見陷阱。

一、透明代理運作原理

  1. 用戶端瀏覽器**未設定代理**,直接發送 HTTP 請求至目標站點(目的埠 80)
  2. 封包經過網關(Squid 所在主機)
  3. 防火牆(ipchains/iptables)攔截目的埠 80 的 TCP 封包,**重導向**至本地 Squid 埠口(預設 3128 或 8080)
  4. Squid 以代理身份代為請求、快取、回應

前置條件: 用戶端預設閘道必須指向 Squid 主機;用戶端 DNS 設定正確(由瀏覽器自行解析域名)。

二、Squid 設定啟用透明代理

Squid 2.x (/etc/squid/squid.conf)

http_port 3128 transparent  # 2.6 核心建議寫法
# 或舊版相容寫法
http_port 8080
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on

Squid 1.x (/etc/squid.conf)

http_port 8080
httpd_accel virtual 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on

重新載入設定:squid -k reconfigure。若提示核心不支援,需重編核心。

三、核心編譯:啟用透明代理支援

核心配置選項(make menuconfig → Networking options):

[*] Network packet filtering framework (Netfilter)
[*]   IP tables support (required for filtering/masq/NAT)
[*]     Connection tracking (required for masq/NAT)
[*]     FTP protocol support
[*]     IRC protocol support
[*]   IP tables NAT support
[*]     REDIRECT target support   # 關鍵:透明代理重導向
[*]   Full NAT
[*]     MASQUERADE target support
[*]     REDIRECT target support
[*]   Packet mangling
[*]   LOG target support
# 2.4/2.6 核心不再有獨立 "IP: transparent proxy support" 選項
# 透明代理完全由 Netfilter REDIRECT 目標實現

編譯安裝新核心並重啟。

四、防火牆轉向規則實戰

Linux 2.4/2.6 核心(iptables)推薦標準

# 1. 允許本地回環
iptables -A INPUT -i lo -j ACCEPT
# 2. 允許本機發出的封包(防迴路)
iptables -A INPUT -p tcp -d  --dport 80 -j ACCEPT
# 3. 核心規則:將內網 HTTP 流量重導向 Squid
iptables -t nat -A PREROUTING -i  -p tcp --dport 80 -j REDIRECT --to-port 3128
# 4. 若 Squid 不在閘道上,需額外 DNAT/SNAT,此處假設 Squid 即閘道

關鍵點: 必須在 nat 表的 PREROUTING 鏈處理,早於路由決策。

Linux 2.2 核心(ipchains)舊版參考

ipchains -A input -i lo -j ACCEPT
ipchains -A input -p tcp -d /32 80 -j ACCEPT
ipchains -A input -p tcp -s /24 -d 0/0 80 -j REDIRECT 8080

Linux 2.0 核心(ipfwadm)極舊版參考

ipfwadm -I -a accept -W lo
ipfwadm -I -a accept -P tcp -D /32 80
ipfwadm -I -a accept -P tcp -S /24 -D 0/0 80 -r 8080

五、完整啟動腳本範例(/etc/rc.d/rc.firewall)

#!/bin/sh
IPT=/sbin/iptables
LAN_IF=eth0
LAN_NET=192.168.11.0/24
SQUID_PORT=3128

# 清空規則
$IPT -F
$IPT -t nat -F
$IPT -X

# 預設策略
$IPT -P INPUT DROP
$IPT -P FORWARD DROP
$IPT -P OUTPUT ACCEPT

# 允許回環
$IPT -A INPUT -i lo -j ACCEPT
# 允許已建立連線
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# 透明代理核心規則
$IPT -t nat -A PREROUTING -i $LAN_IF -p tcp --dport 80 -j REDIRECT --to-port $SQUID_PORT

# 允許內網其他流量轉發(可選)
$IPT -A FORWARD -i $LAN_IF -s $LAN_NET -j ACCEPT
$IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

# NAT 上網(若為閘道)
$IPT -t nat -A POSTROUTING -s $LAN_NET -o  -j MASQUERADE

echo 1 > /proc/sys/net/ipv4/ip_forward

六、關鍵限制與注意事項

  1. 僅支援 HTTP 協定:FTP、HTTPS(443 埠)等無法透明代理(HTTPS 涉及憑證驗證,需額外部署 SSL Bump/中間人解密)
  2. 規則順序至關重要:REDIRECT 規則必須置於 INPUT/FORWARD 鏈的 DROP/REJECT 規則**之前**
  3. 用戶端閘道設定:必須指向 Squid 主機 IP
  4. Squid 存取控制 (ACL):仍需在 squid.conf 設定 http_access allow localnet 等規則,否則預設拒絕
  5. 效能考量:高流量環境需調整 net.core.netdev_max_backlog、nf_conntrack_max 等核心參數

七、驗證與除錯

# 檢查 NAT 規則
iptables -t nat -L -n -v
# 檢查 Squid 存取日誌
tail -f /var/log/squid/access.log
# 用戶端測試:直接瀏覽 https://example.com,觀察日誌出現 TCP_MISS/200 或 TCP_HIT/200

透明代理是企業級網路管控的基石,配合 SquidGuard/DansGuardian 可實現內容過濾,結合 Delay Pools 實現頻寬限速,構建完整的上網行為管理體系。

Copyright © Windows教程網 All Rights Reserved