Я получаю эти 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-атаки на сервере напрямую невозможно, можно только с помощью хорошей сетевой инфраструктуры с системами предотвращения.