随机 IP/端口 UDP DDoS 中的 CPU 使用率过高

随机 IP/端口 UDP DDoS 中的 CPU 使用率过高

我一直UDP使用随机 IP 和端口来接收这些洪水攻击。

randomip:randomport -> myip:randomport

0 字节有效载荷

由于某种原因,它占用了大量的 CPU。以下是 的结果perf top -e cycles:k

有没有什么办法可以优化内核?

10.42%  [kernel]        [k] inet_getpeer
 7.59%  [kernel]        [k] inet_getpeer.part.4
 6.15%  [kernel]        [k] peer_avl_rebalance.isra.2
 3.38%  [kernel]        [k] fib_table_lookup
 2.77%  [ip_tables]     [k] ipt_do_table
 1.98%  [e1000e]        [k] e1000_clean_rx_irq
 1.82%  [kernel]        [k] md5_transform
 1.69%  [kernel]        [k] __ip_route_output_key
 1.36%  [kernel]        [k] check_leaf.isra.7
 1.34%  [kernel]        [k] __udp4_lib_lookup
 1.31%  [kernel]        [k] kmem_cache_free
 1.09%  [kernel]        [k] __netif_receive_skb_core
 1.01%  [kernel]        [k] __slab_free
 1.00%  [kernel]        [k] __ip_append_data.isra.38
 0.99%  [kernel]        [k] memcpy
 0.98%  [kernel]        [k] kmem_cache_alloc
 0.91%  [kernel]        [k] icmp_send
 0.89%  [xt_multiport]  [k] multiport_mt
 0.83%  [kernel]        [k] update_blocked_averages
 0.79%  [kernel]        [k] kfree
 0.79%  [kernel]        [k] __switch_to
 0.78%  [kernel]        [k] skb_release_data
 0.72%  [kernel]        [k] csum_partial_copy_generic
 0.71%  [kernel]        [k] _raw_spin_lock_irqsave
 0.67%  [kernel]        [k] ip_route_input_noref
 0.63%  [kernel]        [k] __udp4_lib_rcv
 0.61%  [kernel]        [k] dev_gro_receive
 0.59%  [kernel]        [k] __schedule
 0.59%  [kernel]        [k] __ip_make_skb
 0.57%  [kernel]        [k] __copy_skb_header
 0.56%  [kernel]        [k] sock_alloc_send_pskb
 0.55%  [kernel]        [k] nf_iterate

答案1

根据您的perf输出判断,提高net.ipv4.inet_peer_threshold和降低两者net.ipv4.inet_peer_minttl可能net.ipv4.inet_peer_maxttl会略有帮助。我假设您使用的是较新的内核,例如3.2。您可以inet_getpeer在此处查看的源代码:http://lxr.linux.no/#linux+v3.2.51/net/ipv4/inetpeer.c#L395

  • 如果 DDoS 受 CPU 限制,那么您可能应该通过netfilter以下方式禁止零大小的 UDP 数据包:

    $ iptables -I INPUT -p udp -m length --length NN -j DROP
    

    通过用实际的 L3 有效负载替换NN,在您的情况下可能是8(UDP 标头的大小)。

  • 如果 DDoS 受到中断限制,您可以调整您的e1000e,请参阅:

    $ modinfo e1000e | grep ^parm: 
    

    另请查看英特尔文档了解参数描述:http://downloadmirror.intel.com/9180/eng/README.txt

  • 如果 DDoS 是网络受限的,那么您应该向 ISP(数据中心操作)寻求帮助。

答案2

您可以将 ipset 与 iptables 结合使用,因为它在处理大量参数(例如 IP 地址或端口)方面非常高效。

以下是使用 ipset 的示例,其中 P2P 违规者被放入一个集合并分配一个超时时间P2P超时解决方案

或创建实时黑名单使用 ipset 进行实时黑名单

Ipset 对于大量 IP 地址和端口来说非常高效,因为它将值存储在 RAM 中。

祝你好运。

答案3

您认为可以优化哪些方面?您正在遭受 DDoS 攻击,该攻击试图使服务器过载。如果服务器前面没有网络组件,该组件对服务器进行零路由,则通常会成功。

您无法直接阻止服务器上的 DDoS,只能通过具有预防系统的良好网络基础设施来阻止。

相关内容