轻量应用服务器怎么配置安全组和防火墙规则?

配置轻量应用服务器的安全组,本质上是在做两件事:云厂商层面的网络访问控制(安全组)和 操作系统内部的访问控制(防火墙)。

很多新手容易混淆这两者,导致“明明开了端口却连不上”或者“关了防火墙还是被拦截”。记住一个核心原则:流量先过安全组,再进服务器防火墙。两者必须同时放行,才能通。

下面我按实战逻辑,分步骤拆解怎么配。


第一步:理解轻量应用服务器的特殊性

阿里云、腾讯云等提供的“轻量应用服务器”(Lighthouse/Simple Application Server),其默认的安全组策略通常比传统 ECS/CVM 更简单粗暴:

  1. 默认全开或半开:部分套餐默认开放了常用端口(如 22, 80, 443),但为了安全,建议手动收紧。
  2. 入口/出口分离:注意区分“入方向”(别人访问你)和“出方向”(你访问别人)。大部分时候我们只关心入方向
  3. 协议类型:TCP(最常用)、UDP、ICMP(Ping)。

第二步:云控制台配置安全组(第一道防线)

这是最容易操作也最关键的一步。以阿里云/腾讯云通用逻辑为例:

1. 找到入口

登录云厂商控制台 -> 进入你的轻量应用服务器实例 -> 找到 “安全组”“防火墙” 选项卡。点击“管理规则”或“添加规则”。

2. 最小化原则配置(推荐)

不要直接点“允许所有流量”,那是自杀行为。请按以下优先级添加:

  • SSH 远程连接(Linux)

    • 授权对象:建议填你自己的固定 IP(例如 113.108.xxx.xxx/32)。如果不确定 IP,可以先填 0.0.0.0/0(全网),测试成功后立即改回自己的 IP。
    • 协议/端口:TCP / 22
    • 策略:允许
  • 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)

  1. 查看状态

    systemctl status firewalld

    如果是 inactive,说明没开防火墙,此时只要云安全组配好就能通。如果是 active,则需要配置。

  2. 开放端口(以 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
  3. 验证是否生效

    firewall-cmd --list-ports

    你应该能看到 22/tcp 80/tcp 443/tcp

场景 B:Ubuntu/Debian (使用 ufw)

Ubuntu 默认可能没有安装 ufw,或者处于 disabled 状态。

  1. 安装与启用

    sudo apt install ufw
    sudo ufw enable

    注意:启用时可能会提示断开连接,选择 y 继续即可。

  2. 设置默认策略(重要!)
    先拒绝所有入站,避免误操作把自己锁在外面:

    sudo ufw default deny incoming
    sudo ufw default allow outgoing
  3. 开放所需端口

    # 允许 SSH
    sudo ufw allow 22/tcp
    # 允许 HTTP
    sudo ufw allow 80/tcp
    # 允许 HTTPS
    sudo ufw allow 443/tcp
  4. 查看状态

    sudo ufw status verbose

第四步:排错指南(连不上的终极检查清单)

如果你配完了还是连不上,按这个顺序排查:

  1. IP 变了没?
    你自己在云控制台设置的 SSH 白名单 IP,是你当前网络的出口 IP 吗?用手机热点试一下,或者在 ip.cn 查一下当前真实 IP。

  2. 端口号写错没?
    22 不是 222,是 80 不是 8080(除非你特意改了 Nginx/Apache 监听端口)。

  3. 防火墙真关了吗?
    有些老教程让你 systemctl stop firewalldufw disable。这在生产环境极不安全,但在调试阶段可以用。临时关闭防火墙测试连通性是一个有效手段,确认问题出自防火墙后再重新开启并精确配置。

  4. 云厂商的“额外”防护
    检查是否有“DDoS 高防”、“Web 应用防火墙(WAF)”等附加产品拦截了请求。这些产品有自己的黑白名单,与基础安全组无关。

  5. 服务本身没启动
    防火墙通了,不代表服务活了。

    # 检查 Nginx 是否在运行
    systemctl status nginx
    # 检查监听端口
    netstat -tlnp | grep :80

给运维人员的建议

  1. 不要依赖“全部允许”:虽然方便,但会被扫描器盯上,暴力破解风险极高。
  2. 密钥登录代替密码:在开放 SSH 端口前,务必配置 SSH 密钥认证,并在 /etc/ssh/sshd_config 中设置 PasswordAuthentication no。这能阻挡 99% 的自动爆破脚本。
  3. 定期审计:每月看一眼安全组规则,清理那些不再使用的临时端口。

配置安全组和防火墙不是玄学,是逻辑。只要理清“云网络层”和“系统内核层”这两个边界,按照最小权限原则逐条添加,就不会出问题。

未经允许不得转载:云计算HECS » 轻量应用服务器怎么配置安全组和防火墙规则?