Высокая загрузка ЦП при DDoS-атаках UDP со случайным IP/портом

Высокая загрузка ЦП при DDoS-атаках UDP со случайным IP/портом

Я получаю эти UDPпотоки со случайными IP-адресами и портами.

randomip:randomport -> myip:randomport

0 байт полезной нагрузки

По какой-то причине он использует много ресурсов процессора. Вот результаты 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-атака связана с ресурсами центрального процессора, то вам, вероятно, следует просто запретить пакеты UDP нулевого размера, netfilterнапример, с помощью:

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

    заменив NNфактической полезной нагрузкой L3, в вашем случае, вероятно 8(размером заголовка UDP).

  • Если DDoS связан с прерываниями, вы можете настроить свой e1000e, см.:

    $ modinfo e1000e | grep ^parm: 
    

    также проверьте документацию Intel для описания параметров:http://downloadmirror.intel.com/9180/eng/README.txt

  • Если DDoS-атака связана с сетью, вам следует обратиться за помощью к своему интернет-провайдеру (оператору центра обработки данных).

решение2

Вы можете использовать ipset вместе с iptables, поскольку он чрезвычайно эффективен при обработке большого количества параметров, таких как IP-адреса или порты.

Вот пример использования ipset, где нарушители P2P помещаются в набор и им назначается тайм-аут.Решение проблемы тайм-аута P2P

или создание живого черного спискаИспользуйте ipset для живого черного списка

Ipset чрезвычайно эффективен для большого количества IP-адресов и портов, поскольку он хранит значения в оперативной памяти.

Удачи.

решение3

Что, по-вашему, можно оптимизировать? Вы подвергаетесь DDoS-атаке, которая пытается перегрузить сервер. Обычно это бывает успешным, если перед сервером нет сетевого компонента, который выполняет нулевую маршрутизацию к серверу.

Предотвратить DDoS-атаки на сервере напрямую невозможно, можно только с помощью хорошей сетевой инфраструктуры с системами предотвращения.

Связанный контент