网站安全防护
环境
系统: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
选项开启:
下拉框选中需要绑定的VPS
点击Assign Reserved IP
即可
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_config
中Port 22
为你选择的端口号,
本文以Debian11
和nano
文本编辑器为例:
1nano /etc/ssh/sshd_config
找到Port 22
并修改为其他端口,保存重启SSH服务,以后就需要使用设置端口来登录SSH了。
1systemctl restart ssh
3. 用户名
root用户拥有系统最高权限,一旦被黑客掌握root权限,就相当于任人宰割, 当肉鸡
进行挖矿、DDOS等违法行为,沦为黑客的工具,我们可以禁用
root用户远程登录并创建普通用户来进行日常的服务器运维等工作,安装sudo
临时获得root权限进行更高权限操作。
在Linux和Unix系统中,sudo是一条用于提升当前用户权限的命令。通常情况下,普通用户只有很有限的权限,无法进行某些需要管理员权限才能执行的操作。使用sudo命令可以暂时提升当前用户的权限,使其能够执行需要管理员权限才能执行的操作。
建立普通用户
1adduser _your_vps_name
安装sudo
1apt update && apt install sudo
注:在使用sudo命令时每次都需要输入root密码,我们可以通过修改配置文件来简化操作,但你需要知道自己在做什么。
修改sudo用户权限
1visudo
找到User Privilege Specification
,在root用户下加入
1vpsadmin ALL=(ALL) NOPASSWD: ALL
4.密码
理论上来说如果时间足够长,密码是完全可以被破解的,黑客还可以通过密码表等工具来破解你的账户密码,所以我们弃用密码登录,选择密钥的方式来登录,使用ssh生成对应的公钥和私钥,将公钥上传到VPS就可以使用私钥来远程登录,只需要保证私钥不泄露即可,建议私钥本地保存,不要保存在服务器。
要生成 SSH 密钥对并将公钥上传到服务器,可以按照以下步骤进行:
打开终端或命令行界面,输入以下命令来生成密钥对:
1ssh-keygen -t rsa -b 4096 -C "<[email protected]>"
其中,-t rsa 表示生成 RSA 类型的密钥对,-b 4096 表示密钥长度为 4096 位,-C 参数后面的内容是注释信息,可以根据需要进行修改。
在执行上述命令后,系统会提示你输入密钥的保存路径和文件名,默认路径为 ~/.ssh/,文件名为 id_rsa 和 id_rsa.pub。你可以按照默认设置保存密钥,也可以根据需要进行修改。在保存公钥文件时,文件名必须为 id_rsa.pub,否则服务器将无法识别。
生成密钥对后,使用以下命令将公钥上传到服务器:
1ssh-copy-id username@hostname
其中,username 是你在服务器上的用户名,hostname 是服务器的主机名或 IP 地址。执行该命令时,系统会提示你输入服务器密码,输入后就会将公钥自动添加到服务器的 ~/.ssh/authorized_keys 文件中。
如果你无法使用 ssh-copy-id 命令,可以手动将公钥复制到服务器的 authorized_keys 文件中。在本地终端中使用以下命令打开公钥文件:
1cat ~/.ssh/id_rsa.pub
复制公钥文件中的全部内容,在服务器上打开 ~/.ssh/authorized_keys 文件,并将公钥粘贴到文件中。保存文件后,就可以使用私钥连接服务器。
总结
通过以上四部曲,我们就可以实现基础的网站防护了。
文章更新于2024/3/27
参考文献
标题:网站安全防护
作者:zfsjlll
地址:https://blog.002724.xyz/articles/2023/07/15/1689432420921.html
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。