在 Linode VPS 上将服务器系统由 CentOS 7 改为 openSUSE Leap 15

在 Linode VPS 上将服务器系统由 CentOS 7 改成了 openSUSE Leap 15。这篇博文记录的是之前将 Linode VPS 上的服务器操作系统从 CentOS 7 改为 openSUSE Leap 15 的过程。就是现在这个水景一页博客所在的服务器,基于 Apache、MariaDB、PHP 和 PHP-FPM

前情提要

今天要维护服务器,照例先搜索自己网站上的记录,才发现并没有把之前在 Linode VPS 上配置 openSUSE Leap 服务器的记录整理上来。倒是先把迁移 Let’s Encrypt 证书的过程发布了。这还是两年多以前的事情了。费了好大劲才从自己电脑里找出来之前的笔记,看起来应该基本上算是很完整了,干脆抽点时间发布出来,以后再在这个基础上面慢慢完善。

安装 openSUSE Leap 的时候,Leap 15.2 还没有发布,所以下面记录都是按照 openSUSE Leap 15.1 系统来的。不过根据后来升级到 openSUSE Leap 15.2 以及再升级到 openSUSE Leap 15.3 的经验来看,安装配置过程应该没有什么不同。

哎,现在 openSUSE 15.4 都已经发布了,又该升级了。再等几天吧。实在是太忙了。

背景

最开始安装网页服务器的时候,采用了众口相传的 CentOS 作为操作系统。网上都说服务器就需要鲁棒、稳定和安全。而且因为流行,网上关于 CentOS 相关的安装、配置和优化的文章也多,有问题也容易找到解决方法。但是十来年的时间下来,软件更新越来越快,CentOS 的更新总是落后太多。更新周期长肯定会导致每次更新变化大。不能用上较新的技术倒还好,最怕的是碰上 CentOS 的大版本更新,前后变动太大,几乎需要从头再来,升级更新还不如重装系统快

随着 CentOS 8 发布已经过去快一年了,但是因为个人时间不充裕,又害怕 CentOS 大版本升级过程中的麻烦,一直没敢升级/重装。可是 WordPress 不断更新之后对 PHP 也有要求了,原来凑合着在 CentOS 上使用 Remi 更新的 PHP 也不好用了。

RHEL 7 到 RHEL 8 的升级有自动工具可用,但是基于 RHEL 的 CentOS 却没有支持。从网络上多个信息来源看,从 CentOS 7 升级到 CentOS 8 是不太可行的,而且不受官方支持。更何况对于处于生产状态的系统来说,还有很多后期的应用和配置更可能带来问题。既然如此,升级这一路径就不考虑了。鉴于近年来对 openSUSE 这一发行版越来越熟悉,而且 openSUSE 社区对系统无故障升级这件事情一直都很支持,我决定将系统改为 openSUSE Leap。

对于个人网站这样的小服务器来说,还是应该考虑向易于维护倾斜一下最好,在可靠和便捷之间取个更好的平衡点。这些年拿滚动发行版的 openSUSE Tumbleweed 作为个人电脑操作系统,体会到其实社区的测试还是很可靠的。不过 Tumbleweed 如果用来做服务器的话还是让人有些顾虑。相对平稳的 openSUSE Leap 就是个非常合适的选择了。考虑到桌面和家用服务器都是 openSUSE,就趁着这个时候把 Linode VPS 的操作系统给换成了 openSUSE Leap。同时也借此机会好好整理一下服务器上的配置文件并做备份。仔细考虑了一下,要完成的工作还是挺多的。

迁移路径

还是要利用云服务的便利性的。大致思路如下。

  1. 新建一个 Linode VPS,在上面安装和配置 openSUSE Leap 系统的网页服务器,同样基于 LAMP 搭配(Linux、Apache、MariaDB、PHP);
  2. 根据旧的系统上的配置提前将 LAMP 及网站程序配置好并测试服务器状态;
  3. 迁移网站文件和数据库,并测试网站工作状态;
  4. 利用 Linode 的交换 IP 工具完成新旧服务器的更替。

当然也可以制定详细的迁移方案和步骤,将步骤写成 bash 脚本来实现自动化执行以缩短迁移时间。准备好了之后,当前的主机关机,另开一个磁盘安装 openSUSE Leap 15,同时挂载现有的系统盘作为数据盘,使用 bash 脚本完成迁移。前后也不过就十来分钟的事情。这样操作比较考验细心程度,万一考虑不周或者脚本中有错误,那就难以估计耗时了。

新开一个 Linode VPS,安装和配置 openSUSE Leap

为了减轻后续维护工作的麻烦程度,尽量不大动系统默认配置。

首先,使用 Linode 官方提供的方案部署安装 openSUSE Leap 系统。

其次,修改 SSHD 服务器配置。

防火墙禁用默认的 22 端口,因为端口扫描和暴力破解的操作太多了,不胜其烦。

# firewall-cmd --remove-service=ssh --permanent

增加 sshd 监听端口(假设是 1234 端口),

# sed -i '/^#AddressFamily\sany/i Port 1234' /etc/ssh/sshd_config

防火墙允许新端口,

# firewall-cmd --zone=public --add-port=1234/tcp
# firewall-cmd --zone=public --add-port=1234/tcp --permanent

禁止 root 用户登录,

# sed -i 's/PermitRootLogin\syes/#PermitRootLogin yes/g' /etc/ssh/sshd_config

关闭 X11Forwarding,

# sed -i 's/X11Forwarding\syes/#X11Forwarding yes/g' /etc/ssh/sshd_config

为服务器上的一般用户配置 SFTP Jail(这个暂时不展开了。

最后,SSH 最好还是使用证书登录

第三,配置防火墙。

防火墙组合使用 iptables + ip6tables + firewalld。看任务,捡顺手的工具完成任务就行。

系统默认的策略是拒绝所有入站连接,所以我们需要开启需要的服务/端口,并对这些服务和端口进行监测以阻挡/减轻常见的攻击。太高级的咱也想不到,小服务器估计也没人看得上来霍霍。只要别把自己挡在 VPS 外面,剩下的都可以以后慢慢来。

参考之前的安全策略:

还可以考虑增加的防火墙项目有下面这些。

为自己需要的系统服务开启特定端口,特别是 SSH 开启防火墙端口,这事儿绝对不能忘记了。

为下面这些服务/连接设定新建连接速率限制,

  • ssh 端口 1234
  • web 服务端口 80/443
  • phpmyadmin 也可以另外设定一个端口

检查并封禁常见的问题连接,

  • drop_syn_flood
  • drop_non_syn_new_tcp
  • drop_ping_of_death
  • drop_port_scan
  • drop_spoofing
  • drop_win_forwarding

对一些特定标记的连接直接丢弃,速率限制等等,可参考,

  • https://linuxgazette.net/108/odonovan.html
  • https://unix.stackexchange.com/questions/76271/iptables-recent-module
  • https://serverfault.com/questions/682045/source-ip-rate-limiting-in-iptables-hashlimit-vs-recent
  • https://superuser.com/questions/1071656/whats-the-difference-between-iptables-state-and-ctstate

还可以使用大名鼎鼎的 Fail2Ban。

第四,系统参数优化。

不知道是 Leap 还是 Linode 的定制,很多系统参数已经优化过了,不需要理会。

sysctl 的自定义配置可以放在 /etc/sysctl.d/local.conf,管它有没有,摸一下就可以了,

# touch /etc/sysctl.d/local.conf

然后就是这些参数了(忘记从哪里借鉴过来的了),

# cat >> /etc/sysctl.d/local.conf <<\EOF
#SYN
sysctl -w net.ipv4.tcp_max_syn_backlog=2048
sysctl -w net.ipv4.tcp_syncookies=1
sysctl -w net.ipv4.tcp_synack_retries=2
#Spoofing
sysctl -w net.ipv4.conf.all.rp_filter=1
sysctl -w net.ipv4.conf.default.rp_filter=1
sysctl -w net.ipv4.conf.eth0.rp_filter=1
sysctl -w net.ipv4.conf.lo.rp_filter=1
EOF

安装并配置 Apache + MariaDB + PHP + PHP-FPM + phpMyAdmin

这个条目内容较多还是单独写到一篇博文里吧:在 openSUSE Leap 中安装配置 Apache + MariaDB + PHP + PHP-FPM 网页服务器 LAMP

配置 DKIM 进行邮件认证以及加密服务器发出的电子邮件

为了保证迁移系统发行版不会对原来的服务造成影响,类似于 DKIM 这样的用于邮件认证的服务也需要迁移。好在不同的发行版上配置的方式几乎没差别。

可以参考之前的博文,

  • http://cnzhx.net/blog/encrypt-outbound-mail-on-server/
  • http://cnzhx.net/blog/implementation-of-dkim-on-centos-7/
  • https://www.linuxbabe.com/redhat/set-up-opendkim-centos-8-rhel-8
  • https://wiki.archlinux.org/index.php/OpenDKIM

配置完成后可以在这里 https://www.mail-tester.com/spf-dkim-check 检查配置的结果。

配置自动化任务

自动化系统和用户任务包括两类,systemd timer 或者系统 crontab 中实现的。crontab 给出的时间虽然不如 systemd timer,但是胜在操作简单。当然还需要准备好相应的 bash 脚本。

包括自动更新系统、自动更新软件、检查服务器日志等等。

迁移网站资源、数据库、Let’s Encrypt 配置等

对于文件类的资料,比如网站文件、导出的数据库文件等等,既可以通过 SSH 来传输(scp),也可以通过直接将老系统的虚拟硬盘挂到新系统上来实现(Linode VPS 允许这样的操作)。

Let’s Encrypt 证书的迁移前面已经写过了。

测试访问

到这里应该已经弄得差不多了,可以测试一下新服务器上的网站是否能够正常工作。当然不能去修改 DNS 解析。在本地修改 /etc/hosts 就可以达到目的。

# echo "${新IP地址} ${域名}" >> /etc/hosts

交换 IP

仍然不需要修改 DNS 解析。Linode 允许给位于同一个数据中心的两个 VPS 交换 IP,即时生效。

在 Linode 控制面板中,切换到这个虚拟主机的详情页面,然后 Network,然后下方的 IP Address 里面有个 IP Transfer。这就是交换 IP 的地方了。

还有个 IP Sharing 是用来将一个虚拟主机作为另一个主机的“备胎”的。也就是正在工作的主机出问题时候,就会由另一个主机接手。感觉更像是负载均衡的一种用法。

交换完成后注意检查一下虚拟主机中是否有跟 IP 地址有关的设置没有自动调整的。例如 检查 /etc/hosts 中的 IPv4 是否正确。

至于 IPv6 地址,可以等重启系统后再配置新的 IPv6。反正现阶段真正用 IPv6 的就没多少。

后记

依稀记得当时做这个迁移花了很多时间。先沙盘推演,写好 bash 脚本,然后一气呵成。其实呢,当时主要是觉得多开一个 Linode 虚拟主机太浪费。还是穷啊 :D

话说回来,这本来就是个挺复杂的活。那么多年了,整个系统并没有经常性的去维护。有时候时间一长就不记得做了些什么。还有个问题就是,有时候偶尔的心血来潮的改动并没有做记录。这就导致大动作之前需要仔细检查一下。所以说正规的服务器维护都应该有详尽的日志自有他的道理。©

本文发表于水景一页。永久链接:<http://cnzhx.net/blog/switch-to-opensuse-leap-from-centos-on-linode-vps/>。转载请保留此信息及相应链接。

1 条关于 “在 Linode VPS 上将服务器系统由 CentOS 7 改为 openSUSE Leap 15” 的评论

  1. 引用通告: 将 Let’s Encrypt 证书迁移到新系统 | 水景一页

雁过留声,人过留名

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

特别提示:与当前文章主题无关的讨论相关但需要较多讨论求助信息请发布到水景一页讨论区的相应版块,谢谢您的理解与合作!请参考本站互助指南
您可以在评论中使用如下的 HTML 标记来辅助表达: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>