Alto uso de CPU em IPs aleatórios / Port UDP DDoS

2

Eu recebi essas UDP floods com IPs e portas aleatórios.

randomip:randomport -> myip:randomport

carga útil de 0 bytes

Por alguma razão, ele está usando muita CPU. Aqui estão os resultados de perf top -e cycles:k .

Existe alguma maneira de otimizar o 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
    
por bob 10.09.2013 / 23:41

3 respostas

2

A partir do perf output, o aumento de net.ipv4.inet_peer_threshold e a redução de ambos osnet.ipv4.inet_peer_minttl e net.ipv4.inet_peer_maxttl podem ajudar um pouco. Eu presumi que você está usando um kernel um pouco recente, por exemplo %código%. Você pode ver o código-fonte de 3.2 aqui: link

  • Se o DDoS estiver ligado à CPU, provavelmente você deve simplesmente banir os pacotes UDP de tamanho zero via inet_getpeer , por exemplo:

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

    substituindo netfilter pela carga útil real de L3, provavelmente no seu caso NN (tamanho do cabeçalho UDP).

  • Se o DDoS for interrompido, você poderá ajustar seu 8 , consulte:

    $ modinfo e1000e | grep ^parm: 
    

    verifique também o documento da Intel para descrição dos parâmetros: link

  • Se o DDoS estiver ligado à rede, você deverá solicitar assistência ao seu provedor de serviços de Internet (ISP).

por 11.09.2013 / 23:19
1

Você pode usar o ipset em conjunto com o iptables, pois é extremamente eficiente no processamento de vários parâmetros, como endereços IP ou portas.

Aqui está um exemplo de uso de ipset onde os ofensores P2P são colocados em um conjunto e alocados um timeout timeout P2P

ou criar uma lista negra ao vivo Use o ipset para a lista negra ao vivo

O Ipset é ultra eficiente para muitos endereços IP e portas porque armazena os valores na RAM.

Boa sorte.

    
por 11.09.2013 / 03:35
-1

O que você acha que pode otimizar? Você está enfrentando um ataque DDoS, que tenta sobrecarregar o servidor. Geralmente, isso é bem sucedido se não houver um componente de rede na frente do servidor, o que faz o roteamento zero para o servidor.

Você não pode evitar um DDoS no servidor diretamente, apenas através de uma boa infraestrutura de rede com a prevenção de sistemas.

    
por 11.09.2013 / 01:08