论服务器的制备

因为月租便宜,我的博客这两年以来一直都是托管在DigitalOcean的虚拟机上的。像我这种懒人一旦弄好了真的是没什么动力去重新布置,但是DO的线路实在差到令人发指,我开个ssh都有很高的延迟,基本属于完全没法用的状态。这么个情况,现在只好从DO迁出去。那么既然都要实操了,在等软件包更新的时候就顺便来聊聊我是怎么制备VPS的吧。

拿到机子了我们想到第一件事就是SSH,不只是你我,想偷你机子的人也是这么想的。SSH作为Un*x系平台最基础的操作入口基本上是稍不注意就要出大事的,一个比较典型的情况就是,很久没管vps,一登录发现有几千次登录尝试——这基本就是被人暴力试密码了……为了避免这种情况,我们进去先把密码登录给关了。

在vps提供商准备好机器前我们先准备好一对RSA密钥。如果以前没有用过SSH密钥的话可以临时生成一个。网上教程很多,不再赘述。生成好后将id_rsa.pub中的公钥信息复制好备用。

连上机器,先创建一个用户然后赋予其root权限。以后干活就以这个用户的身份来操作。

useradd [USERNAME]
passwd [USERNAME]
usermod -aG wheel [USERNAME]

切换到这个新用户,确认一下已经拿到了权限,不然一会禁了root登录发现没权限就麻烦了。

su - penguinliong
sudo ls -a

给SSH添加信任公钥。

mkdir .ssh && cd .ssh
nano .ssh/authorized_keys
[粘贴]
[Ctrl-O 保存]
[Ctrl-X 关闭]

这里我用nano只是我比较菜不会用vim。比较意外的是CentOS 7并没有自带nano,用之前可能要 yum install nano 装一下。另外需要注意的是 authorized_keys 这个文件对其权限有特殊要求:为了避免共享同一台机器的其他用户偷偷编辑 authorized_keys 造成数据泄露,写入权限只可以由登录的用户自己拥有。

现在另外开一个Putty,尝试用密钥登录一下。(在 Connection - SSH - Auth 设定id_rsa.ppk的位置)。如果出现无法访问的情况可以尝试修改一下权限:我这边 .ssh 目录的权限给的是 drwxr-xr-xauthorized_keys 给的是 -rw-r--r--

现在我们的公钥已经可以使用了,于是在 /etc/ssh/sshd_config 中找到以下几项配置修改。

PermitRootLogin no # 不允许root用户登录
MaxAuthTries 3 # 尝试次数上限三次
PasswordAuthentication no # 不允许密码登录
RSAAuthentication yes # 允许RSA密钥验证
PubkeyAuthentication yes # 允许公钥验证

重启 sshd 以应用新配置。

service sshd restart

我们已经完成了最基本的SSH配置,现在简单再配置一下防火墙。我目前在用CentOS 7,所以对应的防火墙工具是FirewallD。在别的操作系统会有不同的防火墙前端,但概念上还是大体相似的。首先启用FirewallD,看一下默认配置。

sudo systemctl enable firewalld
sudo firewall-cmd --list-all

囿于水平,我就往默认启用的public域里加规则了。暂时只启用HTTP和HTTPS这两个架博客用的端口。

sudo firewall-cmd --zone=public --permanent --add-service=http
sudo firewall-cmd --zone=public --permanent --add-service=https

最后重启防火墙确认一下规则都存下来了。

sudo firewall-cmd --reload
sudo firewall-cmd --list-all

其他的一些防火墙配置方面的知识可以参考DigitalOcean上的这篇博文这篇博文,个人觉得还是蛮有用的。

顺便一提,禁用端口或者服务绝对不要手滑把ssh禁了。