在轻量应用服务器(如阿里云、腾讯云等厂商提供的产品)中,安全组和操作系统内部的防火墙是两道不同的防线。为了确保服务器既安全又可用,通常需要同时配置这两层规则。
以下是详细的配置步骤和最佳实践建议:
一、 配置安全组(云厂商层面)
安全组是虚拟防火墙,位于云服务器的前端,控制进出服务器的网络流量。这是第一道防线,优先级最高。
1. 登录控制台
- 阿里云:登录 ECS 控制台 -> 左侧导航栏选择“实例与镜像” -> “实例” -> 找到你的轻量应用服务器 -> 点击“更多” -> “网络和安全组” -> “安全组配置”。
- 腾讯云:登录 CVM 控制台 -> 左侧导航栏选择“实例” -> 找到你的轻量应用服务器 -> 点击“安全组”标签页。
2. 添加/修改入方向规则(Inbound Rules)
你需要允许特定端口通过。常见场景如下:
| 服务类型 | 常用端口 | 协议 | 授权对象(来源 IP) | 说明 |
|---|---|---|---|---|
| SSH (Linux) | 22 | TCP | 你自己的公网 IP 或 0.0.0.0/0 |
远程连接服务器。建议限制为你的固定 IP,防止暴力破解。 |
| RDP (Windows) | 3389 | TCP | 你自己的公网 IP 或 0.0.0.0/0 |
Windows 远程桌面。强烈建议限制 IP。 |
| HTTP (Web) | 80 | TCP | 0.0.0.0/0 |
允许所有用户访问网站。 |
| HTTPS (Web) | 443 | TCP | 0.0.0.0/0 |
允许所有用户访问加密网站。 |
| MySQL/MariaDB | 3306 / 5432 | TCP | 仅允许内网 IP 或特定管理 IP | 切勿对 0.0.0.0/0 开放数据库端口! |
| Redis | 6379 | TCP | 仅允许内网 IP 或特定管理 IP | 切勿对 0.0.0.0/0 开放 Redis 端口! |
注意:
- 默认策略:大多数云厂商默认拒绝所有入站流量,只开放 22 (SSH) 和 3389 (RDP)。
- 最小权限原则:只开放必要的端口,避免暴露不必要的服务。
3. 出方向规则(Outbound Rules)
通常默认允许所有出站流量。如果你需要严格限制(例如禁止服务器主动外连),可以按需调整,但一般保持默认即可。
二、 配置操作系统内部防火墙
即使安全组已经放行了流量,操作系统内部的防火墙(如 Linux 的 firewalld/ufw 或 Windows 的防火墙)仍会过滤数据包。这是第二道防线,用于纵深防御。
🐧 Linux 系统
情况 A:使用 firewalld(CentOS/RHEL/Fedora 等)
-
启动 firewalld:
sudo systemctl start firewalld sudo systemctl enable firewalld -
查看当前状态:
firewall-cmd --state -
开放端口示例(以 80 和 443 为例):
# 永久开放 HTTP 和 HTTPS sudo firewall-cmd --permanent --add-port=80/tcp sudo firewall-cmd --permanent --add-port=443/tcp # 重载配置使生效 sudo firewall-cmd --reload -
验证规则:
firewall-cmd --list-all
情况 B:使用 ufw(Ubuntu/Debian 等)
-
安装并启用 ufw:
sudo apt install ufw sudo ufw enable -
设置默认策略(推荐):
sudo ufw default deny incoming # 默认拒绝所有入站 sudo ufw default allow outgoing # 默认允许所有出站 -
开放端口示例:
# 允许 SSH(确保先执行此条,否则可能断连!) sudo ufw allow 22/tcp # 允许 Web 服务 sudo ufw allow 80/tcp sudo ufw allow 443/tcp -
检查状态:
sudo ufw status verbose
⚠️ 重要提醒:
- 不要同时启用多个防火墙服务(如
iptables和firewalld),可能导致冲突。 - 如果之前用
iptables直接操作过,建议先清除旧规则再迁移到firewalld或ufw。
🪟 Windows 系统
-
打开高级安全 Windows Defender 防火墙:
- 按
Win + R,输入wf.msc,回车。
- 按
-
添加入站规则:
- 右键点击“入站规则” -> “新建规则”。
- 选择“端口” -> 下一步。
- 选择“TCP”并指定特定本地端口(如 80, 443)。
- 选择“允许连接”。
- 勾选配置文件(域、专用、公用)。
- 命名规则(如 “Allow HTTP”),完成。
-
建议:
- Windows 防火墙默认较宽松,建议手动关闭不必要服务的监听。
- 对于远程桌面(3389),建议在“高级安全”中创建规则,限制源 IP。
三、 最佳实践与安全建议
-
双重防护:
- 安全组负责粗粒度控制(如屏蔽整个国家 IP 段、限制大流量攻击)。
- 主机防火墙负责细粒度控制(如仅允许特定子网访问数据库)。
- 两者都应配置,形成纵深防御。
-
最小权限原则:
- 只开放业务必需的端口。
- 数据库(MySQL/Redis)、消息队列(RabbitMQ/Kafka)等绝不应直接暴露在公网。如需远程管理,应通过跳板机(Bastion Host)或 SSH 隧道连接。
-
限制 SSH/RDP 访问来源:
- 在安全组中,将 SSH(22)和 RDP(3389)的授权对象设置为你自己的固定公网 IP,而不是
0.0.0.0/0。 - 如果 IP 不固定,可考虑使用密钥认证代替密码,并禁用 root 直接登录。
- 在安全组中,将 SSH(22)和 RDP(3389)的授权对象设置为你自己的固定公网 IP,而不是
-
定期审计:
- 定期检查安全组和防火墙规则,移除不再使用的端口。
- 使用工具如
nmap从外部扫描自己的服务器,确认端口是否真正被保护。
-
监控与日志:
- 开启云厂商的安全中心/云盾功能,实时监测异常登录和攻击行为。
- 保留系统日志,便于事后追溯。
四、 测试验证
配置完成后,务必进行测试:
-
从本地尝试连接:
- SSH:
ssh user@your_server_ip - Web: 浏览器访问
http://your_server_ip
- SSH:
-
从其他网络尝试连接(模拟外部用户):
- 使用手机热点或其他电脑访问网站,确认是否正常。
-
测试被拒绝的端口:
- 尝试连接一个未开放的端口(如 8080),应显示超时或被拒绝。
通过以上步骤,你可以为你的轻量应用服务器建立一个坚实的安全基础。
云服务器