統計的理由:
就是想掌握連接這個主機的流量都是用在哪個客戶端,想深入統計連接的網站和內容都可以通過用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
PS:請自行監測腳本的可行性,本次服務器版本Centos7.2。Ubuntu,Centos,Redhat應該通用。如果安裝其他軟件,Ubuntu使用apt-get,Centos/Redhat使用yum。