现在注册一个域名和购买一台服务器部署一个 Web 网站非常容易,现在流行的 Serverless 架构更是连服务器都不需要购买,直接在各个云厂商的后台点点鼠标就可以部署一个在线的 Web 程序,虽然相比传统建站的方式简单很多,但是也有考虑一些很基础因素和配置,这篇博文我讲以博客系统为例子讲解如何维护一个 Web 服务程序。现在有很多流行的博客系统,例如静态的 Jekyll、Hugo、Hexo,动态以 PHP 为首的 WordPress 系统,WordPress 有着完善的生态系统是世界上目前二次开发使用最多的 Web 系统,静态的博客可以部署在 Github Pages 和 Vercel 等,直接将编写好的网站源代码上传到免费的空间即可。而对于动态博客系统还说,需要 LNMP 环境的支持才能正常运行,现在也流行直接购买已经部署好的数据库环境和运行环境来跑博客,对于动态博客系统还是数据才是最重要的,这篇博客将介绍一些方法一名合格的站长该如何运维自己博客。


基础防御

博客系统存放在主机之上通过互联网提供世界各地访问,这些访客里面有普通人也有一些黑客,黑客可以利用博客程序的漏洞例如 XSS 和 SQL 注入漏洞来破坏程序,这对于博客系统安全有了新的要求。普通的静态博客完全可以不用管这些,但是对于 PHP 这类的动态脚本语言来说更需要关注,因为 PHP 是一门动态语言如果被黑客注入了恶意代码会导致程序数据泄露,严重的会破坏程序的运行,目前场景的作为就是在博客核心代码里面对用户输入的数据进行过滤或者做合法性校验,或者在 PHP 使用 disable_functions 配置项来禁用一些敏感函数,来保证程序安全性。

如果考虑不是在应用程序嵌入代码来做防御,可以使用一些带有代码注入攻击检查防御的网关产品,博客作为一种 Web 程序提供的服务是要经过 HTTP 网络请求的,可以考虑采用带有防御型的网关产品。例如 Cloudflare 它可以提供基于 SASE 和 SSE 平台,将网站的域名的 DNS 接入到 Cloudflare 并且使用它来解析服务网站,可以改善安全和韧性减少攻击参数传入到主程序中,国内也有长亭科技的 SafeLine 的 WAF 产品。

Cloudflare 并且提供 CDN 服务,可以隐藏真实的主机 IP 地址,也能确保域名和 DNS 设置的安全,防止域名劫持和 DNS 污染攻击。对于 HTTP 协议来说才有基于 TLS 安全层的 HTTP 协议,启用 SSL/TLS 证书,确保所有数据在传输过程中都是加密的,防止 Cookie 和 Session 信息被截取或篡改。

对于基于使用 LNMP 作为基础设施运行的系统,要考虑是不是使用的长期支持版本的软件,如果使用的不是长期支持的版本的软件,如果出现了漏洞,对于这些已经不维护的基础软件会很麻烦,不能得到相应的补丁更新。操作系统环境还是建议使用基于 RHEL 系列的 Linux 发行版本,现在 CentOS 已经是最优的,我推荐使用 Rocky Linux 这个系统是 CentOS 创始人创建的一个克隆 RHEL 的开源操作系统,是在 RHEL 的基础上进行重新编译的,该系统在很大程度上兼容 RHEL 版本的,并且可以通过相同的方式安装 RHEL 软件包,还能得到长期的更新支持。

当整个基础环境搭建完成之后,强烈不建议使用 root 账号去运行网站的基础设施,更应该创建一个专用的用户组和用户来运行对于的软件,这样即使黑客绕过前面的基层防护,也没有更高的权限去访问其他的数据和程序。服务器防火墙软件还是推荐使用目前主流的 firewalld ,这是 REHL 企业级的服务器管理软件,相比一些老的 iptables 来管理出入站流量复杂的操作更容易操作。不要开放不必要的端口,一个 Web 服务器最多开发基础的端口 80 、 443 、22 端口,其他端口可以一律禁止外部访问使用,最好的方式使用白名单 IP 的方式进行访问控制,通过跳板机进行管理。

对于 root 用户来说应该不使用 root 密码进登录,而使用基于 SSH 的非对称密钥进行登录,可以将登录电脑和被管理的服务器进行绑定,将公钥上传到远程服务器来进行登录管理。此外此种方式还要考虑私钥的安全性,不要将私钥公开,避免在页面或日志中输出敏感信息,如数据库凭据、API 密钥等。


数据备份

在线系统的核心是数据,这些数据一般会被存储在 MySQL 这些关系型数据库中,目前主流的动态博客系统数据都是存储在关系数据库中,前面提到黑客通过一些特殊的手段获取到了服务器执行权限,从而可能会导致数据库被拖库导致数据泄漏。对于数据库系统来说管理也是不推荐开放 root 权限给远程用户登陆,对于 Web 程序所依赖的数据库表所在数据库提供对于数据库账户来管理,并且取该账户的一些敏感权限例如删除数据表,添加新字段等,最后 Web 程序的 IP 和能被访问数据库 IP 白名单进行绑定,这样以免泄露了账户和密码也能阻挡恶意的用户远程连接到数据库。

建议在数据库中的敏感字段进行加密存储,并且定期对数据库的数据进行周期性备份。对于普通博客系统建议每天执行一次数据库备份计划,例如使用 crontab 进行周期性执行备份脚本,这个备份可以使用 mysqldump 这类工具部分,对其备份的数据可以考虑加密存储。前面所说的是传统备份,部分云厂商提供了主机快照功能,可以对整个主机的数据进行快照备份储存,当然要额外支付一些费用,不管以何种方式进行数据备份,最重要的是养成备份数据习惯,即使数据丢失也能通过备份数据恢复。


便宜 VPS vultr
最后修改:2024 年 04 月 04 日
如果觉得我的文章对你有用,请随意赞赏 🌹 谢谢 !