生產環境需長期抓取網路封包分析異常流量,但持續抓包會產生海量資料,需解決:
#!/bin/bash
# 主抓包程式,放置於 /home/maindump.sh
# 自定義區域(需修改)
INTERFACE="eth0" # 抓包介面
FILTER="port 80" # BPF 過濾規則
MAX_SIZE=100 # 單檔最大 MB
SLEEP_INTERVAL=5 # 輪換間隔秒數
STORAGE_ROOT="/data" # 儲存根目錄
while true; do
DATE_DIR=$(date +%F) # 2024-01-15
STIME=$(date +%F"@"%H%M%S) # 2024-01-15@143022
SAVE_DIR="${STORAGE_ROOT}/${DATE_DIR}"
mkdir -p "$SAVE_DIR"
OUTFILE="${SAVE_DIR}/${STIME}.pcap"
# 啟動 tcpdump,-C 限制檔案大小(單位 MB),-W 1 僅產生一個檔案
# 實際輪換邏輯由外層迴圈控制,tcpdump 到達大小會停止
timeout 55 tcpdump -i "$INTERFACE" -s 0 -C "$MAX_SIZE" -W 1 -w "$OUTFILE" "$FILTER" >/dev/null 2>&1
ETIME=$(date +%H%M%S)
FINAL_NAME="${SAVE_DIR}/${STIME}-${ETIME}.pcap.gz"
# 壓縮並重命名含結束時間
if [ -f "$OUTFILE" ]; then
gzip -c "$OUTFILE" > "$FINAL_NAME"
rm -f "$OUTFILE"
echo "$(date) 壓縮完成: $FINAL_NAME"
fi
sleep "$SLEEP_INTERVAL"
done
#!/bin/bash
# 放置於 /home/monitor_dump.sh
MAIN_SCRIPT="/home/maindump.sh"
LOCK_FILE="/tmp/maindump.lock"
# 防止重複啟動
if [ -f "$LOCK_FILE" ] && kill -0 $(cat "$LOCK_FILE") 2>/dev/null; then
exit 0
fi
echo $$ > "$LOCK_FILE"
nohup bash "$MAIN_SCRIPT" >> /var/log/maindump.log 2>&1 &
echo $! > "$LOCK_FILE"
#!/bin/bash
# 放置於 /home/monitor_disk.sh
STORAGE_ROOT="/data"
THRESHOLD=30 # 使用率百分比
USAGE=$(df -h "$STORAGE_ROOT" | awk 'NR==2 {print $5}' | sed 's/%//')
if [ "$USAGE" -ge "$THRESHOLD" ]; then
OLDEST=$(find "$STORAGE_ROOT" -mindepth 1 -maxdepth 1 -type d -printf '%T@ %p\n' | sort -n | head -1 | cut -d' ' -f2-)
if [ -n "$OLDEST" ]; then
echo "$(date) 磁碟使用率 ${USAGE}% ≥ ${THRESHOLD}%,刪除最舊目錄: $OLDEST" >> /var/log/disk_clean.log
rm -rf "$OLDEST"
fi
fi
chmod +x /home/maindump.sh /home/monitor_dump.sh /home/monitor_disk.sh
# 立即啟動主程序
nohup bash /home/maindump.sh >> /var/log/maindump.log 2>&1 &
# 加入 crontab(每 6 分鐘檢查一次)
crontab -e
*/6 * * * * /bin/bash /home/monitor_dump.sh
*/6 * * * * /bin/bash /home/monitor_disk.sh
| 參數 | 建議值 | 調整依據 |
|---|---|---|
| MAX_SIZE | 100-500 MB | Wireshark/分析工具開啟速度與檔案數平衡 |
| SLEEP_INTERVAL | 5-30 秒 | 避免 tcpdump 重啟間隙丟包 |
| THRESHOLD | 70-80% | 預留緩衝空間,避免磁碟寫滿導致系統故障 |
| FILTER | 精準 BPF | 如 "host 10.0.0.1 and port 80" 減少無效封包 |
tcpdump -G 3600 -W 24 內建按小時輪換(需較新版本)logrotate 管理壓縮檔保留天數這套腳本體系已在多個生產環境穩定運行數年,可根據流量規模與分析需求彈性調整參數。