配置轻量应用服务器的安全组,本质上是在做两件事:云厂商层面的网络访问控制(安全组)和 操作系统内部的访问控制(防火墙)。
很多新手容易混淆这两者,导致“明明开了端口却连不上”或者“关了防火墙还是被拦截”。记住一个核心原则:流量先过安全组,再进服务器防火墙。两者必须同时放行,才能通。
下面我按实战逻辑,分步骤拆解怎么配。
第一步:理解轻量应用服务器的特殊性
阿里云、腾讯云等提供的“轻量应用服务器”(Lighthouse/Simple Application Server),其默认的安全组策略通常比传统 ECS/CVM 更简单粗暴:
- 默认全开或半开:部分套餐默认开放了常用端口(如 22, 80, 443),但为了安全,建议手动收紧。
- 入口/出口分离:注意区分“入方向”(别人访问你)和“出方向”(你访问别人)。大部分时候我们只关心入方向。
- 协议类型:TCP(最常用)、UDP、ICMP(Ping)。
第二步:云控制台配置安全组(第一道防线)
这是最容易操作也最关键的一步。以阿里云/腾讯云通用逻辑为例:
1. 找到入口
登录云厂商控制台 -> 进入你的轻量应用服务器实例 -> 找到 “安全组” 或 “防火墙” 选项卡。点击“管理规则”或“添加规则”。
2. 最小化原则配置(推荐)
不要直接点“允许所有流量”,那是自杀行为。请按以下优先级添加:
-
SSH 远程连接(Linux)
- 授权对象:建议填你自己的固定 IP(例如
113.108.xxx.xxx/32)。如果不确定 IP,可以先填0.0.0.0/0(全网),测试成功后立即改回自己的 IP。 - 协议/端口:TCP / 22
- 策略:允许
- 授权对象:建议填你自己的固定 IP(例如
-
Web 服务(HTTP/HTTPS)
- 授权对象:
0.0.0.0/0(因为需要让全球用户访问) - 协议/端口:TCP / 80, TCP / 443
- 策略:允许
- 授权对象:
-
其他业务端口(如数据库、游戏服等)
- 切记:除非必要,否则绝对不要对公网开放 MySQL (3306)、Redis (6379) 等内部服务端口。
- 如果必须开放,务必限制授权对象为特定 IP,并设置强密码+白名单。
3. 常见坑点检查
- 优先级:如果有冲突规则,看优先级数字,越小越优先。
- 生效时间:修改后通常即时生效,无需重启服务器。
第三步:服务器内部配置防火墙(第二道防线)
云安全组放行了,不代表 Linux 内部就通了。你需要确认系统自带的防火墙状态。主流 Linux 发行版主要用 firewalld (CentOS/RHEL/Fedora) 或 ufw (Ubuntu/Debian)。
场景 A:CentOS 7/8/Stream (使用 firewalld)
-
查看状态
systemctl status firewalld如果是
inactive,说明没开防火墙,此时只要云安全组配好就能通。如果是active,则需要配置。 -
开放端口(以 SSH 和 Nginx 为例)
# 永久开放 22 端口 firewall-cmd --permanent --add-port=22/tcp # 永久开放 80 端口 firewall-cmd --permanent --add-port=80/tcp # 永久开放 443 端口 firewall-cmd --permanent --add-port=443/tcp # 重新加载配置使其生效 firewall-cmd --reload -
验证是否生效
firewall-cmd --list-ports你应该能看到
22/tcp 80/tcp 443/tcp。
场景 B:Ubuntu/Debian (使用 ufw)
Ubuntu 默认可能没有安装 ufw,或者处于 disabled 状态。
-
安装与启用
sudo apt install ufw sudo ufw enable注意:启用时可能会提示断开连接,选择 y 继续即可。
-
设置默认策略(重要!)
先拒绝所有入站,避免误操作把自己锁在外面:sudo ufw default deny incoming sudo ufw default allow outgoing -
开放所需端口
# 允许 SSH sudo ufw allow 22/tcp # 允许 HTTP sudo ufw allow 80/tcp # 允许 HTTPS sudo ufw allow 443/tcp -
查看状态
sudo ufw status verbose
第四步:排错指南(连不上的终极检查清单)
如果你配完了还是连不上,按这个顺序排查:
-
IP 变了没?
你自己在云控制台设置的 SSH 白名单 IP,是你当前网络的出口 IP 吗?用手机热点试一下,或者在 ip.cn 查一下当前真实 IP。 -
端口号写错没?
是22不是222,是80不是8080(除非你特意改了 Nginx/Apache 监听端口)。 -
防火墙真关了吗?
有些老教程让你systemctl stop firewalld或ufw disable。这在生产环境极不安全,但在调试阶段可以用。临时关闭防火墙测试连通性是一个有效手段,确认问题出自防火墙后再重新开启并精确配置。 -
云厂商的“额外”防护
检查是否有“DDoS 高防”、“Web 应用防火墙(WAF)”等附加产品拦截了请求。这些产品有自己的黑白名单,与基础安全组无关。 -
服务本身没启动
防火墙通了,不代表服务活了。# 检查 Nginx 是否在运行 systemctl status nginx # 检查监听端口 netstat -tlnp | grep :80
给运维人员的建议
- 不要依赖“全部允许”:虽然方便,但会被扫描器盯上,暴力破解风险极高。
- 密钥登录代替密码:在开放 SSH 端口前,务必配置 SSH 密钥认证,并在
/etc/ssh/sshd_config中设置PasswordAuthentication no。这能阻挡 99% 的自动爆破脚本。 - 定期审计:每月看一眼安全组规则,清理那些不再使用的临时端口。
配置安全组和防火墙不是玄学,是逻辑。只要理清“云网络层”和“系统内核层”这两个边界,按照最小权限原则逐条添加,就不会出问题。
云计算HECS