ICMP 传输时间已超出

ICMP 传输时间已超出

这几天我的服务器遭受了这种攻击:(带宽>60MBit/s,XXX.XXX.XXX.XXX是多个IP)

    tcpdump -n proto ICMP    
    17:15:19.267464 IP XXX.XXX.XXX.XXX > my_ip: ICMP time exceeded in-transit, length 36
    17:15:19.325217 IP XXX.XXX.XXX.XXX > my_ip: ICMP time exceeded in-transit, length 36
    17:15:19.345561 IP XXX.XXX.XXX.XXX > my_ip: ICMP time exceeded in-transit, length 56
    17:15:19.484865 IP XXX.XXX.XXX.XXX > my_ip: ICMP time exceeded in-transit, length 36
    17:15:19.529616 IP XXX.XXX.XXX.XXX > my_ip: ICMP time exceeded in-transit, length 36
    17:15:19.957058 IP XXX.XXX.XXX.XXX > my_ip: ICMP YYY.YYY.YYY.YYY tcp port 39692 unreachable, length 36
    17:15:19.968957 IP XXX.XXX.XXX.XXX > my_ip: ICMP host YYY.YYY.YYY.YYY unreachable, length 56
    17:15:20.112520 IP XXX.XXX.XXX.XXX > my_ip: ICMP host YYY.YYY.YYY.YYY unreachable, length 56
    17:15:20.203199 IP XXX.XXX.XXX.XXX > my_ip: ICMP host YYY.YYY.YYY.YYY unreachable, length 36
    17:15:20.204803 IP XXX.XXX.XXX.XXX > my_ip: ICMP host YYY.YYY.YYY.YYY unreachable, length 36

我有 FreeBSD 9.1,我的 pf.conf 是

ext_if="em0"
table <blockedips> persist file "/etc/pf-blocked-ips.conf"

set skip on lo0

block drop in log (all) quick on $ext_if from <blockedips> to any

block in
pass out flags S/SA keep state

pass in on $ext_if proto tcp to port 80 flags S/SA keep state
pass in on $ext_if proto tcp to port ssh flags S/SA synproxy state

我能做点什么吗?

答案1

您实际上不太可能看到超过 60Mbit/sec 的 ICMP 回复,而只是表示数据包丢失。如果是这样,则很有可能您遭受了 DoS 攻击,或者某种失控进程从您的主机发送了虚假流量。

一个好的开始是捕获流量样本(使用 pcap 或 wireshark 或 tcpdump 等),并对其进行分析;查看您是否实际发送了与 ICMP 回复相对应的数据包。您需要捕获的不仅仅是 ICMP 流量。如果您发送了与之相关的内容,则需要做两件事:

  • 确定为什么以如此高的速度或过多的重试发送流量
  • 确定发送流量的进程是否应该运行(netstat 有时可以使用选项来帮助解决此问题-p
  • 使用 traceroute 实用程序来隔离路由问题的可能原因并纠正它们(或要求您的 ISP 纠正它们)

如果您没有发送生成这些回复的流量,并且 ICMP 流量正在压垮您的链接,您需要联系您的 ISP 并请他们帮助您缓解这个问题。

相关内容