在 128MB 内存的 VPS 上搭建 SSR

偶然上车,发现的一个 15 元/月的 C3-VPS,但是内存只有 128M,普通的 CentOS 在这个内存下运行很艰难,于是使用了 Debain 搭建


1、VPS 环境

很普通的 Debain 7.11 x64,128MB 内存,1 核 CPU

2、搭建流程

2.1、锐速部分

wget -N --no-check-certificate https://github.com/91yun/serverspeeder/raw/master/serverspeeder.sh && bash serverspeeder.sh

2.2、加密部分

apt-get install build-essential -y
wget https://github.com/jedisct1/libsodium/releases/download/1.0.12/libsodium-1.0.12.tar.gz
tar xf libsodium-1.0.12.tar.gz && cd libsodium-1.0.12
./configure && make -j2 && make install
ldconfig

2.3、SSR 部分(参见 WIKI

apt-get install python-pip -y
apt-get install git -y
git clone -b manyuser https://github.com/shadowsocksr/shadowsocksr.git
cd shadowsocksr
bash initcfg.sh
vi userapiconfig.py
修改 sspanelv2mudbjson,这样可以避免使用 Mysql 减少资源占用,不过需要额外用命令 python mujson_mgr.py 去管理用户了,数据库文件则是 mudb.json
vi user-config.json
删除其中的 ipv6 的条目 "server_ipv6": "::", 否则会监听在 IPV6 端口上

2.4、配置最大文件打开上限

vi /etc/rc.local
在 exit 0 上面添加 ulimit -n 512000 一行内容并保存即可

2.5、配置进程守护

apt-get install supervisor
安装 supervisor 进程守护

vi /etc/supervisor/conf.d/shadowsocksr.conf
配置 supervisor 进程守护条目,添加以下信息

[program:shadowsocksr]
command = nohup /usr/bin/python /shadowsocksr/server.py m >> /var/log/shadowsocksrrun.log
autostart = true
autoresart = true
startsecs= 30
redirect_stderr= true
user = root
stderr_logfile = /var/log/shadowsocksrerr.log
stderr_logfile_maxbytes= 10MB
stdout_logfile = /var/log/shadowsocksrout.log
stdout_logfile_maxbytes= 10MB

supervisorctl reload
使用命令重加载配置文件

supervisorctl status
查看进程状态,RUNNING 状态为正常状态。


3、防火墙整改

VPS 搭建完毕了,但是没有防火墙能叫安全么?由于 Debain8.6 系统的防火墙 iptables 不能使用 service 命令调动,而且初始状态是没有配置文件的。

但我们最好先将 iptables 防火墙清空配置

iptables -F
清空防火墙配置

iptables -L
查看防火墙配置

vim /etc/iptables.test.rules
创建防火墙自定义规则表,添加以下条目(没什么问题就用官方推荐的规则列表吧)

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -p tcp -m state --state NEW -m tcp --dport 53 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8888 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

确认都 OK 后,使用命令 iptables -L 查看配置是否运行。
(注意 22 端口是 SSH 端口,需要开放,以及允许规则条目必须在 REJECT 之上才能生效)
(可以自行添加其他端口,可以使用 : 批量管理端口,比如 100:199 这样替换掉 8888 的位置即可)

iptables-restore < /etc/iptables.test.rules
命令解释:将防火墙规则从自定义规则表导入

现在,iptables 可以算配置好了,但是重启后会发现配置并没有加载。所以我们需要让配置每次重启时都再次加载

vim /etc/network/if-pre-up.d/iptables
命令解释:创建一个脚本自动加载防火墙配置

#!/bin/bash
/sbin/iptables-restore < /etc/iptables.up.rules

最后,将这个脚本赋予执行权限即可。
chmod +x /etc/network/if-pre-up.d/iptables


4、最后要注意的事

如果磁盘有空间,就多配些到 Swap,让系统运行更稳定些(可以的话给 1G)

wget 下载 github 文件的时候可能会提示证书不被信任,最快的方法就是本地上传文件再安装(才 2MB 也不费事)

虽然端口开了,防火墙允许了,但是最好修改 SSH 端口到别的端口,强化 VPS 的安全

128MB 内存虽然运行一个 SSR 比较充裕,但是跑 LNMP 就很困难了,而且平时会存在不稳定情况,时刻注意内存占用 (命令 free -m)

不过还是可以利用一下,比如运行个 KMS 之类的程序

点赞