流量控管 shell script

因為 pure-ftp 沒有辦法在流量超過額度後,自動停止下載,所以就自己生了一個 shell script。
這是利用 trafd 統計流量之後,用 pureftp 的虛擬使用者來控制權限。(用其他的應該也可以,只要可以用命令列下指令就可以囉)
首先要先安裝 ports 裡面的 bpft,然後在啟動的時候加入參數:
-F /etc/trafd.filter
/etc/trafd.filter範例(只統計X大以外的流量):

(dst host 140.11x.x.x and src net ! 140.11x.0.0/16) or (src host 140.11x.x.x and dst net ! 140.11x.0.0/16)

再來就是開始寫 shell script 了。

#!/bin/sh
# 取得 trafstat 得到 All data 的 bytes ("`"內的會先執行)
byte="`/usr/local/bin/trafstat -n -i rl0 | awk -F"," '{ print $2 }' | awk -F" " '{ print $1 }' | head -n 3 | tail -n 1`"
mega="`expr $byte / 1048576`"
# 紀錄目前時刻
datevar=`date "+%Y-%m-%d %H時%M分%S秒"`
/bin/echo "=====$datevar 目前校外流量= $mega MB====="
# 計算流量是否超過 8GB
if [ "$mega" -gt 8000 ]
then
/bin/echo "校外流量: $mega MB,死定了你" > /root/temp.log
# 更改校外連線帳號的權限
/usr/local/bin/pure-pw usermod www -r 0.0.0.0/8 -m
/usr/local/bin/pure-pw usermod ooo -r 0.0.0.0/8 -m
/bin/echo "權限已經更改完成" >> /root/temp.log
# 刪除已經存在的連線 ( pure-pw UID 是 ftp 的連線)
pid="`ps -aux | grep pure | awk -F":" '{ print $1 }' | grep ftp | awk -F" " '{ print $2 }' | head -n 1`"
if [ "$pid" -gt 0 ]
then
/bin/echo "有校外連線,PID=$pid"
kill `ps -aux | grep pure | awk -F":" '{ print $1 }' | grep ftp | awk -F" " '{ print $2 }'` > /dev/null
/bin/echo "已刪除存在的連線" >> /temp.log
fi
# 發信通知 Root
mail -s "FTP又爆流量了啦" root@ooo.zzz < /root/temp.log
fi

這放在 cron 就好了~會在爆流量的時候,同時寄信給你。至於要產生其他的log?這個太簡單了~(其實是懶得寫)^^"

Please follow and like us:

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *