在腾讯云上使用 CentOS(推荐 CentOS 7/8 或更佳的 AlmaLinux/Rocky Linux 8/9,因 CentOS Stream 已非传统稳定版,且 CentOS 7 已于 2024-06-30 停止维护)部署 Web 服务时,初始安全配置至关重要。以下是面向生产环境的关键、实用、可落地的安全加固步骤(按优先级和执行顺序组织):
✅ 一、系统基础加固(部署后立即执行)
| 步骤 | 操作 | 说明 |
|---|---|---|
| 1. 更新系统 | sudo yum update -y(CentOS 7)sudo dnf update -y(CentOS 8+/Rocky/Alma) |
修复已知漏洞,尤其内核、OpenSSL、systemd 等核心组件 |
| 2. 创建普通管理用户 + 禁用 root 远程登录 | bash<br>sudo useradd -m -s /bin/bash deploy<br>sudo passwd deploy<br>sudo usermod -aG wheel deploy # CentOS 7/8+ 默认启用 sudo 权限组<br>编辑 /etc/ssh/sshd_config:ini<br>PermitRootLogin no<br>AllowUsers deploy<br>重启 SSH: sudo systemctl restart sshd |
✅ 强制要求:杜绝 root 密码远程登录;最小权限原则;建议后续改用 SSH 密钥登录(见下条) |
| 3. 配置 SSH 密钥认证(强烈推荐) | 在本地生成密钥对(ssh-keygen -t ed25519 -C "webadmin@yourdomain"),上传公钥到服务器:sudo mkdir -p /home/deploy/.sshsudo tee /home/deploy/.ssh/authorized_keys <<<"ssh-ed25519 AAAA..."sudo chown -R deploy:deploy /home/deploy/.sshsudo chmod 700 /home/deploy/.ssh && chmod 600 /home/deploy/.ssh/authorized_keys再禁用密码登录: PasswordAuthentication no → 重启 sshd |
✅ 比密码更安全,防暴力破解;务必先测试新密钥能登录,再禁用密码! |
| 4. 启用并配置防火墙(firewalld) | bash<br>sudo systemctl enable firewalld<br>sudo systemctl start firewalld<br>sudo firewall-cmd --permanent --add-service=http<br>sudo firewall-cmd --permanent --add-service=https<br># 若需 SSH(默认22端口),确保已放行(或改端口)<br>sudo firewall-cmd --reload<br> | 腾讯云安全组是第一道防线,但 firewalld 是第二道(主机级),必须启用。避免 systemctl disable firewalld! |
✅ 二、Web 服务专项加固(以 Nginx/Apache 为例)
| 步骤 | 操作 | 说明 |
|---|---|---|
| 1. 使用非 root 用户运行 Web 服务 | ✅ Nginx:检查 /etc/nginx/nginx.conf 中 user nginx;(默认已配)✅ Apache: /etc/httpd/conf/httpd.conf 中 User apache / Group apache |
防止 Web 漏洞导致提权;禁止以 root 运行 Web 进程 |
| 2. 隐藏服务版本信息 | Nginx:在 http{} 块中添加 server_tokens off;Apache:在 httpd.conf 中添加 ServerTokens Prod 和 ServerSignature Off |
减少攻击者识别软件版本进行针对性攻击 |
| 3. 配置 TLS(HTTPS 强制) | ✅ 使用腾讯云免费 SSL 证书(控制台申请 → 下载 Nginx/Apache 格式) ✅ 配置 HSTS、OCSP Stapling、现代 TLS 协议(TLSv1.2+)、强加密套件 ✅ 重定向 HTTP → HTTPS(301) |
🔒 HTTPS 是底线要求;腾讯云 CDN + WAF 可进一步卸载 TLS |
| 4. 设置合理文件权限 | Web 根目录(如 /usr/share/nginx/html):sudo chown -R root:root /usr/share/nginx/htmlsudo find /usr/share/nginx/html -type f -exec chmod 644 {} ;sudo find /usr/share/nginx/html -type d -exec chmod 755 {} ;⚠️ 动态内容(如 PHP 上传目录)单独设权限,禁止写入代码目录 |
防止恶意文件上传执行;静态资源应不可执行、不可写 |
✅ 三、腾讯云平台层协同配置(常被忽略!)
| 配置项 | 操作建议 | 为什么重要 |
|---|---|---|
| 安全组(Security Group) | ✅ 仅开放必需端口: • 入方向: 80/tcp, 443/tcp, 22/tcp(建议改非标端口,如 2222)• 禁止开放 3306、27017、6379 等数据库端口到公网 → 改用内网 VPC 访问或云数据库白名单❌ 禁止 0.0.0.0/0 开放高危端口 |
安全组是云服务器的第一道网络屏障,比系统防火墙更前置、更高效 |
| 云防火墙 / WAF | ✅ 开通腾讯云 Web 应用防火墙(WAF),接入域名 ✅ 启用 Bot 管理、CC 防护、SQL 注入/XSS 规则库 |
主机层无法拦截的 Web 攻击(如扫描、注入)由 WAF 拦截,减轻服务器压力 |
| 主机安全(云镜) | ✅ 在腾讯云控制台为 CVM 安装「云镜」Agent(免费) ✅ 开启:异常登录检测、木马查杀、漏洞扫描、基线检查 |
提供入侵检测、漏洞提醒、合规基线(等保2.0支持) |
✅ 四、其他关键加固项
| 类别 | 推荐操作 | |
|---|---|---|
| 日志与监控 | • sudo journalctl --disk-usage → 清理旧日志• 配置 logrotate(如 /etc/logrotate.d/nginx)• 将关键日志(auth, nginx access/error)同步至腾讯云 CLS(日志服务)便于审计 |
|
| 时间同步 | sudo timedatectl set-ntp on(启用 systemd-timesyncd)或安装 chrony,确保时间准确(影响证书、审计) |
|
| 禁用不必要服务 | sudo systemctl list-unit-files --type=service | grep enabled → 关闭 telnet, ftp, rpcbind, avahi 等无关服务:sudo systemctl disable --now avahi-daemon |
|
| SELinux(推荐 Enforcing) | sudo sestatus → 如为 disabled,修改 /etc/selinux/config:SELINUX=enforcing → 重启;配合 setsebool -P httpd_can_network_connect 1(如需 PHP 连接网络) |
强制访问控制,防御提权后横向移动(CentOS 默认启用,勿关闭!) |
| Fail2ban(可选但推荐) | sudo yum install epel-release && sudo yum install fail2ban配置 /etc/fail2ban/jail.local 监控 sshd, nginx-auth,封禁暴力 IP |
自动封禁 SSH/Web 登录爆破 IP |
⚠️ 特别注意(避坑指南)
- ❌ 不要使用 CentOS 6/7 生产环境:CentOS 7 EOL(2024-06-30),无安全更新 → 强烈建议迁移到 Rocky Linux 9 或 AlmaLinux 9(100% 兼容 RHEL,长期支持)。
- ❌ 不要在 Web 目录放置
.git、.env、config.php.bak等敏感文件 → 配置 Nginx/Apache 禁止访问隐藏文件:location ~ /. { deny all; } location ~ ~$ { deny all; } - ✅ 定期备份:使用腾讯云 云硬盘快照 + 网站数据/数据库定时备份到 COS(如
mysqldump+coscmd)。 - ✅ 最小化安装:腾讯云创建实例时,选择「精简版」CentOS 镜像,避免预装冗余软件。
📌 附:一键加固脚本(简化版,供参考)
# 请先人工审查,勿直接执行!
#!/bin/bash
echo "【1/5】系统更新..."
sudo dnf update -y
echo "【2/5】创建用户 & 禁用 root SSH..."
sudo useradd -m -s /bin/bash webadmin
echo "webadmin ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/webadmin
sudo sed -i 's/^PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config
sudo sed -i 's/^#PermitRootLogin.*/PermitRootLogin no/' /etc/ssh/sshd_config
sudo systemctl restart sshd
echo "【3/5】启用 firewalld..."
sudo systemctl enable --now firewalld
sudo firewall-cmd --permanent --add-service={http,https}
sudo firewall-cmd --reload
echo "【4/5】加固 Nginx..."
echo "server_tokens off;" | sudo tee -a /etc/nginx/nginx.conf
sudo nginx -t && sudo systemctl reload nginx
echo "【5/5】安装云镜(腾讯云专用)..."
curl -O https://mirrors.cloud.tencent.com/qcloud/yum/qcloud_source.repo
sudo mv qcloud_source.repo /etc/yum.repos.d/
sudo yum install -y qcloud-monitor-agent
sudo systemctl enable --now go2cloudmonitor
如需我为你:
- ✅ 生成完整的
nginx.conf安全模板(含 HTTPS/HSTS/缓存头) - ✅ 编写
fail2ban针对 Web 的 jail 配置 - ✅ 提供 Rocky Linux 9 迁移指南
- ✅ 输出符合等保2.0三级的 CentOS 加固检查清单(Excel/Markdown)
欢迎随时告诉我,我可以立即输出 👇
安全无小事,每一步加固都是在降低被攻陷的概率。从今天开始,让每一台云服务器都成为“有围墙的城堡”。🛡️
秒懂云