直接给结论:默认情况下,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 当防火墙用,那是运维灾难。
总结 & 避坑指南
- 没有“一键开启”:Azure 不会因为你创建了资源就自动帮你打通所有端口。安全是用户责任模型(Shared Responsibility Model)的一部分。
- 最小权限原则:永远不要为了测试方便,在 NSG 里加一条
Source: Any,Destination: Any,Port: *,Action: Allow。这是被黑客扫描的首选目标。 - 分层防御:
- 第一层:Azure NSG(控制子网/网卡级别的进出)。
- 第二层:OS 内部防火墙(Linux iptables/firewalld, Windows Defender Firewall)。
- 第三层:应用层认证与授权(API Key, OAuth, RBAC)。
- 第四层:WAF/DDoS(如果有 Web 流量)。
- 检查顺序:遇到连接不通的问题,按这个顺序排查:
- 应用进程是否在监听?(
netstat -tlnp) - OS 防火墙是否放行?
- Azure NSG 是否放行?
- 是否有路由表(Route Table)拦截?
- 如果是 PaaS,检查后端资源的防火墙/IP 白名单。
- 应用进程是否在监听?(
所以,回答你的问题:是的,你需要额外配置。 只不过这个配置不是在路由器上架线,而是在 Azure Portal 里点点鼠标,或者写 Terraform/Bicep 代码来定义安全规则。把它当成一种基础设施即代码(IaC)的思维来做,会轻松很多。
云技术博客