网站安全防护

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 "<your_email@example.com>"

其中,-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. 安全防护