Ubuntu中配置SS多用户模式并限制每个用户的流量

1、更新软件并安装vim

1
2
3
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install vim

2、更改 SSH 默认端口

1
2
3
4
sudo vim /etc/ssh/sshd_config
找到 Port 字段,将其修改为自己想要的端口值
sudo service ssh restart #重启ssh服务
sudo netstat -tunlp | grep ssh #查看ssh服务监听的端口

这里将ssh端口改成了22222,如下图(PS:不要问我为啥强行改22号端口,就是任性,额,其实有点其他用途,青大校友表示当年我就是靠这个强行免费使用校园网):

3、安装shadowsocks-python版本

1
2
3
sudo apt-get install python-pip
#在ubuntu16.04中,可以通过pip安装pyhon版的shadowsocks,但是好像已经不维护更新了,停留在了2.8.2版本
sudo pip install shadowsocks

然后创建一个 json 文件并在其中填写个人配置信息即可,比如在 /home/my_ss_config.json 中,填写如下信息:

1
2
3
4
5
6
7
8
9
{
"server" : "your_server_ip", #自己服务器的IP
"server_port" : 8388, #服务器端口
"local_address" : "127.0.0.1",
"local_port" : 1080,
"password" : "yourpassword", #密码
"timeout" : 300,
"method" : "aes-256-cfb" #加密方式
}

只要更改后面带 # 号的一些字段值即可,如果想多用户的话,可以将 password 字段改成如下模式(ss使用端口值识别不同的用户):

1
2
3
4
"port_password": {
"端口1": "密码1",
"端口2": "密码2"
},

一切准备就绪,接下来使用如下命令即可运行 SS 服务,实现 Cross the Great Fire Wall

1
sudo ssserver -c /home/my_ss_config.json -d start

4、多用户模式流量统计

说一下我为啥要搞这么个功能,前天,我TM大半夜的正嗨呢,突然,网断了!于是乎,打开4G,还是无法操作,这。。。。我手纸都准备好了,竟然发生这样的事?(开玩笑,哈哈,根正苗红的科研知识分子,油管看科研视频的好吧,为科研奉献全身!)收到邮件,告诉我流量用完了,呵。。。

于是乎,大家公用的情况下,私开个个人账号,每到月末的时候应急用。于是乎用到了上面讲到的多用户模式,但是这样还不行,为每个用户限制流量使用上限才能达到目的。

找了找,发现国内的某度关于这方面是真的干净,上某歌,查到可以使用 ss-bash 实现,github上有,实现的原理就是:不同的用户分配不同端口,使用iptables规则获取各端口的流量,脚本循环运行,在固定时间间隔根据iptables结果统计流量使用情况,并在流量超过限制时,添加对应端口的iptables reject规则以禁用端口。

安装shadowsocks与ss-bash之后,shadowsocks就不用做任何配置了,省去了上面的步骤,由ss-bash管理shadowsocks,包括配置的文件等等。有个缺点就是,ss-bash目前只支持python版Shadowsocks,只支持统计ipv4流量,但这问题影响不大。

执行如下指令:

1
2
3
4
5
apt-get install unzip       #下载解压工具
apt-get install bc #安装计算器,后面统计流量用
wget https://github.com/hellofwy/ss-bash/archive/master.zip #下载软件包
unzip master.zip
cd ss-bash-master/

现在就可以使用相关命令配置 SS 了,具体操作指令如下(可通过 ./ssadmin.sh 命令查看):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
用法:
显示版本:
ssadmin.sh -v|v|version
显示帮助:
ssadmin.sh [-h|h|help]
启动ss:
ssadmin.sh start
停止ss:
ssadmin.sh stop
查看ss状态:
ssadmin.sh status
重启ss:
ssadmin.sh restart
软重启ss:
ssadmin.sh soft_restart
在不影响现有连接的情况下重启ss服务。用于ss服务参数修改,
和手动直接修改配置文件后,重启ss服务。
添加用户:
ssadmin.sh add port passwd limit
port:端口号, 0<port<=65535
passwd:密码, 不能有空格,引号等字符
limit:流量限制,可以用K/M/G/T、KB/MB/GB/TB等(不区
分大小写)。支持小数。比如10.5G、10.5GB等。
1KB=1024 bytes,以此类推。
示例: ssadmin.sh add 3333 abcde 10.5G
显示用户流量信息:
ssadmin.sh show port
显示所有用户流量信息:
ssadmin.sh show
显示用户密码信息:
ssadmin.sh showpw port
显示所有用户密码信息:
ssadmin.sh showpw
删除用户:
ssadmin.sh del port
修改用户:
ssadmin.sh change port passwd limit
修改用户密码:
ssadmin.sh cpw port passwd
修改用户流量限制:
ssadmin.sh clim port limit
修改所有用户流量限制:
ssadmin.sh change_all_limit limit
用户流量使用量置零:
ssadmin.sh rused limit
所有用户流量使用量置零:
ssadmin.sh reset_all_used
用户流量限制置零:
ssadmin.sh rlim port
全部用户流量限制置零:
ssadmin.sh reset_all_limit
显示已添加的iptables规则:
ssadmin.sh lrules

添加完账户后,./ssadmin.sh start启动后,./ssadmin.sh show 即可查看每个用户的当前流量使用情况。如下图:

ssadmin文件夹中的各个文件的含义如下:

1
2
3
4
5
6
7
8
9
ssadmin.sh      #管理程序,所有命令通过该程序执行
sscounter.sh #流量统计程序。由ssadmin.sh自动调用执行,注意:不要手动运行该程序
sshelp
sslib.sh #包含一些参数配置和流量统计函数。由ssadmin.sh自动调用执行,注意:不要手动运行该程序
ssmlt.json #根据用户列表和ssmlt.template生成的ssserver实际使用的配置文件
ssmlt.template #ssserver的配置文件
sstraffic #用户流量使用情况,包括流量限制,已用流量,剩余流量等。ssadmin.sh show 命令,显示该文件内容。
ssusers #用户列表
traffic.log #用户流量记录,供程序内部使用。

备注:

1、默认的流量采样间隔为5分钟,流量间隔可根据实际需求调整,但最好不要太小,比如小于10秒。可打开文件sslib.sh ,修改INTERVEL 的值,单位为秒。

2、如果shadowsocks不是使用apt-get或者pip安装,无法自动找到 ssserver 文件时,请手动指定程序的具体位置。打开文件 sslib.sh ,修改 SSSERVER 的值,比如 ssserver 的路径为 /usr/local/bin/ssserver 时,修改为:

1
SSSERVER=/usr/local/bin/ssserver

5、To Do List

既然身为抓包组里的一员,就要干点抓包相关的事,是不是。比如说,十分好奇为啥大家流量用得那么多呢,肯定看视频了,看啥视频了呢,奥特曼大战葫芦娃.avi ?初步打算在服务器上进行流量采样,比如万分之一的采样率,然后记录下对应账户的 DNS请求的 query 字段值,client hello中的SNI字段等。

最近比较忙(其实就是懒),回头抽空搞一发。。。嘻嘻

-------------本文结束感谢您的阅读-------------
您的鼓励就是我创作的动力,求打赏买面包~~
0%