距离上次迁移到vultr的云服务器上已经快一年了。但黑五的时候以较优惠的价格购买了绿云(greencloud)的服务器,加之vultr的服务器确实有那么一点小贵,因此就迁到了绿云的服务器上。

本次迁移服务器没什么可说的,和上次比有了更多的经验。这次迁移服务器使用了wordpress插件updraftplus的备份与还原功能,获得了较好体验,不像上次那样发现媒体库丢了什么的。而这个这个插件的使用也挺简单的,属于按提示来有手就会的那种,因此也没什么可说的。本次维护笔记的重点就放在绿云服务器的前期准备上(话说到这,绿云这家是真的,嘛也没有,真就只给一个服务器)。

服务器的准备主要分了两部分,一部分是SSH连接的布置,这一块在之前的文章技术笔记(一)有了一部分的说明,因此在这篇笔记中主要侧重于安全性上的一些设置:更换SSH连接端口和设置数次登录失败拉黑IP。第二部分是服务器防火墙的设置。先讲后一部分,因为第一部分会用到第二部分的内容。

一. 设置服务器防火墙:iptables

由于绿云提供的服务器使用iptables管理防火墙而非通常centOS 7所用的firewalld,那就用iptables吧。iptables有所谓的四表五链之类的结构,但作者这里只用到了对INPUT表的管理,其他仨都差不多,无非换一下参数。

首先是查询当前防火墙规则:

iptables -nvL --line-numbers

其中 n,v--line-numbers 参数是可选的。n 参数代表不对ip地址进行反查; v 参数代表列出详细信息;--line-numbers 代表给规则按顺序编号,方便修改和删除。

然后我们如果对当前的防火墙规则绝望了想推倒重来,可以使用如下命令清空INPUT表的规则:

iptables -F INPUT

使用如下代码添加规则:

iptables -WHERE INPUT -p protocol -s ip -dport port_number  -j ACTION

其中,-WHERE 参数应换成 -A (添加到表的末尾)或 -I (添加到指定位置,未指明位置时放在第一条)。之所以要强调位置,是因为iptables应用规则时,由第一条规则开始匹配,当匹配到适用的规则时就停止并应用这条规则。 -p 可选,用以指定匹配的协议; -s 可选,用以指定应用的ip地址; -dport 参数可选,用以指定应用的服务器端口。ACTION ACCEPT, REJECT, DROP 里面选择,分别代表接收包、拒绝包和丢弃包。例如,我们想要屏蔽SSH默认使用的22端口,可以使用这一命令来添加规则:

iptables -A INPUT -p tcp --dport 22 -j DROP

并使用这一命令开放我们设置的xxxxx端口(具体是那个端口怎么会说出来呢):

iptables -A INPUT -p tcp --dport xxxxx -j ACCEPT

如果某条规则不需要了,可以使用如下命令删除:

iptables -D INPUT n

其中 n 就是之前所说的通过 --line-numbers 显示的该规则的编号。我们不可能针对65535个端口依次设置规则,因此可以应用这一命令添加默认规则:

iptables -P INPUT ACTION

但这里的 ACTION 似乎不包括 REJECT ,不知道哪出了错。 最后,以上命令所生成的规则只在iptables本次运行期间生效,因此我们需要将其保存下来,如若服务器重启后能方便的重建规则。centOS提供了很方便的命令:

service iptables save

用以保存规则,同时通过该命令保存的规则会在iptables重启后自动调用。

应用以上命令,可以方便的构建防火墙,只开放tcp、http、https、ssh、phpmyadmin使用的端口和icmp协议。

二. 更换SSH连接端口, 设置数次登录失败拉黑IP

自购买本服务器来,总有傻逼想要通过爆破root密码的方式黑掉我的服务器。因此,作者三管齐下,使用(1)更换SSH连接端口(2)禁止密码登录(3)设置数次登录失败拉黑ip的方式来阻止这些人的邪恶企图。当然,更保险的是再禁止root用户远程连接,但这对云服务器而已代价有点大,因此算了。前两条路都涉及修改sshd_config文件,因此放在一起讲。

首先,我们需要找到sshd_config文件,它一般在/etc/ssh文件夹里,用vi也好下载下来修改也好,总之找到这一行代码:

#port 22

选一个和其他程序不冲突的端口号,比如65535(你猜我服务器的ssh端口是不是这个呢?),然后将它添加在这行代码下面,即:

#port 22
port 65535

这样就将SSH的端口改成了65535。如果你不放心,担心万一失败了,不仅65535连不上,22也连不上怎么办,那就可以先删去22端口前的#,等成功了再添回去。

然后找到

PasswordAuthentication yes

并将yes改为no,从而禁止密码登录。然后,使用iptables将65535端口打开并关闭22端口:

iptables -A INPUT -p tcp -dport 65535 -j ACCEPT
iptables -A INPUT -p tcp -dport 22 -j DROP

当然,第二行代码也可以等试验成功了之后再运行。不要忘记保存防火墙规则。理论上来讲已经行了,但实际还不行,因为还需要向SELinux中添加修改的SSH端口。首先安装SELinux的管理工具semanage和依赖包:

yum provides semanage
yum -y install policycoreutils-python

完成后,使用命令:

semanage port -a -t ssh_port_t -p tcp 65535

添加端口。可以使用这一命令来确认已添加了:

semanage port -l | grep ssh

最后,重启SSH服务:

systemctl restart sshd.service

而对于设置多次登录失败拉黑ip,主要利用了他人的脚本,这样的脚本在网络上随处可见,就不多说了。其主要思路是,通过比对SSH的log,提取失败的ip,然后添加到host.deny文件中。再利用crontab定时执行脚本,达到一定时间内多次登录失败拉黑ip 的目的。

经过以上三步,至少到目前为止作者的服务器没有再经历类似的攻击了。

关于迁移云服务器,就是按部就班的备份原服务器,在新服务器上安装lnmp,安装wordpress,设置域名解析,设置https,用备份在新服务器上还原,最后一切无误后销毁原服务器。

就是这样,gravertino来到了新的世界。

后记:写了一天半的命令行,设置了一天的新主题,敲了一晚上键盘,有点恶心,就这样吧,睡了。