云服务器初次搭建需要哪些设置|安全防护(新手入门配置教程)

发布时间:2026-07-23 11:39

对于刚接触云服务器的新手来说,拿到一台全新的云服务器后,面对黑乎乎的终端窗口往往会感到无从下手。很多教程要么过于简略,要么直接跳过关键的安全配置,导致服务器上线后成为黑客的“肉鸡”。本教程将手把手带你完成从零开始的服务器初始化设置,并建立一套基础但有效的安全防护体系。无论你用的是阿里云、腾讯云、华为云还是AWS,操作逻辑完全通用。

## 前言介绍

云服务器本质上是一台永远在线的远程电脑。初次搭建时,系统默认处于“裸奔”状态:默认管理员账户、弱密码、开放所有端口。这就像把新家的钥匙挂在门外。本教程的核心目标有三个:第一,切断所有不安全的默认入口;第二,建立只有你能进入的专用通道;第三,安装必要的监控与防护工具。完成这些设置后,你的服务器将具备抵御常见网络攻击的基础能力,同时为后续部署网站、应用或数据库打下安全基础。

## 前置准备

1. **云服务器一台**:操作系统建议选择CentOS 7.9或Ubuntu 20.04 LTS(本教程以CentOS 7为例,Ubuntu命令稍有差异)。配置至少1核2GB内存,带宽1Mbps以上。

2. **本地电脑**:Windows系统需安装Xshell或Putty(SSH客户端工具);Mac或Linux系统直接使用终端即可。

3. **云平台控制台权限**:确保你能登录云服务商的管理后台,找到“实例管理”或“云服务器”页面。

4. **记录关键信息**:将服务器的公网IP地址、初始密码(如果购买时设置过)或重置密码功能准备好。

## 分步操作步骤

### 1. 首次登录与root账户安全强化

拿到服务器后,第一件事不是安装软件,而是加固管理员账户。

**1.1 通过SSH登录服务器**

打开Xshell或终端,输入以下命令(将IP替换为你的服务器公网IP):

```bash

ssh root@你的服务器IP

```

如果提示“是否继续连接”,输入yes并回车。接着输入初始密码(输入时不会显示字符,这是正常现象),回车后你会看到类似 `[root@你的主机名 ~]#` 的提示符,表示登录成功。

**1.2 创建普通管理员用户(禁用root直接登录)**

root账户权限过大,一旦密码泄露服务器将完全失控。我们需要创建一个具有sudo权限的普通用户:

```bash

useradd adminuser # 创建用户,名称可自定义

passwd adminuser # 设置密码,要求8位以上包含大小写字母和数字

```

输入密码时两次确认即可。接着给这个用户添加sudo权限:

```bash

visudo # 打开sudo配置文件

```

在文件中找到 `root ALL=(ALL) ALL` 这一行,在其下方添加:

```bash

adminuser ALL=(ALL) ALL

```

按 `Ctrl+X` 退出,按 `Y` 保存,按回车确认。

**1.3 配置SSH密钥登录(彻底告别密码)**

密码登录容易被暴力破解,密钥登录更安全。在本地电脑上生成密钥对:

- **Windows用户**:打开Xshell,点击菜单栏“工具” -> “新建用户密钥生成向导”,选择RSA算法,密钥长度2048位,生成后将公钥保存为`authorized_keys`文件(注意文件名不能错)。

- **Mac/Linux用户**:在终端执行 `ssh-keygen -t rsa -b 2048`,一路回车即可。生成的公钥在 `~/.ssh/id_rsa.pub`。

将公钥上传到服务器:

```bash

mkdir -p /home/adminuser/.ssh

echo "你的公钥内容" > /home/adminuser/.ssh/authorized_keys

chmod 600 /home/adminuser/.ssh/authorized_keys

chmod 700 /home/adminuser/.ssh

chown -R adminuser:adminuser /home/adminuser/.ssh

```

注意:公钥内容是一整段以`ssh-rsa`开头的字符串,复制时不要遗漏任何字符。

**1.4 测试新用户登录并禁用root密码登录**

退出当前SSH会话(输入exit),然后用新用户登录:

```bash

ssh adminuser@你的服务器IP

```

如果能够无密码登录(或提示输入密钥密码),说明配置成功。接下来彻底禁用root密码登录:

```bash

sudo vim /etc/ssh/sshd_config

```

找到以下两行并修改:

- `PermitRootLogin yes` 改为 `PermitRootLogin prohibit-password`(禁止root密码登录,但允许密钥)

- `PasswordAuthentication yes` 改为 `PasswordAuthentication no`(禁止所有密码登录)

保存退出后重启SSH服务:

```bash

sudo systemctl restart sshd

```

**重要提示**:在关闭当前SSH窗口前,请另开一个终端测试能否用密钥登录。如果无法登录,说明配置有误,当前窗口不要关闭,立即检查配置并修正。

### 2. 防火墙配置(只开放必要端口)

服务器默认可能开放了所有端口(或者仅关闭了部分),我们需要精确控制进出流量。

**2.1 安装并启动firewalld(CentOS默认防火墙)**

```bash

sudo yum install firewalld -y # 安装

sudo systemctl start firewalld # 启动

sudo systemctl enable firewalld # 设置开机自启

```

**2.2 清理默认规则并开放必要端口**

首先查看当前规则:

```bash

sudo firewall-cmd --list-all

```

如果看到大量开放端口,先重置为默认状态:

```bash

sudo firewall-cmd --set-default-zone=drop # 默认丢弃所有流量

sudo firewall-cmd --reload

```

然后逐一开放你真正需要的端口。对于一台Web服务器,通常只需要SSH、HTTP、HTTPS:

```bash

sudo firewall-cmd --permanent --add-service=ssh # 22端口,SSH连接

sudo firewall-cmd --permanent --add-service=http # 80端口,网页访问

sudo firewall-cmd --permanent --add-service=https # 443端口,加密网页

```

如果你需要其他服务(如MySQL的3306端口、Redis的6379端口),**强烈建议不要直接对外开放**。如果确实需要远程访问,请使用后续步骤中的SSH隧道或VPN。万一必须开放,请限制来源IP:

```bash

sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="你的本地公网IP" port port="3306" protocol="tcp" accept'

```

最后重新加载防火墙并验证:

```bash

sudo firewall-cmd --reload

sudo firewall-cmd --list-all

```

你应该只看到ssh、http、https三个服务被允许。

**2.3 额外安全:关闭ping响应**

黑客常用ping扫描寻找在线服务器。我们可以让服务器对ping无响应:

```bash

echo "net.ipv4.icmp_echo_ignore_all=1" | sudo tee -a /etc/sysctl.conf

sudo sysctl -p

```

之后从外部ping你的服务器IP将显示超时,但正常网络访问不受影响。

### 3. 系统更新与安全加固

很多攻击利用的是已知漏洞,及时更新系统是成本最低的防御手段。

**3.1 一键更新所有软件包**

```bash

sudo yum update -y # CentOS/RHEL系统

# 如果是Ubuntu系统,使用:sudo apt update && sudo apt upgrade -y

```

这个过程可能需要几分钟,取决于网络速度。更新完成后建议重启服务器使内核更新生效:

```bash

sudo reboot

```

重启后重新用SSH登录。

**3.2 安装Fail2ban(防暴力破解)**

即使禁用了密码登录,SSH密钥登录也可能被尝试。Fail2ban能自动封禁多次登录失败的IP:

```bash

sudo yum install epel-release -y # 先安装EPEL源

sudo yum install fail2ban -y

sudo systemctl enable fail2ban

```

创建自定义配置文件:

```bash

sudo vim /etc/fail2ban/jail.local

```

写入以下内容:

```ini

[DEFAULT]

bantime = 3600 # 封禁1小时

findtime = 600 # 检测时间窗口10分钟

maxretry = 3 # 最大尝试次数3次

[sshd]

enabled = true

port = ssh

logpath = %(sshd_log)s

```

保存后启动服务:

```bash

sudo systemctl start fail2ban

sudo fail2ban-client status sshd # 查看SSH防护状态

```

如果看到`Status: OK`,说明已生效。你可以尝试用错误密码登录几次,之后你的IP会被临时封禁。

**3.3 修改SSH默认端口(可选但推荐)**

将SSH端口从默认的22改为高位端口(如2222),能大幅减少扫描攻击:

```bash

sudo vim /etc/ssh/sshd_config

```

找到 `#Port 22`,去掉注释并改为:

```

Port 2222

```

保存后重启SSH服务:

```bash

sudo systemctl restart sshd

```

**关键步骤**:在退出当前SSH会话前,务必在防火墙中开放新端口:

```bash

sudo firewall-cmd --permanent --add-port=2222/tcp

sudo firewall-cmd --reload

```

然后新开一个终端,用 `ssh -p 2222 adminuser@你的服务器IP` 测试连接。确认新端口能登录后,再删除防火墙中的22端口规则:

```bash

sudo firewall-cmd --permanent --remove-service=ssh

sudo firewall-cmd --reload

```

现在你的SSH服务已经隐藏到非标准端口,普通扫描器很难发现。

### 4. 基础监控与日志审计

服务器运行状态需要持续关注,但新手不需要复杂监控系统,几个轻量级工具足矣。

**4.1 安装并配置自动安全更新**

让系统自动安装重要安全补丁,避免遗漏:

```bash

sudo yum install yum-cron -y

sudo vim /etc/yum/yum-cron.conf

```

修改以下两行:

- `apply_updates = yes`(从no改为yes)

- `download_updates = yes`(确认是yes)

启动服务:

```bash

sudo systemctl enable yum-cron

sudo systemctl start yum-cron

```

**4.2 启用系统日志审计**

查看登录记录和异常活动:

```bash

sudo journalctl -xe # 查看系统日志

sudo last # 查看最近登录记录

sudo cat /var/log/secure | grep "Failed password" # 查看密码失败记录

```

建议每周执行一次这些命令,检查是否有异常IP尝试登录。

**4.3 安装简单的资源监控工具**

```bash

sudo yum install htop -y # 交互式进程查看器

sudo yum install iotop -y # 磁盘IO监控

sudo yum install iftop -y # 网络流量监控

```

运行 `htop` 可以直观看到CPU、内存使用情况;运行 `iftop` 可以看到实时网络连接。这些工具不会自动运行,需要时手动执行即可。

**4.4 配置自动备份(关键数据)**

至少备份 `/etc` 配置目录和你的网站数据。使用crontab实现定时备份:

```bash

sudo crontab -e

```

添加以下内容(每天凌晨3点备份到 `/backup` 目录):

```bash

0 3 * * * tar -czf /backup/etc-$(date +\%Y\%m\%d).tar.gz /etc

0 4 * * * tar -czf /backup/www-$(date +\%Y\%m\%d).tar.gz /var/www

```

注意:备份文件应定期下载到本地或上传到对象存储,不要留在服务器上。

## 常见问题

**Q1:修改SSH端口后无法连接怎么办?**

A:如果忘记在防火墙开放新端口,或者配置错误导致SSH无法启动,可以通过云服务商的控制台“远程连接”功能(VNC或管理终端)登录服务器。登录后检查 `/etc/ssh/sshd_config` 配置是否正确,并确认防火墙规则。如果实在无法修复,可以重置服务器系统盘(注意数据会丢失)。

**Q2:Fail2ban误封了合法用户怎么办?**

A:使用 `sudo fail2ban-client set sshd unbanip 被封IP` 解封。如果想永久白名单,在 `/etc/fail2ban/jail.local` 的`[DEFAULT]`段添加 `ignoreip = 你的IP`。

**Q3:更新系统后网站无法访问了?**

A:通常是因为更新了Web服务器软件(如Nginx、Apache)但未重启。执行 `sudo systemctl restart nginx`(或httpd)即可。如果问题依旧,检查防火墙是否误关了80/443端口。

**Q4:如何确认服务器没有被入侵?**

A:执行以下快速检查:1)`last` 查看是否有异常IP登录;2)`ps aux | grep -i miner` 检查是否有挖矿进程;3)`cat /var/log/secure | grep "Accepted"` 查看成功登录记录。如果发现可疑进程,用 `kill -9 进程ID` 终止,并检查启动项(`systemctl list-unit-files`)。

**Q5:普通用户忘记sudo密码怎么办?**

A:只能通过root用户重置。如果你禁用了root登录,可以通过云控制台的VNC功能以root身份登录,然后执行 `passwd adminuser` 重置密码。

## 收尾总结

至此,你的云服务器已经完成从“裸机”到“初步堡垒”的转变。回顾一下我们完成的关键操作:创建了具有sudo权限的普通用户并配置了密钥登录,用防火墙严格限制了开放端口,安装了Fail2ban防御暴力破解,修改了SSH默认端口,并建立了自动更新和备份机制。这些设置看似繁琐,但能阻挡90%以上的自动化攻击。

后续当你需要部署具体应用(如WordPress、Node.js、Docker)时,请记住一个原则:**只开放应用需要的端口,只给应用分配必要权限**。例如,数据库只允许本地连接,文件上传目录禁止执行脚本。安全不是一次性工作,而是持续的习惯。建议每季度检查一次服务器日志,关注安全公告,及时更新软件。现在,你的服务器已经准备好承载你的第一个线上项目了。