服务器/VPS安全防护策略,保护好你的小鸡!

文章已同步至【博客】,欢迎访问【主页】😃

文章地址:blog.fanjunyang.zone/archives/se...

为什么要做安全防护?

服务器(包括VPS,即虚拟专用服务器)是存储和处理数据的重要设备,它们通常承载着网站、应用程序、数据库等关键服务。

安全防护是一个庞大而复杂的课题。几乎所有的网站、应用、服务等基础设施都建立在 Linux 基础之上,其背后涉及巨大的经济利益和商业价值。以至于黑灰产有巨大的攻击动力,安全无小事,不仅是生活上的,还存在于互联网上。

服务器/VPS,与个人电脑不同,它24小时开机,拥有公网IP,意味着任何人都可能访问你的服务器。这相当于置身于安全攻防战场的第一线,直面各种潜在风险。

然而,由于知识和信息的不足,一些新手对安全问题的态度存在两极化:

  • 有人觉得安全问题微不足道,与自己无关;
  • 有人则感到十分重要,认为安全问题重于泰山;

对于前者 :安全无小事,尽量学习更多安全方面的信息,避免在遭受损失后才追悔莫及; 对于后者:不必过分紧张,我们的服务器不具有太高的价值,一般不容易成为高水平攻击的目标(攻击者也是需要成本的),通常需要面对的是一些自动化脚本的恶意扫描和登录尝试。

面对哪些风险?

安全防护底线的四要素:【IP 地址】+【端口】+【用户名】+【密码】

任何人知道这四个要素,都能登录你的服务器,或者针对你的服务器进行攻击。

分析:

  1. 【IP 地址】:恶意脚本会随机尝试和扫描 IP 段,可以简单认为是公开信息、无法或者极难隐藏
  2. 【端口】:暴露的一些默认端口,例如:80、443、22等
  3. 【用户名】:如果使用默认的用户名,那么就是 root
  4. 【密码】:密码一般是后台随机生成或者是你自行设置的

如果你的服务器都是默认设置,则四要素中的三个已经是已知的,那么你整个服务器的安全,就全部寄托在一串小小的密码上了,这时会有几种情况:

  1. 如果你用了服务器管理后台随机生成密码,它一般包含随机的十几个大小写混杂的字母和符号,相对比较安全。
  2. 如果你为了好记、把密码改成了类似 123456 这种超弱的密码,破解你的服务器可谓不费吹灰之力。
  3. 如果你为了好记、把密码改成了比较复杂、但在别的地方用过的密码,其实也并不安全。你要明白黑客手里有作弊器,比如说密码表,包含数万、数十万、数百万甚至更多曾经泄漏的真实密码。
  4. 你要明白,没有哪个黑客真的要坐在电脑前一次一次的尝试你的密码,全部的攻击尝试都是恶意脚本自动进行的,它会 24 小时不眠不休的工作。也许每天你酣睡之时,你的服务器都在经受着一轮又一轮的冲击。
  5. 别忘了,购买服务器时大概率需要使用真实的支付信息,你登录各种网站、社交平台时也会留下你的 IP 地址,这些都与你的身份有直接或者间接的关系。于是,一旦这些坏事发生,它们就会不可避免地与你产生关联。

一旦你的密码被成功撞破,意味着你的四要素全部被攻击者掌握,恶意脚本就会快速登录服务器、获取服务器的最高 root 控制权、安装部署恶意服务,然后就可以用你的服务器来 24 小时做各种坏事(比如挖矿、传播病毒、发送垃圾邮件、欺诈邮件、做 BT 中继、甚至暗网活动......)。

如果恶意脚本比较克制,其实可以做到相当的隐蔽性,而你一般也不会去观察留意 服务器 的登录记录、进程变化、CPU 占用变化、流量变化等指标,很难发现自己被黑了。直到你的服务商封禁你的账号、或者收到律师函、或者去警局喝茶为止。

所以,可以跟着下面的教程,来给我们的服务器做一些基础的安全防护(能杜绝大部分问题,除非有人特意针对你)。

安全防护

本文以 Debian 系统为例,Ubuntu 系统操作类似,CentOS 系统会有些不一样,请自行搜索相关内容。

强烈安利大家使用 Debian 或者 Ubuntu 系统,因为 CentOS 系统官方早都不维护了,会有很多漏洞。

推荐系统:Debian > Ubuntu >>>>> CentOS

更新包

任何涉及到安装的操作之前,先更新一下我们安装包的索引,可以的话,顺便更新一下软件。这本身也是安全的一部分,新的软件意味着更少的漏洞。

sql 复制代码
apu update

apt upgrade

更改端口

一般我们的服务器登录端口都是 22 (部分厂商默认端口非 22),当然也可以修改为其他端口。

bash 复制代码
vim /etc/ssh/sshd_config

在打开的文件中找到 Port 这一项,并修改它的端口,Port 后面的数字就是 SSH 的端口,一般建议把它改成一个大于 1024 小于 65535 的整数(本文以 9999 为例)

yaml 复制代码
# -------------- 其他配置 -------------------
# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented.  Uncommented options override the
# default value.

Port 9999
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::

# -------------- 其他配置 -------------------

如果这一行被注释了,那么解开注释修改即可

修改完毕保存后,重启 ssh 服务,使变更生效:

复制代码
service sshd restart

如果测试新 端口 已经生效并且能正常登录,那么以后就可以用新配置的 端口 登录了,例如:

swift 复制代码
ssh 用户名@服务器IP -p 9999

更改密码

密码分为两种:

  • 密码登录
  • 密钥登录

如果不想那么麻烦,其实用复杂密码 即可(如果想爆破 16 位数复杂密码,恐怕至少要花费数亿年,但是这些密码基本上无法记忆,手动输入也很麻烦,不过在常用设备上保存即可)

如果你的密码过于简单,那么你可以去下面网站,生成一个复杂的密码:

复制你生成的密码,服务器输入下面命令:

复制代码
passwd

然后会让你输入新密码、确认密码,粘贴即可(注意:Linux 输入密码是不会显示的),修改成功后,就可以用新密码登录了。

除了密码,也可以用密钥登录,流程如下:

  1. 生成SSH密钥对: 在本地计算机上生成一对 SSH 密钥,其中包括私钥(通常保存在本地)和公钥(上传到服务器)。可以使用以下命令生成 SSH 密钥:

    css 复制代码
    ssh-keygen -t rsa -b 2048

    在这个过程中,系统会询问你密钥的保存位置,默认为 ~/.ssh/id_rsa

  2. 将公钥上传到服务器: 将生成的公钥复制到你希望进行 SSH 登录的目标服务器上。你可以使用以下命令将公钥上传到服务器:

    bash 复制代码
    ssh-copy-id user@hostname

    或者,如果没有ssh-copy-id命令,你可以手动复制公钥内容到服务器的~/.ssh/authorized_keys文件中:

    bash 复制代码
    cat ~/.ssh/id_rsa.pub | ssh user@hostname 'cat >> ~/.ssh/authorized_keys'

    注意:确保目标服务器的 ~/.ssh 目录和 authorized_keys 文件的权限设置正确。通常,这两者的权限应该是 700600,分别表示只有所有者具有读写执行权限。

  3. 测试SSH连接: 确保配置成功,通过SSH连接到服务器:

    bash 复制代码
    ssh user@hostname

    系统会提示你输入密钥密码,而不是服务器密码。如果一切设置正确,你应该能够成功连接到服务器。

  4. 禁用密码登录(可选): 一旦你确认密钥登录正常,你可以选择禁用密码登录以增加安全性。在 SSH 服务器 /etc/ssh/sshd_config 配置文件中,将 PasswordAuthentication 设置为no,然后重启 SSH 服务。

    bash 复制代码
    PasswordAuthentication no

    之后,记得重新启动SSH服务:

    bash 复制代码
    service ssh restart

更改用户

首先你要理解, Linux 系统中的 root,不仅仅是一个管理员账号那么简单。它是整个系统的【根基】、是系统的主宰、至高无上的神。一旦 root 账号出现安全问题,整个系统都只能任人鱼肉、无处可逃。

设置步骤

  1. 新增一个用户并设置登录密码,这里以 jyadmin 为例

    adduser jyadmin

执行命令后,根据提示操作即可。请务必设置一个用户密码,之后系统会询问你一些附加信息,可以无视,一路回车即可。

  1. 安装 sudo 功能(sudo 就是在关键时刻,让普通账户临时获得 root 的权限)
bash 复制代码
# Debain默认没有,Ubuntu自身应该是已经有安装的
apt update && apt install sudo
  1. jyadmin 用户加入 sudo 名单里,让他有资格借用 root 的权限

    visudo

User Privilege Specification 下加入一行 jyadmin ALL=(ALL) NOPASSWD: ALL 即可。

特别说明的是 NOPASSWD 这个设置,它的意思是 jyadmin 用户临时使用 root 权限时,不用额外输入密码。这与一般的安全建议相反。 之所以如此推荐,是因为很多新人不顾危险坚持使用 root 账号就是因为用 root 时不用重复输入密码、觉得轻松。"两害相权取其轻",我认为【直接用 root 用户的风险】大于【使用 sudo 时不用输密码的风险】,所以做了以上的建议。 如果你希望遵守传统习惯、每次使用 sudo 时需要输入密码,那么这一行改成 jyadmin ALL=(ALL:ALL) ALL 即可。

  1. 禁用 root 登录
bash 复制代码
vim /etc/ssh/sshd_config

找到 PermitRootLogin Yes 这一项,然后把它后面的设定值改为 No ,保存退出即可。

重启 SSH 服务

复制代码
service sshd restart
  1. 再次远程登录,root 用户已经无法连接

用户名就要换成 jyadmin 了,密码用这个账号的密码

kotlin 复制代码
ssh jyadmin@服务器IP -p 9999

防火墙设置

  • 如果是国内的服务器,一般都有 安全组,可以无需设置防火墙,使用的时候放行所需端口即可。
  • 如果是国外的服务器,没有安全组,默认端口全部放行,这时候就需要使用防火墙工具。

如果是 Debian 或者 Ubuntu 系统,可以使用 ufw

如果是 CentOS 系统,可以使用 firewalld,强烈建议弃用 CentOS 系统,官方早已经不维护了,会有很多漏洞无法修复。

如果你使用 ufw,又使用 Docker,你会发现 Docker 不遵守 ufw 规则。

具体的 ufw 安装使用方式,以及解决 Docker 不遵守规则问题,可以看我的文章:Linux ufw(防火墙)使用指南,解决ufw和docker冲突问题,保护你的服务器/VPS

其他安全问题

还有就是建议大家定期备份数据,这样即使服务器被攻击、文件被删,也可以把损失降到最低,不要出现下面情况:

《你的数据我们已备份,请在 X 小时内支付 0.05 个比特币(BTC)到指定地址:xxxxxxxxx,否则,我们将删除您的数据且不可恢复!》

PS:我哭死,他竟然用 "您"。

至于服务器的备份方式,可以使用 rclone 工具进行备份,教程:Rclone数据同步&备份神器如何安装及常用的设置语法功能

上面说的都是服务器相关 的设置及安全问题。 如果搭建网站,也会有安全问题,比如 XSS 攻击,DDOS 攻击,CC 攻击。

具体可以参考文章:【网络安全】网站被攻击了怎么办?怎么防护DDOS、CC、XSS、ARP等攻击?

最后

通过以上的步骤,你的服务器已经获取了很大部分的安全保障,虽然称不上固若金汤,但一般的恶意脚本应该已经无法对你造成伤害了,后续我也会分享更多的网络安全知识

再次警告大家:维护互联网安全,切勿攻击他人服务,同样保护好自己服务,共同建设安全可信的网络环境。

参考文章:blog.laoda.de/archives/ho...

相关推荐
剑神一笑3 小时前
Linux pgrep 命令详解:按名称查找进程 PID 的高效方法
linux·运维·chrome
剑神一笑3 小时前
Linux killall 命令详解:按进程名批量终止进程的原理与实践
linux·运维·chrome
红尘散仙4 小时前
我把终端小说阅读器接上了 AI Agent:TRNovel 现在能用 skill 生成书源了
人工智能·后端·rust
卷毛的技术笔记5 小时前
告别硬编码!Spring AI Alibaba 实现 AI Agent 智能工具调用(Tool Calling)
java·人工智能·后端·python·spring·ai编程
会编程的土豆5 小时前
Go 语言反射(Reflection)详解
开发语言·后端·golang
喵个咪6 小时前
GoWind Toolkit Go后端代码生成 完整全流程实战
后端·go·orm
basketball6166 小时前
Go 语言从入门到进阶:4. 数组和MAP使用方法总结
开发语言·后端·golang
qq_2518364576 小时前
SpringBoot+Vue 共享电池柜管理系统 完整实现 前后端分离项目实战 完整代码
vue.js·spring boot·后端
zhangxingchao6 小时前
AI 大模型核心六:量化、Workflow 与 Agent、多轮 RAG
前端·人工智能·后端
IT_陈寒8 小时前
Vite打包时遇到的坑,原来问题出在这里
前端·人工智能·后端