云服务器的安全直接关系到业务数据的隐私与可用性。无论是个人开发者托管网站,还是企业部署核心业务,攻击者都可能通过漏洞入侵,导致数据泄露、服务瘫痪甚至经济损失。本文将系统梳理15个关键安全设置,覆盖系统、网络、应用层全链路防护,助你构建“主动防御+纵深防御”的安全体系。

 

一、系统基础加固:从账户到补丁

 

1. 禁用root远程登录:降低特权账户风险

 

Linux系统中,

"root"账户拥有最高权限,一旦被暴力破解将直接控制服务器。

 

操作步骤:

 

- 编辑SSH配置文件:

sudo nano /etc/ssh/sshd_config

- 找到

"PermitRootLogin"行,修改为:

PermitRootLogin no # 禁止root远程登录

PasswordAuthentication no # 同时禁用密码登录(可选,但推荐)

- 重启SSH服务生效:

sudo systemctl restart sshd

原理:强制使用普通用户登录后切换root(通过

"sudo"),即使密码泄露,攻击者也需突破sudo权限才能获取系统控制权。

 

2. 创建专用管理用户:最小权限原则

 

为日常操作创建权限受限的普通用户,避免直接使用

"root"或高权限账户。

 

操作步骤:

 

- 创建新用户并设置强密码:

sudo adduser adminuser # 按提示设置密码(建议12位以上,含大小写+数字+符号)

- 授予sudo权限(仅允许执行必要命令):

sudo usermod -aG sudo adminuser # 加入sudo组(Ubuntu/Debian)

# 或 CentOS:

sudo usermod -aG wheel adminuser

- 验证登录:通过SSH使用

"adminuser"登录,测试

"sudo"命令是否生效(如

"sudo apt update")。

 

3. 系统补丁与更新管理:修复已知漏洞

 

操作系统和软件的漏洞是攻击的主要入口,需定期更新。

 

操作步骤:

 

- 自动更新配置(以Ubuntu为例):

sudo apt install unattended-upgrades # 安装自动更新工具

sudo dpkg-reconfigure unattended-upgrades # 图形化配置更新策略

- 手动检查关键更新(每周执行):

sudo apt update && sudo apt upgrade -y # Ubuntu/Debian

sudo yum update -y # CentOS/RHEL

注意:生产环境建议先在测试机验证更新,避免兼容性问题导致服务中断。

 

4. 禁用不必要的系统服务:减少攻击面

 

云服务器默认可能开启多个冗余服务(如打印服务、蓝牙服务),这些服务可能成为攻击入口。

 

操作步骤:

 

- 查看运行中的服务:

systemctl list-units --type=service --state=running

- 禁用非必要服务(以

"cups"打印服务为例):

sudo systemctl stop cups # 停止服务

sudo systemctl disable cups # 禁用开机自启

扩展:使用

"systemctl mask"彻底屏蔽服务(谨慎操作)。

 

二、网络安全防护:从端口到流量

 

5. 配置SSH密钥对认证:替代密码登录

 

密码易被暴力破解,SSH密钥对通过非对称加密实现更安全的身份验证。

 

操作步骤:

 

- 本地生成密钥对(一路回车使用默认路径):

ssh-keygen -t ed25519 -C "your_email@example.com" # 推荐Ed25519算法(更安全)

- 上传公钥到服务器:

# 方法1(图形控制台):将~/.ssh/id_ed25519.pub内容粘贴到服务器~/.ssh/authorized_keys

# 方法2(命令行):

cat ~/.ssh/id_ed25519.pub | ssh adminuser@服务器IP "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

- 测试无密码登录:

ssh adminuser@服务器IP # 应直接登录成功,无需输入密码

强化:在

"sshd_config"中添加

"PubkeyAuthentication yes"(默认已启用)。

 

6. 强化防火墙规则:最小化开放端口

 

云服务器的防火墙(如UFW/iptables)是抵御外部攻击的第一道防线,需仅开放必要端口。

 

操作步骤(以UFW为例,Ubuntu):

 

- 查看默认策略(初始状态:拒绝所有入站,允许所有出站):

sudo ufw status verbose

- 开放必要端口(如HTTP 80、HTTPS 443、SSH 22):

sudo ufw allow 22/tcp # SSH

sudo ufw allow 80/tcp # HTTP

sudo ufw allow 443/tcp # HTTPS

- 启用防火墙并验证:

sudo ufw enable # 启用后若远程连接断开,需通过云平台VNC登录恢复

sudo ufw status numbered # 查看规则列表(带编号便于后续删除)

注意:若误操作关闭所有端口,可通过云平台控制台的“VNC登录”临时访问服务器修复。

 

7. 安全组最小化入站/出站规则

 

云平台的“安全组”是虚拟防火墙,需与系统防火墙配合,进一步限制流量来源。

 

最佳实践:

 

- 入站规则:仅允许已知IP访问管理端口(如SSH),或限制为业务必需的IP段(如公司办公网)。示例:MySQL数据库端口3306仅允许应用服务器IP访问,禁止公网直接连接。

- 出站规则:默认拒绝所有外发流量,仅允许服务器访问必要服务(如软件源、日志中心)。

 

8. 安装并配置Fail2ban:防暴力破解

 

暴力破解是攻击者尝试猜测SSH/FTP密码的常见手段,Fail2ban可自动封禁多次失败的IP。

 

操作步骤:

 

- 安装Fail2ban(Ubuntu):

sudo apt install fail2ban -y

- 配置SSH防护(复制默认配置并修改):

sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

sudo nano /etc/fail2ban/jail.local

- 修改

"[sshd]"部分:

[sshd]

enabled = true

maxretry = 3 # 允许3次失败尝试

findtime = 600 # 10分钟内

bantime = 3600 # 封禁1小时

- 重启服务生效:

sudo systemctl restart fail2ban

验证:通过

"ssh adminuser@错误密码"测试,3次失败后应提示“Connection closed by authenticating proxy”。

 

三、应用层安全:从数据库到Web服务

 

9. 数据库安全配置:限制访问与加密

 

数据库存储核心业务数据,需严格限制权限并启用加密。

 

以MySQL为例:

 

- 创建专用数据库用户(非root):

CREATE USER 'app_user'@'localhost' IDENTIFIED BY '强密码';

GRANT SELECT, INSERT, UPDATE ON mydb.* TO 'app_user'@'localhost'; # 仅授予必要权限

FLUSH PRIVILEGES;

- 启用SSL加密连接(需生成证书):

# 在my.cnf中添加:

ssl-ca=/path/to/ca.pem

ssl-cert=/path/to/server-cert.pem

ssl-key=/path/to/server-key.pem

require_secure_transport=ON

- 定期备份数据库并加密存储(如使用

"mysqldump"+AES加密)。

 

10. Web服务器安全加固(Nginx/Apache)

 

Web服务器是对外服务的入口,需防范SQL注入、XSS等攻击。

 

Nginx配置示例:

 

- 禁用不必要的HTTP方法(如PUT/DELETE):

location / {

    if ($request_method !~ ^(GET|POST|HEAD)$ ) {

        return 405;

    }

}

- 启用HTTPS(强制跳转):

server {

    listen 80;

    server_name example.com;

    return 301 https://$host$request_uri; # 强制HTTP转HTTPS

}

- 限制请求速率(防CC攻击):

limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s; # 每秒10次请求

server {

    location / {

        limit_req zone=one burst=20 nodelay;

    }

}

 

11. 禁用目录列表与敏感文件暴露

 

Web服务器默认可能泄露目录结构或敏感文件(如

".git"、

"config.php")。

 

操作步骤:

 

- Nginx禁止目录列表:

server {

    autoindex off; # 关闭目录列表

}

- 阻止访问敏感文件(通过

".htaccess"或Nginx规则):

location ~ /\.env$ { # 阻止.env文件

    deny all;

    return 404;

}

location ~ /\.git { # 阻止Git仓库

    deny all;

    return 404;

}

 

四、监控与响应:从日志到入侵检测

 

12. 启用自动安全更新:减少人为疏忽

 

通过工具自动安装关键安全补丁,避免因忘记更新导致漏洞暴露。

 

Ubuntu自动更新配置:

 

sudo dpkg-reconfigure unattended-upgrades

 

- 在图形界面中勾选“自动安装安全更新”,选择“每日”检查频率。

- 日志查看:

cat /var/log/unattended-upgrades/unattended-upgrades.log

 

13. 配置日志审计与集中管理

 

日志是追踪攻击的关键证据,需集中存储并定期分析。

 

操作步骤:

 

- 启用系统日志服务(rsyslog):

sudo systemctl enable rsyslog

- 配置日志转发到集中管理平台(如ELK Stack):

# 在/etc/rsyslog.conf中添加:

*.* @logstash_ip:5000 # 通过TCP转发到Logstash

- 定期分析日志(如使用

"journalctl"):

journalctl -u sshd --since "2024-01-01" # 查看SSH服务近期的日志

 

14. 定期备份与灾难恢复计划

 

数据丢失是最大的安全风险之一,需制定完善的备份策略。

 

最佳实践:

 

- 3-2-1原则:3份备份、2种介质(如本地硬盘+云存储)、1份离线(如移动硬盘)。

- 自动化备份脚本(以MySQL为例):

# 每日凌晨2点备份数据库

0 2 * * * mysqldump -u app_user -p'密码' mydb | gzip > /backups/mydb_$(date +\%F).sql.gz

- 测试恢复流程:每月随机选择一份备份,验证能否成功还原数据。

 

15. 启用内核安全模块:SELinux/AppArmor

 

SELinux(CentOS/RHEL)和AppArmor(Ubuntu)通过强制访问控制(MAC)限制进程权限,即使被入侵也能限制破坏范围。

 

Ubuntu启用AppArmor:

 

sudo systemctl enable apparmor

sudo systemctl start apparmor

 

CentOS启用SELinux:

 

# 修改/etc/selinux/config:

SELINUX=enforcing # 强制模式(默认permissive为警告模式)

sudo reboot # 重启生效

 

总结:安全是持续的过程

 

云服务器安全加固不是一次性任务,而是需要定期检查+动态调整的系统工程。建议每月执行以下操作:

 

1. 检查系统更新与补丁状态;

2. 分析防火墙/安全组规则,清理冗余条目;

3. 审计用户权限,删除长期未使用的账户;

4. 备份数据并测试恢复流程;

5. 监控日志,关注异常登录或流量突增。

 

通过本文的15个关键设置,你已经构建了覆盖系统、网络、应用层的多层防护体系。记住:安全的本质是“最小化攻击面,最大化响应能力”,保持警惕才能守护云端资产。

云服务器任何问题可以评论或者联系我!

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐