温馨提示×

如何应对CentOS被drop

小樊
45
2026-01-08 03:24:52
栏目: 智能运维

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 导致“断连”。

0