一、背景与意义
在涉密网、科研网、互联网出口等场景中,服务器的第一道安全防线就是 防火墙。
麒麟 V10 SP3 作为国产化环境下广泛部署的高级服务器操作系统,内置了 firewalld 服务,底层调用 nftables/iptables 来实现 访问控制、端口过滤、白名单/黑名单策略 等安全需求。
为什么要重视防火墙?
抵御扫描与攻击:禁止暴露不必要的服务端口。
精细化访问控制:通过白名单/黑名单限制来源。
合规要求:等保 2.0、分保、涉密系统都要求“最小暴露面”。
二、firewalld 基本原理
区域(zones):如
public
、internal
、trusted
,每个区域可绑定接口并定义策略。服务(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=default
或target=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
九、运维建议与最佳实践
黑名单模式风险更大:默认放行,等于你必须逐条列出所有禁止项,很容易遗漏。
建议只在 受控的内网环境 或 特定实验场景 使用,公网服务器/涉密服务器千万别用黑名单模式。
如果真要生产用,可以考虑双重策略:外层边界防火墙用白名单,内层主机防火墙才尝试黑名单。
最小暴露面原则:只开放必要的端口和服务。
白名单优先:对核心服务(如 SSH、数据库)尽量用白名单控制。
分区策略:合理使用
internal
、external
、trusted
区域,避免一刀切。日志审计:启用
firewalld
日志(journald / auditd),定期检查拒绝记录。双重防护:结合主机防火墙 + 上游边界防火墙/IPS 形成纵深防御。
备份配置:修改
/etc/firewalld/
前,务必做快照/备份。
十、结语
麒麟 V10 SP3 提供的 firewalld,是国产服务器操作系统在安全防护上的核心组件。
通过合理配置 禁止端口、指定地址控制、白名单/黑名单,可以大幅降低暴露面,提升整体合规性。
在涉密、科研、军工等环境中,这不仅是运维技巧,更是安全合规的“硬指标”。
firewalld 默认是白名单模式:未显式放行的一律拒绝。
允许指定端口:可通过
--add-service
或--add-port
实现。物理网口绑定:通过 zone 区域机制,把不同接口绑定不同规则,实现多网口精细防护。
在麒麟 V10 SP3 高级服务器系统中,熟练掌握 firewalld,不仅能满足 合规要求,还能为系统构建起 纵深防御 的第一道屏障。
修改区域目标为
ACCEPT
→ firewalld 就进入黑名单模式。用
rich-rule
写拒绝规则(端口/IP/网段)。风险高,除非特殊需求,一般还是推荐白名单模式。
⚠️ 声明:本文仅用于合规的服务器安全加固与技术分享,不构成对任何非法用途的指导。实际环境中,请结合贵单位安全策略、等保/分保要求执行。