混合环境防火墙配置指南:Linux firewalld 与 Windows Defender 关键端口策略对比

枫少@KillBoy
枫少@KillBoy
枫少@KillBoy
管理员
287
文章
0
粉丝
安全运维331,769字数 916阅读3分3秒阅读模式
AI智能摘要
AI 生成的文章内容摘要

在混合使用 linux 与 Windows 的服务器环境中,统一防火墙策略是保障安全基线的关键。下面以常见服务端口 8080(Web 应用)、3306(MySQL)、9200(Elasticsearch)和 6379(Redis)为例,比较 firewalld(基于 zone)和 Windows Defender 防火墙(基于入站/出站规则)的配置逻辑,并给出最小权限原则下的实际命令示例。

firewalld 区域示意图

1. 防火墙模型的根本差异

  • firewalld:通过 zone(如 public、internal、trusted)划分网络安全等级。每个 zone 维护一套允许的服务或端口,流量只有在匹配的 zone 中被明确放行才会通过。
  • Windows Defender:采用 入站 与 出站 规则,规则可以指定协议、端口、方向、适用的网络配置文件(Domain、Private、Public)。规则的粒度更细,但缺少类似 zone 的层级概念,需要在每个规则中手动指明适用的配置文件。

最小权限原则要求只在需要的 zone 或配置文件中打开必要端口,其他流量保持阻断。

2. firewalld 中的端口放行

下面示例假设业务服务器位于 internal 区域,仅对该区域放行目标端口。若服务器使用默认的 public 区域,可将 --zone=internal 替换为 --zone=public。

# 统一将目标服务器加入 internal 区域(如果尚未设置)
sudo firewall-cmd --permanent --zone=internal --add-source=10.0.0.0/24
sudo firewall-cmd --reload

# 8080 – HTTP 应用
sudo firewall-cmd --permanent --zone=internal --add-port=8080/tcp

# 3306 – MySQL
sudo firewall-cmd --permanent --zone=internal --add-port=3306/tcp

# 9200 – Elasticsearch(默认使用 TCP)
sudo firewall-cmd --permanent --zone=internal --add-port=9200/tcp

# 6379 – Redis
sudo firewall-cmd --permanent --zone=internal --add-port=6379/tcp

# 重新加载使配置生效
sudo firewall-cmd --reload

要点

  1. --permanent 确保规则持久化。
  2. 只在 internal 区域放行,外部 public 区域仍保持默认阻断。
  3. 若某端口仅用于出站请求(如内部服务调用外部 API),可以使用 --add-rich-rule 指定方向为 outbound,但对上述四个服务通常需要入站访问。

3. Windows Defender 中的规则对应

在 Windows 中,使用 PowerShell 的 New‑NetFirewallRule 创建入站规则。下面的示例统一将规则限定在 Private 网络配置文件,适用于内部服务器;如果服务器位于域环境,可改为 Domain。

# 8080 – HTTP 应用
New-NetFirewallRule -DisplayName "Allow TCP 8080 - WebApp" `
    -Direction Inbound -Protocol TCP -LocalPort 8080 `
    -Action Allow -Profile Private

# 3306 – MySQL
New-NetFirewallRule -DisplayName "Allow TCP 3306 - MySQL" `
    -Direction Inbound -Protocol TCP -LocalPort 3306 `
    -Action Allow -Profile Private

# 9200 – Elasticsearch
New-NetFirewallRule -DisplayName "Allow TCP 9200 - Elasticsearch" `
    -Direction Inbound -Protocol TCP -LocalPort 9200 `
    -Action Allow -Profile Private

# 6379 – Redis
New-NetFirewallRule -DisplayName "Allow TCP 6379 - Redis" `
    -Direction Inbound -Protocol TCP -LocalPort 6379 `
    -Action Allow -Profile Private

要点

  1. -Profile Private 限制规则仅在内部网络生效,公共网络仍受阻。
  2. 若需要同时放行出站流量,可再添加对应的出站规则(-Direction Outbound)。
  3. 通过 Get-NetFirewallRule -DisplayName "Allow TCP 3306 - MySQL" 可随时检查规则状态。
Windows Defender PowerShell 示例

4. 对比表:firewalld vs Windows Defender(同一端口)

端口firewalld 关键命令适用 zoneWindows Defender 关键命令适用网络配置文件
8080firewall-cmd --permanent --zone=internal --add-port=8080/tcpinternalNew-NetFirewallRule -DisplayName "Allow TCP 8080" -Direction Inbound -Protocol TCP -LocalPort 8080 -Action Allow -Profile PrivatePrivate
3306firewall-cmd --permanent --zone=internal --add-port=3306/tcpinternalNew-NetFirewallRule -DisplayName "Allow TCP 3306" -Direction Inbound -Protocol TCP -LocalPort 3306 -Action Allow -Profile PrivatePrivate
9200firewall-cmd --permanent --zone=internal --add-port=9200/tcpinternalNew-NetFirewallRule -DisplayName "Allow TCP 9200" -Direction Inbound -Protocol TCP -LocalPort 9200 -Action Allow -Profile PrivatePrivate
6379firewall-cmd --permanent --zone=internal --add-port=6379/tcpinternalNew-NetFirewallRule -DisplayName "Allow TCP 6379" -Direction Inbound -Protocol TCP -LocalPort 6379 -Action Allow -Profile PrivatePrivate

5. 落地建议

  1. 统一安全基线:在 linux 端统一使用 internal(或自定义)zone,在 Windows 端统一使用 Private 配置文件,确保两套系统的最小权限范围相匹配。
  2. 审计与验证:
  3. linux:firewall-cmd --list-all --zone=internal 查看已放行端口。
  4. Windows:Get-NetFirewallRule -Profile Private | Where-Object {$_.Direction -eq "Inbound"} 列出所有入站规则。
  5. 定期清理:对不再使用的端口及时删除规则,防止权限漂移。
  6. Linux:firewall-cmd --permanent --zone=internal --remove-port=8080/tcp && firewall-cmd --reload
  7. Windows:Remove-NetFirewallRule -DisplayName "Allow TCP 8080"

 
枫少@KillBoy
评论  33  访客  32  作者  1
    • 银甲寒光
      银甲寒光 1

      混合环境防火墙配置确实是个痛点,感谢对比

      • 翡翠生凉
        翡翠生凉 1

        容器宿主机上防火墙策略还要叠加 docker 的规则,更麻烦

        • 旅行达人
          旅行达人 0

          linux 的 zone 概念和 Windows 的配置文件差异挺大

            • 彩虹棉花云
              彩虹棉花云 1

              @ 旅行达人 zone 和配置文件是两套思路,映射关系容易绕晕

              • 烈焰预言家
                烈焰预言家 1

                @ 旅行达人 对,刚接触时老搞混,后来画了个对照表才理清

                • 幽灵低语者
                  幽灵低语者 1

                  @ 旅行达人 两边概念不对应,换人接手时特别容易配错

                • 奶茶控の快乐
                  奶茶控の快乐 0

                  这几个常用端口配置命令很实用,先收藏了

                  • 海岸拾贝
                    海岸拾贝 1

                    Windows Defender 规则粒度更细,但操作稍微繁琐点

                    • 夜叉泪
                      夜叉泪 1

                      firewalld 的 –permanent 参数容易忘, reload 很重要

                      • 山海藏
                        山海藏 2

                        建议加上如何验证规则是否生效的具体步骤

                        • 可可碎片
                          可可碎片 1

                          内部网络统一用 Private 或 internal 确实更安全

                            • 封印先知
                              封印先知 1

                              @ 可可碎片 配置文件也统一走 Private 能少很多麻烦

                              • 节奏跳动
                                节奏跳动 1

                                @ 可可碎片 internal 和 Private 正好对应,两边口径一致好维护

                                • 书法修行者
                                  书法修行者 2

                                  @ 可可碎片 设置在 Private 后公网访问直接被拦,遇到过一回就老实了

                                • 夜之诅咒
                                  夜之诅咒 0

                                  Elasticsearch 默认端口暴露风险高,必须严格限制

                                  • 金戈武夫
                                    金戈武夫 0

                                    PowerShell 脚本批量部署规则会更方便管理

                                      • 翠绿行者
                                        翠绿行者 1

                                        @ 金戈武夫 批量确实省事,规则多了手工一条条点太容易出错

                                        • 樵夫王辰
                                          樵夫王辰 0

                                          @ 金戈武夫 对,尤其网段多的时候统一配置比逐台改靠谱得多

                                          • 晨曦之梦
                                            晨曦之梦 1

                                            @ 金戈武夫 我之前用脚本批量下发过,配合日志排查规则冲突很方便

                                          • SwiftDeer
                                            SwiftDeer 0

                                            这种实操指南比纯理论更有价值,期待更多案例

                                            • 孤单星云
                                              孤单星云 1

                                              Windows 那边规则多了之后不好排查,有没有管理工具能批量查看?

                                              • 香菜战士
                                                香菜战士 1

                                                Redis 集群模式下端口规则是不是还得加节点间通信端口

                                                • 月光拼图
                                                  月光拼图 0

                                                  firewalld 里 rich rule 其实比直接加端口更灵活,适合复杂场景

                                                  • 素墨清欢
                                                    素墨清欢 1

                                                    Windows 上除了 PowerShell,老系统还得兼顾 netsh 命令吧

                                                    • 牛牛の小伞兵
                                                      牛牛の小伞兵 1

                                                      出站规则经常被忽略,实际上很多隐患都在这边

                                                      • 闪烁钻石
                                                        闪烁钻石 2

                                                        规则命名规范一点,后面查起来能省不少时间

                                                        • 蓝尾鹊
                                                          蓝尾鹊 0

                                                          想问域环境下 Domain 配置文件和 Private 该怎么选

                                                          • 琅琊王
                                                            琅琊王 1

                                                            混合环境统一基线这点太重要了,踩过坑才懂

                                                            • 风尘旅人
                                                              风尘旅人 1

                                                              source绑定和接口归属也得一起核对

                                                              • 风尘叹
                                                                风尘叹 1

                                                                Windows 这边用 PowerShell 脚本确实比点界面快多了

                                                                  • 猎户萧
                                                                    猎户萧 1

                                                                    @ 风尘叹 是的,用脚本一键多条规则省事多了,尤其要在几台机器上统一策略的时候,真不想再点来点去了 😄

                                                                  • 团建请假专业户
                                                                    团建请假专业户 1

                                                                    firewalld 那个 rich rule 出站示例能再展开下吗

                                                                      • 枫少@KillBoy
                                                                        枫少@KillBoy

                                                                        @ 团建请假专业户 可以,例如放行 internal 区域的出站 HTTPS:sudo firewall-cmd –permanent –zone=internal –add-rich-rule=’rule family=”ipv4″ direction=”out” port port=”443″ protocol=”tcp” accept’,再执行 reload。单独加 accept 不会阻断其他出站流量。

                                                                    匿名

                                                                    发表评论

                                                                    匿名网友

                                                                    拖动滑块以完成验证