放行的两种写法与固定流程
firewalld 里放行有两种写法:add-service 引用预定义服务(自带协议与端口定义,语义清晰、便于审计对账),add-port 直接指定端口或端口段(适合非标端口)。同一需求尽量只用一种口径,避免对账时两套表述打架。所有变更都必须走同一条流程:--permanent 写入持久化配置,再 --reload 生效,然后在列表命令里复核结果,最后从另一台机器实测连通性。
基本信息
| 加固项 | 最小化放行与规范化变更流程 |
|---|---|
| 适用平台 | Linux(firewalld) |
| 权限要求 | root 或已授权的 polkit 用户 |
| 达标判据 | 每条放行都能对应到业务必要性记录 |
| 自定义服务 | 可放 /etc/firewalld/services/ 自定义 XML 定义 |
典型使用场景
- 新业务上线时按需放行端口,而非整段放开
- 把临时排障放行改写成限源限端口的正式规则
- 巡检时对账实际放行项与业务清单
- 同一服务多端口场景用自定义服务定义统一管理
- 回收下线业务的放行项,减少暴露面
查询与放行
查询与放行
firewall-cmd --get-services | tr ' ' '\n' | grep -i http # 确认服务名与定义
firewall-cmd --info-service=https # 看该服务包含哪些端口与协议
firewall-cmd --permanent --add-service=https
firewall-cmd --permanent --add-port=8443/tcp # 非标端口
firewall-cmd --permanent --add-port=5000-5010/tcp # 端口段
firewall-cmd --reload # 使配置生效复核与回收
复核与回收
firewall-cmd --list-services
firewall-cmd --list-ports
firewall-cmd --permanent --remove-port=8443/tcp && firewall-cmd --reload # 回收
ss -lntp | grep -E ':8443|:443' # 反向确认服务确实在监听,放行才有的放矢两种写法怎么选
| 写法 | 适用场景 | 注意事项 |
|---|---|---|
| --add-service | 标准服务,端口定义随发行版更新 | 对方报的端口与服务定义不一致时要复核 |
| --add-port | 非标端口、端口段、临时业务 | 数量多时难以对账,建议登记业务用途 |
| 自定义服务 XML | 同一业务多端口多协议 | 文件放 /etc/firewalld/services/,改后需 reload |
| rich rule | 需要限定来源地址或限速 | 求值顺序为 log、deny、allow,与书写顺序无关 |
最高频的坑是忘写 --permanent:只加运行时规则时当前连接正常,reload 或重启后规则消失,表现为“昨天还能访问今天不通”。反过来,写完 --permanent 不 reload 也不会立即生效,两个动作要成套执行并复核列表输出。
--reload 是原子重载:已建立的连接通常不会被中断,但没有持久化的临时改动会被清掉,这是排障时用临时规则、收尾时忘记落盘就会踩到的坑。把临时规则和持久规则分开记录,可以避免两者混淆。