因為 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: