netstat 配合 grep/awk 可快速統計 80 埠各狀態連線數,識別攻擊源 IP、分析 Apache 並發負載。本文提供六大實用指令管線:總連線數、ESTABLISHED 連線、SYN 洪水偵測、IP 連線數排序、Apache 進程數對比、server-status 自動化監控。

# 1. 80 埠總連線數 (含所有狀態)
netstat -nat | grep -i ":80" | wc -l
# 2. ESTABLISHED 已建立連線數
netstat -nat | grep ":80" | grep ESTABLISHED | wc -l
# 3. SYN_RECV 連線數 (偵測 SYN Flood)
netstat -nat | grep ":80" | grep SYN_RECV | wc -l
# 4. TIME_WAIT 連線數 (大量短連線特徵)
netstat -nat | grep ":80" | grep TIME_WAIT | wc -l
# 統計 ESTABLISHED 狀態下各 IP 連線數,降序排列
netstat -nat | grep ESTABLISHED | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn
# 統計 SYN_RECV 狀態下各 IP (潛在攻擊源)
netstat -nat | grep SYN_RECV | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn
# 封鎖前 5 名攻擊 IP (範例)
netstat -nat | grep SYN_RECV | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head -5 | while read count ip; do iptables -A INPUT -s $ip -j DROP; done
# Apache worker 進程數 (每請求一進程,prefork MPM)
ps aux | grep httpd | grep -v grep | wc -l
# 對比 httpd.conf MaxClients 設定
grep MaxClients /etc/httpd/conf/httpd.conf
# 啟用 server-status 即時監控 (需 mod_status)
# httpd.conf: ExtendedStatus On, Location /server-status SetHandler server-status
curl -s https://localhost/server-status?auto
# 輸出: BusyWorkers, IdleWorkers, ReqPerSec, BytesPerSec 等
| 指令片段 | 作用 |
|---|---|
netstat -nat | 顯示所有 TCP 連線 (數值格式 IP/埠) |
grep -i ":80" | 過濾 80 埠相關 (忽略大小寫) |
awk '{print $5}' | 取第 5 欄 (遠端 IP:埠) |
cut -d: -f1 | 以冒號分隔取 IP 部分 |
sort | uniq -c | sort -rn | 計數去重並降序排列 |
watch -n 5 或 cron 定期記錄AsyncRequestWorkerFactor 計算