该包子被咬了5,283口 =皿=

话说搭的时候忘记写下来过程了,现在只能凭着残存的记忆来写一点主干的内容了。嗯就这样,因为我是OS X所以自带了SSH命令,所以WIN的小伙伴们自备连接工具。文章将分为以下几个部分:首先是整体思路,然后是主要的搭建过程,最后是一些个人感受。就这样,开工了。

首先你要有一个VPS,不然去哪里搭建呢……然后按照汤神的教程来搭建起LNMP。诶不是说好SSL么……这里不得不说,apt-get的nginx并没有ssl模块,想要的话,重新编译吧。然后就是重写配置文件。然后给自己颁发一个证书。测试ssl下的nginx是不是好的。然后开始安装多用户的ss然后接着测试。最后在上ss-panel做好nginx的配置以及数据库的配置就搞定了~【还有额外附加证书登陆服务器的内容哟~】

首先上汤神的教程部分。我省略的很多内容,只放上来命令部分好了。只要一条一条复制粘贴进去回车等待再重复就好了。【MySQL(也就是第3条)安装的时候要设定MySQL的root密码并确认。】【安装过程中有的地方会停下来征求你的意见,输入Y并回车就好了】

root@Server:~# apt-get update
root@Server:~# apt-get install nginx
root@Server:~# apt-get install mysql-client-5.5 mysql-server-5.5
root@Server:~# apt-get install php5 php5-fpm php5-cli php5-cgi php5-mysql php5-gd

以上LNMP就好了。快去浏览器里敲一下自己的IP试一下吧。看看有没有nginx的欢迎页面。

再让我们来搞定SSL这个问题。首先我们要重新编译nginx,然后给自己颁发证书。重新编译nginx的话还需要三个依赖库,分别是zlib, pcre, openssl。下面我们就来解决这些问题。

root@Server:~# cd ~
root@Server:~# wget http://zlib.net/zlib-1.2.8.tar.gz
root@Server:~# wget http://downloads.sourceforge.net/project/pcre/pcre/8.36/pcre-8.36.tar.gz
root@Server:~# wget http://www.openssl.org/source/openssl-1.0.2a.tar.gz
root@Server:~# wget http://nginx.org/download/nginx-1.7.12.tar.gz
root@Server:~# tar xzvf zlib-1.2.8.tar.gz
root@Server:~# tar xzvf pcre-8.36.tar.gz
root@Server:~# tar xzvf openssl-1.0.2a.tar.gz
root@Server:~# tar xzvf nginx-1.7.12.tar.gz

下载和解压就完成了,在编译安装之前我们还是要安装一下需要的程序的

root@Server:~# apt-get install gcc g++ make

现在我们开始挨个编译安装

root@Server:~# cd ~
root@Server:~# cd zlib-1.2.8/
root@Server:~/zlib-1.2.8#./configure
root@Server:~/zlib-1.2.8# make
root@Server:~/zlib-1.2.8# make test
【此处结果没有error就继续,下文的make test的返回结果都是没有异常再继续】
root@Server:~/zlib-1.2.8# make install

至此zlib就搞定了,然后同样的套路我们来安装pcre

root@Server:~/zlib-1.2.8# cd ~
root@Server:~# cd pcre-8.36/
root@Server:~/pcre-8.36# ./configure
root@Server:~/pcre-8.36# make
root@Server:~/pcre-8.36# make test
root@Server:~/pcre-8.36# make install

然后我们来继续搞定openssl,其实openssl可以用apt-get来搞定的,但是后面重新编译带ssl模块的nginx的时候要用到openssl的源码,所以我们也还是编译安装吧,反正都要下载的~

root@Server:~/pcre-8.36# cd ~
root@Server:~# cd openssl-1.0.2a/
root@Server:~/openssl-1.0.2a# ./config
root@Server:~/openssl-1.0.2a# make depend

【对这里有一个make depend,不得不说openssl的编译时间很长,所以耐心等待吧~】

root@Server:~/openssl-1.0.2a# make
root@Server:~/openssl-1.0.2a# make test
root@Server:~/openssl-1.0.2a# make install

然后,openssl也搞定了除了漫长的等待意外,还是很简单的吧。

对了,还要在/etc/profile结尾追加一下内容,我不管怎么追加,无论是下载下来修改再上传还是直接用vim修改……

export OPENSSL=/usr/local/ssl/bin
export PATH=$OPENSSL:$PATH:$HOME/bin

现在让我们来重新编译nginx。嗯,其实也蛮简单的,配置命令也是很容易看懂的,就这样。到时候直接复制粘贴就好了23333

root@Server:~/openssl-1.0.2a# cd ~
root@Server:~# cd nginx-1.7.12/
root@Server:~/nginx-1.7.12# ./configure --prefix=/usr \
--sbin-path=/usr/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--user=www-data \
--group=www-data \
--with-openssl=/root/openssl-1.0.2a \
--with-http_ssl_module \
--with-http_flv_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-pcre
root@Server:~/nginx-1.7.12# make

【注意,这里不要,我说的是不要make install!!】
然后nginx就编译好了带openssl的了,下面我们直接替换就好了。下面两步首先是备份老的nginx然后是替换新的nginx

root@Server:~/nginx-1.7.12# mv /usr/sbin/nginx /usr/sbin/nginx.old
root@Server:~/nginx-1.7.12# cp objs/nginx /usr/sbin/nginx

然后不放心的话就重启一下让新的nginx生效好了

root@Server:~/nginx-1.7.12# shutdown -r now

然后我们就有了带ssl的nginx。下面我们来给自己弄个证书好了~嗯,重新连上我们的服务器,开始给自己签发证书。

root@Server:~# cd /etc/nginx/

首先创建私钥

root@Server:/etc/nginx# openssl genrsa -des3 -out server.key 2048

回显:

Enter pass phrase for server.key:

【出现这一行的时候,要设定私钥的密码,并且一定要你输入4到1023个字符的】
接下来创建签名请求的证书

openssl req -new -key server.key -out server.csr
Enter pass phrase for server.key:
【这里要输入刚刚你设定的私钥的密码】

Country Name (2 letter code) [AU]:
【这里是要你输入两个字母的国家代码,直接回车就默认是AU。这里我们并不想透露什么信息,直接回车】

State or Province Name (full name) [Some-State]:
【这里是州或省的名称,同样的我们不想透露什么,还是直接回车】

Locality Name (eg, city) []:
【这里是填写地名,同样的我们不想透露什么信息,直接回车就好】

Organization Name (eg, company) [Internet Widgits Pty Ltd]:
【这里是组织名,直接回车就好,不用管】

Organizational Unit Name (eg, section) []:
【这里是组织里的单位名,照样不管,直接回车】

Common Name (e.g. server FQDN or YOUR name) []:
【注意!!!这里不要再无脑回车了,这里要填自己的域名的,(我不知道填IP地址能不能用,我填的是域名)再重复一遍,这里填的是域名!!!

Email Address []:
【同样的,这里不填直接回车】

A challenge password []:
【同样的,这里不填直接回车】

An optional company name []:
【同样的,这里不填直接回车】

好敷衍的一路回车就做好了,其实要注意的就是common name那里填写自己的域名,剩下的一路回车就好了呢。于是乎,CSR也搞定了。

然后我们要做一个nginx上用的没有口令的私钥

root@Server:/etc/nginx# cp server.key server.key.org
root@Server:/etc/nginx# openssl rsa -in server.key.org -out server.key

回显:

Enter pass phrase for server.key.org:

【这里填写最开始设定的密钥密码】

最后标记证书使用上述CSR和私钥

root@Server:/etc/nginx# openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

好啦,证书颁发完毕2333333【我觉得我越来越敷衍了】

现在配置nginx来使用SSL并且使80端口的http请求跳转到https。这里我不给具体操作的命令了,可以用各种方法来修改配置文件,等我心情好了再写吧。可以用winscp下载下来改好了在上传,也可以用filezilla连接sftp然后下载修改再上传,也可以用vim直接修改。后面的配置文件也都是直接给出文件内容吧。具体修改方法就不给了。

这里只展示nginx初始页面的配置文件/etc/nginx/sites-available/default,其他的配置大同小异融会贯通吧。

server {
listen 80;
server_name localhost;
rewrite ^(.*) https://$server_name$1 permanent;
}

server {
listen 443;
server_name localhost;
root /usr/share/nginx/html;
index index.html index.htm;
ssl on;
ssl_certificate /etc/nginx/server.crt;
ssl_certificate_key /etc/nginx/server.key;

location / {
try_files $uri $uri/ =404;
}
}

对了,差点忘了我们是ss教程,所以还是同时放一下ss的配置文件/etc/nginx/sites-available/ss,我的ss站点放在了……反正你看配置文件就知道了。localhost用自己的域名代替,没有的话我也不知道怎么办了,但是还没有域名的话,现在这一行最前面加上#

server {
listen 80;
server_name localhost;
rewrite ^(.*) https://$server_name$1 permanent;
}

server {
listen 443;
server_name localhost;
server_name_in_redirect off;
root /usr/share/nginx/ss;
index index.php index.html index.htm;
ssl on;
ssl_certificate /etc/nginx/server.crt;
ssl_certificate_key /etc/nginx/server.key;

location / {
try_files $uri $uri/ /index.php?q=$uri&$args;
}

location ~ \.php$ {
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/ss$fastcgi_script_name;
}
}

好,配置改完我们先测试一下所有的配置文件是不是正确了。要是出现错误多半是SSL那里没有搞好,返工吧……

root@Server:/etc/nginx# nginx -t

看到这样的返回信息表示没问题了

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

然后我们重启,不对,应该是平滑重启nginx

root@Server:/etc/nginx# nginx -s reload

然后赶紧去试一下,看看是不是http被强制跳转到了https,是不是可以正常访问。

然后我们大致配置一下MySQL,为后面的工作做一下准备。

root@Server:/etc/nginx# mysql -u root -p

然后会显示

Enter password:

这里输入安装MySQL时设定的root密码,然后会看到这样的提示符

mysql>

我们在后面的文章里同样省略这个提示符,这里只是告诉大家不必惊慌。

然后我们建立一个名叫shadowsocks的数据库

mysql> create database shadowsocks;

然后建立一个名为ss,密码为ss的MySQL用户,放心,这个用户只能本地登陆,弱口令就弱口令吧,哎……懒

mysql> grant all privileges on shadowsocks.* to ss@localhost identified by 'ss';

然后刷新系统权限表

mysql> flush privileges;

然后我们退出MySQL

mysql> exit;

到此我们的nginx就好了,MySQL也已经就绪了,下面我们来安装shadowsocks ss-panel supervisor【这到这里终于感觉看见了曙光但是我已经快疯了……】

下面就是安装一些依赖包什么的,我就不解释了,一步步来吧

root@Server:/etc/nginx# cd ~
root@Server:~# apt-get install python-pip git python-m2crypto
root@Server:~# pip install cymysql
root@Server:~# git clone -b manyuser https://github.com/mengskysama/shadowsocks.git
root@Server:~# cd shadowsocks/shadowsocks/

然后我们来修改配置文件/root/shadowsocks/shadowsocks/Config.py

#Config
MYSQL_HOST = 'localhost'
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

如果都是按照上面的步骤做的,这个配置文件就可以了,如果有变动的话,改一下就好了。同样的,我不管怎么编辑配置文件。

然后我们还要修改这个文件/root/shadowsocks/shadowsocks/config.json

{
"server":"0.0.0.0",
"server_ipv6": "[::]",
"server_port":8388,
"local_address": "127.0.0.1",
"local_port":1080,
"password":"m",
"timeout":300,
"method":"aes-256-cfb"
}

然后我们来导入数据库。同样的再进入MySQL

root@Server:~/shadowsocks/shadowsocks# mysql -u root -p
Enter password:
【这里输入MySQL的root密码】
mysql> use shadowsocks;
mysql> source /root/shadowsocks/shadowsocks/shadowsocks.sql;
mysql> exit;

然后跑一下ss的服务端看一看有没有问题

root@Server:~/shadowsocks/shadowsocks# python server.py

能跑起来,没有error的话,ctrl + c结束进程,我们进行下一步,安装守护进程,这样重启以后或者程序崩了还能自己重启。

root@Server:~/shadowsocks/shadowsocks# apt-get install python-pip python-m2crypto supervisor

然后新建文件,我也不管怎么弄,新建这个文件/etc/supervisor/conf.d/shadowsocks.conf,以下是文件内容

[program:shadowsocks]
command=python /root/shadowsocks/shadowsocks/server.py -c /root/shadowsocks/shadowsocks/config.json
autorestart=true
user=root

再新建这个文件/etc/supervisor/conf.d/cgi.conf,以下是文件内容

[program:cgi]
command=php5-cgi -b localhost:9000
autorestart=true
user=root

然后的命令

root@Server:~/shadowsocks/shadowsocks# service supervisor start
root@Server:~/shadowsocks/shadowsocks# supervisorctl reload

在以下两个文件

/etc/profile
/etc/default/supervisor

结尾追加

ulimit -n 51200
ulimit -Sn 4096
ulimit -Hn 8192

至此ss的后端服务已经搞定了,现在我们来搞定前端的页面

root@Server:~/shadowsocks/shadowsocks# cd /usr/share/nginx/
root@Server:/usr/share/nginx# wget --no-check-certificate https://github.com/orvice/ss-panel/archive/master.zip

对了,忽然忘记了还没有装解压软件,安一下就好了

root@Server:/usr/share/nginx# apt-get install unzip

然后开始解压

root@Server:/usr/share/nginx# unzip master.zip

然后删除压缩包

root@Server:/usr/share/nginx# rm-rf master.zip

然后重命名文件夹,如果上面nginx的配置文件用的是上面的,就执行如下命令,如果自己做了改动,那就自行调整

root@Server:/usr/share/nginx# mv ss-panel-master ss

现在来修改文件夹权限,我顺便吧自带的html文件夹也改了

root@Server:/usr/share/nginx# chmod 777 * -R /usr/share/nginx/html
root@Server:/usr/share/nginx# chmod 777 * -R /usr/share/nginx/ss
root@Server:/usr/share/nginx# chown -R www-data:www-data /usr/share/nginx/html
root@Server:/usr/share/nginx# chown -R www-data:www-data /usr/share/nginx/ss

现在访问以下应该有ss的欢迎页面了,我说的是设定好域名什么的以后…………这个就不在教程范围之内了,在上面的nginx的ss配置文件里用自己的域名替换localhost就好了

然后我们接着来导入数据库,还是进入MySQL

root@Server:/usr/share/nginx# mysql -u root -p
Enter password:
【这里输入MySQL的root密码】
mysql> use shadowsocks;
mysql> source /usr/share/nginx/ss/sql/invite_code.sql;
mysql> source /usr/share/nginx/ss/sql/ss_admin.sql;
mysql> source /usr/share/nginx/ss/sql/ss_node.sql;
mysql> source /usr/share/nginx/ss/sql/ss_reset_pwd.sql;
mysql> source /usr/share/nginx/ss/sql/user.sql;
mysql> exit;

然后我们来修改配置文件

root@Server:/usr/share/nginx# mv /usr/share/nginx/ss/lib/config-simple.php /usr/share/nginx/ss/lib/config.php

然后以下是配置文件/usr/share/nginx/ss/lib/config.php 的内容

<?php
/*
* ss-panel配置文件
* https://github.com/orvice/ss-panel
* Author @orvice
* https://orvice.org
*/
//定义流量
$tomb = 1024*1024;
$togb = $tomb*1024;
//Define DB Connection  数据库信息
define('DB_HOST','localhost');
define('DB_USER','ss');
define('DB_PWD','ss');
define('DB_DBNAME','shadowsocks');
define('DB_CHARSET','utf8');
define('DB_TYPE','mysql');
/*
* 下面的东西根据需求修改
*/
//define Plan
//注册用户的初始化流量
//默认5GiB
$a_transfer = $togb*5;
//签到设置 签到活的的最低最高流量,单位MB
$check_min = 1;
$check_max = 100;
//name
$site_name = "ss-panel";
$site_url  = "https://panel.com/";
//invite only
$invite_only = true;
//用户注册后获得的邀请码最低最高
//都设置为0用户就不能邀请
$user_invite_min = '1';
$user_invite_max = '1';
//mail-gun
// Get your key from https://mailgun.com
$mailgun_key = "";
$mailgun_domain = "";
//
require_once 'do.php';

反正都是有中文注释的,除了数据库部分按照自己心情改吧。

然后,重启大法好,让一切都生效

root@Server:/usr/share/nginx# shutdown -r now

至此,就差不多都讲完了……好累呀。。。

还有,可以时不时的用一下一下两条命令更新一下程序包什么的

root@Server:~# apt-get update
root@Server:~# apt-get upgrade

最后在附赠一点小内容,用私钥登陆ssh,这样就不用每次都输入密码了。我用的是类UNIX,所以自带了openssl什么的,windows下的小伙伴有兴趣可以百度,“winscp私钥登陆”也是一大堆教程的。那么我就来先说手UNIX和Linux下的方法,首先要有openssl,这是前提不表了。

打开终端【因为我已经创建过密钥了,我就不实际操作了,所以程序的输出内容我就不知道是什么了,所以……凑活看吧,不想我设置好的密钥被覆盖了……】

root@Local:~# ssh-keygen -t rsa

然后是保存位置,这里用默认位置,所以直接回车

然后是保护的密码,想设定就设定,不想就直接两次回车

然后就是把公钥复制到服务器上

root@Local:~# scp ~/.ssh/id_rsa.pub root@<ssh_server_ip>

然后登陆服务器

root@Server:~# cat id_rsa.pub >> ~/.ssh/authorized_keys

然后修改配置文件/etc/ssh/sshd_config到以下内容

# Package generated configuration file
# See the sshd_config(5) manpage for details
# What ports, IPs and protocols we listen for
Port 22
# Use these options to restrict which interfaces/protocols sshd will bind to
#ListenAddress ::
#ListenAddress 0.0.0.0
Protocol 2
# HostKeys for protocol version 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
#Privilege Separation is turned on for security
UsePrivilegeSeparation yes
# Lifetime and size of ephemeral version 1 server key
KeyRegenerationInterval 3600
ServerKeyBits 1024
# Logging
SyslogFacility AUTH
LogLevel INFO
# Authentication:
LoginGraceTime 120
PermitRootLogin yes
StrictModes yes
RSAAuthentication yes
PubkeyAuthentication yes
#AuthorizedKeysFile %h/.ssh/authorized_keys
# Don't read the user's ~/.rhosts and ~/.shosts files
IgnoreRhosts yes
# For this to work you will also need host keys in /etc/ssh_known_hosts
RhostsRSAAuthentication no
# similar for protocol version 2
HostbasedAuthentication no
# Uncomment if you don't trust ~/.ssh/known_hosts for RhostsRSAAuthentication
#IgnoreUserKnownHosts yes
# To enable empty passwords, change to yes (NOT RECOMMENDED)
PermitEmptyPasswords no
# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
ChallengeResponseAuthentication no
# Change to no to disable tunnelled clear text passwords
PasswordAuthentication no
# Kerberos options
#KerberosAuthentication no
#KerberosGetAFSToken no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
# GSSAPI options
#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes
X11Forwarding yes
X11DisplayOffset 10
PrintMotd no
PrintLastLog yes
TCPKeepAlive yes
#UseLogin no
#MaxStartups 10:30:60
#Banner /etc/issue.net
# Allow client to pass locale environment variables
AcceptEnv LANG LC_*
Subsystem sftp /usr/lib/openssh/sftp-server
# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication.  Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'.
UsePAM yes

然后,重启大法好

root@Server:~# shutdown -r now

嗯,差不多就这样了,以后就直接登陆无需密码了。

4 Thoughts on “安装配置ss Manyuser+ss-Panel+搭建SSL服务器+私钥登陆ssh

  1. 喵喵 on 2015年5月3日 at 22:06 said:

    看一眼,继续补作业

  2. 你们小孩子需要探索,就一个个源码编译好了,我这种老人家还是用lnmp.org吧

    • 汤包包 on 2015年12月5日 at 22:17 said:

      一键安装包不敢用,不是自己配置的出错都不知道错在哪儿。不过后来发现并不需要编译安装,很多时候还是几条命令就搞定的事情。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Post Navigation