Administrator
Published on 2025-09-01 / 10 Visits
0
0

麒麟 V10 SP3 高级服务器操作系统防火墙配置详解——从 firewalld 到策略落地的最佳实践


一、背景与意义

在涉密网、科研网、互联网出口等场景中,服务器的第一道安全防线就是 防火墙
麒麟 V10 SP3 作为国产化环境下广泛部署的高级服务器操作系统,内置了 firewalld 服务,底层调用 nftables/iptables 来实现 访问控制、端口过滤、白名单/黑名单策略 等安全需求。

为什么要重视防火墙?

  • 抵御扫描与攻击:禁止暴露不必要的服务端口。

  • 精细化访问控制:通过白名单/黑名单限制来源。

  • 合规要求:等保 2.0、分保、涉密系统都要求“最小暴露面”。


二、firewalld 基本原理

  • 区域(zones):如 publicinternaltrusted,每个区域可绑定接口并定义策略。

  • 服务(services):预定义常见协议(ssh、http、https、dns 等)。

  • 规则(rules):支持端口过滤、协议控制、来源/目标 IP 限制。

  • 配置文件位置

    • /etc/firewalld/firewalld.conf —— 主配置文件

    • /etc/firewalld/zones/*.xml —— 区域配置

    • /usr/lib/firewalld/services/*.xml —— 服务定义

firewalld 既支持 命令行动态配置firewall-cmd),也支持 直接修改配置文件 + reload 的方式。

*.xml 文件中可以直接看到 <interface name="eth0"/><port> 等字段,便于统一管理。


三、常见端口与服务防护

在默认场景下,很多服务端口如果无需暴露,应直接禁止:

  • HTTP(TCP 80)

  • HTTPS(TCP 443)

  • DNS(TCP/UDP 53)

  • SMTP(TCP 25)

  • MySQL(TCP 3306)

  • PostgreSQL(TCP 5432)

  • Redis(TCP 6379)


四、firewalld 默认模式:白名单机制

很多人疑惑:firewalld 是默认放行所有(黑名单模式),还是默认禁止所有(白名单模式)?

答案是:firewalld 默认采用白名单模式

  • 原则:未明确放行的端口/服务,一律拒绝。

  • 默认区域:大多数系统中,接口初始绑定在 public 区域,策略为“只允许显式添加的服务”。

  • 影响:这意味着安装后如果没有手动放行,外部无法访问除 ssh(22)外的大多数服务。

查看默认状态:

firewall-cmd --state
firewall-cmd --get-active-zones
firewall-cmd --list-all

五、允许访问指定端口的配置

5.1 基于服务(推荐)

firewalld 内置常见服务(ssh/http/https/dns),开放方式更直观:

# 永久放行 ssh
firewall-cmd --permanent --add-service=ssh

# 永久放行 https
firewall-cmd --permanent --add-service=https

# 应用生效
firewall-cmd --reload

# 查看已放行的服务
firewall-cmd --list-services

5.2 基于端口

若应用使用非标准端口(如 8080):

# 永久放行 8080/TCP
firewall-cmd --permanent --add-port=8080/tcp

# 永久放行端口段
firewall-cmd --permanent --add-port=6000-6010/udp

# 重载生效
firewall-cmd --reload

5.3 精细化IP访问控制(白名单式放行)

仅允许指定来源访问某端口,例如:只允许 10.10.10.0/24 访问 MySQL(3306):

firewall-cmd --permanent \
  --add-rich-rule='rule family="ipv4" source address="10.10.10.0/24" port port=3306 protocol=tcp accept'

firewall-cmd --reload

例如:仅允许 10.10.10.0/24 网段访问 SSH,其余全部拒绝:

# 先禁止默认 ssh 服务
firewall-cmd --permanent --remove-service=ssh

# 添加白名单规则
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.10.10.0/24" service name="ssh" accept'

# 拒绝其余所有 SSH 访问
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" service name="ssh" drop'
firewall-cmd --reload

六、多物理网络端口绑定与区域策略

在企业/科研/涉密场景中,服务器往往有多个物理网卡(如 eth0, eth1, bond0),需要针对不同网络接口应用不同防火墙策略。这时就需要用到 zone(区域)

6.1 查看当前绑定

firewall-cmd --get-active-zones

示例输出:

public
  interfaces: eth0
internal
  interfaces: eth1

6.2 将网口绑定到不同区域

# eth0 → public(外网)
firewall-cmd --permanent --zone=public --add-interface=eth0

# eth1 → internal(内网)
firewall-cmd --permanent --zone=internal --add-interface=eth1

firewall-cmd --reload

6.3 绑定到源地址/网段

如果一个接口上跑多个虚拟 IP,也可以按源地址归属不同区域:

firewall-cmd --permanent --zone=internal --add-source=10.145.0.0/16
firewall-cmd --permanent --zone=dmz --add-source=192.168.100.0/24
firewall-cmd --reload

6.4 在区域内配置端口

示例:

  • 外网接口 eth0(public):只允许 443(https)

  • 内网接口 eth1(internal):允许 ssh(22)、mysql(3306)

# public:移除默认 ssh,仅允许 https
firewall-cmd --permanent --zone=public --remove-service=ssh
firewall-cmd --permanent --zone=public --add-service=https

# internal:允许 ssh 与 mysql
firewall-cmd --permanent --zone=internal --add-service=ssh
firewall-cmd --permanent --zone=internal --add-port=3306/tcp

firewall-cmd --reload

验证:

firewall-cmd --zone=public --list-all
firewall-cmd --zone=internal --list-all


七、修改默认区域为黑名单模式

7.1 默认模式回顾

默认 firewalld 是典型的 白名单模式(即:除非显式允许,否则全部拒绝)。如果你想让它表现为“黑名单模式”,意思就是:

默认全部放行,只对特定服务/端口/IP 做拒绝

在 firewalld 中,可以通过调整 默认目标策略 (target)rich rules/drop 规则 来实现。


  • 白名单模式(默认):

    • target=defaulttarget=drop

    • 未放行的服务/端口,一律拒绝。

  • 黑名单模式(你需要的):

    • target=ACCEPT

    • 默认放行全部流量,只对你指定的内容进行 drop/reject

7.2 修改为黑名单模式

1、启动与基本操作

# 确保 firewalld 开启
systemctl enable firewalld
systemctl start firewalld

# 查看当前状态
firewall-cmd --state
firewall-cmd --get-active-zones

2、查看当前默认区域

firewall-cmd --get-default-zone

3、修改该区域的目标为 ACCEPT(即默认放行所有)

# 假设当前默认区域是 public
firewall-cmd --permanent --zone=public --set-target=ACCEPT
firewall-cmd --reload

4、查看确认:

firewall-cmd --zone=public --list-all

你会看到:

target: ACCEPT

表示该区域所有接口默认全放行。


7.3 在黑名单模式下添加拒绝规则

一旦 target 设置为 ACCEPT,你就需要 手动写黑名单规则

1、拒绝某个端口

例如:禁止 80 端口(HTTP):

firewall-cmd --permanent --add-rich-rule='rule family="ipv4" port port="80" protocol="tcp" drop'
firewall-cmd --reload

2、拒绝某个 IP

例如:禁止 192.168.1.100:

firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" drop'
firewall-cmd --reload

3、禁止多个 IP

firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.101" drop'
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.102" drop'
firewall-cmd --reload

4、拒绝某个网段

firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.10.0.0/16" drop'
firewall-cmd --reload

4、禁止 HTTP / HTTPS / DNS

# 禁止 HTTP (80)
firewall-cmd --permanent --remove-service=http

# 禁止 HTTPS (443)
firewall-cmd --permanent --remove-service=https

# 禁止 DNS (53 TCP/UDP)
firewall-cmd --permanent --remove-service=dns
# 或精确禁止端口
firewall-cmd --permanent --remove-port=53/tcp
firewall-cmd --permanent --remove-port=53/udp

# 应用修改
firewall-cmd --reload

八、黑名单配置文件方式(可选)

对应的配置会写在 /etc/firewalld/zones/public.xml 中,例如:

<zone>
  <short>Public</short>
  <target>ACCEPT</target>
  <rule family="ipv4">
    <source address="192.168.1.100"/>
    <drop/>
  </rule>
  <rule family="ipv4">
    <port port="80" protocol="tcp"/>
    <reject/>
  </rule>
</zone>

修改后执行:

firewall-cmd --reload

示例:禁止 HTTP/HTTPS,同时只允许 10.145.0.0/16 段访问 SSH:

<zone>
  <short>Public</short>
  <service name="ssh"/>
  <rule family="ipv4">
    <source address="10.145.0.0/16"/>
    <service name="ssh"/>
    <accept/>
  </rule>
  <rule family="ipv4">
    <service name="ssh"/>
    <drop/>
  </rule>
  <rule family="ipv4">
    <service name="http"/>
    <drop/>
  </rule>
  <rule family="ipv4">
    <service name="https"/>
    <drop/>
  </rule>
</zone>

修改后执行:

firewall-cmd --reload

九、运维建议与最佳实践

  • 黑名单模式风险更大:默认放行,等于你必须逐条列出所有禁止项,很容易遗漏。

  • 建议只在 受控的内网环境特定实验场景 使用,公网服务器/涉密服务器千万别用黑名单模式

  • 如果真要生产用,可以考虑双重策略:外层边界防火墙用白名单,内层主机防火墙才尝试黑名单。

  1. 最小暴露面原则:只开放必要的端口和服务。

  2. 白名单优先:对核心服务(如 SSH、数据库)尽量用白名单控制。

  3. 分区策略:合理使用 internalexternaltrusted 区域,避免一刀切。

  4. 日志审计:启用 firewalld 日志(journald / auditd),定期检查拒绝记录。

  5. 双重防护:结合主机防火墙 + 上游边界防火墙/IPS 形成纵深防御。

  6. 备份配置:修改 /etc/firewalld/ 前,务必做快照/备份。


十、结语

麒麟 V10 SP3 提供的 firewalld,是国产服务器操作系统在安全防护上的核心组件。
通过合理配置 禁止端口指定地址控制白名单/黑名单,可以大幅降低暴露面,提升整体合规性。

在涉密、科研、军工等环境中,这不仅是运维技巧,更是安全合规的“硬指标”。

  • firewalld 默认是白名单模式:未显式放行的一律拒绝。

  • 允许指定端口:可通过 --add-service--add-port 实现。

  • 物理网口绑定:通过 zone 区域机制,把不同接口绑定不同规则,实现多网口精细防护。

在麒麟 V10 SP3 高级服务器系统中,熟练掌握 firewalld,不仅能满足 合规要求,还能为系统构建起 纵深防御 的第一道屏障。

  1. 修改区域目标为 ACCEPT → firewalld 就进入黑名单模式。

  2. rich-rule 写拒绝规则(端口/IP/网段)。

  3. 风险高,除非特殊需求,一般还是推荐白名单模式。


⚠️ 声明:本文仅用于合规的服务器安全加固与技术分享,不构成对任何非法用途的指导。实际环境中,请结合贵单位安全策略、等保/分保要求执行。



Comment