最近发现了阿里云推荐好友送服务器活动: 若是未购买过云产品的新用户在其它用户的推荐下, 可以以99元/1年, 189元/2年, 279元/3年的优惠价租用型号为 ecs.t5-lc1m2.small 的服务器. 若推荐用户购买成功, 推荐者也可以获赠1人/3月, 10人/1年, 22人/2年, 34人/3年, 46人/4年, 58人/5年的同型号服务器.

因为我从未使用过阿里的云服务, 所以有幸可以享受这次福利. 我问一个同学要了阿里云的邀请码后, 花了279元开通了3年. 因头一次购买国内的VPS, 故在此记录一下装机配置过程.


如果你也想参加这次活动, 可以点击以下连接. 若想购买可以点击我的邀请链接我同学的邀请连接, 若仅查看活动细则或想推荐别人购买, 可以点击不带邀请码的连接.

卸载阿里云骑士

阿里云预装的系统镜像内置了阿里云骑士, 我个人有比较严重的"数据洁癖", 不太情愿在我买的服务器中运行不为我所控的程序. 再加上前些年阿里云盾误删用户数据一事给我带来的不信任感, 我决定将阿里云骑士卸载.

# 卸载阿里云盾
wget http://update.aegis.aliyun.com/download/uninstall.sh
chmod +x uninstall.sh
./uninstall.sh

# 卸载阿里云监控
wget http://update.aegis.aliyun.com/download/quartz_uninstall.sh
chmod +x quartz_uninstall.sh
./quartz_uninstall.sh

# 结束阿里云服务进程
pkill aliyun-service

# 删除残留程序文件
rm -rf /etc/init.d/agentwatch /usr/sbin/aliyun* /usr/local/aegis*

# 清除阿里云欢迎信息
echo '' > /etc/motd

屏蔽云盾IP

云盾会每隔一段时间扫描一遍我们的VPS以查找服务器部署服务的漏洞, 并告知用户. 看似是百利无一害的事, 但要知道, 阿里云盾只会告诉你哪里可能存在漏洞, 而委托阿里进行修复则需要另外收费. 况且若平时勤加维护, 按时更新和修补漏洞, 也可以达到防患于未然的效果.

我使用了 Linux 内核内置的 iptables 来限制指定的 IP 访问, 最新的阿里云盾 IP 可以从阿里云帮助文档查询.

# 屏蔽云盾 IP
iptables -I INPUT -s 140.205.201.0/28 -j DROP
iptables -I INPUT -s 140.205.201.16/29 -j DROP
iptables -I INPUT -s 140.205.201.32/28 -j DROP
iptables -I INPUT -s 140.205.225.192/29 -j DROP
iptables -I INPUT -s 140.205.225.200/30 -j DROP
iptables -I INPUT -s 140.205.225.184/29 -j DROP
iptables -I INPUT -s 140.205.225.183/32 -j DROP
iptables -I INPUT -s 140.205.225.206/32 -j DROP
iptables -I INPUT -s 140.205.225.205/32 -j DROP
iptables -I INPUT -s 140.205.225.195/32 -j DROP
iptables -I INPUT -s 140.205.225.204/32 -j DROP
iptables -I INPUT -s 106.11.224.0/26 -j DROP
iptables -I INPUT -s 106.11.224.64/26 -j DROP
iptables -I INPUT -s 106.11.224.128/26 -j DROP
iptables -I INPUT -s 106.11.224.192/26 -j DROP
iptables -I INPUT -s 106.11.222.64/26 -j DROP
iptables -I INPUT -s 106.11.222.128/26 -j DROP
iptables -I INPUT -s 106.11.222.192/26 -j DROP
iptables -I INPUT -s 106.11.223.0/26 -j DROP

# 应用 iptables 规则
iptables-apply

# 保存 iptables 规则
iptables-save > /etc/network/iptables.up.rules

# 启动自动载入规则
echo "pre-up iptables-restore < /etc/network/iptables.up.rules" >> /etc/network/interfaces

设置完成后, 最好重启一下服务器, 然后检查 iptables 规则是否生效.

# 重启
reboot now

# 查看 iptables 规则是否生效
iptables -L

除了使用 iptables 禁止 IP 段访问, 也可以在阿里云后台里的防火墙禁止这些 IP, 在 控制台 -> 云计算基础服务 -> 云服务器ECS -> 安全组 -> 配置规则 -> 添加安全组规则 中添加规则, 也可下载我导出的规则后, 自行导入到自己的安全组.

alifirewall.png

上述步骤执行完毕后, 阿里全家桶与你的服务器就再无关联. 但要注意, 保护隐私的同时, 也要相应的提高安全意识, 做好安♂全♀措♂施♀, 以防老王进入搬起石头打自己的脚.

启用密钥登陆

阿里云默认的登陆方式为密码登陆, 在设置弱口令的情况下十分的不安全. 启用密钥登陆可以有效的防止爆破, 而且还可以配置无需输入密码登陆服务器. 安全方便, 何乐而不为呢?

进入PuTTY 官网, 下载 PuTTY 套装, 打开 PuTTYgen, 密钥类型选择 ECDSA, nistp521 算法, 点击Generate.

putty.png

在服务器新建文件 /.ssh/authorized_keys, 内容为上一步 PuTTYgen 生成的 OpenSSH 格式的公钥(就是截图中那五行只读的, 类似乱码的字符串). 再点击 Save private key 保存私钥到安全且不宜遗失的位置.

编辑 /etc/ssh/sshd_config 文件, 添加配置:

HostKey /etc/ssh/ssh_host_ecdsa_key
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys

重启 sshd 守护进程, 在 PuTTY 的 Connection -> SSH -> Auth -> Authentication parameters 中选择之前保存的私钥文件后, 回到 Session 中登陆 ssh.

systemctl restart sshd

确保使用密钥可以正常登陆服务器后, 再禁止使用口令登陆. 编辑 /etc/ssh/sshd_config 文件, 添加配置:

PasswordAuthentication no
ChallengeResponseAuthentication no

重启 sshd 守护进程, 此时再用口令登陆服务器会被拒绝, 但密钥依然可用.

systemctl restart sshd

此时 ssh 就算配置好了. 顺便一提, 定时查看日志可以及早地发现服务器的部分安全问题. 比如查看是否有不是自己的 IP 登陆成功, 查看是否有爆破或是删除 log 的痕迹.

# 查看登陆成功日志
cat /var/log/auth.log | grep -i 'accepted'

# 查看登陆失败日志
cat /var/log/auth.log | grep -i 'received disconnect'

若一段时间内日志文件变得很大, 且含有大量登陆失败的日志, 可以尝试修改 ssh 端口来避免爆破. 在 /etc/ssh/sshd_config 文件中, 修改配置项:

# 修改为其它端口
Port 22

# 重启 ssh 守护进程
systemctl restart sshd

若想修改 ssh 端口, 不要忘了在防火墙中添加允许规则, 以防与服务器失联.

安装 BBR 网络加速

bbr 是 Google 开源的 TCP 优化拥塞控制算法, 可以一定成度上的提高传输效率. 在境外服务器等延时高/ 丢包多的网络环境下部署有立竿见影的效果. 即便在境内, 在地域跨度大或跨运营商的情况下, 也有一定的积极效果. Linux 在 4.9 以上版本的内核中内置这一算法, 只需修改配置文件启用即可.

先升级系统软件并更新内核到 4.9.* 以上, 最新内核信息可以前往 kernel.org 查看. 目前最新长期支持版是 4.14.34. 打开 ubuntu 内核官网查看对应版本号的内核安装包. 我这里选择了 amd64 架构的 generic 内核.

# 查看内核信息
uname -a

# 升级软件
sudo apt update
sudo apt upgrade

# 下载内核
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.14.34/linux-headers-4.14.34-041434_4.14.34-041434.201804120731_all.deb && \
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.14.34/linux-headers-4.14.34-041434-generic_4.14.34-041434.201804120731_amd64.deb && \
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.14.34/linux-image-4.14.34-041434-generic_4.14.34-041434.201804120731_amd64.deb

# 安装内核
sudo dpkg -i *.deb

# 重启
sudo reboot now

# 查看内核信息
uname -a

# 删除不再需要的软件包(包括旧内核)
sudo apt autoremove

启动 bbr 加速

# 添加配置
echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf

# 保存生效
sysctl -p

# 检查 BBR 是否启动
sysctl net.ipv4.tcp_available_congestion_control
lsmod | grep bbr

发现有输出字符, 且其中含有 bbr 即可.

性能

因为我的 VPS 继承了我的优良传统常年属于咸鱼状态, 所以平时我是不会为服务器进行跑分测试的. 不过考虑到可能有想了解性能的小伙伴, 故在此我下载了 UNIX Benchmarks 这款软件进行了一番基准测试, 方便大家参考.

========================================================================
   BYTE UNIX Benchmarks (Version 5.1.3)

   System: qd-ali1: GNU/Linux
   OS: GNU/Linux -- 4.13.0-37-generic -- #42~16.04.1-Ubuntu SMP Wed Mar 7 16:03:28 UTC 2018
   Machine: x86_64 (x86_64)
   Language: en_US.utf8 (charmap="UTF-8", collate="UTF-8")
   CPU 0: Intel(R) Xeon(R) Platinum 8163 CPU @ 2.50GHz (5000.0 bogomips)
          x86-64, MMX, Physical Address Ext, SYSENTER/SYSEXIT, SYSCALL/SYSRET
   11:07:28 up 3 days, 23:21,  1 user,  load average: 0.06, 0.02, 0.00; runlevel 5

------------------------------------------------------------------------
Benchmark Run: Tue Apr 10 2018 11:07:28 - 11:35:41
1 CPU in system; running 1 parallel copy of tests

Dhrystone 2 using register variables       28192647.1 lps   (10.0 s, 7 samples)
Double-Precision Whetstone                     3189.6 MWIPS (9.9 s, 7 samples)
Execl Throughput                               5123.9 lps   (30.0 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks        599266.0 KBps  (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks          168727.2 KBps  (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks       1419458.5 KBps  (30.0 s, 2 samples)
Pipe Throughput                              880416.2 lps   (10.0 s, 7 samples)
Pipe-based Context Switching                 191020.2 lps   (10.0 s, 7 samples)
Process Creation                              13154.3 lps   (30.0 s, 2 samples)
Shell Scripts (1 concurrent)                   8177.0 lpm   (60.0 s, 2 samples)
Shell Scripts (8 concurrent)                   1047.3 lpm   (60.0 s, 2 samples)
System Call Overhead                         769588.2 lps   (10.0 s, 7 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   28192647.1   2415.8
Double-Precision Whetstone                       55.0       3189.6    579.9
Execl Throughput                                 43.0       5123.9   1191.6
File Copy 1024 bufsize 2000 maxblocks          3960.0     599266.0   1513.3
File Copy 256 bufsize 500 maxblocks            1655.0     168727.2   1019.5
File Copy 4096 bufsize 8000 maxblocks          5800.0    1419458.5   2447.3
Pipe Throughput                               12440.0     880416.2    707.7
Pipe-based Context Switching                   4000.0     191020.2    477.6
Process Creation                                126.0      13154.3   1044.0
Shell Scripts (1 concurrent)                     42.4       8177.0   1928.5
Shell Scripts (8 concurrent)                      6.0       1047.3   1745.5
System Call Overhead                          15000.0     769588.2    513.1
                                                                   ========
System Benchmarks Index Score                                        1118.7

因无跑分经验, 所以不太清楚这款服务器的性能到底怎么样, 但去网上搜罗了一圈其它服务商 VPS 的 UnixBench 跑分, 这个分数大概比同配置的搬瓦工稍高, 与同配置 DigitalOcean 持平.

但要注意的是, 这台服务器是"性能突发型实例", 也就是说若是在长时间内高负荷使用CPU, 可能会导致性能下降. 具体可见阿里云帮助文档.

作为参考, 这次跑分共消耗了20余个CPU积分. 在跑分后无明显计算量的情况下, 大约 3 小时后累计 CPU 积分恢复到与跑分前大致相同.

chart.png

小结

279 人民币 3 年的价格真的是超值! 折合年付约15 美元, 真是便宜它妈给便宜开门, 便宜到家了. 要知道, 常年缺货的搬瓦工 10G KVM - PROMO 配置, 年付也得约 20 美元, 折合 3 年约 376人民币.

但我们也要注意, 除了此服务器为"性能突发型实例"外, 其服务器物理地址位于境内. 这样可玩性也会大大降低, 比如带宽小(1M公网带宽), 需备案(无备案不允许对外提供 Web 服务), 无法访问被中国政府屏蔽的内容等.

至于这台服务器究竟怎么用, 我暂时还没有太多想法, 目前搭建了一个内网穿透(Frp)服务, 一个代理(ShadowSocks)服务. 分别用于在外面远程控制办公室里的电脑和隐藏自己的 IP. 如果有除了做 Web 服务器之外的好想法, 欢迎大家留言.

至于为什么不做 Web 服务器?

备案这方面, 备案是不可能备案的, 这辈子不可能备案的.