Alto uso de CPU en IP/puerto UDP DDoS aleatorio

Alto uso de CPU en IP/puerto UDP DDoS aleatorio

He estado recibiendo estas UDPinundaciones con IP y puertos aleatorios.

randomip:randomport -> myip:randomport

carga útil de 0 bytes

Por alguna razón, utiliza mucha CPU. Aquí están los resultados de perf top -e cycles:k.

¿Hay alguna forma de optimizar el kernel?

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

Respuesta1

A juzgar por su perfrendimiento, subir net.ipv4.inet_peer_thresholdy bajar ambos net.ipv4.inet_peer_minttlpuede net.ipv4.inet_peer_maxttlayudar un poco. Supuse que estás usando un kernel algo reciente, por ejemplo 3.2. Puedes ver inet_getpeerel código fuente de aquí:http://lxr.linux.no/#linux+v3.2.51/net/ipv4/inetpeer.c#L395

  • Si DDoS está vinculado a la CPU, entonces probablemente debería prohibir los paquetes UDP de tamaño cero mediante, netfilterpor ejemplo:

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

    reemplazándolo NNcon la carga útil L3 real, en su caso probablemente 8(tamaño del encabezado UDP).

  • Si DDoS está vinculado a interrupciones, puede ajustar su archivo e1000e, consulte:

    $ modinfo e1000e | grep ^parm: 
    

    Consulte también el documento de Intel para obtener una descripción de los parámetros:http://downloadadmirror.intel.com/9180/eng/README.txt

  • Si DDoS está vinculado a la red, debe solicitar ayuda a su ISP (operaciones del centro de datos).

Respuesta2

Puede utilizar ipset junto con iptables, ya que es ultra eficiente a la hora de procesar muchos parámetros como direcciones IP o puertos.

A continuación se muestra un ejemplo del uso de ipset en el que los delincuentes P2P se colocan en un conjunto y se les asigna un tiempo de espera.Solución de tiempo de espera P2P

o crear una lista negra en vivoUtilice ipset para la lista negra en vivo

Ipset es ultra eficiente para muchas direcciones IP y puertos porque almacena los valores en la RAM.

Buena suerte.

Respuesta3

¿Qué crees que puedes optimizar? Está experimentando un ataque DDoS que intenta sobrecargar el servidor. Esto suele tener éxito si no hay ningún componente de red delante del servidor, lo que realiza un enrutamiento cero al servidor.

No se puede prevenir un DDoS en el servidor directamente, sólo a través de una buena infraestructura de red con sistemas de prevención.

información relacionada