搭建 sspanel v3 魔改版记录 - tsuihwau/ss-panel-v3-mod_Uim GitHub Wiki
前端使用赵大的魔改版(master分支版本) https://github.com/esdeathlove/ss-panel-v3-mod
后端也使用赵大的魔改版 https://github.com/esdeathlove/shadowsocks
演示环境 : VirMach 512RAM机子 Ubuntu 14 x64
附: 搭建 sspanel v3 魔改版new_master分支记录 从master分支升级到new_master分支
安装前端 1.安装 LNMP
screen -S lnmp 2G以上内存 wget http://soft.vpser.net/lnmp/lnmp1.3-full.tar.gz && tar xvzf lnmp1.3-full.tar.gz cd lnmp1.3-full && ./install.sh 1G以下内存 wget http://soft.vpser.net/lnmp/lnmp1.2-full.tar.gz && tar xvzf lnmp1.2-full.tar.gz cd lnmp1.2-full && ./install.sh 安装过程要求输入MySQL密码, 选择MySQL版本>=5.5, PHP版本>5.6.
安装大概需要半小时, 如果中途 ssh 断线, 输入 screen -r lnmp
2.设置虚拟主机
lnmp vhost add
要求输入你的域名, 然后其余项都选 no
接着修改下 nginx
编辑 /usr/local/nginx/conf/vhost/你的域名.conf
然后添加下面这一段到 server
location /
{
try_files $uri $uri/ /index.php$is_args$args;
}
修改 root 那一行为
root /home/wwwroot/你的域名/public;
3.下载 sspanel 代码
cd /home/wwwroot/你的域名 apt-get install git -y git clone -b 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 4.安装 radius , 不使用VPN的话, 可以不进行这一步
apt-get install perl
perl -MCPAN -e shell cpan>install DBI
//安装完成后退出cpan cpan>quit
apt-get install freeradius freeradius-mysql freeradius-utils 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 并去掉注释符号#
然后下面是几个文件的覆盖
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 配置完成,
service freeradius start 然后你也可以将该 freeradius 设为开机启动项
6.配置 sspanel
cd /home/wwwroot/你的域名 cp config/.config.php.example config/.config.php
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'; // 注册后获得的邀请码数量
$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'] = '';
$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']="";
$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 -n /home/wwwroot/站点文件夹/xcat dailyjob
*/1 * * * * php /home/wwwroot/站点文件夹/xcat checkjob
*/1 * * * * php -n /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
iptables -A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT 查看防火墙规则
查看已添加的iptables规则 iptables -L -n --line-numbers 删除已添加的iptables规则 iptables -D INPUT line-numbers 规则保存
iptables-save > /etc/iptables.rules
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, 来解释下里面各项配置的意思
#节点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_HOST = '127.0.0.1' MYSQL_PORT = 3306 MYSQL_USER = 'ss' MYSQL_PASS = 'ss' MYSQL_DB = 'shadowsocks' MYSQL_UPDATE_TIME = 60
MYSQL_SSL_ENABLE = 0
MYSQL_SSL_CERT = '/root/shadowsocks/client-cert.pem' MYSQL_SSL_KEY = '/root/shadowsocks/client-key.pem' MYSQL_SSL_CA = '/root/shadowsocks/ca.pem'
API_HOST = '127.0.0.1' API_PORT = 80 API_PATH = '/mu/v2/' API_TOKEN = 'abcdef' API_UPDATE_TIME = 60
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
/etc/init.d/supervisor restart
supervisorctl restart ssr
supervisorctl status
supervisorctl tail -f ssr stderr
ulimit -n 1024000 强化安全 1.将网站支持 SSL 强化安全
需要提前准备好 SSL 证书文件, 没有的话可以使用Let's Encrypt 搞个免费SSL证书, 接着配置 nginx
编辑 /usr/local/nginx/conf/vhost/域名.conf
server { listen 80; #listen [::]:80; #有ipv6的开 server_name 域名; rewrite ^(.*) https://$server_name$1 permanent; }
server { listen 443 ssl; #listen [::]:443 ssl; #有ipv6的开 ssl_certificate /etc/letsencrypt/live/你的域名/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/你的域名/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/你的域名/chain.pem; } 2.禁止 http 的访问请求
由于 http 仍然可以访问, 所以我们需要将 http 的请求手动转移到 https, 由于 SSpanel 本身使用了重定向, 那么在不使用其他重定向的情况下, 最简单的方法就是用 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 除了 59.168.1.0 至 59.168.1.24 的区间IP 与 59.168.2.50可以进入后台其于IP都封锁, 就算对方知道路径, IP不允许也是无法进入
59.168.1.0/24 是 1.1---1.254 并不是 59.168.1.0 至 59.168.1.24
参考
ss-panel-v3-mod安装说明
说明以及安装方法
Linux上iptables防火墙的基本应用教程