A shadowsocks manager tool for multi user and traffic control.
Base on Node.js and SQLite.
For more details, you can see the wiki page.
If you want to use the old version, please switch to this branch.
WebGUI Demo:
https://wall.gyteng.comDependencies
Node.js 6.*Install
From source:
git clone https://github.com/shadowsocks/shadowsocks-manager.git
cd shadowsocks-manager
npm i
use node server.js
to run this program.From npm:
npm i -g shadowsocks-manager
use ssmgr
to run this program.From docker:
docker run --name ssmgr -idt -v ~/.ssmgr:/root/.ssmgr --net=host gyteng/ssmgr [ssmgr params...]
Build docker image:
here is theDockerfile
FROM ubuntu:16.04
MAINTAINER gyteng <igyteng@gmail.com>
RUN apt-get update && \
apt-get install curl git sudo -y && \
curl -sL https://deb.nodesource.com/setup_6.x | bash - && \
apt-get install -y nodejs && \
npm i -g shadowsocks-manager && \
git clone https://github.com/shadowsocks/shadowsocks-libev.git ~/shadowsocks && \
mkdir -p ~/build-area/ && \
cp ~/shadowsocks/scripts/build_deb.sh ~/build-area/ && \
cd ~/build-area && \
./build_deb.sh
ENTRYPOINT ["/usr/bin/ssmgr"]
Usage
- Start shadowsocks with manager API, it supports
shadowsocks-python
andshadowsocks-libev
. For example, you can run this command:
ss-manager -m aes-256-cfb -u --manager-address 127.0.0.1:6001
- run ssmgr with type s:
type: s
empty: false
shadowsocks:
address: 127.0.0.1:6001
manager:
address: 0.0.0.0:4001
password: '123456'
db: 'ss.sqlite'
If you want to use MySQL, the db
must like this:db:
host: '1.1.1.1'
user: 'root'
password: 'abcdefg'
database: 'ssmgr'
And you have to close only_full_group_by
when the version of MySQL is greater than 5.7command:
ssmgr -c /your/config/file/path.yml
- If you have several servers, you have to run step 1 and step 2 in every server.
The listening address in--manager-address
of step 1 and inshadowsocks -> address
of step 2's config file must be same. For security reseon, we recommend you to use127.0.0.1
instead of0.0.0.0
. - Now you can use the plugins to manage them. You can read the details in plugins readme page.
+-------------+ +-------------+ +------+
| Shadowsocks | | Shadowsocks | ... | |
| manager API | | manager API | | |
+-------------+ +-------------+ +------+
| | |
| | |
+-------------+ +-------------+ +------+
| ssmgr | | ssmgr | ... | |
| with type s | | with type s | | |
+-------------+ +-------------+ +------+
| | |
+------------+----+-------- ... ---+
|
|
+---------------+
| ssmgr plugins |
| with type m |
+---------------+
Plugins
[================100%]
cli[================100%]
telegram[================100%]
flowSaver[================100%]
email[================100%]
user[================100%]
freeAccount[================100%]
account[===============90%--]
webgui[================100%]
alipayParameter
ssmgr --help
will show startup parameters info.Usage: ssmgr [options]
Options:
-h, --help output usage information
-V, --version output the version number
-c, --config [file] config file, default: ~/.ssmgr/default.yml
-d, --db [file] sqlite3 file, sample: ~/.ssmgr/db.sqlite
-e, --empty clean database
-t, --type [type] type, s for server side, m for manager side
-s, --shadowsocks [address] ss-manager address, sample: 127.0.0.1:6001
-m, --manager [address] manager address, sample: 0.0.0.0:6002
-p, --password [password] manager password, both server side and manager side must be equals
-r, --run [type] run shadowsocks from child_process, sample: libev / libev:aes-256-cfb / python / python:aes-256-cfb
--debug show debug message
First, ssmgr will read the config file in --config
, and other parameters(-detsmp
) will replace the config file values.Telegram
Join the group if you have some problem: https://t.me/joinchat/AAAAAAocQVv8fK_K6JDBgwfrom https://github.com/shadowsocks/shadowsocks-manager
------------
从零开始做SS奸商 - 使用 Shadowsocks Manager 搭建 SS 多人管理平台
首先你至少需要一台 512M 内存以上的 VPS,最好是基于 KVM/XEN 平台,当然 OVZ 也行,操作系统选择 Debian 8 x64,并使用 root 帐号登入。
您可以试试这几个提供商: Linode (1G 内存 5 刀/月)、Vultr.com (512M 内存 2.5 刀/月)、GCE (信用卡认证后送 1 年有效 300 刀代金券,低配 5 刀/月 + 0.23刀/GB 到中国区流量)
1、 更新 VPS 及安装必要软件
apt-get update && apt-get install vim git curl supervisor build-essential -y
安装 Nodejs、Nginx、Shad0ws0cks-libev、Shad0ws0cks Manager:
curl -sL https://deb.nodesource.com/setup_6.x | bash -
&& curl -L http://nginx.org/keys/nginx_signing.key | apt-key add -
然后,
nano /etc/apt/sources.list
粘贴下方内容:deb http://httpredir.debian.org/debian jessie-backports main
deb http://nginx.org/packages/mainline/debian/ jessie nginx
deb-src http://nginx.org/packages/mainline/debian/ jessie nginx
然后,apt-get update && apt-get install nginx nodejs -y && apt -t jessie-backports install shadowsocks-libev -y
&& npm i -g pm2 && git clone https://github.com/shadowsocks/shadowsocks-manager ssm && cd ssm && npm i
2、 配置 Shad0ws0cks Manager
vim /etc/supervisor/conf.d/ss-manager.conf
按 i
进入编辑模式,粘贴下方内容[program:ss-manager]
command=ss-manager -m aes-256-cfb -u --manager-address 127.0.0.1:2397
autorestart=true
user=root
按 Esc
输入 :wq
保存并退出,再运行 supervisorctl reload
重启 Supervisor,接下来配置 SSM 管理端mkdir ~/.ssmgr && vim ~/.ssmgr/ss.yml
按 i
进入编辑模式,粘贴下方内容type: s
empty: false
shadowsocks:
address: 127.0.0.1:2397
manager:
address: 0.0.0.0:2398
password: 'passwd'
# 更改为你自己的密码
db: 'ss.sqlite'
按 Esc
输入 :wq
保存并退出。pm2 --name "ssm" -f start /root/ssm/server.js -x -- -c ss.yml
然后进行配置 webui 端:vim ~/.ssmgr/webgui.yml
按 i
进入编辑模式,粘贴下方内容type: m
empty: false
manager:
address: 127.0.0.1:2398
password: 'passwd'
# 这部分的端口和密码需要跟上一步 manager 参数里的保持一致
plugins:
flowSaver:
use: true
user:
use: true
account:
use: true
pay:
hour:
price: 0.03
flow: 500000000
day:
price: 0.5
flow: 7000000000
week:
price: 3
flow: 50000000000
month:
price: 10
flow: 200000000000
season:
price: 30
flow: 200000000000
year:
price: 120
flow: 200000000000
email:
use: true
username: 'cat-mail@mailgun.org'
password: 'passwd'
host: 'smtp.mailgun.org'
# 这部分的邮箱和密码是用于发送注册验证邮件,重置密码邮件使用的,推荐使用 Mailgun.com
webgui:
use: true
host: '0.0.0.0'
port: '8088'
site: 'https://cat.con.sh'
# 改成你自己的域名
gcmSenderId: '456102641793'
gcmAPIKey: 'AAAAGzzdqrE:XXXXXXXXXXXXXX'
alipay:
use: false
# 若要使用支付宝收款,请自己研究
appid: 2015012108272442
notifyUrl: ''
merchantPrivateKey: 'xxxxxxxxxxxx'
alipayPublicKey: 'xxxxxxxxxxx'
gatewayUrl: 'https://openapi.alipay.com/gateway.do'
db: 'webgui.sqlite'
按 Esc
输入 :wq
保存并退出。pm2 --name "webgui" -f start /root/ssm/server.js -x -- -c webgui.yml
配置 PM2 使它开机启动pm2 save && pm2 startup
3、 配置 Nginx
安装 acme.shcurl -L get.acme.sh | bash -
签发 SSL 证书,签发前将你的域名解析至你 VPS 的 IPservice nginx stop && /root/.acme.sh/acme.sh --issue --standalone -d cat.con.sh
将 cat.con.sh
换成你的域名,签发成功后会得到证书的地址形如[Mon Mar 27 13:16:31 UTC 2017] Your cert is in /root/.acme.sh/cat.con.sh/cat.con.sh.cer
[Mon Mar 27 13:16:31 UTC 2017] Your cert key is in /root/.acme.sh/cat.con.sh/cat.con.sh.key
[Mon Mar 27 13:16:31 UTC 2017] The intermediate CA cert is in /root/.acme.sh/cat.con.sh/ca.cer
[Mon Mar 27 13:16:31 UTC 2017] And the full chain certs is there: /root/.acme.sh/cat.con.sh/fullchain.cer
其中/root/.acme.sh/cat.con.sh/cat.con.sh.key
是你的密钥/root/.acme.sh/cat.con.sh/fullchain.cer
是你的全证书链,这两个是我们需要的然后编辑 Nginx 配置文件
vim /etc/nginx/conf.d/ss.conf
按 i
进入编辑模式,粘贴下方内容,将其中的 cat.con.sh
换成你的域名:server {
listen 80;
server_name cat.con.sh;
rewrite ^ https://$server_name$request_uri? permanent;
}
server {
listen 443 ssl http2;
server_name cat.con.sh;
ssl on;
ssl_certificate /root/.acme.sh/cat.con.sh/fullchain.cer;
ssl_certificate_key /root/.acme.sh/cat.con.sh/cat.con.sh.key;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:8088;
}
}
按 Esc
输入 :wq
保存并退出。service nginx start
然后访问你的域名,注册的第一个用户会是管理员。4、 其他
- 安装 BBR、锐速:自己研究.
供演示用的站点:
- 官方演示: https://wall.gyteng.com/
酷炫的SS管理程序SS-Manager之服务器端部署教程
部署准备本文用于部署SS-Manager的主控端,也就是销售网站前端,在开始部署之前,请先确保你符合以下条件,如果任意一项不满足,请不要继续本教程。
一台已经完成部署的SSMGR节点端
一个SMTP发件服务。(企业邮箱SMTP服务需要开启)
至少 512 MB 内存。
一个纯净的系统。
如果你满足以上条件,那么可以开始下面的主控端部署教程。
依赖安装
直接复制运行就好了
Debian/Ubuntu
apt-get -y update
apt-get -y install wget curl screen nano
CentOS/RHEL
yum install -y wget curl screen nano
安装NodeJS
不多说,NodeJS是运行必要的语言环境
32位的系统使用:
mkdir /usr/local/nodejs
wget -N --no-check-certificate https://nodejs.org/dist/v6.9.1/node-v6.9.1-linux-x86.tar.gz
tar -xf node-v6.9.1-linux-x86.tar.gz -C /usr/local/nodejs/
rm -rf node-v6.9.1-linux-x86.tar.gz
ln -s /usr/local/nodejs/node-v6.9.1-linux-x86/bin/node /usr/local/bin/node
ln -s /usr/local/nodejs/node-v6.9.1-linux-x86/bin/npm /usr/local/bin/npm
64位的系统使用:
mkdir /usr/local/nodejs
wget -N --no-check-certificate https://nodejs.org/dist/v6.9.1/node-v6.9.1-linux-x64.tar.gz
tar -xf node-v6.9.1-linux-x64.tar.gz -C /usr/local/nodejs/
rm -rf node-v6.9.1-linux-x64.tar.gz
ln -s /usr/local/nodejs/node-v6.9.1-linux-x64/bin/node /usr/local/bin/node
ln -s /usr/local/nodejs/node-v6.9.1-linux-x64/bin/npm /usr/local/bin/npm
NodeJS6就安装完成了。
安装SS-Manager
npm i -g shadowsocks-manager
ln -s /usr/local/nodejs/node-v6.9.1-linux-x64/bin/ssmgr /usr/local/bin/ssmgr
配置SS-MGR主控端信息
首先创建配置文件夹,编辑配置文件
mkdir -p ~/.ssmgr/
nano ~/.ssmgr/webgui.yml
请将下面的配置文件完整复制粘贴,并且按照其中的提示进行修改,请不要删减空格,否则会出错!
type: m
empty: false
manager:
address: 127.0.0.1:4001 #这里请将127.0.0.1和4001 设置为你节点服务器的IP和端口
password: '123456' #这里请讲 123456 设置为你的节点服务器SSMGR的密码,请注意两边需要 ' 包含起来
plugins:
flowSaver:
use: true
user:
use: true
account:
use: true
pay:
hour:
price: 0.03
flow: 500000000
day:
price: 0.5
flow: 7000000000
week:
price: 3
flow: 50000000000
month:
price: 10
flow: 200000000000
season:
price: 30
flow: 200000000000
year:
price: 120
flow: 200000000000
email:
use: true
username: 'admin@admin.com' #这里请填写你的发件服务器的完整邮箱地址,请注意两边需要 ' 包含起来
password: '123456' #这里请改为你发件邮箱的密码,请注意两边需要 ' 包含起来
host: 'smtp.mxhichina.com' #这里请注意改为你的发件服务器的SMTP发件地址,请注意两边需要 ' 包含起来
webgui:
use: true
host: '0.0.0.0'
port: '80'
site: 'ss.com' #这里请输入你的网站域名,不需要填写http:// ,请注意两边需要 ' 包含起来
gcmSenderId: '456102641793'
gcmAPIKey: 'AAAAGzzdqrE:XXXXXXXXXXXXXX'
alipay:
use: true
appid: 2015012108272442
notifyUrl: ''
merchantPrivateKey: 'xxxxxxxxxxxx'
alipayPublicKey: 'xxxxxxxxxxx'
gatewayUrl: 'https://openapi.alipay.com/gateway.do'
#如果想起用支付宝当面付接口,可以配置上方的信息。当然也可以不填写,就无法付款
db: 'webgui.sqlite'
修改完成后请保存退出。nano 的保存退出方法:按一下 Ctrl + X键,输入Y,然后回车。
运行主控端服务
下面我们运行下主控端服务,测试下到底有没有配置成功。
cd ~/.ssmgr
ssmgr -c webgui.yml
如果没有命令立刻退出,而是处于长期等待过程,那么表示配置文件没有错误,按下 Ctrl + C 可以进行下一步。否则请检查你的配置文件。
开启80端口
网页访问默认是80端口,这里我贴出一段开放80端口的防火墙规则,适用于 Debian/Ubuntu/CentOS6
iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -m state --state NEW -m udp -p udp --dport 80 -j ACCEPT
后台保持运行SSMGR主控端
确定配置没有问题后可以这样使得主控端后台持续运行。
cd ~/.ssmgr
screen -dmS webgui ssmgr -c webgui.yml
cd ..
这东西虽然看起来很酷炫,但是因为是nodejs,所以弄起来不比sspanel简单。而且小白想理解他的工作原理很困难,所以很容易出现乱改配置的问题。
---------
部署 shadowsocks-manager
shadowsocks-manager 是一个 Shadowsocks 多用户及流量管理面板。
本文操作在 root 账户下进行,如使用非 root 账户请自行注意权限。
概述
shadowsocks-manager 分别有 m 和 s 两种运行模式(type),type s 运行于后端 shadowsocks 服务器,type m 运行于前端向用户及管理员提供 webgui 页面并通过与后端 type s 通讯以实现对后端 shadowsocks 服务的管理。
安装 shadowsocks-manager
前后端服务器均需安装 shadowsocks-manager,该程序依赖 Node.js 6.x 运行。
Node.js 6.x 安装
运行下面命令安装 Node.js 6.x 版本:
$ curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash - $ apt-get install -y nodejs
shadowsocks-manager 安装
通过 npm 安装 shadowsocks-manager:
$ npm i -g shadowsocks-manager
配置后端 shadowsocks 服务
shadowsocks-manager 支援 shadowsocks-python 及 shadowsocks-libev,并强烈推荐使用 shadowsocks-libev 作为后端,下文以 shadowsocks-libev 为例。
安装 shadowsocks-libev
Ubuntu 16.10 以上用户可直接通过 apt 安装:
$ apt-get install shadowsocks-libev
Ubuntu 16.04 用户则需要通过官方 repo 脚本安装,首先获取源代码:
$ git clone https://github.com/shadowsocks/shadowsocks-libev.git $ cd shadowsocks-libev $ git submodule update --init --recursive
然后运行脚本:
$ mkdir -p ~/build-area/ $ cp ./scripts/build_deb.sh ~/build-area/ $ cd ~/build-area $ ./build_deb.sh
运行 shadowsocks-libev
运行命令启动 shadowsocks-libev 的 manager API 服务:
$ ss-manager -m aes-256-cfb -u --manager-address 127.0.0.1:4000
其中
-m
参数为加密方式,--manager-address
参数为 API 监听地址。若使用 shadowsocks-python 版本,则此处 manager API 命令可能需作修改。
运行 type s 的 shadowsocks-manager
在
~/.ssmgr
下建立 ss.yml
作为 type s 的配置文件:$ mkdir ~/.ssmgr $ vim ~/.ssmgr/ss.yml
配置内容如下:
type: s empty: false shadowsocks: address: 127.0.0.1:4000 manager: address: 0.0.0.0:4001 password: 'YOURPASSWD' db: 'ss.sqlite'
此配置文件中的
shadowsocks
部分负责与 shadowsocks-libev 的 manager API 服务进行通讯,所以其中的 address
需要与上文中的 API 监听地址保持一致。manager
部分负责与前端的 shadowsocks-manager type m 进行通讯,若前端 type m 与后端 type s 在同一服务器上可修改 address
为 127.0.0.1:4001
只监听本机通讯,若不在同一服务器则保持原样(端口可自行修改只需注意与后文一致);password
部分自行修改确保安全。
配置完成后运行以下命令开启 shadowsocks-manager type s:
$ ssmgr -c ss.yml
配置前端 webgui 服务
在
~/.ssmgr
下建立 webgui.yml
作为 type m 的配置文件:$ mkdir ~/.ssmgr $ vim ~/.ssmgr/webgui.yml
配置内容如下:
type: m empty: false manager: address: <后端地址>:4001 password: 'YOURPASSWD' plugins: flowSaver: use: true user: use: true account: use: true pay: hour: price: 0.03 flow: 500000000 day: price: 0.5 flow: 7000000000 week: price: 3 flow: 50000000000 month: price: 10 flow: 200000000000 season: price: 30 flow: 200000000000 year: price: 120 flow: 200000000000 email: use: true username: 'username' password: 'password' host: 'smtp.your-email.com' webgui: use: true host: '0.0.0.0' port: '80' site: '<站点地址>' gcmSenderId: '456102641793' gcmAPIKey: 'AAAAGzzdqrE:XXXXXXXXXXXXXX' alipay: use: true appid: <支付宝 APPID> notifyUrl: '' merchantPrivateKey: '<rsa_private_key.pem 中的私钥>' alipayPublicKey: '<支付宝公钥>' gatewayUrl: 'https://openapi.alipay.com/gateway.do' db: 'webgui.sqlite'
其中
manager
部分负责与 type s 进行通讯,将 address
设置为运行 type s 的服务器公网地址,另外注意 address
端口部分及 password
需要与前文中 type s 部分的设置保持一致。plugins
部分设置了站点大部分插件配置:account
中的pay
用于设置定价。email
负责发送验证及密码找回邮件,可使用 Mailgun 服务配置。webgui
负责 webgui 的输出,site
设置为本站点地址,如果没有特别需求可直接按配置中的80
端口直接对外提供访问。alipay
为支付宝商家当面付接口,可按照 V2EX 贴文指引进行申请签约。签约完成后到蚂蚁金服开放平台密钥页面按照指示完成「RSA(SHA1) 密钥」的设置,将生成的rsa_private_key.pem
中的私钥填入merchantPrivateKey
,网页中提供的「支付宝公钥」填入alipayPublicKey
,并将 APPID 填入appid
。
配置完成后运行以下命令开启 shadowsocks-manager type m:
$ ssmgr -c webgui.yml
此时已经可以通过浏览器访问
http://<前端服务器 IP>:<预设端口>
查看 shadowsocks-manager 是否部署成功,网站架设后注册的首个账户即为管理员身份。额外
使用 MySQL 替换 SQLite
若需要使用 MySQL 替换默认的 SQLite 作为数据库使用,可在配置
ss.yml
及 webgui.yml
时将 db
部分替换为:db: host: '<MySQL 地址>' user: '<MySQL 用户>' password: '<MySQL 密码>' database: '<MySQL 库名>'
提供 HTTPS 或与其他站点共存(推荐)
前文中
webgui.yml
的 plugins
部分的 webgui
配置默认使用 80 端口直接对外提供 web 访问。
但若为了安全需求要提供服务器端的 HTTPS 支持,或该服务器上需同时提供其他站点的 web 访问服务,可将此处端口变更为
80
及 443
以外的其他端口并参见通过 Apahce 或 nginx 等架设反向代理对外提供 web 服务。后台运行
参见使用 supervisor 守护进程或项目 Wiki 页面提供的通过 pm2 后台运行。
请注意使用 supervisor 守护进程中使用的 shadowsocks-manager 为旧版,配置文件均有变化。
如发生 Cannot find module … node_sqlite3.node 错误
这是由于通过 npm 安装 shadowsocks-manager 时没有成功安装依赖的 sqlite3 所导致的,到 shadowsocks-manager 安装目录补装 sqlite3 即可解决:
$ cd /usr/lib/node_modules/shadowsocks-manager/ $ npm install sqlite3 --save
No comments:
Post a Comment