CentOS 出现“被 drop”的排查与处置
一、先判断“被 drop”的含义
- 多数情况下,这是指网络访问被防火墙或内核策略静默丢弃(常见于 firewalld 的 drop 区域或 iptables 默认策略为 DROP),表现为端口不通、ping 无回显、curl/ssh 超时。也可能是上游网络/运营商丢弃(较少见)。先区分是“本机丢弃”还是“链路丢弃”,有助于快速定位。
二、快速自检与恢复连通性
- 查看本机防火墙状态与默认行为
- 检查 firewalld:systemctl status firewalld;firewall-cmd --state
- 查看默认区域与目标:firewall-cmd --get-default-zone;firewall-cmd --list-all(关注 target 字段,若为 drop,会静默丢弃未匹配流量)
- 临时切换到允许模式:firewall-cmd --set-default-zone=public && firewall-cmd --reload
- 检查 iptables 默认策略
- iptables -S | grep policy(若 INPUT/FORWARD 为 DROP,需先放通关键流量再调整策略)
- 快速放通常用管理端口(在确认安全的前提下)
- firewall-cmd --permanent --zone=public --add-service=ssh
- firewall-cmd --permanent --zone=public --add-port=80/tcp --add-port=443/tcp
- firewall-cmd --reload
- 若仍不通,排除上游与安全组
- 云上实例检查安全组/NACL是否放行对应端口与来源网段
- 同网段主机直连测试,排除物理/运营商链路问题
- 应急回退
- 临时停止防火墙:systemctl stop firewalld(仅用于紧急恢复,恢复后需重新配置规则)
以上命令基于 CentOS 7 默认使用 firewalld 的事实;firewalld 的 drop 与 iptables 的 DROP 都会静默丢弃数据包,不会返回拒绝信息。
三、若“被 drop”是内核/系统崩溃或宕机
- 保留现场并重启到救援/单用户环境
- 从 CentOS 安装介质启动 → 选择 Rescue Mode(救援模式)
- 检查系统日志定位原因
- 查看内核与系统日志:/var/log/messages、/var/log/dmesg、/var/log/secure
- 文件系统修复
- 若为 XFS:在救援/单用户下先卸载相关卷,执行 xfs_repair(必要时加 -L 谨慎使用)
- 数据保全与恢复
- 有 LVM:核对 /etc/lvm/backup/*,必要时 vgcfgrestore 恢复卷组配置
- 误删文件:ext 系列可用 extundelete;分区/分区表损坏用 TestDisk
- 无法定位时,先备份关键数据再重装或迁移
以上步骤覆盖“崩溃/无法启动/文件系统异常”的常见处置路径。
四、若“被 drop”是遭受 UDP 洪泛或异常流量攻击
- 立即限流/封禁异常来源
- 安装 iftop 定位异常 IP/端口:iftop -i eth0 -n -B
- 临时丢弃恶意来源:iptables -I INPUT -s <恶意IP> -j DROP
- 紧急止血(仅在业务允许时):iptables -I INPUT -p udp -j DROP;随后仅放行必要 DNS:iptables -I INPUT -p udp -d <DNS_IP> --dport 53 -j ACCEPT
- 持久化与恢复
- 调整默认策略为 DROP 前,务必先放通回环、已建立连接与必要业务端口(见下一节最小规则)
- 保存规则:iptables-save > /etc/sysconfig/iptables(或按发行版保存方式)
- 进一步排查
- 分析应用与访问日志,修补漏洞或异常进程,必要时扩容/清洗
上述做法能在不影响 DNS 等关键服务的前提下快速止血。
五、加固防火墙的最小可用规则模板
- firewalld(推荐)
- 将接口置于 public 区域并放行必要服务:
- firewall-cmd --set-default-zone=public --permanent
- firewall-cmd --zone=public --add-service=ssh --permanent
- firewall-cmd --zone=public --add-port=80/tcp --add-port=443/tcp --permanent
- firewall-cmd --reload
- iptables(等价最小规则)
- 备份:iptables-save > /root/iptables-$(date +%F).bak
- 规则顺序(示例):
- iptables -F && iptables -X
- iptables -P INPUT DROP
- iptables -P FORWARD DROP
- iptables -P OUTPUT ACCEPT
- iptables -A INPUT -i lo -j ACCEPT
- iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
- iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT
- iptables -A INPUT -p tcp --dport 80 -m conntrack --ctstate NEW -j ACCEPT
- iptables -A INPUT -p tcp --dport 443 -m conntrack --ctstate NEW -j ACCEPT
- iptables -A INPUT -p udp --dport 53 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
- iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT(按需)
- 保存:iptables-save > /etc/sysconfig/iptables
以上模板遵循“先放行回环与已建立连接,再按需开放业务端口”的最小暴露原则,避免误用默认 DROP 导致“断连”。