我的(linux)服务器有一些相当简单的 iptables 规则。
iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -m tcp -p tcp --dport ssh -j ACCEPT
iptables -A INPUT -m tcp -p tcp --dport https -j ACCEPT
iptables -A INPUT -j LOG
iptables -A INPUT -j NFLOG
iptables -A INPUT -j DROP
ICMP 未经过滤,但不允许其他不必要的连接。NFLOG 规则只是将数据包存储到数据包捕获工具 (pcap) 中。由于 syslog 变得非常垃圾,我查看了数据包的详细信息。
tshark -V -a filesize:1 -r /scooby/doo.pcap
(IP 和端口[replaced]
)
Frame 1: 52 bytes on wire (416 bits), 52 bytes captured (416 bits)
Encapsulation type: Raw IP (7)
[Protocols in frame: raw:ip:gre:ip:udp:data]
Internet Protocol Version 4, Src: [incoming IP] ([incoming IP]), Dst: [my server IP] ([my server IP])
Version: 4
Header length: 20 bytes
Total Length: 52
Identification: 0x0000 (0)
Flags: 0x02 (Don't Fragment)
Time to live: 52
Protocol: GRE (47)
Generic Routing Encapsulation (IP)
Flags and Version: 0x0000
Protocol Type: IP (0x0800)
Internet Protocol Version 4, Src: [not my IP1] ([not my IP1]), Dst: [not my IP2] ([not my IP2])
Version: 4
Header length: 20 bytes
Total Length: 28
Time to live: 64
Protocol: UDP (17)
User Datagram Protocol, Src Port: [random port1] ([random port1]), Dst Port: [random port2] ([random port2])
Length: 8
未经请求的数据包大多是 ip:gre:ip:udp 数据包。GRE 数据包的数量(通常每分钟多个)远远超过其他未经请求的数据包(漏洞扫描器/垃圾邮件发送者/端口扫描器)。GRE 封装内的所有 IP 对我来说都没有任何特殊含义,只是属于(专属)美国公司的各种常规 IP(因此,并非完全随机的地址)。
为什么有人要发送这些 GRE 数据包?
是否存在与 GRE 数据包相关的已知 DoS 漏洞?这是否试图欺骗配置错误的路由器/服务器,使其将封装的数据包转发到其明显的目的地?发送者是否试图收集有关我可能设置的潜在 GRE 隧道性质的信息?
奖励:最合理的反应真的是“-j DROP”吗?
答案1
据 Rick Wanner (ISC) 称,此类流量可能与 Mirai 僵尸网络有关。他对此发表了评论这里&这里(感谢@Aaron)正如@Michal Hampton 怀疑的那样,有效载荷中包含的地址是一个线索:它们似乎与伪随机数生成器包含在 Mirai 中——尽管我无法证实这一点。
布莱恩·克雷布斯 说他的网站至少在一定程度上因 GRE 垃圾邮件而瘫痪。与更传统的 DDoS 方法相比,发送 GRE (ip/47) 背后的原因并不明显。关于为什么在 DDoS 中使用 GRE 的猜测:
- GRE 路由器中的错误可能被滥用来反映流量或映射原本无法访问的网络拓扑
- 状态防火墙包括 icmp/tcp/udp 的合理默认值,但会对不寻常协议的满管道造成阻塞/行为异常。
- 路由器中不良的 QoS 配置实际上优先处理 DDoS 流量