ssrpanel:搭建shadowsocksr流量监控和用户管理面板




2020-5-1 更新:

  1. CentOS 8 已发布一段时间,但是不少ssrpanel所需的组件仍然只支持到CentOS 7,所以当前还是不要使用CentOS 8,查看CentOS版本可使用:cat /etc/redhat-release
  2. ssrpanel已经很久没更新了,不少问题也没有解决,所以不建议再继续使用ssrpanel做机场,风险太大,但如果只是几个小伙伴私下使用,那还算凑合了
  3. 因为ssrpanel闭源不再提供下载,所以很多人都来问源码的问题,此次上传了一份源码,版本为最后一个开源版本V4.8.0,无修改无优化,且用且珍惜

2019-11-12 更新:

  1. ssrpanel项目已经被作者闭源且删除,从github上已经下不到源码了,所以本文提供的github下载链接已失效,需要另行寻找下载途径。

前言

自己如果有台国外服务器,一般都会用来搭建用来科学上网的代理,VPN被封禁的严重,所以一般会使用SS或者SSR搭建,虽然作者已经被请喝茶了,但起码还能苟一段时间。

shadowsocksR确实是一款强大的代理工具,但只有后端,对于有流量统计和用户管理需求的管理者来说就不大方便了,目前比较好的解决方案是使用前端面板,也就是以网站的形式将这些内容呈现出来,方便管理,也方便用户自己进行查询。

比较出名的前端面板是sspanel,不过作者orvice也已经被请喝茶了,所以sspanel目前更新到V4版本就停止更新了,并且GitHub上面的源码已经被删除,只不过还可以从releases页面下载到

sspanel-v4-最后更新时间.png

也可以看到更新时间是2017年7月9日,至今(2018年9月23日)已经有一年多没更新了,而且部分功能也不够完善,虽然有其他人进行了fork,完善了部分功能,比如:zxhm001完善的项目ss-panel-v4,曾搭建过,感觉还可以,而且网上也能找到很多教程,虽然都是基于V3的。

点击查看sspanel的2张截图

主页:
ss-panel-v4安装成功.png

管理界面如下:
ss-panel-v4管理界面.png

不过今天要介绍的是更好用的SSRPanel,可以看成是sspanel的升级版,先看看效果图。

点击查看ssrpanel的4张截图

这是登陆界面:
ssrpanel登陆界面.png

进入后是这样的:
进入ssrpanel.png

用户管理界面:
ssrpanel用户管理.png

节点管理:
ssrpanel节点管理.png

ssrpanel的功能介绍列表
  1. SSR多节点账号管理面板,兼容SS、SSRR,需配合SSR或SSRR版后端使用
  2. 支持v2ray
  3. 开放API,方便自行定制改造客户端
  4. 内含简单的购物、卡券、邀请码、推广返利&提现、文章管理、工单(回复带邮件提醒)等模块
  5. 用户、节点标签化,不同用户可见不同节点
  6. SS配置转SSR(R)配置,轻松一键导入导出SS账号
  7. 单机单节点日志分析功能
  8. 账号、节点24小时和本月的流量监控
  9. 流量异常、节点宕机邮件或ServerChan及时通知
  10. 账号临近到期、流量不够会自动发邮件提醒,自动禁用到期、流量异常的账号,自动清除日志等各种强大的定时任务
  11. 后台一键添加加密方式、混淆、协议、等级
  12. 屏蔽常见爬虫、屏蔽机器人
  13. 支持单端口多用户
  14. 支持节点订阅功能,可自由更换订阅地址、封禁账号订阅地址、禁止特定型号设备订阅
  15. 支持多国语言,自带英日韩繁语言包
  16. 订阅防投毒机制
  17. 自动释放端口机制,防止端口被大量长期占用
  18. 有赞云支付
  19. 可以阻止大陆或者海外访问
  20. 中转节点(开发中)
  21. 强大的营销管理:PushBear群发消息
  22. telegram机器人
  23. 防墙监测,节点被墙自动提醒、自动下线(TCP阻断)

在开始之前有一些东西需要说明:ssrpanel的使用需要安装lnmp套件(Linux + Nginx + MySQL + Php-fpm),网上有一键安装脚本,可自行搜索“宝塔面板”下载脚本进行执行,本教程只提供手动安装方式,毕竟自己动手安装的东西心里才有数,以后出问题才有能力解决,而且也推荐在摸索中学习。

安装

安装ssrpanel需要配置基础环境,包括安装常用的lnmp网站套件,毕竟ssrpanel实际上就是一个网站,除此之外,还需要ssrpanel执行脚本需要使用到的php环境。

如果是一台新开的服务器,需要提前安装一些需要使用的工具:

1
yum install vim git -y
阿里云服务器额外配置

阿里云的服务器一般会自动安装阿里云盾,主要用途就是用来检测用户是否安装了科学上网的软件,所以需要提前卸载

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
# 卸载
wget http://update.aegis.aliyun.com/download/uninstall.sh
chmod +x uninstall.sh
./uninstall.sh
wget http://update.aegis.aliyun.com/download/quartz_uninstall.sh
chmod +x quartz_uninstall.sh
./quartz_uninstall.sh

# 删除阿里云盾文件残留
pkill aliyun-service
rm -fr /etc/init.d/agentwatch /usr/sbin/aliyun-service
rm -rf /usr/local/aegis*

# 屏蔽阿里云盾IP
iptables -I INPUT -s 140.205.201.0/28 -j DROP
iptables -I INPUT -s 140.205.201.16/29 -j DROP
iptables -I INPUT -s 140.205.201.32/28 -j DROP
iptables -I INPUT -s 140.205.225.192/29 -j DROP
iptables -I INPUT -s 140.205.225.200/30 -j DROP
iptables -I INPUT -s 140.205.225.184/29 -j DROP
iptables -I INPUT -s 140.205.225.183/32 -j DROP
iptables -I INPUT -s 140.205.225.206/32 -j DROP
iptables -I INPUT -s 140.205.225.205/32 -j DROP
iptables -I INPUT -s 140.205.225.195/32 -j DROP
iptables -I INPUT -s 140.205.225.204/32 -j DROP

MariaDB

首先需要配置源,进入MariaDB官网定制MariaDB的官方源,选择合适MariaDB版本。如CentOS 7选择:CentOS > CentOS 7 (x86_64) > 10.3 [Stable],配置源的方法在官网页面选择源之后,页面下方会显示出来。

选择版本

之后将官网的配置复制下来,添加为源:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 编辑源
vim /etc/yum.repos.d/MariaDB.repo

# 将复制来的配置填入
# MariaDB 10.2 CentOS repository list - created 2018-01-27 07:39 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.3/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

# 安装、启动服务并设置开机启动
yum install MariaDB-server -y
systemctl start mariadb
systemctl enable mariadb

之后是设置MariaDB,主要是MariaDB的安全设置,第一次安装mysql需要运行此命令:

1
mysql_secure_installation
mysql配置内容示例

因为是初次设置MariaDB,root密码是空的,所以在要求输入密码时直接回车,然后按照提示设置新密码:

1
2
3
4
5
6
7
8
9
10
11
Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

# 是否设置root密码,建议设置密码以提高安全性,输入y并回车
Set root password? [Y/n] y

# 设置密码
New password:

# 再次输入密码
Re-enter new password:

接下来是数据库相关设置,可以全都输入y,以下是截取的部分输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
...
Remove anonymous users? [Y/n] y # 删除匿名用户
...

Disallow root login remotely? [Y/n] y # 禁止root远程登录
...

Remove test database and access to it? [Y/n] y # 删除test数据库
...

Reload privilege tables now? [Y/n] y # 刷新权限
...
Thanks for using MariaDB!

nginx

官方nginx有两个版本,mainline和stable,即开发版和稳定版,区别是前者引入新特性但可能有新bug,后者足够稳定。事实上,两者均比较稳定,nginx的网站总是运行在mainline版上,不过还是推荐新手选择稳定版。

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
# 编辑repo文件
vim /etc/yum.repos.d/nginx.repo


# 输入如下内容
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true


# 安装、启动服务并设置开机启动
yum install nginx -y
systemctl start nginx
systemctl enable nginx
manline版本的安装方法

有技术基础的人可能对新特性比较在意,可以考虑使用manline版本,上面所添加的源已经加入了manline的部分,所以直接启用即可:

1
2
3
4
5
# 启用manline源
sudo yum-config-manager --enable nginx-mainline

#安装
sudo yum install nginx

注:除CentOS外的其他linux发行版可参考官网的说明添加源:nginx: Linux packages

安装Nginx之后存在一个默认配置,只要前面配置没有错误,那么nginx启动之后就可打开默认网页。直接用浏览器打开主机IP地址或者域名,如果可以看到nginx的欢迎页面,就说明nginx已经在工作了。

使用域名打开网站

除了使用IP访问,也可以设置用域名打开,不过能用域名打开的前提是已经设置了解析,不知道怎么设置解析可以移步设置域名解析:给域名设置一些实用有趣的二级域名

nginx安装成功后的欢迎界面

打开网站提示无法访问的解决办法

这种情况很可能是防火墙没有放行,放行端口或者关闭防火墙试试:

1
2
3
4
5
6
7
8
9
10
# Ubuntu
ufw allow 80
ufw allow 443

# CentOS
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=80/udp --permanent
firewall-cmd --zone=public --add-port=443/tcp --permanent
firewall-cmd --zone=public --add-port=443/udp --permanent
firewall-cmd --reload
打开网站显示403 Forbidden的解决办法

出现这个错误是因为部分服务器的权限管理组件selinux没有给予相关权限,因为selinux使用起来太过复杂,所以一般都是关闭了事:

1
2
3
4
5
6
7
8
9
10
11
# 查看SELinux是否开启,如果SELinux status为enabled即为开启状态
/usr/sbin/sestatus -v
# 显示
SELinux status: enabled

# 临时关闭,重启后失效
setenforce 0


# 永久关闭,需要重启才能生效
sed -i 's/enforcing/disabled/' /etc/selinux/config

Php-fpm

安装php用webtatic源,更新较快,且其命名有自己的特色方式,可以避免与其他源的某些冲突

1
2
3
4
5
6
# 配置PHP源
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

# 安装PHP以及PHP扩展
yum install php72w-fpm php72w-gd php72w php72w-mysqlnd php72w-pdo php72w-mcrypt php72w-mbstring php72w-xmlrpc php72w-bcmath php72w-xml php72w-devel -y

安装好后进行配置:

1
2
3
4
5
6
7
8
9
10
11
12
# 关闭nginx文件类型错误解析漏洞
sed -i 's/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/' /etc/php.ini

# 要把使用php-fpm的用户改为nginx
sed -i -e '/nobody/ s/;//' -e 's/apache\|nobody/nginx/g' /etc/php-fpm.d/www.conf

# 以socket方式运行php-fpm,需要添加多个节点的不要配置此项
sed -ri "s#(listen = ).*#\1\/dev\/shm\/php-cgi.sock#" /etc/php-fpm.d/www.conf

# 启动服务并设置开机启动
systemctl start php-fpm
systemctl enable php-fpm

这时lnmp环境就安装成功了。

ssrpanel

ssrpanel是由ssrpanel(作者在GitHub上就是这个名字)开发的,在GitHub上开源的项目:SSRPanel,由于作者头像用的是哆啦A梦里面的人物胖虎,所以一般也称作者为胖虎。

ssrpanel安装很简单,基本就是对接MySQL、Nginx,然后给文件夹改权限就行了。

先进入需要存放ssrpanel的文件夹,一般和前端相关的我都习惯放在/var/www

1
cd /var/www
-bash: cd: /var/www: 没有那个文件或目录

出于习惯(这也是行业惯例),网页内容一般放在/var/www文件夹中,但这个文件夹并不一定会默认生成,所以可以通过手动创建:

1
mkdir /var/www

如果不想放在/var/www文件夹也可以,可以自己找个地方放,只要自己能找得到就行。

然后下载ssrpanel源码:

1
git clone https://github.com/JadeVane/ssrpanel.git

注意:ssrpanel的作者由于国内的政治压力已经将ssrpanel闭源,此处保留了ssrpanel的最后一个开源版本,无修改无优化,目前已经有github帐号因存在ssrpanel源码而被封号,所以不确定能开放多久,且用且珍惜

然后ls就能看到一个ssrpanel文件夹,直接进入:

1
cd ssrpanel

其实上面安装Php-fpm的时候已经安装了部分php组件,在这里需要安装ssrpanel需要使用的php组件。

使用工具安装php组件:

1
php composer.phar install

之后就是一大列的安装组件过程。

2020-5-2 更新:由于V4.8.0版本实在太老了,很多依赖的组件已经不再支持,所以在下载组件过程中会有一大堆FAILED,但是不影响基本的使用

较早版本的ssrpanel的额外配置

如果是较早版本的ssrpanel,还需要自行下载composer.phar组件:

1
2
# 获取php组件安装工具
curl -sS https://getcomposer.org/installer | php
出现'proc_open(): fork failed - Cannot allocate memory'的解决办法

我的服务器运行之后出现这个提示:

安装composer失败.png

按照提示进入详情页面查看,发现是因为服务器512M内存太小所以安装不上,可以通过增加swap虚拟内存解决:

1
2
3
4
5
6
7
8
9
10
11
# 创建1G大小的swap分区文件,其中count为想要的块的数量(bs*count=文件大小)。
dd if=/dev/zero of=/root/swapfile bs=1M count=1024

# 格式化为交换分区文件,建立swap的文件系统
mkswap /root/swapfile

# 启用交换分区文件:
swapon /root/swapfile

# 添加开机自启用,在文件/etc/fstab中添加一行:
/root/swapfile swap swap defaults 0 0

更多swap分区详情可以查看这篇文章:linux卸载swap分区,创建swap文件或swap分区

然后再运行安装即可:

1
php composer.phar install

到这里ssrpanel基本就配置完成了,不过为了让网站nginx服务器能够成功读取ssrpanel目录,需要设置权限和用户组:

1
2
3
# 设置权限和用户组
chown -R nginx:nginx storage/
chmod -R 755 storage/

配置

Nginx

新建一个nginx配置文件:

1
vim /etc/nginx/conf.d/ssrpanel.conf

之后复制下面的内容进去:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
server {
listen 80;
server_name -;

root /var/www/ssrpanel/public;

location / {
try_files $uri $uri/ /index.php$is_args$args;
index index.php;
}

location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}

保存退出,然后重载nginx:

1
nginx -s reload

由于ssrpanel需要日志记录,所以还需要新建一个日志存档:

1
touch /var/www/ssrpanel/storage/logs/laravel-2019-03-09.log

MySQL

刚才设置MySQL的时候设置了root账户,所以用root账户登陆数据库:

1
mysql -u root -p

输入密码就能进入,然后是设置ssrpanel需要用到的数据库、用户和密码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 创建ssrpanel数据库,名称为ssrpanel,可以根据自己喜好改为别的名字
create database ssrpanel;

# 使用新建的ssrpanel数据库
use ssrpanel;

# 将数据导入新建的ssrpanel数据库
source /var/www/ssrpanel/sql/db.sql;

# 创建ssrpanel的MySQL用户,名称密码都为ssrpanel
create user 'ssrpanel'@'localhost' identified by 'ssrpanel';

# 赋予刚才创建的ssrpanel用户以所有权限
GRANT ALL ON ssrpanel.* TO 'ssrpanel'@'localhost';

# 刷新权限
flush privileges;

# 退出MySQL
exit

可以按照自己喜好将数据库、用户和密码改成其他,但如果不是按照上面的名字设置,需要在配置文件里面修改成对应字段。

接下来把数据库信息写进配置文件,复制一份配置文件出来:

1
cp .env.example .env

.env.example是原本就存在的文件,在复制出.env添加配置文件之后,源文件就相当于备份了,以后折腾出错还能找回来,事实上,折腾服务器也应该养成备份这个好习惯。

然后编辑配置文件:

1
vim /var/www/ssrpanel/.env

找到对应的位置修改这三项:

DB_DATABASE=ssrpanel
DB_USERNAME=ssrpanel
DB_PASSWORD=ssrpanel

这三行是ssrpanel用来连接MySQL数据库用的,等号=后面接的就是设置的参数,这三个参数可以改成自己想要设的字段,只要能记住即可,后面会在配置MySQL的时候进行添加数据库和用户的操作。

这里为了方便演示全都设为ssrpanel,注意是为了演示方便才这样设的,可以的话把用户和密码设的复杂一些。

之后是生成站点key:

1
php artisan key:generate

域名访问(可选)

这个时候网站就搭建起来了,直接访问服务器ip地址就能打开网页。

例如ip地址为1.2.3.4,则在浏览器地址栏输入1.2.3.4即可看到以下界面:

ssrpanel登陆界面.png
打开网站后仍是nginx默认界面的解决办法

如果打开网站发现还是那个nginx的默认界面,就把nginx存在的默认配置删掉:

1
rm /etc/nginx/conf.d/default.conf

之后再重载nginx即可:

1
nginx -s reload

如果自己有域名,也按照上面说的设置了解析,修改nginx配置文件中的server_name后,就可以使用域名访问:

1
2
3
4
5
server {
listen 80;
server_name ssrpanel.wenjinyu.me;
...
}

不过,为了提高安全,强烈建议使用ssl加密,参考:使用 Let’s Encrypt 为网站制作ssl加密,启用https协议,设置好后网址就是https://网址,这时需要修改nginx配置文件, 下面这个就是最终结果了:

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
server {
listen 443 ssl;
server_name ssrpanel.wenjinyu.me; # 设置成自己的域名
# 下面两行是ssl密钥存放目录
ssl_certificate /etc/letsencrypt/live/ssrpanel.wenjinyu.me/cert.pem;
ssl_certificate_key /etc/letsencrypt/live/ssrpanel.wenjinyu.me/privkey.pem;

root /var/www/ssrpanel/public;

location / {
try_files $uri $uri/ /index.php$is_args$args;
index index.php;
}

location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}

server {
listen 80;
server_name ssrpanel.wenjinyu.me; # 设置成自己的域名
return 301 https://$server_name$request_uri;
}

设置完记得重新加载nginx使更改生效:

1
nginx -s reload

添加管理员用户

之所以不将添加管理员的步骤放在ssrpanel配置里面,是因为添加用户需要用到MySQL,所以需要先配置MySQL后才能添加用户。

由于ssrpanel文件夹里面的数据库已经存在设置好的管理员账户,所以直接用默认的管理员账户登录即可:

1
2
账户:admin
密码:123456
旧版ssrpanel新增管理员账户的方式

旧版ssrpanel没有默认管理员账户,可以使用下面的命令添加:

1
php xcat createAdmin

有些版本会提示运行上面命令的同时要在后面加上用户名和密码,那就运行下面这条:

1
php xcat createAdmin 邮箱 密码

邮箱即用户名,在这里要求用邮箱作为用户名,例如:

1
php xcat createAdmin wenjinyu@wenjinyu.me wenjinyu

登录管理员账户之后第一件事就是更改账户名和密码,密码比较容易更改,登录之后点击右上角的账户,打开个人设置就可以改密码了。

与此同时,很建议将账户名也一起更改,能够降低被爆破(暴力破解)的风险。可以在用户管理 -> 用户列表里面找到管理员账户,点击后面的操作 -> 编辑进入编辑界面即可更改用户名。

通过系统后台数据库方式更改用户名步骤

旧版ssrpanel的更改账户名比较麻烦,需要通过mysql更改。

后台登录mysql后,输入下列命令即可更改账户名,更改其他账户名也同理。

1
2
3
4
5
# 登录mysql
mysql -uroot -p

# 更改账户名
UPDATE ssrpanel.user SET username='新名称' WHERE username='admin';

之后就可以使用这个账户登陆ssrpanel面板了。

进入ssrpanel.png

添加节点

配置节点需要先在ssrpanel上添加一个节点,产生一个NodeID,这个NodeID在ssr节点的安装中需要使用到,所以「添加节点」这一节就放在「安装ssr」的前面了。

在ssrpanel面板里,点击节点管理节点列表添加节点,ip地址和ssh端口(一般是22)要填对,加密方式、名称之类的参数就随意了:

ssrpanel添加节点

安装SSR多用户版本

为了配合ssrpanel,这里使用的是数据库版本的ssr,也就是说,ssr里面的用户信息——包括端口之类的参数和使用流量数据等——都存在数据库里面。

下载安装shadowsocksr:

1
git clone -b manyuser https://github.com/shadowsocksrr/shadowsocksr.git /var/www/shadowsocksr

然后再修改shadowsocksr的数据库配置文件,将数据库、用户名和密码修改成之前设置的ssrpanel,node_id也要设置为1:

1
sed -ri -e 's#("user": "|"password": "|"db": ").*(")#\1ssrpanel\2#' -e 's#("node_id": ).*(,)#\11\2#' /var/www/shadowsocksr/mysql.json
修改后的内容

上面是一行命令自动修改了文件内容,下面的命令可以查看被修改的文件内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 查看命令
less /var/www/shadowsocksr/mysql.json

# 内容为
{
"host": "127.0.0.1",
"port": 3306,
"user": "ssrpanel",
"password": "ssrpanel",
"db": "ssrpanel",
"node_id": 1,
"transfer_mul": 1.0,
"ssl_enable": 0,
"ssl_ca": "",
"ssl_cert": "",
"ssl_key": ""
}
node_id为什么要设为1

在后台管理界面:节点管理节点列表添加节点按钮添加节点,添加完后可以在改节点的第一项看到ID,这个ID就是node_id,也就是说,node_id是告诉面板这是第几个序号的节点。

很重要的一点是,node_id是在面板添加节点之后才生成的,所以要增加节点,首先需要在面板添加节点,之后再对节点进行配置。

配置好后进入ssr目录进行相关配置:

1
2
3
4
5
6
7
8
9
10
cd /var/www/shadowsocksr/

# 安装依赖(cymysql)
./setup_cymysql.sh

# 初始化配置
./initcfg.sh

# 将API_INTERFACE的模式改成'glzjinmod'
sed -ri "s#(API_INTERFACE = ').*(')#\1glzjinmod\2#" userapiconfig.py

此时就可以试运行ssr了:

1
python server.py

如果没报错,那么就可以Ctrl+C结束进程进行下一步了

运行ssr时显示日志,方便排错

如果需要记录运行日志,可以用下面这个脚本:

1
./logrun.sh

这样做的好处是在运行出错时,能直接在屏幕上显示出问题在哪

安装libsodium

安装libsodium可以支持SSR的ChaCha20加密方式,如果需要用到可以安装,直接安装的方式也很简单:

1
yum -y install libsodium

也可以自己下载源码进行编译安装,不过估计一般人都是图省事,就不放方法了,有兴趣的直接网上去搜吧。

设置守护进程(可选)

shadowsocksr如果用上面的方式运行,那么关掉命令行窗口之后进程就会被杀死,如果用nohup或者&之类的也有可能在后台运行的时候被杀死,所以最好还是设置成守护进程。

添加一个配置文件(下面是一句命令):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
echo "[Unit]
Description=ShadowsocksR server
After=syslog.target
After=network.target

[Service]
LimitCORE=infinity
LimitNOFILE=512000
LimitNPROC=512000
Type=simple
WorkingDirectory=/var/www/shadowsocksr
ExecStart=/usr/bin/python /var/www/shadowsocksr/server.py
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
Restart=always

[Install]
WantedBy=multi-user.target
Alias=ssr" > /etc/systemd/system/shadowsocksr.service

然后就可以通过守护进程的方式启动了:

1
2
systemctl start shadowsocksr
systemctl enable shadowsocksr

此时再去ssrpanel查看节点信息,可以看见节点已经可以使用了。

ssrpanel中的NodeID

如果显示离线,有可能是面板正在检测ssr的状态,稍等一会就行了。

定时任务

ssrpanel需要设置定时任务,否则就看不到每个用户流量使用情况,也无法对用户进行限流。

1
2
3
4
5
# 添加定时任务:
crontab -e -u nginx

# 加入下面这一行:
* * * * * php /var/www/ssrpanel/artisan schedule:run >> /dev/null 2>&1

ssrpanel的记录规则是每小时和每天,所以添加定时任务后的下一个小时就可以看到数据了。

ssrpanel流量图.png

设置注册验证邮箱(可选)

如果网站开放注册,那么就会有一个激活账户的问题。

有一个方法是由管理员手动激活,这样做缺点也比较明显,就是麻烦。

第二个方法就是配置好注册激活邮箱,如果用户注册了帐户,那么就用这个配置的邮箱把账户激活链接发送给用户,然后用户通过点击这个链接就可以激活账户了。

这个用来把激活链接发送给用户的邮箱并没有什么特殊要求,不过最好还是用一些比较特殊的邮箱,比如本站域名为wenjinyu.me,使用的管理邮箱就是"admin@wenjinyu.me",这样子好管理,收到邮件的用户对发送方的身份也是一目了然。

如果只是使用普通邮箱,那么可以直接跳到下一步。

配置域名邮箱,例如上面用来举例子的"admin@wenjinyu.me",需要有自己的域名。域名邮箱可以自己搭建邮件系统,但是这种方式并不推荐,原因是搭建起来容易,却不容易维护,原因有以下几个:

  1. 自建邮箱发送的邮件很容易被接收方的邮件服务商分类为垃圾邮件,这个需要和各个邮件服务商沟通解决。
  2. 反垃圾机制的缺失,自建邮件通常会收到一大堆垃圾邮件。

自建邮件服务器不容易,和邮件服务商的沟通先不说,反垃圾就够呛的了,即使有毅力维护,也需要花费不少时间精力,这样做并不值得,所以还是安心使用企业邮箱。本来最推荐的是gmail企业邮箱,不过现在已经收费了,$5/月,现在网站还是入不敷出,所以就只能先寻找免费方案凑合着用。

目前本站使用的是网易企业邮箱,优点是免费,缺点不少,比如配置简陋,还有就是不少邮件发不出去,经常收到退信,原因不明(官方说明是“发送的信件大小超过了对方的接收限制”,不过4k不到的邮件怎么可能超),猜测是接收方的邮件服务器在国外,最近也在寻找更好的方案,有推荐的话欢迎和我交流。

注册网易企业邮箱的网址在这里:http://app.ym.163.com/ym/reg/view/index

注册过程比较简单,就不多说,注册之后需要设置域名DNS解析,按照提示操作就行。设置完之后需要等待一段时间才能使解析生效,然后就可以使用了。

有了自己的邮箱之后需要在ssrpanel中进行配置才能使用。许多使用ssrpanel的人都卡在这一步,我也摸索了许久,以下只能以我自己在用的网易企业邮箱作为例子。

1
2
3
4
5
# 进入ssrpanel文件夹
cd /var/www/ssrpanel

# 编辑配置文件
vim .env

找到MAIL_开头的部分,网易企业邮箱的配置如下:

1
2
3
4
5
6
7
8
MAIL_DRIVER=smtp
MAIL_HOST=smtp.ym.163.com
MAIL_PORT=994
MAIL_USERNAME=admin@wenjinyu.me
MAIL_PASSWORD=*************
MAIL_ENCRYPTION=ssl
MAIL_FROM_ADDRESS=admin@wenjinyu.me
MAIL_FROM_NAME=SSRPanel

了解更多网易企业邮箱的相关设置可以访问网易企业免费邮–帮助中心,客户端设置部分摘录如下:

客户端的设置方法
网易免费企业邮支持POP3/IMAP/SMTP服务,您可以通过电脑客户端软件更好地收发邮件,服务器地址:

POP3:pop.ym.163.com 默认端口为:110 (如勾选ssl安全链接,端口号为995)

SMTP:smtp.ym.163.com 默认端口为:25 (如勾选ssl安全链接,端口号为994)

IMAP:imap.ym.163.com 默认端口为:143 (如勾选ssl安全链接,端口号为993)

需要注意的地方:

  1. MAIL_USERNAMEMAIL_FROM_ADDRESS是一样的
  2. 如果使用的是QQ邮箱,那么MAIL_PASSWORD就不是填邮箱密码,而是需要登陆QQ邮箱网页版,进入设置 - 账户 - POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务,找到下方的生成授权码qq邮箱生成授权码.png 然后会提示发送短信生成授权码: qq邮箱发送短信生成授权码.png 之后把这个授权码作为邮箱登陆密码填到`MAIL_PASSWORD`

使用

开始使用

此时面板安装完成,节点也已经配置好,不过可能还有人看着ssrpanel不知道怎么入手。

用户管理可以在左侧找到,在用户列表项里即可添加删除用户,也可以查询和修改配置信息:

用户管理

点击进配置信息后就可以看到连接信息,按此配置ssr客户端就可以使用了

配置信息

右侧的三个按钮就可以查看配置信息,三个按钮分别代表三种导入配置的方式。

不过在连接之前需要先在防火墙开放端口,具体开放哪些端口可以自己设置:

端口范围

默认开放的是10000-20000,所以需要在防火墙开启这些端口:

1
2
firewall-cmd --zone=public --add-port=10000-20000/tcp --permanent
firewall-cmd --reload

然后就可以在ssr客户端中开始使用了。

问题解决

设置好之后可以自己实验性地注册一个账号看看能否收到注册激活邮件,如果没有收到,那么可以通过查看ssrpanel后台管理的邮件投递记录分析问题所在:

ssrpanel邮件投递记录.png

如果注册没有收到邮件,邮件投递记录提示time out

ssrpanel邮件投递提示time_out.png

一般都是邮箱配置正确,但是防火墙没有打开对应端口,可以参照前文设置防火墙一节,然后通过以下命令把对应端口加入白名单:

1
2
iptables -A INPUT -p tcp --dport 端口 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 端口 -j ACCEPT

不过有些运营商仅仅设置这些是不够的,比如:

  1. 阿里云:需要配置安全组,方法如下:进入网页版管理控制台 - 云服务器ECS - 网络和安全 - 安全组,然后在安全组上面添加规则。
  2. Digit Ocean:DO似乎限制smtp邮箱发送,可以参考这个issue:https://github.com/ssrpanel/SSRPanel/issues/965。

其他的运营商并没有过多了解,就不多言。

客户端下载

新版更新:新版本已经添加好客户端下载链接了,如果想要使用自己提供的客户端,可以按照本节步骤操作。

点击展开

用户在登陆ssrpanel面板之后是可以在面板上面找到ssr客户端下载链接的,不过这个链接点进去是空的,把鼠标放到连接上也可以看到链接为#,所以客户端的下载需要自己配置。

ssr各版本的客户端需要自行寻找,我整理了以下几个版本的客户端:

Mac:ShadowsocksX-NG-R
Win:shadowsocksr-csharp
安卓:shadowsocksr-android
多平台:electron-ssr

下载下对应的客户端,如果有自己的网盘,可以将客户端传到网盘,设置分享,然后再配置链接,如果没有网盘,可以使用nginx简单自建一个,参照:nginx搭建一个简单的文件下载服务器

得到下载链接后就可以对配置文件进行修改了:

1
vim resources/views/user/index.blade.php

大概第85行开始,将<a href=后面的'#'改为链接即可:

1
2
3
4
5
6
7
<ol>
<li> <a href="#" target="_blank">点击此处</a>下载客户端并启动 </li>
<li> 单击状态栏小飞机,找到服务器->编辑订阅,复制黏贴订阅地址 </li>
<li> 点击服务器->手动更新订阅,更新您的服务信息 </li>
<li> 更新成功后,请在服务器菜单处选择线路,并点击打开ShadowsocksR </li>
<li> 单击小飞机,选择PAC自动模式 </li>
</ol>

其他

mysql改用户名和密码

有的人偷懒,跟着我的例子把数据库名,用户名还有密码都设为了ssrpanel,只在本地登录还没什么。

但是如果之后需要添加节点,那么就要设置用户为ssrpanel@%,也就是说任何地方都可以登陆了,那么这样的数据库就很容易被人爆破了,这个时候就需要改名了。

因为本来就有用户存在了,直接用root用户登陆MySQL,然后改名字就行了:

1
update mysql.user set user='新用户名' where user='ssrpanel';

改了名字就变成一个新用户了,这个时候就需要在改完之后重新授予新用户对ssrpanel数据库的操作权限:

1
GRANT ALL ON ssrpanel.* TO '新用户名'@'localhost';

如果多节点需要登陆MySQL,那么还需要设置MySQL用户的可登陆IP为%,也就是任意IP都可登陆,而不止局限于本地用户:

1
update mysql.user set host='%' where user='新用户名';

把用户名改复杂一点,这样不容易被爆破,然后再把密码改改,起码别用ssrpanel

1
UPDATE user SET password=PASSWORD("新密码") WHERE user='新用户名';

或者也可以用这条命令:

1
set password for '新用户名'@'localhost'=password('新密码');

改完记得刷新权限

1
flush privileges;

如果想新建一个用户而不是改名的话,那么就需要取消原来的用户ssrpanel所拥有的权限:

1
revoke all on ssrpanel.* from ssrpanel@localhost;

如果是想删除这个用户,那么用下面的命令

1
delete from user where user='ssrpanel' and host='localhost';

后话

为了搭建这个面板着实费了一番功夫,胖虎在发布ssrpanel的时候是有说明的,但是说的不详细,不是很了解的话,还是需要踩很多坑后才能装上去,这次装面板花了两三天才成功,主要是前期寻找解决方案花了不少时间,因为除了ssrpanelssrpanel之外,还有moess等其他优秀的面板,只是懒得试过然后再选了,所以直接敲ssrpanel了。

这次搭建完然后写这篇文章也是想分享一下经验,毕竟肯定不少人需要,只是没想到写了这么一大篇下来,这是在装好面板几天后才动手写出来的文章,难免会有疏漏,如果有人发现教程有疏漏或者安装过程中有问题,可以在下面评论,我会尽快回复。





评论