Я получал эти 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
Судя по вашему 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 привязан к сети, вам следует обратиться за помощью к своему интернет-провайдеру (оператору центра обработки данных).
Вы можете использовать ipset вместе с iptables, поскольку он очень эффективен при обработке большого количества параметров, таких как IP-адреса или порты.
Вот пример использования ipset, в котором нарушители P2P помещаются в набор и получают тайм-аут. Решение по таймауту P2P
или создать живой черный список Используйте ipset для живого черного списка
Ipset очень эффективен для большого количества IP-адресов и портов, поскольку хранит значения в оперативной памяти.
Удачи.
Как вы думаете, что можно оптимизировать? Вы подвергаетесь DDoS-атаке, которая пытается перегрузить сервер. Обычно это происходит успешно, если перед сервером нет сетевого компонента, который выполняет нулевую маршрутизацию к серверу.
Вы не можете предотвратить DDoS-атаки на сервере напрямую, только с помощью хорошей сетевой инфраструктуры с системами предотвращения.