firewalld富规则可精准控制特定端口访问来源,通过组合源IP与目标端口并指定accept/reject/drop动作实现;支持日志记录、连接限速及显式拒绝兜底,配置后需--permanent持久化并--reload生效。

直接用 firewalld 的富规则(rich rule)就能精准控制特定端口的访问来源,核心是把“源 IP”和“目标端口”两个条件组合起来,再配上动作(accept/reject/drop)。不需要改服务监听地址,也不依赖应用层配置,干净利落。
明确指定源 IP + 端口放行
比如只允许内网 192.168.10.5 访问 MySQL 的 3306 端口:
- 执行命令:firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.10.5" port port="3306" protocol="tcp" accept'
- 注意必须加 --permanent 写入配置文件,否则重启就失效
- 执行后要 firewall-cmd --reload 才真正生效
拒绝或丢弃不合规的访问请求
白名单之外的流量,默认会被区域策略处理。但更稳妥的做法是显式拒绝,让客户端快速感知失败:
- 拒绝某 IP 访问 SSH:firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="203.0.113.10" service name="ssh" reject'
- 或更彻底地丢弃(不回任何响应):... service name="ssh" drop
- reject 会发 TCP RST 或 ICMP 不可达包,适合调试;drop 更隐蔽,适合防扫描
叠加日志与限速增强管控能力
单纯放行或拒绝不够时,可以加 log 和 limit 提升可观测性与抗扫能力:
- 记录匹配流量:log prefix="mysql-allow" level="notice",日志写入 /var/log/messages
- 限制连接频率:limit value="3/m" 表示每分钟最多新建 3 个连接,防暴力探测
- 完整示例:firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.10.5" port port="3306" protocol="tcp" log prefix="db-access" limit value="2/m" accept'
验证规则是否按预期工作
配置完别急着上线,务必验证:
- 查看当前 rich rules:firewall-cmd --list-rich-rules
- 检查对应端口是否在列表中:firewall-cmd --list-ports(仅显示基础端口规则)
- 从允许 IP 和非允许 IP 分别测试连通性,例如:telnet 192.168.10.10 3306
- 查日志确认 log 规则触发:grep "db-access" /var/log/messages


















