zfsjlll

zfsjlll

趁着年轻,好好犯病

网站安全防护

image

系统:Debian11 bullseye

问题#

最近使用 typcecho 搭建了一个恋爱网站,本来网站还没有对外开放,突然收到来自 IP 泄露的站内评论,决定是时候对网站进行安全防护措施了。

思路#

SSH 远程访问我们的 VPS 主机需要IP地址端口号用户名密码,黑客想要入侵我们的 VPS 也需要知道这四个要素,于是我们从这四个方面

来进行防护。

步骤#

1. IP 地址#

黑客会使用恶意脚本扫描 IP 段,基本可以确定是公开的,但是我使用的 VPS 服务商 DigitaOcean 有保留

IP (Reserverd IP) 功能,可以将一个公网 IP 绑定到我们的 VPS 上,以后使用这个 IP 来对外开放,在一定程度上可

以保证我们的网站安全。

A DigitalOcean Reserved IP address is a publicly-accessible static IP address that you can assign to a Droplet and then reassign to another Droplet later, as needed. You can implement a failover mechanism with reserved IPs to build a high availability infrastructure.

在 VPS 的Networking-Public Network-ESERVED IP选项开启:

image

image

下拉框选中需要绑定的 VPS

image

点击Assign Reserved IP即可

image

2. 端口号#

默认的 SSH 端口为 22,所以对于黑客来说属于已知项,所以我们需要改变 SSH 端口为未知项。

一个通信端口号使用 16 位无符号整数(unsigned integer)来表示,其范围介于 0 与 65535 之间。
在 TCP 协议中,端口号 0 是被保留的,不可使用。
1–1023 系统保留,只能由 root 用户使用。
1024—4999 由客户端程序自由分配。
5000—65535 由服务器端程序自由分配在 UDP 协议中,来源端口号是可以选择要不要填上,如果设为 0,则代表没有来源端口号。¹

鉴于 root 用户的重要性,我们以后将在[用户名]详细讲解,使用非 root 用户登录,所以端口号可选在 1024-65535 中任意一个。

登录 VPS, 修改/etc/ssh/sshd_configPort 22为你选择的端口号,

本文以Debian11nano文本编辑器为例:

nano /etc/ssh/sshd_config

找到Port 22并修改为其他端口,保存重启 SSH 服务,以后就需要使用设置端口来登录 SSH 了。

systemctl restart ssh

3. 用户名#

root 用户拥有系统最高权限,一旦被黑客掌握 root 权限,就相当于任人宰割,当肉鸡进行挖矿、DDOS 等违法行为,沦为黑客的工具,我们可以禁用

root 用户远程登录并创建普通用户来进行日常的服务器运维等工作,安装sudo临时获得 root 权限进行更高权限操作。

在 Linux 和 Unix 系统中,sudo 是一条用于提升当前用户权限的命令。通常情况下,普通用户只有很有限的权限,无法进行某些需要管理员权限才能执行的操作。使用 sudo 命令可以暂时提升当前用户的权限,使其能够执行需要管理员权限才能执行的操作。

建立普通用户

adduser _your_vps_name

安装 sudo

apt update && apt install sudo

注:在使用 sudo 命令时每次都需要输入 root 密码,我们可以通过修改配置文件来简化操作,但你需要知道自己在做什么。

修改 sudo 用户权限

visudo

找到User Privilege Specification, 在 root 用户下加入

vpsadmin ALL=(ALL) NOPASSWD: ALL

4. 密码#

理论上来说如果时间足够长,密码是完全可以被破解的,黑客还可以通过密码表等工具来破解你的账户密码,所以我们弃用密码登录,选择密钥的方式来登录,使用 ssh 生成对应的公钥和私钥,将公钥上传到 VPS 就可以使用私钥来远程登录,只需要保证私钥不泄露即可,建议私钥本地保存,不要保存在服务器。

要生成 SSH 密钥对并将公钥上传到服务器,可以按照以下步骤进行:

打开终端或命令行界面,输入以下命令来生成密钥对:

ssh-keygen -t rsa -b 4096 -C "<[email protected]>"

其中,-t rsa 表示生成 RSA 类型的密钥对,-b 4096 表示密钥长度为 4096 位,-C 参数后面的内容是注释信息,可以根据需要进行修改。

在执行上述命令后,系统会提示你输入密钥的保存路径和文件名,默认路径为~/.ssh/,文件名为 id_rsa 和 id_rsa.pub。你可以按照默认设置保存密钥,也可以根据需要进行修改。在保存公钥文件时,文件名必须为 id_rsa.pub,否则服务器将无法识别。

生成密钥对后,使用以下命令将公钥上传到服务器:

ssh-copy-id username@hostname

其中,username 是你在服务器上的用户名,hostname 是服务器的主机名或 IP 地址。执行该命令时,系统会提示你输入服务器密码,输入后就会将公钥自动添加到服务器的~/.ssh/authorized_keys 文件中。

如果你无法使用 ssh-copy-id 命令,可以手动将公钥复制到服务器的 authorized_keys 文件中。在本地终端中使用以下命令打开公钥文件:

cat ~/.ssh/id_rsa.pub

复制公钥文件中的全部内容,在服务器上打开~/.ssh/authorized_keys 文件,并将公钥粘贴到文件中。保存文件后,就可以使用私钥连接服务器。

总结#

通过以上四部曲,我们就可以实现基础的网站防护了。

文章更新于 2024/3/27


参考文献#

  1. 网络笔记之端口及常见端口号
  2. 安全防护
加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。