自動監測並統計V·P·N客戶端流量

統計的理由

就是想掌握連接這個主機的流量都是用在哪個客戶端,想深入統計連接的網站和內容都可以通過用shell來進行統計,再或者直接用ELK來統計,總之想要知道連接者的信息,只要用心發現就可以了。

統計方法如下:
非常簡單,通過iptables來實現,比如你的shadowsocks服務器公網地址是3.52.117.123,而端口8888,那出口流量 統計命令:
sudo iptables -I OUTPUT -s 3.52.117.123 -p tcp --sport 8888

查看統計流量信息:
sudo iptables -n -v -L -t filter |grep -i --color -B 3 spt:8888

獲取具體流量值:
sudo iptables -n -v -L -t filter |grep -i 'spt:8888' |awk -F' ' '{print $2}'

然後自己寫個crontab腳本,每分鐘去讀取流量統計出來的流量值
判斷超過預設流量即停止對該客戶端的shadowsocks服務

當你開啓多個shadowsocks服務,需要保存他們的進程id,超出流量的就kill 這個id

1.端口流量統計腳本

#啓動服務並記錄進程id到文件  
PORT=8888  #SS服務端口
SIP=3.52.117.123   #SS服務器IP

PID_FILE=~/shadow_$PORT.pid  
#開啓對應端口流量統計  
sudo iptables -I OUTPUT -s $SIP -p tcp --sport $PORT  
shadowsocks -c shadowsocks.json -p $PORT > logshadow.log 2>&1 &  
echo "$!" > $PID_FILE  

2.流量監測並觸發限制服務

#定時檢測 流量超出則停止服務,比如限制每天流量100M  
PORT=8888   #SS服務端口
PID_FILE=~/shadow_$PORT.pid  #SS服務的PID
MAX=100  #設置每天的流量,單位MB
SLEEP_TIME=20  #監測流量的間隔時間  
SIP=3.52.117.123   #SS服務器IP
while true   
do  
  value_string=`sudo iptables -n -v -L -t filter |grep -i "spt:$PORT"|awk -F' ' '{print $2}'`  
  grep 'M' $value_string   
  if [ $? = 0 ] ;then  
   value=`echo $value_string |tr -d 'M'`  
   if [ $value -gt $MAX ]; then  
      kill -9 `cat $PID_FILE`  
      rm $PID_FILE  
      #關閉流量統計  
      sudo iptables -D OUTPUT -s $SIP -p tcp --sport $PORT  
      break  
    fi  
  fi  
  sleep $SLEEP_TIME  
done  

部署並加速SS服務器

PS:請自行監測腳本的可行性,本次服務器版本Centos7.2。Ubuntu,Centos,Redhat應該通用。如果安裝其他軟件,Ubuntu使用apt-get,Centos/Redhat使用yum。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章