此文档非来自原作者的 wiki
前端使用赵大的魔改版(new_master分支) https://github.com/esdeathlove/ss-panel-v3-mod
后端也使用赵大的魔改版 https://github.com/esdeathlove/shadowsocks
演示环境 : VirMach 512RAM机子 Ubuntu 14 x64
安装前端
1.安装 LNMP
screen -S lnmp
wget http://soft.vpser.net/lnmp/lnmp1.4-full.tar.gz && tar xvzf lnmp1.4-full.tar.gz
cd lnmp1.4-full && ./install.sh
安装过程要求输入MySQL密码, 选择MySQL版本>=5.5, PHP版本>7.0.
安装大概需要半小时, 如果中途 ssh 断线, 输入 screen -r lnmp
2.设置虚拟主机
lnmp vhost add
要求输入你的域名, 然后其余项默认即可, SSL 开启
接着修改下 nginx
编辑 /usr/local/nginx/conf/vhost/你的域名.conf
然后添加下面内容到 server
location /
{
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ [^/]\.php(/|$)
{
# comment try_files $uri =404; to enable pathinfo
try_files $uri =404;
fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_index index.php;
include fastcgi.conf;
#include pathinfo.conf;
}
修改 root 那一行为
root /home/wwwroot/你的域名/public;
3.下载 sspanel 代码
cd /home/wwwroot/你的域名
apt-get install git -y
git clone -b new_master https://github.com/glzjin/ss-panel-v3-mod.git tmp && mv tmp/.git . && rm -rf tmp && git reset --hard
chown -R root:root *
chmod -R 755 *
chown -R www:www storage
chattr -i .user.ini
mv .user.ini public
cd public
chattr +i .user.ini
service nginx restart
LNMP1.4需要修改防跨目录的设置, 否则肯定报错
cd ~/lnmp1.4/tools/
./remove_open_basedir_restriction.sh
# 然后输入 /home/wwwroot/你的域名/public
4.安装 radius , 不使用VPN的话, 可以不进行这一步
# 先安装perl
apt-get install perl
# 然后需要安装perl的DBI组件
perl -MCPAN -e shell
cpan>install DBI
//安装完成后退出cpan
cpan>quit
# 再安装其它组件
apt install freeradius freeradius-mysql freeradius-utils
5.配置数据库
浏览器打开 http://你的vps ip/phpmyadmin
用户 : root
密码 :安装 lnmp 时设置的
需要创建一个数据库和一个访问这个数据库的用户
点击 用户 -> 新建 -> 添加用户
接着按执行 选择刚刚新建的数据库 sspanel 导入程序目录下的 glzjin_all.sql
不适用 VPN 的话跳下一步
接着配置 radius , 创建个 radius 数据库和用户 (重复以上步骤)
选择 radius 数据库 导入 https://github.com/glzjin/Radius-install/raw/master/all.sql
回到 ssh 继续设置 radius
编辑 /etc/freeradius/sql.conf
配置 login(用户名), password(密码), radius_db(数据库名)等字段
找到 readclients 一行,设为 yes 并去掉注释符号#
然后下面是几个文件的覆盖
wget https://github.com/glzjin/Radius-install/raw/master/radiusd.conf -O /etc/freeradius/radiusd.conf
wget https://github.com/glzjin/Radius-install/raw/master/default -O /etc/freeradius/sites-enabled/default
wget https://github.com/glzjin/Radius-install/raw/master/dialup.conf -O /etc/freeradius/sql/mysql/dialup.conf
wget https://github.com/glzjin/Radius-install/raw/master/dictionary -O /etc/freeradius/dictionary
wget https://github.com/glzjin/Radius-install/raw/master/counter.conf -O /etc/freeradius/sql/mysql/counter.conf
Radius 配置完成,
然后你也可以将该 freeradius 设为开机启动项
6.配置 sspanel
cd /home/wwwroot/你的域名
php composer.phar install
cp config/.config.php.example config/.config.php
# 编辑以下文件 建议使用 FTP 下载到本地修改
vi config/.config.php
由于配置太多 这里只说重点
$System_Config['key'] = ''; //修改此key为随机字符串确保网站安全
$System_Config['appName'] = ''; //站点名称
$System_Config['baseUrl'] = 'https://zhaojin97.cn'; // 站点地址
$System_Config['timeZone'] = 'PRC'; // RPC 天朝时间 UTC 格林时间
$System_Config['pwdMethod'] = 'sha256'; // 密码加密 可选 md5,sha256
$System_Config['salt'] = ''; // 密码加密用,从旧版升级请留空
$System_Config['authDriver'] = 'cookie'; // 登录验证存储方式,推荐使用Redis 可选: cookie,redis
$System_Config['mailDriver'] = 'mailgun'; // 邮件 可选 mailgun or smtp 需要支持qq邮箱的选 smtp
$System_Config['checkinMin'] = '100'; // 签到最少流量 单位MB
$System_Config['checkinMax'] = '500'; // 签到最多流量
$System_Config['defaultTraffic'] = '100'; // 用户初始流量 单位GB
$System_Config['inviteNum'] = '0'; // 注册后获得的邀请码数量
# database 数据库配置
$System_Config['db_driver'] = 'mysql';
$System_Config['db_host'] = 'localhost'; // 数据库地址
$System_Config['db_database'] = ''; // 数据库名称 sspanel
$System_Config['db_username'] = ''; // 数据库用户 sspanel
$System_Config['db_password'] = ''; // sspanel用户的密码
$System_Config['db_charset'] = 'utf8';
$System_Config['db_collation'] = 'utf8_general_ci';
$System_Config['db_prefix'] = '';
# redis
$System_Config['redis_scheme'] = 'tcp'; // 登录验证存储方式选了 redis 的话需要配置
$System_Config['redis_host'] = '127.0.0.1';
$System_Config['redis_port'] = '6379';
$System_Config['redis_database'] = '0';
$System_Config['redis_password']="";
# smtp
$System_Config['smtp_host'] = ''; // 例如 smtp.qq.com
$System_Config['smtp_username'] = '';
$System_Config['smtp_port'] = '25';
$System_Config['smtp_name'] = '';
$System_Config['smtp_sender'] = '';
$System_Config['smtp_passsword'] = '';
$System_Config['smtp_ssl'] = 'false';
#功能开关 需要用到的才开 建议先别动
$System_Config['enable_wecenter']='false';
$System_Config['enable_radius']='false'; // 配置了 radius 的话就开
$System_Config['enable_cloudxns']='false';
$System_Config['enable_duoshuo']='false';
$System_Config['enable_rss']='true';
$System_Config['enable_paymentwall']='false';
#Radius数据库设置
$System_Config['radius_db_host']=''; // 跟 上面 database 数据库配置差不多 换成radius即可
$System_Config['radius_db_database']='';
$System_Config['radius_db_user']='';
$System_Config['radius_db_password']='';
#Radius连接密钥
$System_Config['radius_secret']=''; // 这个重要 必须设
#端口池
$System_Config['min_port']='10000'; // SSR 分配端口号范围
$System_Config['max_port']='65535';
#两种方式相对于ss端口的偏移
$System_Config['pacp_offset']='-20000'; // PAC+ 和 PAC++ 用到
$System_Config['pacpp_offset']='-20000';
#测速周期/h
$System_Config['Speedtest_duration']='6'; // 对应后端 SSR 的 userapiconfig.py 里的 SPEEDTEST
#随机分组,注册时随机分配到的分组,多个分组请用英文半角逗号分隔。
$System_Config['ramdom_group']='0'; // 组别用于区分用户组 对应组只能访问对应组和0组的服务器 明白后再修改
#充值返利百分比
$System_Config['code_payback']='20'; // 用户充值后 给邀请他注册的人返利多少%
#注册时的流量重置日以及需要重置的流量,0不重置
$System_Config['reg_auto_reset_day']='0';
$System_Config['reg_auto_reset_bandwidth']='100'; // 单位G
以上为 config 部分配置 完成后保存并上传到原目录下
切换到 ssh 窗口, 在你的网站目录下执行以下命令创建管理员
php xcat createAdmin
按照提示, 输入管理员邮箱密码等信息, 然后执行以下命令同步用户
php xcat syncusers
此时管理员创建完成
接下来需要对服务器进行计划任务的设置,执行 crontab -e 命令, 添加以下五段
30 22 * * * php /home/wwwroot/站点文件夹/xcat sendDiaryMail
*/1 * * * * php /home/wwwroot/站点文件夹/xcat synclogin
*/1 * * * * php /home/wwwroot/站点文件夹/xcat syncvpn
0 0 * * * php /home/wwwroot/站点文件夹/xcat dailyjob
*/1 * * * * php /home/wwwroot/站点文件夹/xcat checkjob
*/1 * * * * php /home/wwwroot/站点文件夹/xcat syncnas
重启Crontab
/etc/init.d/cron restart
7.注意事项
检查时间是否为天朝时间
如果VPS默认是非中国时区的话, 如下命令可以用来更改为中国时区
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
检查防火墙是否屏蔽数据库端口
# 允许本机访问
iptables -A INPUT -s 127.0.0.1/32 -p tcp -m tcp --dport 3306 -j ACCEPT
# 允许节点访问
iptables -A INPUT -s 节点IP -p tcp -m tcp --dport 3306 -j ACCEPT
# 允许所有IP访问
iptables -A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT
查看防火墙规则
查看已添加的iptables规则
iptables -L -n --line-numbers
删除已添加的iptables规则
iptables -D INPUT line-numbers
规则保存
# Ubuntu
iptables-save > /etc/iptables.rules
# CentOS
service iptables save
安装后端
1.安装 libsodium
apt-get install build-essential wget -y
wget https://github.com/jedisct1/libsodium/releases/download/1.0.10/libsodium-1.0.10.tar.gz
tar xf libsodium-1.0.10.tar.gz && cd libsodium-1.0.10
./configure && make -j2 && make install
ldconfig
2.安装SSR
apt-get install python-pip git -y
pip install cymysql
cd ..
git clone -b manyuser https://github.com/glzjin/shadowsocks.git
cd shadowsocks
chmod +x *.sh
# 配置程序
cp apiconfig.py userapiconfig.py
cp config.json user-config.json
vi userapiconfig.py
然后主要编辑 userapiconfig.py, 来解释下里面各项配置的意思
# Config
#节点ID 对应前端节点列表的ID
NODE_ID = 1
#自动化测速,为0不测试,此处以小时为单位,要和 ss-panel 设置的小时数一致
SPEEDTEST = 6
#云安全,自动上报与下载封禁IP,1为开启,0为关闭
CLOUDSAFE = 1
#自动封禁SS密码和加密方式错误的 IP,1为开启,0为关闭
ANTISSATTACK = 0
#是否接受上级下发的命令,如果你要用这个命令,请参考我之前写的东西,公钥放在目录下的 ssshell.asc
AUTOEXEC = 1
#是否以多线程模式运行,关闭这个限速就会无效。请优先测试 1 ,开启试试,能运行没。
MULTI_THREAD = 0
#多端口单用户设置,看重大更新说明。
MU_SUFFIX = 'zhaoj.in'
#多端口单用户设置,看重大更新说明。
MU_REGEX = '%5m%id.%suffix'
#不明觉厉
SERVER_PUB_ADDR = '127.0.0.1' # mujson_mgr need this to generate ssr link
#此处不要修改
API_INTERFACE = 'glzjinmod' #mudbjson, sspanelv2, sspanelv3, sspanelv3ssr, muapiv2(not support)
#mudb,不要管
MUDB_FILE = 'mudb.json'
# Mysql 数据库连接信息
MYSQL_HOST = '127.0.0.1'
MYSQL_PORT = 3306
MYSQL_USER = 'ss'
MYSQL_PASS = 'ss'
MYSQL_DB = 'shadowsocks'
MYSQL_UPDATE_TIME = 60
# 是否启用SSL连接,0为关,1为开
MYSQL_SSL_ENABLE = 0
# 客户端证书目录,请看 https://github.com/glzjin/shadowsocks/wiki/Mysql-SSL%E9%85%8D%E7%BD%AE
MYSQL_SSL_CERT = '/root/shadowsocks/client-cert.pem'
MYSQL_SSL_KEY = '/root/shadowsocks/client-key.pem'
MYSQL_SSL_CA = '/root/shadowsocks/ca.pem'
# API,不用管
API_HOST = '127.0.0.1'
API_PORT = 80
API_PATH = '/mu/v2/'
API_TOKEN = 'abcdef'
API_UPDATE_TIME = 60
# Manager 不用管
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
3.运行SSR
运行的话, 有几种方式
- python server.py 用于调错的
- ./run.sh 无日志后台运行
- ./logrun.sh 有日志后台运行
- supervisord
这里说下 使用Supervisor守护进程启动ssr
# 安装
apt-get install supervisor -y
# 写入配置
vi /etc/supervisor/conf.d/ssr.conf
# 写入以下内容
[program:ssr]
command=python /root/shadowsocks/server.py
autorestart=true
autostart=true
user=root
# 重启Supervisor服务。
/etc/init.d/supervisor restart
# 重启 ssr
supervisorctl restart ssr
# 查看Supervisor服务运行状态。
supervisorctl status
# 如果遇到问题,可以检查日志:
supervisorctl tail -f ssr stderr
# 如果使用supervisor进程守护,需要修改文件vi /etc/default/supervisor,添加一行:
ulimit -n 1024000
- 如果采用 HTTPAPI 连接面板的话可以看看这里
升级后端
强化安全
1.将网站支持 SSL 强化安全
需要提前准备好 SSL 证书文件, 没有的话可以使用 lnmp ssl add 搞个免费SSL证书, 会帮你自动配置好的 nginx
server
{
listen 80;
#listen [::]:80; #有ipv6的开
server_name 域名;
return 301 https://$server_name$request_uri;
}
server
{
listen 443 ssl http2;
#listen [::]:443 ssl; #有ipv6的开
ssl on;
ssl_certificate /etc/letsencrypt/live/域名/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/域名/privkey.pem;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";
ssl_session_cache builtin:1000 shared:SSL:10m;
# openssl dhparam -out /usr/local/nginx/conf/ssl/dhparam.pem 2048
ssl_dhparam /usr/local/nginx/conf/ssl/dhparam.pem;
}
2.禁止 http 的访问请求
由于 http 仍然可以访问, 所以我们需要将 http 的请求手动转移到 https, 由于 SSpanel 本身使用了重定向, 那么在不使用其他重定向的情况下, 最简单的方法就是用 html 网页的 参数
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="refresh" content="0;url=https://域名">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
</html>
3.转移 phpMyAdmin 目录
-
转移目录
LNMP安装完毕以后默认的会在IP地址网站根目录生成一个 phpMyAdmin 的目录, 但是正是因为这个原因, 暴露了该目录, 我一般都会直接把这个文件夹转移到新的网站目录下, 比如转移到其他二级域名下的某个目录, 只需要在LNMP中新建一个二级域名而已, 然后把 phpMyAdmin 这个目录再转移到这个二级域名的网站目录下
-
限制IP
在 phpMyAdmin 的目录下新增 .htaccess 写入以下
allow from 59.168.1.0/24
allow from 59.168.2.50
deny from all
参考
ss-panel-v3-mod安装说明
说明以及安装方法
Linux上iptables防火墙的基本应用教程
此文档非来自原作者的 wiki
前端使用赵大的魔改版(new_master分支) https://github.com/esdeathlove/ss-panel-v3-mod
后端也使用赵大的魔改版 https://github.com/esdeathlove/shadowsocks
演示环境 : VirMach 512RAM机子 Ubuntu 14 x64
安装前端
1.安装 LNMP
安装过程要求输入MySQL密码, 选择MySQL版本>=5.5, PHP版本>7.0.
安装大概需要半小时, 如果中途 ssh 断线, 输入
screen -r lnmp2.设置虚拟主机
lnmp vhost add要求输入你的域名, 然后其余项默认即可, SSL 开启
接着修改下 nginx
编辑
/usr/local/nginx/conf/vhost/你的域名.conf然后添加下面内容到 server
location / { try_files $uri $uri/ /index.php$is_args$args; } location ~ [^/]\.php(/|$) { # comment try_files $uri =404; to enable pathinfo try_files $uri =404; fastcgi_pass unix:/tmp/php-cgi.sock; fastcgi_index index.php; include fastcgi.conf; #include pathinfo.conf; }修改 root 那一行为
root /home/wwwroot/你的域名/public;3.下载 sspanel 代码
LNMP1.4需要修改防跨目录的设置, 否则肯定报错
4.安装 radius , 不使用VPN的话, 可以不进行这一步
5.配置数据库
浏览器打开
http://你的vps ip/phpmyadmin用户 : root
密码 :安装 lnmp 时设置的
需要创建一个数据库和一个访问这个数据库的用户
点击
用户->新建->添加用户登录信息 :
Username 选择 使用文本域 , 填写你的用户名 如 sspanel
Host 选择任意主机 %
密码 选择使用文本域 填写密码
用户数据库 :
勾选 创建与用户同名的数据库并授予所有权限
全局权限 :
全选
接着按执行 选择刚刚新建的数据库 sspanel 导入程序目录下的 glzjin_all.sql
不适用 VPN 的话跳下一步
接着配置 radius , 创建个 radius 数据库和用户 (重复以上步骤)
选择 radius 数据库 导入 https://github.com/glzjin/Radius-install/raw/master/all.sql
回到 ssh 继续设置 radius
编辑
/etc/freeradius/sql.conf配置 login(用户名), password(密码), radius_db(数据库名)等字段
找到 readclients 一行,设为 yes 并去掉注释符号#
然后下面是几个文件的覆盖
Radius 配置完成,
然后你也可以将该 freeradius 设为开机启动项
6.配置 sspanel
由于配置太多 这里只说重点
以上为 config 部分配置 完成后保存并上传到原目录下
切换到 ssh 窗口, 在你的网站目录下执行以下命令创建管理员
php xcat createAdmin按照提示, 输入管理员邮箱密码等信息, 然后执行以下命令同步用户
php xcat syncusers此时管理员创建完成
接下来需要对服务器进行计划任务的设置,执行
crontab -e命令, 添加以下五段重启Crontab
/etc/init.d/cron restart7.注意事项
检查时间是否为天朝时间
如果VPS默认是非中国时区的话, 如下命令可以用来更改为中国时区
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime检查防火墙是否屏蔽数据库端口
查看防火墙规则
规则保存
安装后端
1.安装 libsodium
2.安装SSR
然后主要编辑 userapiconfig.py, 来解释下里面各项配置的意思
3.运行SSR
运行的话, 有几种方式
这里说下 使用Supervisor守护进程启动ssr
升级后端
强化安全
1.将网站支持 SSL 强化安全
需要提前准备好 SSL 证书文件, 没有的话可以使用 lnmp ssl add 搞个免费SSL证书, 会帮你自动配置好的 nginx
server { listen 80; #listen [::]:80; #有ipv6的开 server_name 域名; return 301 https://$server_name$request_uri; } server { listen 443 ssl http2; #listen [::]:443 ssl; #有ipv6的开 ssl on; ssl_certificate /etc/letsencrypt/live/域名/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/域名/privkey.pem; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers "EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5"; ssl_session_cache builtin:1000 shared:SSL:10m; # openssl dhparam -out /usr/local/nginx/conf/ssl/dhparam.pem 2048 ssl_dhparam /usr/local/nginx/conf/ssl/dhparam.pem; }2.禁止 http 的访问请求
由于 http 仍然可以访问, 所以我们需要将 http 的请求手动转移到 https, 由于 SSpanel 本身使用了重定向, 那么在不使用其他重定向的情况下, 最简单的方法就是用 html 网页的 参数
3.转移 phpMyAdmin 目录
转移目录
LNMP安装完毕以后默认的会在IP地址网站根目录生成一个 phpMyAdmin 的目录, 但是正是因为这个原因, 暴露了该目录, 我一般都会直接把这个文件夹转移到新的网站目录下, 比如转移到其他二级域名下的某个目录, 只需要在LNMP中新建一个二级域名而已, 然后把 phpMyAdmin 这个目录再转移到这个二级域名的网站目录下
限制IP
在 phpMyAdmin 的目录下新增
.htaccess写入以下参考
ss-panel-v3-mod安装说明
说明以及安装方法
Linux上iptables防火墙的基本应用教程