前置检查(10分钟)
先确认你的服务器是CentOS 7/8/9或Ubuntu 20.04/22.04 LTS,本文以这两个主流稳定版的通用操作为主,其他发行版可做参考。
步骤1:远程登录服务器
- Windows用户:下载PuTTY https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html 或使用系统自带PowerShell(推荐后者)
- macOS/Linux用户:直接打开终端
通用终端登录命令:
```bash
ssh root@你的服务器公网IP
```
首次登录会提示输入密码,输入后按回车即可(输入时屏幕无显示,是正常安全机制)。
核心加固操作(45分钟)
步骤2:修改root默认密码
root默认密码通常是服务商生成的弱密码,必须修改为含大小写字母+数字+特殊符号的强密码(至少12位)。
修改命令:
```bash
passwd
```
连续输入两次新密码,提示“passwd: all authentication tokens updated successfully”即可。
步骤3:创建普通用户并禁用root远程登录
日常操作普通用户即可,禁用root远程登录可大幅降低被暴力破解的风险。
- 创建新用户(以用户名为admin为例):
```bash
useradd admin
```
- 设置新用户密码:
```bash
passwd admin
```
- 赋予新用户sudo权限(CentOS/Ubuntu略有不同):
- CentOS 7/8/9:
```bash
usermod -aG wheel admin
```
- Ubuntu 20.04/22.04 LTS:
```bash
usermod -aG sudo admin
```
- 测试新用户sudo权限是否生效:
- 先退出当前root登录:
```bash
exit
```
- 用新用户登录:
```bash
ssh admin@你的服务器公网IP
```
- 测试执行root级命令(例如查看系统信息),会提示输入新用户密码:
```bash
sudo cat /etc/os-release
```
- 确认权限生效后,禁用root远程登录:
- 打开SSH配置文件(CentOS/Ubuntu通用):
```bash
sudo vi /etc/ssh/sshd_config
```
- 按
i键进入编辑模式,找到以下两行配置(若有注释则删除)并修改为:
```
PermitRootLogin no
PasswordAuthentication yes 先保留密码登录,等配置完SSH密钥再禁用
```
- 按
Esc键退出编辑模式,输入:wq保存并退出
- 重启SSH服务:
- CentOS 7:
```bash
sudo systemctl restart sshd
```
- CentOS 8/9、Ubuntu 20.04/22.04 LTS:
```bash
sudo systemctl restart ssh
```
- 再测试root登录,提示“Permission denied”即为成功
步骤4:配置SSH密钥登录

密码登录仍有被暴力破解的可能,SSH密钥登录更安全,完全无需记住密码。
步骤5:关闭不必要的端口和服务
端口暴露越多,被攻击的风险越大,只保留需要的端口(例如SSH 22、HTTP 80、HTTPS 443)。
- 先查看当前开放的端口和服务:
```bash
sudo ss -tulnp
```
- CentOS使用firewalld管理防火墙,Ubuntu使用ufw:
- CentOS 7/8/9操作:
- 检查firewalld是否运行:
```bash
sudo systemctl status firewalld
```
如果未运行,启动并设置开机自启:
```bash
sudo systemctl start firewalld
sudo systemctl enable firewalld
```
- 只保留SSH(默认22)、HTTP(80)、HTTPS(443)的永久规则(--permanent永久生效,否则重启后失效):
```bash
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
```
如果修改了SSH默认端口(后面会讲),需替换为自己的端口:
```bash
sudo firewall-cmd --permanent --add-port=你的SSH端口/tcp
```
- 重载防火墙规则:
```bash
sudo firewall-cmd --reload
```
- 查看当前防火墙规则:
```bash
sudo firewall-cmd --list-all
```
- Ubuntu 20.04/22.04 LTS操作:
- 检查ufw是否运行:
```bash
sudo ufw status
```
如果未运行,启动并设置开机自启(会先提示“Command may disrupt existing ssh connections. Proceed with operation (y|n)?”,输入y回车):
```bash
sudo ufw enable
```
- 设置默认规则(拒绝所有入站,允许所有出站):
```bash
sudo ufw default deny incoming
sudo ufw default allow outgoing
```
- 只保留SSH、HTTP、HTTPS的永久规则:
```bash
sudo ufw allow ssh
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
```
如果修改了SSH默认端口:
```bash
sudo ufw allow 你的SSH端口/tcp
```
- 查看当前防火墙规则:
```bash
sudo ufw status numbered
```
步骤6:修改SSH默认端口
SSH默认端口22被大量扫描,修改为非标准端口(1024-65535之间)可减少90%以上的扫描流量。
- 先确认修改后的端口未被占用(例如修改为22222):
```bash
sudo ss -tulnp | grep 22222
```
无输出即为未被占用
- 打开SSH配置文件:
```bash
sudo vi /etc/ssh/sshd_config
```
- 找到Port配置(默认被注释),删除注释并修改为:
```
Port 22222
```
- 保存并退出,重启SSH服务
- 在防火墙添加新的SSH端口规则(见步骤5)
- 测试新端口登录(替换admin、服务器公网IP和22222):
```bash
ssh -p 22222 admin@你的服务器公网IP
```
- 确认新端口登录成功后,删除防火墙原有的22端口规则:
- CentOS 7/8/9:
```bash
sudo firewall-cmd --permanent --remove-service=ssh
sudo firewall-cmd --reload
```
- Ubuntu 20.04/22.04 LTS:
```bash
sudo ufw delete allow ssh
```
步骤7:定期更新系统和软件
系统和软件漏洞是主要攻击来源之一,定期更新可修复已知漏洞。
- CentOS 7/8/9:
```bash
sudo yum update -y CentOS 9可用sudo dnf update -y,效果相同
```
- Ubuntu 20.04/22.04 LTS:
```bash
sudo apt update && sudo apt upgrade -y
```
自动更新设置(可选但推荐,5分钟)
为避免忘记手动更新,可配置自动更新(仅更新安全补丁,避免自动更新业务相关软件导致问题)。
CentOS 7/8/9自动安全更新
- 安装yum-cron:
```bash
sudo yum install yum-cron -y
```
- 打开配置文件:
```bash
sudo vi /etc/yum/yum-cron.conf
```
- 找到以下配置并修改:
```
update_cmd = security 仅更新安全补丁
update_messages = yes
download_updates = yes
apply_updates = yes
```
- 保存并退出,启动并设置开机自启:
```bash
sudo systemctl start yum-cron
sudo systemctl enable yum-cron
```
Ubuntu 20.04/22.04 LTS自动安全更新