VPS 服务器初始安全配置

VPS 是Virtual Private Server(虚拟专用服务器)的缩写,也称虚拟专用服务器或 VPS 主机。

简介

VPS 就像是我们在互联网上租用的一台虚拟计算机。它有自己的操作系统、处理器、内存和存储空间,就像是一台真正的电脑一样。我们可以在这台计算机里安装软件、托管网站、运行应用程序等等。

同时,这台计算机24小时开机,我们可以通过互联网随时随地的访问这台计算机,就像是远程控制一台电脑一样。

VPS 的虚拟技术

既然是虚拟计算机,就用到了虚拟技术,目前主流的VPS虚拟技术主要有两种:虚拟化技术容器化技术

  • 虚拟化技术

目前最常见的VPS虚拟技术之一。通过在物理服务器上创建多个虚拟机来实现。每个虚拟机都像是一台独立的计算机,具有自己的操作系统、处理器、内存和存储空间。常见的虚拟化软件包括VMware、KVM(Kernel-based Virtual Machine)和 Hyper-V 等。 这种技术使得多个 VPS 可以在同一台物理服务器上共存,而彼此之间完全隔离,就像是独立的服务器一样。这种隔离性可以提高安全性和稳定性。

  • 容器化技术

容器化技术是另一种VPS虚拟化技术,它将应用程序及其所有依赖项打包到一个独立的容器中。这些容器可以在相同的操作系统内核上运行,但彼此之间是完全隔离的。常见的容器化技术包括 Docker 和 Kubernetes 等。 与传统虚拟化相比,容器化技术更加轻量级和灵活,因为它们共享宿主操作系统的内核,减少了资源开销。

初始配置

对于全新的 VPS(尤其是海外 VPS )往往就只有一个最小化的系统,我们要使用它进行网站托管、运行应用程序等等,就需要对其进行一些简单的配置,增强一下安全性。

更换国内源 (可选)

注意:此步主要针对国内服务器,海外服务器可以忽略此步。另外,部分国内云服务商提供的系统已经默认进行替换。

以替换 Debian 12 默认软件源为 中国科技大学镜像源 为例:

编辑 /etc/apt/sources.list 文件

sudo nano /etc/apt/sources.list

将内容替换为:

# 默认注释了源码仓库,如有需要可自行取消注释
deb http://mirrors.ustc.edu.cn/debian bookworm main contrib non-free non-free-firmware
# deb-src http://mirrors.ustc.edu.cn/debian bookworm main contrib non-free non-free-firmware
deb http://mirrors.ustc.edu.cn/debian bookworm-updates main contrib non-free non-free-firmware
# deb-src http://mirrors.ustc.edu.cn/debian bookworm-updates main contrib non-free non-free-firmware

# backports 软件源,请按需启用
# deb http://mirrors.ustc.edu.cn/debian bookworm-backports main contrib non-free non-free-firmware
# deb-src http://mirrors.ustc.edu.cn/debian bookworm-backports main contrib non-free non-free-firmware

Ctrl+x 离开,

询问是否保存,按 Y 保存,

Enter 回车确认文件名。

注:其他系统和版本可在 中国科技大学 页面自行查阅。

更新和升级服务器软件包

  • 更新软件包列表
sudo apt update
  • 升级已安装的软件包
sudo apt upgrade

同步时间

不正确的日期和时区,会生成错误的时间戳,对安全,计划任务,日志和审计乃至数据库等多方面造成影响,所以,首先要做的就是同步时间。

检查服务器的当前时区

date

如果与当前时间不符,则需要修改为自己所在地时间

sudo timedatectl set-timezone "Asia/Shanghai"

其中 Asia/Shanghai亚洲/上海 的意思,根据自身所在地进行修改即可。

手动设置时间 (可选)

当系统时间出现不准确或不匹配预期时,可能需要手动校正时间

sudo date --set="YYYY-MM-DD HH:MM:SS"

其中,“YYYY-MM-DD” 代表日期,“HH:MM:SS” 代表时间。例如,要将时间设置为2099年9月9日13:50:00,可以运行:

sudo date --set="2099-09-09 13:50:00"

创建新用户

sudo adduser <username>

注意将 <username> 替换为你希望创建的新用户的用户名。比如:sudo adduser wuyanzu

赋予新账户 sudo 权限

sudo usermod -aG sudo <username>

注意将 <username> 替换为你创建的新用户的用户名。比如:sudo usermod -aG sudo wuyanzu

验证权限

sudo -l

配置密钥登陆

首先,切换到新建的用户

su <username>

配置密钥登录可以提高 SSH 登录的安全性。相比于传统的基于密码的登录方式,密钥登录更加安全,因为它使用了公钥加密技术,不需要在网络上传输密码。

  1. 生成 SSH 密钥对

可以使用 PuTTYgen(Windows)、OpenSSH(macOS)等图形化工具或者代码来生成密钥对:

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

其中"your_email@example.com"作为注释用,按需进行修改

  1. 将公钥添加到服务器

将生成的公钥( id_rsa.pub 文件的内容)添加到服务器的 ~/.ssh/authorized_keys 文件中

  • 创建 .ssh 目录:
mkdir ~/.ssh
  • 设置 .ssh 目录的权限(非常重要): SSH 对权限非常敏感,如果权限不正确,密钥认证会失败。.ssh 目录必须只能由该用户自己访问。
chmod 700 ~/.ssh

chmod 700 设置权限为:

所有者(用户自己):读、写、执行 (rwx = 4+2+1 = 7)

所属组:无权限 (--- = 0)

其他用户:无权限 (--- = 0)*

  • 创建或编辑 authorized_keys 文件:
nano ~/.ssh/authorized_keys
  • 设置 authorized_keys 文件的权限: 这个文件也需要严格的权限,只允许所有者读写。
chmod 600 ~/.ssh/authorized_keys

chmod 600 设置权限为:

所有者(用户自己):读、写 (rw- = 4+2+0 = 6)

所属组:无权限 (--- = 0)

其他用户:无权限 (--- = 0)

  1. 配置服务器 SSH 服务

编辑 /etc/ssh/sshd_config 文件,启用密钥登录,并禁用密码登录

# 启用公钥认证
PubkeyAuthentication yes

# 禁用密码认证
PasswordAuthentication no
  1. 重新加载 SSH 服务
sudo systemctl reload sshd

加固 SSH 配置

为了提高系统的安全性和稳定性,建议在 VPS 上创建一个普通用户账户,并在需要时使用 sudo 或 su 命令来执行需要特权的操作,而不是直接使用 root 账户。

更改 SSH 端口

默认情况下,SSH 使用 22 端口进行通信,我们知道别人也知道。所以,一些入侵者通常会尝试通过自动扫描大量服务器的默认端口来进行暴力破解攻击。更改 SSH 端口可以使得攻击者难以发现 SSH 服务的位置,从而减少暴力破解的风险。

  1. 备份原始配置文件
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config_backup
  1. 编辑 SSH 配置文件
sudo nano /etc/ssh/sshd_config
  1. 找到 Port 配置项并将端口号改成其他,比如:2222
Port 2222
  1. 保存并退出

编辑完成后,同样按下 Ctrl + X 保存并退出编辑器,根据提示选择是 Y 保存修改。

禁止 Root 账户使用 SSH 登录

  1. 编辑 /etc/ssh/sshd_config 文件
sudo nano /etc/ssh/sshd_config
  1. 在文件中找到 PermitRootLogin 选项,将其设置为 no。
PermitRootLogin no
  1. 保存并退出

  2. 重启 SSH 服务

sudo systemctl restart sshd

开启防火墙

  1. 安装 UFW (如果尚未安装)

大多数基于 Debian/Ubuntu 的系统(如 Ubuntu)默认可能已安装 UFW。如果未安装,或者想确认,可以运行:

sudo apt install ufw -y

(对于 CentOS/RHEL 系统,通常默认使用 firewalld。虽然也可以安装 UFW,但使用系统默认的防火墙工具通常更方便。)

  1. 设置默认策略 (大部分情况下是默认开启的)

拒绝所有不请自来的入站连接

sudo ufw default deny incoming

允许所有出站连接 (VPS 主动发起的连接)

sudo ufw default allow outgoing
  1. 允许 SSH 连接 (极其重要!)

在启用防火墙之前,必须先允许 SSH 连接,否则将立即失去对 VPS 的 SSH 访问权限!

如果已经将 SSH 端口更改为其他端口 (例如 2222)

sudo ufw allow 2222/tcp
  1. 允许其他需要的服务端口

根据需求放行 VPS 相应的端口。以下是一些常见示例:

# 允许 HTTP (端口 80)
sudo ufw allow 80/tcp
# 允许 HTTPS (端口 443)
sudo ufw allow 443/tcp

原则:只开放确实需要的端口。 对于每个 allow 规则,最好明确指定协议 (/tcp 或 /udp)。

  1. 启用 UFW 防火墙
 sudo ufw enable
  1. 检查防火墙状态和规则

确认防火墙已激活,并且规则设置正确。

sudo ufw status verbose

输出应该类似这样:

Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW IN    Anywhere           # 或者你的自定义 SSH 端口
80/tcp                     ALLOW IN    Anywhere           # 如果你允许了 HTTP
443/tcp                    ALLOW IN    Anywhere           # 如果你允许了 HTTPS
22/tcp (v6)                ALLOW IN    Anywhere (v6)      # 对应的 IPv6 规则
80/tcp (v6)                ALLOW IN    Anywhere (v6)
443/tcp (v6)               ALLOW IN    Anywhere (v6)
  • 确保 Status: active
  • 确保 Default: deny (incoming)
  • 检查 To 列中是否包含了你允许的所有端口,并且 Action 是 ALLOW IN

也可以使用 sudo ufw status numbered 来查看带编号的规则,方便以后按编号删除规则。

启用 Fail2Ban

Fail2Ban 是一个用于防范恶意登录尝试和其他恶意行为的开源软件。它通过监视系统日志文件来检测恶意行为,并根据预先定义的规则采取措施来阻止这些行为。

  • 安装 Fail2Ban
sudo apt install fail2ban

安装完成后输入输入 fail2ban --version 进行检查确认

  • 配置规则 /etc/fail2ban/jail.conf
sudo nano /etc/fail2ban/jail.local
  • 启动 Fail2Ban 服务
sudo systemctl start fail2ban
  • 添加开机自启动
sudo systemctl enable fail2ban
  • 检查 Fail2Ban 状态
sudo systemctl status fail2ban

额外防护程序

除了基本的安全配置外还有其他一些额外的防护程序可选,包括但不限于:

  • 实施入侵检测系统(IDS)和入侵防御系统(IPS)来监控和防御网络攻击。(比如:Suricata)

  • 配置 Web 应用程序防火墙(WAF)以防范Web应用层面的攻击。(比如:NAXSI,ModSecurity)

  • 使用 DDoS 保护服务来抵御分布式拒绝服务攻击。(比如:Cloudflare)

初始安全配置是确保 VPS 安全运行非常关键的一步,应当引起重视。同时,有一些第三方工具比如:宝塔面板,1panel面板等提供了可视化界面,大大的降低了配置的难度。但是在提供便捷的同时也会占用一部分服务器资源,自行取舍即可。

最后,务必做好备份和快照。确保有备无患!