努力
加油

使用Azure服务时是否需要额外配置防火墙?

直接给结论:默认情况下,Azure 是“零信任”架构,你的虚拟机(VM)或应用对外暴露的端口默认是关闭的。但是,这并不意味着你不需要配置防火墙,而是说你需要通过 Azure 自身的网络控制组件来“手动”放行流量。

很多人有个误区,觉得像 AWS EC2 那样有个“安全组(Security Group)”,或者阿里云有“安全组”,Azure 也有个类似的东西叫 NSG(Network Security Group)。没错,核心逻辑是一样的:云厂商提供的是“白名单”机制,而不是默认的“全开”。

下面我把这个坑拆解开,分几种常见场景来说,这样你操作时心里有底:

1. 如果你用的是 Azure VM(虚拟机会话)

这是最常见的情况。当你创建一台 Windows 或 Linux VM 时:

  • 默认状态:除了 RDP(3389)或 SSH(22)可能根据你创建时的选项被临时开放外,其他所有入站流量(Inbound)都是被拒绝的。
  • 你需要做什么:
    • 检查 NSG:每块网卡都关联一个 NSG。你需要去 Azure Portal -> 你的 VM -> 网络 -> 查看关联的 NSG -> 入站安全规则。
    • 添加规则:如果你想跑 Web 服务(80/443),必须手动添加一条允许 TCP 80/443 的规则,优先级(Priority)要设得比“DenyAllInternetToVNet”这种默认拒绝规则更高(数字越小优先级越高)。
    • 注意 OS 内部防火墙:别以为配了 Azure NSG 就万事大吉。如果你的 VM 里跑了 IIS、Nginx 或者数据库,操作系统内部的防火墙(Windows Firewall / iptables/firewalld)也必须放行。很多新手只配了 Azure 侧,结果连上了 VM 却访问不了网站,最后发现是 Linux 的 firewalld 把 80 端口封了。

2. 如果你用的是 PaaS 服务(如 App Service, AKS, SQL Database)

这类服务的“防火墙”概念和 VM 不太一样,更多是基于访问控制列表(ACL)或虚拟网络集成(VNet Integration)。

  • App Service (Web Apps):
    • 默认互联网可访问。
    • 如果你只想让特定 IP 访问,需要在“访问限制(Access Restrictions)”里配置。这里其实就是一个简易版的 NSG。
    • 如果后端调用了 SQL 或 Storage,建议通过 VNet 集成,把存储账户的防火墙设置为“仅允许来自该 VNet 的请求”,这才是真正的隔离。
  • AKS (Kubernetes):
    • AKS 的控制平面由 Azure 托管,你不用管它的防火墙。
    • 但你的 Node Pool 节点是有 NSG 的。通常建议用 Azure CNI 网络插件,这样 Pod 能直接拿到 VNet IP,你可以更精细地控制 Pod 之间的通信。
    • 对于 Ingress(入口流量),通常会搭配 Application Gateway 或 Front Door,这些负载均衡器本身就有 WAF(Web Application Firewall)功能,可以防 CC 攻击、SQL 注入等。这时候,你配置的其实是 LB 层面的规则,而不是单机防火墙。
  • Azure SQL / Cosmos DB:
    • 这些数据库默认是不允许任何 IP 访问的。
    • 你必须显式地在数据库服务器的“防火墙”设置里,添加你当前公网 IP 的地址段,或者将数据库接入到某个 VNet 的子网中。这一步不做,代码里连 localhost 都通不了。

3. 高级玩家:是否需要第三方防火墙?

  • 基础场景:Azure 自带的 NSG + 云服务商提供的 DDoS 保护(Basic 版免费)+ WAF(针对 Web 应用)已经能满足 90% 的需求。
  • 复杂场景:如果你需要深度包检测(DPI)、复杂的 NAT 网关策略、或者跨地域的流量清洗,你可能会引入 Azure Firewall(托管型防火墙服务)或者在 VM 上部署 Fortinet/Palo Alto 等第三方虚拟设备。
    • 注意:Azure Firewall 是按小时收费 + 数据处理量收费,成本不低,不要为了省事儿随便挂一台装了 iptables 的 VM 当防火墙用,那是运维灾难。

总结 & 避坑指南

  1. 没有“一键开启”:Azure 不会因为你创建了资源就自动帮你打通所有端口。安全是用户责任模型(Shared Responsibility Model)的一部分。
  2. 最小权限原则:永远不要为了测试方便,在 NSG 里加一条 Source: Any, Destination: Any, Port: *, Action: Allow。这是被黑客扫描的首选目标。
  3. 分层防御:
    • 第一层:Azure NSG(控制子网/网卡级别的进出)。
    • 第二层:OS 内部防火墙(Linux iptables/firewalld, Windows Defender Firewall)。
    • 第三层:应用层认证与授权(API Key, OAuth, RBAC)。
    • 第四层:WAF/DDoS(如果有 Web 流量)。
  4. 检查顺序:遇到连接不通的问题,按这个顺序排查:
    • 应用进程是否在监听?(netstat -tlnp)
    • OS 防火墙是否放行?
    • Azure NSG 是否放行?
    • 是否有路由表(Route Table)拦截?
    • 如果是 PaaS,检查后端资源的防火墙/IP 白名单。

所以,回答你的问题:是的,你需要额外配置。 只不过这个配置不是在路由器上架线,而是在 Azure Portal 里点点鼠标,或者写 Terraform/Bicep 代码来定义安全规则。把它当成一种基础设施即代码(IaC)的思维来做,会轻松很多。