VPS使用教程——安全篇
本文最后更新于21 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com

新买的 VPS,就像一间毛坯房:门锁是默认的、窗户没关、邻居还全是陌生人。如果直接拎包入住,既不安全也不舒适。我们得先换一把只有自己知道的锁、关上不必要的窗户、再装上基本家具。这篇指南,就是你的 VPS”入住装修清单“——只需跟着走一遍,就能把空荡荡的 root 权限,调教成一座安安稳稳的数字小窝。

零、准备工作

首先,我们以root用户身份登录到服务器。root是Linux系统中的超级管理员,拥有最高权限。

ssh root@你的服务器IP地址

连接过程中,系统可能会询问你是否信任该主机的指纹,输入yes并回车。接着,输入你的初始密码。成功登录后,你将看到服务器的命令行欢迎信息。

一、首次登录与更新系统

登录后的首要任务是更新系统。 这可以确保所有已安装的软件包都打上了最新的安全补丁。

# 更新软件包列表信息
sudo apt update

# 升级所有已安装的软件包
sudo apt upgrade -y

这里的 -y 参数会自动确认所有升级提示,节省时间。

二、创建新用户并授予管理员权限

一直使用root用户操作服务器是一个非常危险的习惯。任何误操作都可能对系统造成毁灭性打击,并且它也是黑客们最喜欢攻击的目标。因此,我们需要创建一个新的日常使用账户,并赋予它sudo权限(即在需要时临时获取管理员权限)。

1、创建一个新用户

adduser your_username
# 将 your_username 替换为你想要的用户名

2、授予sudo权限

usermod -aG sudo your_username
# 这条命令将新创建的用户添加到了sudo用户组,使其能够执行管理员命令

3、验证新用户

现在,退出root登录,然后用你的新用户名重新登录:

ssh your_username@你的服务器IP地址

登录后,尝试执行一个需要sudo的命令来验证权限是否生效,比如更新软件包列表:

sudo apt update

系统会要求你输入你自己的密码(而不是root密码)。如果命令成功执行,说明权限配置正确。

三、加固SSH服务,提升安全性

SSH是我们远程管理服务器的唯一入口,保护好它至关重要。

1、禁用root用户远程登录

既然我们已经有了sudo用户,就应该禁止root直接通过SSH登录。 用你喜欢的文本编辑(如 nano 或 vim)打开SSH配置文件。nano对新手更友好。

sudo nano /etc/ssh/sshd_config

在文件中找到 PermitRootLogin 这一行,修改为 no

PermitRootLogin no
# 如果这一行前面有 #,请将 # 删除。

2、(强烈推荐) 更改默认SSH端口

SSH默认使用22端口,这使得它成为自动化扫描和攻击的首要目标。

通过更改端口,可以有效避开大部分的自动攻击。 在同一个配置文件 (/etc/ssh/sshd_config) 中,找到 #Port 22 这一行。

首先去掉 #,然后将 22 改成一个不常用的端口号(范围建议在 1024-65535 之间,例如 2584)。

Port 2584

重要提示: 在修改端口后,请务必先配置好防火墙(如果有的话)并允许新端口通过,否则你可能会将自己锁在服务器外面

3、应用更改

保存文件并退出 (nano中按 Ctrl+X, 然后按 Y, 最后按回车)。接着,重启SSH服务让配置生效。

sudo systemctl restart sshd

不要立即关闭当前的SSH连接! 打开一个新的终端窗口,尝试用新的端口新的用户名登录,确保一切正常。

ssh -p 新端口号 your_username@你的服务器IP地址
# 示例: ssh -p 2255 your_username@192.0.2.1

确认新连接成功后,再关闭旧的连接。

四、配置基础防火墙

防火墙是服务器的第一道防线。UFW (Uncomplicated Firewall) 是一个非常易于使用的防火墙管理工具,使用系统底层的iptables进行设置。

1、安装UFW

sudo apt install ufw

2、设置默认规则

先禁止所有传入连接,允许所有传出连接。这是一个安全的基准。

sudo ufw default deny incoming
sudo ufw default allow outgoing

3、允许必要的连接

我们需要允许SSH、HTTP和HTTPS的流量进入。

首先是SSH端口:

sudo ufw allow 2584/tcp

如果你计划部署网站,也需要允许HTTP和HTTPS:

sudo ufw allow http  # 80端口
sudo ufw allow https # 443端口

4、启用防火墙

sudo ufw enable

系统会警告你这可能会中断现有连接,输入y确认。因为我们已经允许了SSH端口,所以连接不会中断。

5、检查防火墙状态

sudo ufw status verbose

这将显示所有规则和防火墙的当前状态。

五、安装Fail2ban防御工具

1、创建自定义配置
复制默认配置文件:

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

2、编辑配置文件

sudo nano /etc/fail2ban/jail.local

常见配置参数:

[DEFAULT]
ignoreip = 127.0.0.1/8  # 白名单IP
bantime = 3600          # 封禁时长(秒)
findtime = 600          # 检测时间段(秒)
maxretry = 5            # 最大尝试次数

[sshd]                  # SSH服务配置
enabled = true          # 启用监控

3、重启服务

sudo systemctl restart fail2ban
sudo systemctl enable fail2ban  # 开机自启

查看一下状态:

sudo fail2ban-client status

检查封禁列表:

sudo fail2ban-client status sshd

六、设置系统时间

将系统时间设置为北京时间,推荐使用 timedatectl 命令。

北京时间的正确时区标识符是 Asia/Shanghai。您看到的错误消息是因为该工具要求使用较旧、不太常见的 POSIX 格式,但现代系统使用 Area/Location 格式。

这是大多数现代 Linux 发行版(如 Ubuntu、Debian、CentOS 和 Fedora)的标准系统范围方法。

1、设置时区

在您的终端中运行以下命令。您可能需要 sudo 权限。

sudo timedatectl set-timezone Asia/Shanghai

2、验证更改

您可以通过运行以下任一命令来检查更改是否成功:

timedatectl

这将向您显示本地时间、世界标准时间 (UTC) 和当前设置的时区。

或者简单地:

date

输出现在应该显示 CST(中国标准时间)和正确的时间。

七、使用SSH密钥登录(可选)

远程管理服务器的标准做法,它比密码登录更安全、更便捷。下面是一份详尽的指南,将带你完成从生成密钥到实现免密登录的全过程。

这个过程分为两个主要步骤:

  • 在你的本地电脑(客户端)上生成密钥对。
  • 将公钥上传到你的服务器(服务端)。

1、在你的本地电脑上生成SSH密钥对

你需要先在自己的电脑(而不是服务器)上操作。密钥对由一个私钥和一个公钥组成:

  • 私钥 (id_ed25519): 必须严格保密,留存在你的本地电脑上,相当于你的“身份证明”。
  • 公钥 (id_ed25519.pub): 可以安全地分享,需要被放置在你想登录的服务器上,相当于一把“锁”。

A、打开终端

  • macOS / Linux: 打开“终端” (Terminal) 应用。
  • Windows: 打开 Windows Terminal, PowerShell, 或 Git Bash。

B、运行密钥生成命令

我们使用 ssh-keygen 命令来生成密钥。推荐使用现代且安全的 Ed25519 算法。

Bash

ssh-keygen -t ed25519 -C "your_email@example.com"
  • -t ed25519: 指定密钥类型为 Ed25519。如果你的系统很老不支持,可以换成 rsa -b 4096
  • -C "your_email@example.com": 添加一段注释,通常用邮箱来标识这个密钥是谁的、用在哪台电脑上,方便管理。

C、根据提示操作

运行命令后,系统会问你几个问题:

  • Enter file in which to save the key (…):提示你保存密钥的位置。直接按回车即可,它会使用默认路径(通常是 ~/.ssh/id_ed25519)。
  • Enter passphrase (empty for no passphrase)::提示你为私钥设置一个密码(Passphrase)。这是一个非常重要的安全层!
    • 强烈建议设置密码: 即使你的电脑被盗,私钥文件泄露,没有这个密码,别人也无法使用它。
    • 不设置密码: 直接按回车。登录时会更方便,但安全性稍低。
  • Enter same passphrase again::再次输入你设置的密码进行确认。

2、将你的公钥复制到服务器

要实现免密登录,你需要把刚刚生成的公钥 (id_ed25519.pub) 的内容,添加到服务器上你希望登录的那个用户的 ~/.ssh/authorized_keys 文件中。

以下介绍两种方法,强烈推荐使用方法A

方法 1:使用 ssh-copy-id (最简单、最推荐)

这个命令会自动完成所有操作,包括在服务器上创建目录、设置文件和修正权限,能有效避免手动操作的失误。

A、执行命令

将 your_username 替换成你在服务器上的用户名,server_ip 替换成服务器的IP地址。

Bash

ssh-copy-id your_username@server_ip
  • 如果你修改过SSH端口,可以使用 -p 参数:ssh-copy-id -p 端口号 your_username@server_ip
  • 如果你的密钥不在默认路径,可以使用 -i 参数:ssh-copy-id -i ~/.ssh/my_other_key.pub your_username@server_ip

B、输入服务器密码

系统会提示你输入 your_username 这个用户在服务器上的密码。这是你最后一次需要用密码登录。

输入密码后,命令会自动将你的公钥内容追加到服务器的 ~/.ssh/authorized_keys 文件中。

方法 2:手动复制粘贴 (当没有ssh-copy-id时)

如果你的本地电脑(比如某些Windows环境)没有 ssh-copy-id 命令,就需要手动操作。

A、在本地电脑上,显示并复制公钥内容

cat ~/.ssh/id_ed25519.pub

终端会显示一长串以 ssh-ed25519 ... 开头的文本。完整地复制这一整行

B、用密码登录到你的服务器

ssh your_username@server_ip

C、在服务器上,将公钥写入 authorized_keys 文件

登录服务器后,执行以下命令:

# 确保 .ssh 目录存在
mkdir -p ~/.ssh

# 将你复制的公钥内容粘贴到这里,然后回车
echo "在这里粘贴你的公钥内容" >> ~/.ssh/authorized_keys

# 修正关键的目录和文件权限,这一步至关重要!
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

注意: 如果权限不正确(例如过于开放),SSH为了安全会拒绝使用密钥登录。700意味着只有你自己能读、写、执行该目录,600意味着只有你自己能读、写该文件。

还可以使用一些SSH客户端(如XShellMobaXterm)能直接在客户端里面生成本地的密钥对,生成后能直接一键导入到服务器中,也是非常方便。 像 Termius 这样能够云端同步的SSH客户端能够让你在不同设备上使用同一套密钥对,每次换不同设备,都不再需要重新生成密钥并添加到服务器里,有着极大的便利性还能集中管理多个和VPS和密钥信息。不过如果你的账号验证信息被泄露,那么你的全部密钥都遭殃,VPS也都能被访问

3、测试与收尾

A、测试免密登录

退出服务器 ,然后再次尝试登录:

ssh your_username@server_ip

如果一切顺利,系统会直接让你登录,而不会再询问密码。如果你设置了密钥的密码(Passphrase),此时会提示你输入该密码。

B、(重要) 禁用密码登录

确认密钥登录成功后,为了达到最高的安全性,应该在服务器上禁用密码登录,只允许密钥登录。

a、在服务器上编辑SSH配置文件:

sudo nano /etc/ssh/sshd_config

b、找到 PasswordAuthentication 这一行,去掉前面的 #,并把值改为 no

PasswordAuthentication no

c、同时,可以确认 PubkeyAuthentication 是 yes (通常默认就是)。

d、保存文件 (Ctrl+XYEnter) 并重启SSH服务。

sudo systemctl restart sshd

警告:在执行这一步之前,务必确保你的密钥登录已经测试成功。否则,一旦禁用密码登录,你将无法再登入你的服务器!

现在,你的服务器就配置好了高度安全的密钥登录方式。

感谢观看,如有错误请指正
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇