DROP 与 REJECT 的区别
防火墙对不匹配的流量只有两种处置:DROP 静默丢弃,扫描者无法判断端口是否开放;REJECT 主动回绝,客户端立即失败,排障时线索更清楚。选择取决于对象是外部还是内部:对外隐藏状态,对内追求快速失败。无论选哪种,都要留下可观测性,否则「为什么访问不通」只能靠猜。
基本信息
| 加固项 | 拒绝行为与可观测性 |
|---|---|
| 适用平台 | Linux(iptables/nftables)、Windows 防火墙 |
| 风险等级 | 低 |
| 基线 | 默认拒绝加拒绝日志(限速) |
| 关键点 | 日志规则必须排在丢弃规则之前 |
典型使用场景
- 对外入口:未开放端口用 DROP,减少端口指纹与探测反馈
- 内网服务:用 REJECT 让对方立即失败,避免排障被超时误导
- 割接与迁移:临时开拒绝日志,快速找出漏配的放行规则
- 安全审计:证明边界存在默认拒绝策略而非全放行
- 事件响应:从拒绝日志识别扫描来源与端口探测顺序
分场景选择
分场景选择
# 对外入口:静默丢弃,不暴露端口状态
iptables -A INPUT -p tcp --dport 23 -j DROP
# 内部服务:快速失败,便于排障定位
iptables -A INPUT -s 10.0.0.0/8 -p tcp --dport 9200 -j REJECT --reject-with tcp-reset
# 观测:日志规则要限速,且必须放在 DROP 规则之前才会命中
iptables -A INPUT -m limit --limit 30/min -j LOG --log-prefix 'FWDROP: '
# nftables 等价写法:tcp dport 23 drop / reject with tcp reset拒绝方式对照
| 方式 | 客户端表现 | 适用面 |
|---|---|---|
| DROP | 一直超时,无任何回应 | 对外的未开放端口 |
| REJECT tcp-reset | 连接被立即重置 | 内网服务,便于快速失败 |
| REJECT icmp-port-unreachable | 返回端口不可达 | 部分链路会被转译为超时,慎用 |
| LOG 加 limit | 写入拒绝记录 | 需要观测与告警的边界 |
拒绝日志要限速并配套告警阈值:被大规模扫描时,日志量本身就是一次可用性事件。
验收时从客户端实测一次:DROP 表现为超时,REJECT 表现为连接被拒,两者在排障时的判断路径完全不同。
落地检查点
- 确认默认策略是拒绝而不是放行,并保留明确的放行清单
- 按对象选择行为:对外入口用 DROP,内部服务用 REJECT 加重置
- 拒绝日志配置限速与告警阈值,并确认日志规则排在丢弃规则之前
- 从客户端实测超时与连接被拒两种表现,写进验收记录
- 定期抽查日志中高频被拒的端口与来源,识别探测与配置遗漏
排障时的表现差异
| 客户端现象 | 可能原因 | 下一步看什么 |
|---|---|---|
| 连接超时 | 规则为 DROP,或中间设备拦截 | 查拒绝日志与链路策略 |
| 连接被重置 | 规则为 REJECT 且返回重置 | 确认是否为有意配置 |
| 端口不可达 | REJECT 返回 ICMP,被中间设备转换 | 对照两侧策略实际下发结果 |
| 偶发超时 | 日志限速触发丢包或规则顺序问题 | 核对规则顺序与限速值 |