Blog Details

Linux 作業系統 cutexyz > Blog > 伺服器管理 > 伺服器管理必學 100 招 > 伺服器管理必學 100 招|Part 4:網路通訊與防火牆調校

伺服器管理必學 100 招|Part 4:網路通訊與防火牆調校

前言
「明明服務啟動了,外部卻連不上?」、「主機頻寬被默默吃光,不知道流量往哪裡跑?」網路層的通透與邊界管控,是伺服器穩定運作的基石。本篇精選 10 個核心網路診斷與防火牆調校技巧,從全面捨棄過時指令、精準使用 UFW/iptables 建立白名單,到線上抓包排錯與 Linux 核心網路堆疊優化,助你快速理清封包路徑,堵住未授權的連線缺口。

技巧 031:淘汰老舊 netstat!改用極速 ss 掌握 Port 監聽狀態

  • 痛點場景:
    在連線數達數萬的高負載伺服器上執行 netstat,指令經常卡死數十秒甚至耗盡記憶體,排查效率低落。
  • 解決方案:
    使用直接從 Linux 核心取得 TCP 資訊的現代化工具 ss(Socket Statistics):
# 檢視所有處於監聽(Listening)狀態的 TCP/UDP 連接埠與對應 PID
sudo ss -tulnp

# 僅列出目前對外建立中的已連線(ESTABLISHED)TCP 連線
ss -tan state established

# 統計當前各種連線狀態的數量總和
ss -s
  • 專家提醒:
    若要快速篩選特定 Port(如 80 或 443),可直接使用原生過濾語法 ss -tuln 'sport = :http or sport = :https',比透過管道送給 grep 更高效。

技巧 032:UFW 防火牆起手式:貫徹「預設全擋、按需放行」原則

  • 痛點場景:
    初學者往往在安裝防火牆時,沒先放行 SSH 埠就直接啟用,導致終端機連線中斷,直接將自己反鎖在雲端主機之外。
  • 解決方案:
    嚴格遵循安全順序配置 UFW(Uncomplicated Firewall):
# 1. 設定全域基礎策略:預設阻擋所有連入、允許所有連出
sudo ufw default deny incoming
sudo ufw default allow outgoing

# 2. 啟用前務必先放行管理連接埠(若有變更 SSH 埠請替換 22)
sudo ufw allow 22/tcp comment 'SSH Access'
sudo ufw allow 80/tcp comment 'HTTP Web'
sudo ufw allow 443/tcp comment 'HTTPS Web'

# 3. 確認規則無誤後再啟用
sudo ufw enable

# 4. 帶編號檢視規則(方便後續精準刪除)
sudo ufw status numbered
  • 專家提醒:
    若日後要刪除特定規則,直接依照編號執行 sudo ufw delete <編號>,避免記錯原始指令參數。

技巧 033:限制特定 IP 或私有網段存取後台管理埠

  • 痛點場景:
    資料庫(如 MySQL 3306、Redis 6379)或內部管理面板(如 8080)若因設定失誤暴露至公網,極易被掃描工具暴力破解。
  • 解決方案:
    透過防火牆鎖定僅允許特定來源 IP 或辦公室網段存取敏感埠:
# 僅允許固定辦公室 IP 存取 MySQL 3306
sudo ufw allow from 203.0.113.50 to any port 3306 proto tcp

# 僅允許同機房內網(VPC)網段存取 Redis
sudo ufw allow from 10.0.1.0/24 to any port 6379 proto tcp

# 立即重新載入驗證
sudo ufw reload
  • 專家提醒:
    資料庫配置本體(如 my.cnf 或 redis.conf)建議預設綁定 bind 127.0.0.1 或內網 IP,搭配防火牆形成雙層縱深防禦。

技巧 034:用 dig 與 +trace 追蹤 DNS 解析,排除域名假死

  • 痛點場景:
    使用者回報網站打不開,但伺服器本體一切正常,工程師難以確認是 DNS 伺服器故障、快取污染,還是尚未全球生效。
  • 解決方案:
    安裝 dnsutils,使用 dig 從根伺服器層層追蹤權威解析鏈:
sudo apt install dnsutils -y

# 追蹤完整委託鏈,找出是哪一層的 NS 紀錄發生中斷
dig +trace example.com A

# 跳過本機快取,直接向指定的公共 DNS(如 Cloudflare 1.1.1.1)查詢
dig @1.1.1.1 example.com A +short
  • 專家提醒:
    若更換了 DNS 紀錄但特定地區遲未生效,可用 dig example.com +nssearch 檢查所有負責該網域的權威 NS 伺服器其 Serial Number 是否已同步。

技巧 035:線上連線終端體檢:告別 telnet,善用 nc 與 curl -Iv

  • 痛點場景:
    當後端連線超時,需要快速判斷「目標主機網路不通」、「連線被防火牆阻斷(Drop)」還是「服務根本未啟動(Connection Refused)」。
  • 解決方案:
    使用 nc(Netcat)測試指定埠連通性,或用 curl -Iv 取得包含 SSL 握手在內的完整請求歷程:
# 測試遠端主機的 443 埠是否可連通(逾時設為 3 秒)
nc -zv -w 3 203.0.113.10 443

# 查看詳細 HTTP 握手、憑證鏈校驗與重導向標頭
curl -Iv https://example.com

# 僅查看耗時細節(DNS 解析耗時、TCP 握手耗時、首字節響應 TTFB)
curl -w "DNS: %{time_namelookup}s | TCP: %{time_connect}s | TTFB: %{time_starttransfer}s | Total: %{time_total}s\n" -o /dev/null -s https://example.com
  • 專家提醒:
    若 nc 回傳 Connection refused,代表網路通暢但目標伺服器上該埠沒有程式在監聽;若指令卡住直到逾時,則 90% 是封包被中間的防火牆或安全群組默默拋棄。

技巧 036:抓包排錯不用裝 GUI!tcpdump 終端精準截取封包

  • 痛點場景:
    API 互相呼叫回傳異常或連線中斷,但在應用程式端看不到具體的網路底層封包細節。
  • 解決方案:
    使用 tcpdump 針對特定網卡、IP 或 Port 實施動態過濾抓包:
# 監聽 eth0 網卡,僅抓取來源或目的為 80 埠的封包(不解析主機名,加速輸出)
sudo tcpdump -i eth0 -nn 'port 80'

# 抓取特定客戶端 IP 的連線,並顯示 ASCII 明文內容(適合排查純文字協議)
sudo tcpdump -i any -nn -A 'host 198.51.100.25 and port 8080'

# 將流量寫入 pcap 檔案,方便下載到本地用 Wireshark 深入剖析
sudo tcpdump -i eth0 -w /tmp/debug.pcap 'port 443' -c 1000
  • 專家提醒:
    在生產環境執行抓包時,務必加上 -c 1000 限制擷取數量,或搭配明確的過濾條件,避免大流量瞬間塞滿硬碟空間。

技巧 037:頻寬被吃光?用 iftop 揪出吃流量的遠端 IP 與連線

  • 痛點場景:
    雲端監控儀表板顯示頻寬對外噴出幾百 Mbps、費用暴增,但不知道是哪一台主機或哪一個外部 IP 正在大量消耗流量。
  • 解決方案:
    安裝並開啟即時網路流量監控儀表 iftop:
sudo apt install iftop -y

# 監聽指定網卡,預設顯示雙向傳輸頻寬
sudo iftop -i eth0 -n -P
  • 實用操作指令:
    • 按 P:顯示對應的連接埠號(Port)。
    • 按 N:切換顯示 IP 代號或網域名稱。
    • 按 T:切換單行顯示或同時顯示傳入/傳出流量。
    • 按 L:輸入過濾字串(如特定網段)。
  • 專家提醒:
    配合 nethogs 指令(sudo nethogs eth0),可直接從「程序(Process)」角度查看是哪個 PID 在狂吃上傳或下載頻寬。

技巧 038:Linux 核心 TCP 效能與高併發調校(sysctl.conf)

  • 痛點場景:
    高流量網站面臨大量連線時,常遇到 TCP: time wait bucket table overflow 或連線佇列排滿,導致新請求被核心直接丟棄。
  • 解決方案:
    調整核心參數 /etc/sysctl.d/99-network-tuning.conf:
# 允許重用處於 TIME_WAIT 狀態的通訊端(適合前端高併發反向代理)
net.ipv4.tcp_tw_reuse = 1

# 加大連線積壓佇列長度,防止尖峰流量丟包
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 16384

# 擴展本機可用臨時通訊埠範圍(對外連線叢集專用)
net.ipv4.ip_local_port_range = 1024 65535

# 調降 TCP KeepAlive 偵測間隔,加速釋放失效死連線
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_keepalive_intvl = 15
net.ipv4.tcp_keepalive_probes = 5
  • 讓設定立即生效:
sudo sysctl --system
  • 專家提醒:
    千萬不要開啟過時的 tcp_tw_recycle(在 Linux 4.12 以後已廢棄且可能導致 NAT 後端使用者無法連線)。

技巧 039:開啟 Google BBR 擁塞控制演算法,大幅改善跨國延遲與掉包

  • 痛點場景:
    伺服器跨國連線時,傳統 Cubic 演算法在遇到些微網路掉包時會劇烈調降傳輸速度,導致跨國傳輸速度變慢。
  • 解決方案:
    開啟 Linux 核心內建的 BBR(Bottleneck Bandwidth and RTT)演算法:
# 檢查當前核心版本(需 Linux 4.9 以上,現代系統大多已支援)
uname -r

# 寫入 BBR 配置
sudo bash -c 'cat <<EOF >> /etc/sysctl.d/99-bbr.conf
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr
EOF'

# 套用生效
sudo sysctl --system

# 驗證 BBR 是否已啟動(輸出應包含 bbr)
sysctl net.ipv4.tcp_congestion_control
  • 專家提醒:
    啟用 BBR 在高延遲、有輕微丟包的公網線路上特別顯著,能使靜態資源與影音串流的下載速度獲得明顯提升。

技巧 040:防止網路環路與異常封包!設定反向路徑過濾(RP Filter)

  • 痛點場景:
    多網卡環境下,外網封包若偽造來源 IP 發起欺騙攻擊(IP Spoofing),容易導致伺服器成為 DDoS 反射放大跳板。
  • 解決方案:
    啟用 Linux 嚴格反向路徑過濾(Strict Reverse Path Filtering),強制核心檢查封包來源是否與路由表回程路徑一致:
# 編輯 /etc/sysctl.d/99-security.conf
# 1 代表 Strict Mode:若回程網卡與進來網卡不同,直接拋棄該封包
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.rp_filter = 1

# 忽略所有 ICMP 廣播請求(防範 Smurf 放大攻擊)
net.ipv4.icmp_echo_ignore_broadcasts = 1
  • 立即套用:sudo sysctl --system。
  • 專家提醒:
    若你的伺服器採用非對稱路由(Asymmetric Routing,例如流量從網卡 A 進、網卡 B 出),則 rp_filter 需設為 2(Loose Mode),否則會導致合法封包被核心誤殺。