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

Linux 代理服務器與防火牆常見故障問答精選

編輯:關於 Linux

在 Linux 架設 Squid 代理與 iptables 防火牆時,管理員常遇到延遲異常、緩存不生效、端口轉發失效等棘手問題。本文精選典型 Q&A,直擊痛點,提供可落地的排查思路與修復方案。

案例一:代理首次連接極慢(79 秒),後續秒開

現象:10M 局域網部署 Squid 代理,客戶端 telnet proxy 3128 或瀏覽器首次請求均需 79 秒才建立連接,之後瞬間加載完成。已將客戶端 IP 加入服務器 /etc/hosts,telnet 正常但代理仍慢。

排查與解決

  1. DNS 反解超時:Squid 預設對客戶端 IP 做反向 DNS 查詢(log_fqdn on 或 ACL 中使用域名),若 DNS 解析失敗會阻塞 75+ 秒(預設超時)。
  2. 修復:在 squid.conf 設置 log_fqdn off、ACL 僅用 IP 段、或確保 DNS 服務器可正常反解客戶端 IP。
    # 快速驗證
    dig -x 192.168.1.100 @ 若超時即為元兇。
  3. 硬件資源:若 DNS 正常,檢查 CPU/內存/磁盤 IO,低配機器(< PIII)跑 Squid 緩存壓力大易導致延遲。

案例二:定義上級代理後無緩存效果

現象:squid.conf 配置 cache_peer 170.169.5.71 parent 737 0 no-query,但客戶端訪問無緩存加速,每次都回源。

排查與解決

  1. no-query 參數含義:禁止向上級代理發送 ICP 查詢。若上級代理支援 ICP/HTCP,去掉 no-query 可讓 Squid 查詢上級是否有緩存,命中則直接取回,減少回源延遲。
  2. 修正配置:
    cache_peer 170.169.5.71 parent 737 0 proxy-only no-query → 去掉 no-query 或改為 query-timeout=5 控制超時。
    cache_peer 170.169.5.71 parent 737 0 proxy-only
  3. 驗證緩存命中:tail -f /var/log/squid/access.log | grep TCP_MEM_HIT 或 TCP_HIT 出現即生效。

案例三:防火牆端口轉發不生效

現象:配置 iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 192.168.1.10:8080,外網訪問公網 IP:80 無法轉發至內網 Web 服務。

排查清單

  1. 內核轉發未開啟:sysctl -w net.ipv4.ip_forward=1 並寫入 /etc/sysctl.conf。
  2. FORWARD 鏈阻攔:需允許轉發流量通過:
    iptables -A FORWARD -i eth0 -o eth1 -d 192.168.1.10 -p tcp --dport 8080 -j ACCEPT
  3. 回包路由:內網服務器預設網關必須指向防火牆內網 IP,否則回包不經防火牆導致連接斷裂。
  4. SNAT/Masquerade:若內網服務器網關非防火牆,需在 POSTROUTING 做 SNAT:
    iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -d 192.168.1.10 -p tcp --dport 8080 -j SNAT --to-source

案例四:Squid 緩存命中率低

優化建議

  • 調整緩存大小與對象限制:
    cache_dir ufs /var/spool/squid 10240 16 256 (10GB)
    maximum_object_size 1024 MB
    maximum_object_size_in_memory 512 KB
  • 啟用緩存鑰匙重寫:動態 URL 參數導致緩存分片,用 url_rewrite_program 正規化。
  • 刷新模式優化:
    refresh_pattern -i \.jpg$ 1440 90% 10080 override-expire ignore-no-cache
    refresh_pattern . 0 20% 4320

案例五:防火牆規則重啟丟失

現象:手動添加 iptables 規則後,重啟服務器或 systemctl restart iptables 規則消失。

持久化方案

# RHEL/CentOS 7+
service iptables save          # 存入 /etc/sysconfig/iptables
# 或
iptables-save > /etc/sysconfig/iptables

# Debian/Ubuntu
apt-get install iptables-persistent
# 安裝過程會詢問保存當前規則,之後自動載入
netfilter-persistent save

代理防火牆故障排查流程圖

總結:通用排查方法論

  1. 分層驗證:物理鏈路 → IP 連通 → 端口監聽 → 應用協議 → 日志分析。
  2. 抓包見真章:tcpdump -i any -nn -s0 port 3128 觀察三次握手、數據交互、RST/FIN 異常。
  3. 最小化復現:隔離變量,單獨測試 DNS、路由、防火牆、應用配置。
  4. 版本與文檔:squid -v、iptables --version 確認特性支援,閱讀官方手冊而非盲目複製網上配置。

掌握上述典型故障模式與排查邏輯,將助您從「救火隊員」進化為「架構級」網絡服務守護者。

Copyright © Windows教程網 All Rights Reserved