Очень редко при защите от DDoS кто-либо освещает эту тему и совершенно неоправданно.
Итак, как? Начнем с того, что у Вас должна быть приличная 10GE сетевая карточка (например, Intel XL710 или же Intel 82599 - я буду проводить тесты на нем). Сразу хочу оговориться, что драйверы для сетевой карты нужно брать НЕ из дистрибутива (они очень малофункциональны), а из проекта ixgbe на Sourceforge.
Во-вторых, нужен механизм управления этим всем делом. Обычно, это делается силами ethtool.
Приступим!
Для начала нам нужно сконфигурировать сетевую и ее драйвер:
Есть три варианта значения поля FdirPballoc и мы выбрали наибольший размер, чтобы побольше правил набить:
Итог - плачевен, машина почти убита нагрузкой:
Попробуем собрать фильтр под эту атаку.
Посмотрим, что у нас получилось:
Но, например, таким образом можно сделать крутую защиту от UDP амплификации. И выживать пока не кончится аплинк :)
Итак, как? Начнем с того, что у Вас должна быть приличная 10GE сетевая карточка (например, Intel XL710 или же Intel 82599 - я буду проводить тесты на нем). Сразу хочу оговориться, что драйверы для сетевой карты нужно брать НЕ из дистрибутива (они очень малофункциональны), а из проекта ixgbe на Sourceforge.
Во-вторых, нужен механизм управления этим всем делом. Обычно, это делается силами ethtool.
Приступим!
Для начала нам нужно сконфигурировать сетевую и ее драйвер:
vim /etc/modprobe.d/ixgbe.confИ добиваем к существующим там такой параметр (он нужен чтобы выделить 32 тысячи ):
FdirPballoc=3,3,3,3После этого драйвер нужно передернуть и поднять ифейсы заново:
rmmod ixgbeЧто же мы сделали? Мы включили функциональность фильтрации сетевой. Почему именно 3?
modprobe ixgbe
ifconfig 11.22.33.44. eth4
Есть три варианта значения поля FdirPballoc и мы выбрали наибольший размер, чтобы побольше правил набить:
1 = 8k hash filters or 2k perfect filtersУбеждаемся по dmesg, что все зацепилось:
2 = 16k hash filters or 4k perfect filters
3 = 32k hash filters or 8k perfect filters (array of int)
dmesg|grep 'Flow Director'Включаем поддержку ntuple фильтров на уровне сетевой:
[45847.024851] ixgbe: Flow Director packet buffer allocation set to 3
[45847.024874] ixgbe: 0000:0a:00.0: ixgbe_check_options: Flow Director will be allocated 256kB of packet buffer
ethtool -K eth4 ntuple onИтак, посмотрим список наших правил - он должен быть пуст:
ethtool --show-ntuple eth4А вот далее идет сложный синтаксис и поэтому привожу выдачу ethtool --help:
4 RX rings available
Total 0 rules
ethtool -N|-U|--config-nfc|--config-ntuple DEVNAME Configure Rx network flow classification options or rulesИтак, запустим на машину DDoS атаку вот таким паттерном:
rx-flow-hash tcp4|udp4|ah4|esp4|sctp4|tcp6|udp6|ah6|esp6|sctp6 m|v|t|s|d|f|n|r... |
flow-type ether|ip4|tcp4|udp4|sctp4|ah4|esp4
[ src %x:%x:%x:%x:%x:%x [m %x:%x:%x:%x:%x:%x] ]
[ dst %x:%x:%x:%x:%x:%x [m %x:%x:%x:%x:%x:%x] ]
[ proto %d [m %x] ]
[ src-ip %d.%d.%d.%d [m %d.%d.%d.%d] ]
[ dst-ip %d.%d.%d.%d [m %d.%d.%d.%d] ]
[ tos %d [m %x] ]
[ l4proto %d [m %x] ]
[ src-port %d [m %x] ]
[ dst-port %d [m %x] ]
[ spi %d [m %x] ]
[ vlan-etype %x [m %x] ]
[ vlan %x [m %x] ]
[ user-def %x [m %x] ]
[ action %d ]
[ loc %d]] |
delete %d
12:45:19.050037 IP 10.10.10.100.41356 > 10.10.10.200.61598: UDP, length 18
12:45:19.050045 IP 10.10.10.100.9967 > 10.10.10.200.24210: UDP, length 18
12:45:19.050052 IP 10.10.10.100.17254 > 10.10.10.200.44345: UDP, length 18
12:45:19.050061 IP 10.10.10.100.17516 > 10.10.10.200.41543: UDP, length 18
12:45:19.050069 IP 10.10.10.100.29307 > 10.10.10.200.60769: UDP, length 18
12:45:19.050078 IP 10.10.10.100.56313 > 10.10.10.200.49897: UDP, length 18
12:45:19.050085 IP 10.10.10.100.17761 > 10.10.10.200.6767: UDP, length 18
12:45:19.050093 IP 10.10.10.100.24303 > 10.10.10.200.12295: UDP, length 18
12:45:19.050101 IP 10.10.10.100.27105 > 10.10.10.200.52313: UDP, length 18
12:45:19.050109 IP 10.10.10.100.32141 > 10.10.10.200.55003: UDP, length 18
12:45:19.050119 IP 10.10.10.100.10274 > 10.10.10.200.11494: UDP, length 18
Итог - плачевен, машина почти убита нагрузкой:
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni, 75.0 id, 0.0 wa, 0.0 hi, 75.0 si, 0.0 st
Попробуем собрать фильтр под эту атаку.
ethtool --config-ntuple eth4 flow-type udp4 src-ip 10.10.10.100 m 255.255.255.0 action -1Как можно догадаться, -1 означает безусловный drop трафика.
Посмотрим, что у нас получилось:
ethtool --show-ntuple eth4Как удалить правило? Проще простого:
4 RX rings available
Total 1 rules
Filter: 8189
Rule Type: UDP over IPv4
Src IP addr: 0.0.0.100 mask: 255.255.255.0
Dest IP addr: 0.0.0.0 mask: 255.255.255.255
TOS: 0x0 mask: 0xff
Src port: 0 mask: 0xffff
Dest port: 0 mask: 0xffff
VLAN EtherType: 0x0 mask: 0xffff
VLAN: 0x0 mask: 0xffff
User-defined: 0x0 mask: 0xffffffffffffffff
Action: Drop
ethtool --config-ntuple eth4 delete 8189Вуаля, при той же атаке в 7mpps мы не наблюдаем нагрузки вообще:
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 stПри этом убедиться, что правило flow director работает можно очень просто:
ethtool -S eth4 |grep fdirВот таким образом можно сильно облегчить жизнь Linux боксу под атакой :) Но не стоит забывать, что функциональность по фильтрации довольно слабая - только IP и порты для входящего и исходящего трафика.
fdir_match: 916143392
fdir_miss: 139427055
fdir_overflow: 0
Но, например, таким образом можно сделать крутую защиту от UDP амплификации. И выживать пока не кончится аплинк :)
No comments :
Post a Comment
Note: only a member of this blog may post a comment.