Pages

Sunday, 15 February 2015

shadowsocks的多用户版本(有点复杂化了)

什么人need this branch

1.share shadowsocks server
2.create multi server by shadowsocks
3.manage server (transfer / account)

Change

从efd106dfb5这个提交开始能够独立于前端运行了,原因在于考虑到udp的话可靠性不好。在数据库中修改 passwd,switch,enable,流量都会立即生效(比如改密码不需要再通过Managesocket去手动stop某个服务了)。不过内部实 现还是通过数据库线程发送一个udp包来触发的,因为数据库这个操作改成异步的会灰常灰常麻烦,所以千万不要在iptabls里面把udp全给堵死了。

Install

install MySQL 5.x.x
pip install cymysql
create a database named shadowsocks
import shadowsocks.sql into shadowsocks
edit Config.py Example:
#Config
MYSQL_HOST = 'mdss.mengsky.net'
MYSQL_PORT = 3306
MYSQL_USER = 'ss'
MYSQL_PASS = 'ss'
MYSQL_DB = 'shadowsocks'

MANAGE_PASS = 'ss233333333'
#if you want manage in other server you should set this value to global ip
MANAGE_BIND_IP = '127.0.0.1'
#make sure this port is idle
MANAGE_PORT = 23333
TestRun cd shadowsocks python server.py
if no exception server will startup. you will see such like Example:
db start server at port [%s] pass [%s]

Database user table column

passwd server pass
port server port
t last keepalive time
u upload transfer
d download transer
transfer_enable if u + d > transfer_enable this server will be stop (db_transfer.py del_server_out_of_bound_safe)

Manage socket

Manage server work in UDP at MANAGE_BIND_IP MANAGE_PORT
use MANAGE_PASS:port:passwd:0 to del a server at port port
use MANAGE_PASS:port:passwd:1 to run a server at port port password is passwd
Python Eg:
udpsock.sendto('MANAGE_PASS:65535:123456:1', (MANAGE_BIND_IP, MANAGE_PORT))
PHP Eg:
$sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
$msg = 'MANAGE_PASS:65535:123456:1';
$len = strlen($msg);
socket_sendto($sock, $msg, $len, 0, MANAGE_BIND_IP, MANAGE_PORT);
socket_close($sock);

NOTICE

If error such like 2014-09-18 09:02:37 ERROR [Errno 24] Too many open files
edit /etc/security/limits.conf
Add:
*                soft    nofile          8192
*                hard    nofile          65535
add ulimit -n 8192 in your startup script before runing

from https://github.com/mengskysama/shadowsocks/tree/manyuser
---------------------------------------

ss-panel

A simple front end of Shadowsocks多用户版本( https://github.com/mengskysama/shadowsocks/tree/manyuser)

Demo

Install

  • Import sql/*.sql to your MySQL Database
  • Rename lib/config-sample.php to config.php,and edit the database infomation.
  • Enjoy it.

Enable Invite Mod

  • Edit lib/config.php,set $invite_only to true.
  • You can view invite code on code.php,rename this file first.
  • Visit tools/code_add.php to add invite code.

Admin

  • Rename dir admin
  • visit /admin
  • Default username: admin password: 12345678
FROM https://github.com/orvice/ss-panel

https://github.com/orvice/ss-panel/tree/master

https://github.com/orvice/ss-panel-docker
-------------------------------------------------------------

ss-panel

A simple front end of Shadowsocks manyuser
Demo 中文安装文档

Upgrade from 0.X

Read this

Requirements

  • PHP >= 5.4
  • PDO Extension

Install

  • Import sql/*.sql to your MySQL Database
  • Rename lib/config-sample.php to config.php,and edit the database infomation.
  • Enjoy it.

Admin

  • The user who uid is 1 is Admin by default.
  • You can Add User ID into table 'ss_user_admin'

Send mail using mail-gun

Run:
$ curl -sS https://getcomposer.org/installer | php
$ php composer.phar  install

Thanks to

FROM  https://github.com/orvice/ss-panel
------------------------------------------------------------

ss-panel + smarty

重要提醒

新版要求浏览器为 IE11 以上,部分手机会出现显示不正常,请使用UC QQ OPERA 等浏览器。
支持把程序放在二级目录。
请一定要配置config.php中的$site_url为你的网址,后面一定要有一个“/”。
A simple front end of Shadowsocks manyuser
ss pane_2.2.9_ smarty_3.1.24=_dev_0.2界面截图

管理后台 /admin 建议修改目录名称

默认管理帐号: first@blood.com 密码 1993 (和用户中心共用)

新版密码加密方式说明

当使用新的加密方式「带salt的sha256」加密,由于每个站点的$salt值都不同,所以初始密码「1993」是没有用的,安装完成后,访问
/pwd.php?pwd=1993
将获得的字符串更新到数据库user表的pass字段。
注意:
  • $salt 不可随意修改!
  • 如果原来为2.4之前的版本,需要将pass字段的长度修改为64
  • 增加 Nginx 的配置文件 tpl.conf,用于防止直接访问模板文件。 放在当前网站Nginx 配置文件相同目录,然后打开原来的配置文件,找到当前域名的server { } 在里面粘贴:include tpl.conf;
  • 增加Apache 的配置文件 .htaccess,用于防止直接访问模板文件,放在当前目录。
Demo 中文安装文档

Upgrade from 0.X

Read this

Requirements

  • PHP >= 5.4
  • PDO Extension

Install

  • Import sql/*.sql to your MySQL Database
  • Rename lib/config-sample.php to config.php,and edit the database infomation.
  • Enjoy it.

Admin

  • The user who uid is 1 is Admin by default.
  • You can Add User ID into table 'ss_user_admin'

Send mail using mail-gun

Run:
$ curl -sS https://getcomposer.org/installer | php
$ php composer.phar  install

Thanks to

FROM  https://github.com/xuanhuan/ss-panel
-----------------------------------------------------------
shadowsocks服务器多帐号系统ss-panel
ss-panel 是开源的ShadowSocks多用户管理系统,通过ss-panel可以快速搭建shadowsocks服务器,并对帐号管理,方便快捷。
ss-panel源码下载:https://github.com/orvice/ss-panel
ss-panel演示:http://speedmm.com/
shadowsocks服务器,ss-panel架设教程:
ss-panel后台配置
1、升级系统文件
apt-get update
apt-get install -y –force-yes build-essential autoconf libtool libssl-dev git curl
2、安装支持包
apt-get install python-pip git python-m2crypto
pip install cymysql
3、安装SS多用户
git clone -b manyuser https://github.com/mengskysama/shadowsocks.git
cd /root/shadowsocks/shadowsocks
创建数据库shadowsocks,然后将shadowsocks.sql导入到你创建的数据库中。
设置数据库
编辑Config.py文件:
#Config
MYSQL_HOST = ‘localhost’
MYSQL_PORT = 3306
MYSQL_USER = ‘数据库用户’
MYSQL_PASS = ‘数据库密码’
MYSQL_DB = ‘数据库名称’
MANAGE_PASS = ‘ss233333333′
#如果需要管理其他的服务器,填写服务器IP
MANAGE_BIND_IP = ‘127.0.0.1’
#make sure this port is idle
MANAGE_PORT = 23333
4、开启SS服务
配置文件后,运行:
python server.py
ss-panel前端配置:
导入sql文件夹下面的所有数据库到你自己建立的数据库中。
修改lib/config-sample.php(里面填写你的数据库信息)并改为:config.php即可。
代码:
<?php
/*
* ss-panel配置文件
* https://github.com/orvice/ss-panel
* Author @orvice
*/
//Define DB Connection
define(‘DB_HOST’,’localhost’);
define(‘DB_USER’,’root’);
define(‘DB_PWD’,’password’);
define(‘DB_DBNAME’,’db’);
define(‘DB_CHARSET’,’utf8′);
/*
* 下面别修改
*/
//Define system Path
define(‘SS_PATH’,”);
//Version
$version =”0.2.8″;
//set timezone
date_default_timezone_set(‘PRC’);
//Using Mysqli
$dbc = new mysqli(DB_HOST,DB_USER,DB_PWD,DB_DBNAME);
$db_char = DB_CHARSET;
$dbc->query(“SET NAMES utf8″);
$dbc->query(“SET time_zone = ‘+8:00′”);
//定义流量
$tomb = 1024*1024;
$togb = $tomb*1024;
/*
* 下面的东西根据需求修改
*/
//define Plan
//注册用户的初始化流量
//默认5GiB
$a_transfer = $togb*5;
//签到设置 签到活的的最低最高流量,单位MB
$check_min = 1;
$check_max = 100;
//name
$site_name = “ss-panel”;
//invite only
$invite_only = true;
上面是默认的配置,修改一下数据信息就好了
后台信息
后台地址:/admin
帐号:admin 密码:12345678
以上就是关于shadowsocks服务器,ss-panel架设教程,现在可以试着开帐号了.
--------------
ss多服务器多用户搭建简要备忘

采取Shadowsocks Manyuser + SS-Panel方案,环境debian。
不包含防火墙安全以及优化的相关配置。
一,中心服务器搭建(lnmp+ss+ss-Panel)
1,lnmp
由于是debian环境,简单的包安装即可。(PHP版本>=5.3 MYSQL>=5.0)。
有的vps系统默认版本自带了不需要的sendmail、apache等等,可以进行清理。
    invoke-rc.d sendmail stop > /dev/null 2>1&
    apt-get -q -y remove --purge sendmail* apache2* portmap samba* nscd bind9*
    apt-get -q -y autoremove
    apt-get -q -y autoclean
    apt-get -q -y clean
如果新系统的话,再进行更新系统。
    apt-get update && apt-get upgrade -y
安装lnmp环境。
    DEBIAN_FRONTEND=noninteractive apt-get install -y -q nginx-full php5-cli php5-fpm php5-gd php5-mysqlnd php5-curl mysql-server mysql-client
a,配置nginx
注释掉/etc/nginx/sites-enabled/default中的配置,也可以直接删掉。
在/etc/nginx/conf.d/文件夹下,创建后缀为.conf的任意文件,写入下面内容。
server {
    listen 80;
    #ss.com 替换成自己的域名或ip
    server_name ss.com; 
    #下面是网站存放的绝对路径,自定义。
    root /var/www;
    index index.html index.htm index.php;
    client_max_body_size 32m;
    access_log  off;
    error_log  off;
    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
        expires max;
        log_not_found off;
        access_log off;
}
    location / {
        index index.html index.php;
        try_files $uri $uri/ =404;
        if (-f $request_filename/index.html){
            rewrite (.*) $1/index.html break;
        }
        if (-f $request_filename/index.php){
            rewrite (.*) $1/index.php;
        }
        if (!-f $request_filename){
            rewrite (.*) /index.php;
        }
    }
    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }
    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }
    location ~ ^(.+?\.php)(/.*)?$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        include fastcgi_params;
#        fastcgi_param HTTPS on;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
    }
    location ~ /\.ht {
        deny  all;
    }
}
创建文件夹,启动或者重启nginx。
    mkdir -p /var/www
    /etc/init.d/nginx stop
    /etc/init.d/nginx start 
b,配置mysql
由于刚才的安装默认root用户密码为空,要先进行设置。(务必确认mysql已经启动)
     mysqladmin -u root password "12345678"
这里的12345678换成自定义的mysql的root用户密码。
创建名字为shadowsocks的数据库以及用户,并给与相应的权限。
    mysqladmin create "shadowsocks"
    echo "GRANT ALL PRIVILEGES ON \`shadowsocks\`.* TO \`shadowsocks\`@\`%\` IDENTIFIED BY '999';" | mysql
上面的999是数据库shadowsocks用户的密码,自定义。请不要与root用户密码相同。
为了方便,直接下载合成的数据库。
    wget https://raw.githubusercontent.com/fanyueciyuan/eazy-for-ss/master/Our-Private-Panel/shadowsocks.sql
根据自己需要事先修改shadowsocks.sql。
由于登录网站的密码储存是md5加密的,所以修改登录网站密码需要先进行加密。
把25d55ad283aa400af464c76d713c07ad 这些字符串修改成密码加密后的字符串;
Our_Private_Panel_Domain 这些字符串修改成自己的ip或者域名;
Our_Private_Panel 这些字符串修改成登录网站用户名;
My_Passwd 这些字符串修改成ss连接密码,这里是明文的。
还可以参考下面的命令进行修改,
    username="登录网站用户名"
    password="登录网站明文密码"
    My_Domain="自己的ip或者域名"
    ss_mypassword="ss连接密码"
    Panel_Admin_Passwd=`echo -n "$password"|md5sum|cut -d ' ' -f1`
    sed -i "s/25d55ad283aa400af464c76d713c07ad/$Panel_Admin_Passwd/" shadowsocks.sql
    sed -i "s/Our_Private_Panel_Domain/$My_Domain/" shadowsocks.sql
    sed -i "s/Our_Private_Panel/$username/" shadowsocks.sql
    sed -i "s/My_Passwd/$ss_mypassword/" shadowsocks.sql
然后导入数据库,
 mysql shadowsocks < ./shadowsocks.sql
由于数据库是作为中心数据库,所以mysql得监听外网。编辑 /etc/mysql/my.cnf文件中的bind-address = 127.0.0.1为0.0.0.0 
重启一下mysql。
    /etc/init.d/mysql stop
    /etc/init.d/mysql start
2,ss manyuser
安装依赖,获取ss manyuser。
    apt-get install -y -q build-essential autoconf libtool libssl-dev git python-pip python-m2crypto supervisor
    pip install cymysql
    git clone -b manyuser https://github.com/mengskysama/shadowsocks.git
进入shadowsocks进行配置
    cd shadowsocks/shadowsocks
编辑Config.py 中的下面行列
MYSQL_HOST = '127.0.0.1'
MYSQL_PORT = 3306
MYSQL_USER = 'shadowsocks'
MYSQL_PASS = '999'
MYSQL_DB = 'shadowsocks'
其中999是自定义的shadowsocks数据库密码。
至于配置里面的MANAGE_PASS相关行列,不需要配置,我们这里是ss-panel==mysql中心数据库==多ss-manyuser模式。
由于当前版本的ss加密方式是从config.json文件里面读取的,需要进行单独设置。命令如下
    sed -i 's/\(.*meth.*:\).*/\1"aes-128-cfb"/' config.json
为了方便,把需要文件都放到/etc/shadowsocks-manyuser文件夹下,删掉其他不必要东西。
    mkdir -p /etc/shadowsocks-manyuser
    mv * /etc/shadowsocks-manyuser
    cd ..
    cd ..
    rm -r shadowsocks
为了进程守护,创建/etc/supervisor/conf.d/shadowsocks-manyuser.conf文件,并写入下面的东西。
[program:shadowsocks-manyuser]
command=python /etc/shadowsocks-manyuser/server.py -c /etc/shadowsocks-manyuser/config.json
autostart=true
autorestart=true
然后,
    echo 'ulimit -n 51200' >>  /etc/default/supervisor
接着重启supervisor并且重新载入
        /etc/init.d/supervisor stop
        /etc/init.d/supervisor start
        supervisorctl reload
3,ss-panel
这里先进入网站根目录,这里是/var/www,并获取ss-panel
    cd /var/www
    git clone https://github.com/orvice/ss-panel.git
进入ss-pane文件夹,删掉ss-panel文件夹下的 sql文件夹和.git* 相关文件,把所有文件移动到网页根目录下。
    cd ss-panel
    rm -r sql && rm -rf .git*
    mv * /var/www/
    cd ..
    rm -r ss-panel
修改lib/config-sample.php(里面填写你的shadowsocks数据库信息,以及域名信息)并改为config.php。
这里是
define('DB_USER','shadowsocks');
define('DB_PWD','999');
define('DB_DBNAME','shadowsocks');
...
$site_url  = "http://域名或ip/";
然后把相关文件所有者变更为网页用户。
    chown -R www-data.www-data /var/www
由于这里还需要每月定时流量清零,修改tools/reset_transfer.php里面的日期,根据需要修改成自己需要流量清零的日期,默认是每月1号。
然后加入计划任务
    echo "1 1 1-31 * * root cd /var/www/tools && /usr/bin/php -f cron.php" >> /etc/crontab
需要注意的是,直接通过网页访问cron.php,也会造成流量清零。也就是说在每月的流量清零日不停访问cron.php,会不停的流量清零。
二,其他ss服务器搭建(ss-manyuser)
根据 一,2,ss manyuser 进行配置,把MYSQL_HOST = '127.0.0.1'中的127.0.0.1修改成数据库所在vps的ip即可。
三,网页管理
面板管理访问http://域名或者ip/admin/
用户访问http://域名或者ip/
这里初始用户和管理员的用户名以及密码是一样的,如果是导入了前面的数据的话。
四,参考
http://www.bxl.me/zh-cn/8625.html
http://www.bxl.me/zh-cn/8625.html
http://www.bxl.me/8613.html
http://ilazycat.com/posts/tag/ss-panel
http://blog.liujason.com/archives/2669
-----------------------------

shadowsocks开启udp支持

shadowsocks-manyuser是支持UDP的,由于一些游戏玩家需要这个功能,开启这个功能也并不难。
修改shadowsocks-manyuser文件夹下的server_pool.py,把50行、107-109行的#号注释给去掉就行了,这是shadowsocks-manyuser作者的答案,测试也确实可行!
然后关闭server.py重新开启就可以了!当然电脑程序使用代理必须得配合sockscap64!

相关帖子:http://briteming.blogspot.com/2016/05/shadowsocks-panel-shadowsocks.html
-------------------------------


完全兼容MU API的Shadowsocks Python服务端

背景

之前我就我的SS因被用来发垃圾邮件导致被列入黑名单这个问题研究了好久(发的都是英文的垃圾邮件,应该是某个用户电脑中毒了),最后还是决定自己来魔改原版的shadowsocks-rm manyuser,毕竟自己动手风衣足食嘛。

与原本的Py版多用户SS的区别

  • SS-panel V3完全兼容,意味着支持:
    • API (MU V2)端口数据统计与监控
    • 自定义加密方式
    • 实际上API功能接近于Shadowsocks-Go Manyuser,但是有更多的实用功能。
  • 支持One Time Auth(OTA,一次性认证,大部分客户端都有这个功能但是原版已经移除)
  • 修复了db loop的问题(实际上我还是接受之前一个人的建议直接去掉了这个东西,用来替代的是info级别的db downloaddb upload并且这两个东西只有开了啰嗦模式才会输出到日志)。
  • 更改了一些日志输出数据,更加直观,可以直接看出某个连接是由哪个用户哪个IP发起的
  • 增加了封禁IP功能(实际上原本就有,不过mengskysama没有继续做而已)
  • 增加了端口封禁功能,禁止连接某个端口。(譬如禁止连接22以防爆破)
  • 增加了跳过监听端口的功能,可以指定不监听某个端口,给别的程序腾出端口(譬如HTTP:80 和 HTTPS:443)
  • 可定义度非常高,你甚至可以调你的日志的日期格式和输出信息格式
  • 还有就是对原版的一些小修复,精简了一些无用的代码
  • 跟随原版的脚步,支持AEAD算法比如aes-X-gcm与chacha20-ietf-poly1305,比无验证的流算法(aes-X-ctr之类的)有着更高的安全系数

源码仓库


GitHub: https://github.com/fsgmhoward/shadowsocks-py-mu
------

Shadowsocks-python Manyuser

This is a multi-user version of shadowsocks-python. Requires a mysql database or a panel which supports SS MU API.

Requirement

  1. Python >= 2.5 (python=2.5 need to install extra library: pip install simplejson)
  2. MySQL >= 5 (if using database)
  3. A Panel with MU API, such as SS-Panel V3. (if using MU API)

Install Instructions for Database User

  1. install cymysql library by pip install cymysql
  2. create a database named shadowsocks
  3. import shadowsocks.sql into the shadowsocks database
  4. copy config_example.py to config.py and edit it following the notes inside (but DO NOT delete the example file). You DO NOT need to edit the API section.
  5. TestRun cd shadowsocks && python servers.py (not server.py)

Install Instructions for MU API User

  1. copy config_example.py to config.py and edit it following the notes inside (but DO NOT delete the example file). You DO NOT need to edit the Database section.
  2. TestRun cd shadowsocks && python servers.py (not server.py)

Install Instructions for Docker User

  1. build the docker: docker build -t shadowsocks-mu .
  2. create a config file as above
  3. run the docker (random free ports will be allocated):
    docker run -it \
        -v /PATH/TO/CONFIG/FILE:/shadowsocks/shadowsocks/config.py \
        -v /PATH/TO/LOG/FILE:/shadowsocks/shadowsocks/shadowsocks.log \
        -p PORT_START-PORT_END \
        shadowsocks-mu
    
    If you want to use fixed ports (e.g. port 443 of the host being matched with 443 of the docker), use -p PORT_START-PORT_END:PORT_START-PORT_END instead.
    Note: /PATH/TO/CONFIG/FILE & /PATH/TO/LOG/FILE should be absolute paths

Reminders for Windows User

  1. install pyuv library by pip install pyuv
  2. if git is not configured in your %PATH% environmental variable, you can create a file named .nogit to avoid using git describe
If no exceptions are thrown, the server will startup. By default, logging is enabled. You should be able to see this kind of thing in shadowsocks.log(default log file name)
Jun 24 01:06:08 INFO -----------------------------------------
Jun 24 01:06:08 INFO Multi-User Shadowsocks Server Starting...
Jun 24 01:06:08 INFO Current Server Version: 3.1.0-1-gc2ac618

Jun 24 01:10:11 INFO api downloaded
Jun 24 01:10:13 INFO api skipped port 443
Jun 24 01:10:13 INFO Server Added:   P[XXXXX], M[rc4-md5], E[XXXXX@gmail.com]
Jun 24 01:10:13 INFO Server Added:   P[XXXXX], M[rc4-md5], E[XXXXX@gmail.com]

Explanation of the log output

When adding server:
P[XXX] client port (assigned by database)
M[XXX] client encryption method
E[XXX] client email address
When data connection being established/blocked
U[XXX] client port (assigned by database)
RP[XXX] remote port (the port the client wants to connect)
A[XXX-->XXX] from the client address to the remote address

Database user table column

passwd server pass
port server port
t last connecting time
u no usage for this shadowsocks server (kept unchanged) but essential for some panels
d accumulated upload + download data transfer
method custom encryption method
enable/switch indicating whether the user is enabled
transfer_enable maximum accumulated data transfer allowed - if u + d > transfer_enable, service for this client will be stopped (other clients are not affected)

Compatibility with frontend UIs

It is fully compatible (through MU API) with ss-panel V3 .
from https://github.com/fsgmhoward/shadowsocks-py-mu