Пример связки Juniper MX-480 и Arbor Peakflow SP для обнаружения и предотвращения DDoS атак
Концепция настройки:
1. На оборудовании Juniper MX настраивается возможность сбора sampling статистики (Netflow, IPFIX). Данная процедура включает:
1.1. активация inline-services flow-table-size (достоверность необходимости этого включения не подтверждена!) Почитать здесь - http://www.juniper.net/techpubs/en_US/junos13.3/topics/task/configuration/inline-flow-monitoring.html
1.2 создаются шаблоны (set services flow-monitoring version-ipfix template ARBOR-FLOW-TEMPLATE) с указанием тайм-аутов для флова;
1.3 создается инстанс (set forwarding-options sampling instance ARBOR-SAMPLINK-INST1) с указанием параметров коллектора;
1.4 инстанс подключается в разделе шасси (set chassis fpc 5 sampling-instance ARBOR-SAMPLINK-INST1);
Подробно http://www.juniper.net/documentation/en_US/junos13.3/topics/task/configuration/services-ipfix-flow-template-flow-aggregation-configuring.html
Не стоит забывать, что в зависимости от архитектуры MX (5-80, 104, 480, etc.) настройка sampling может отличаться.
2. Создается обычный Firewall фильтр для выполнения sampling-а пакетов.
3. Фильтр вешается либо на Uplink, либо на Downlink интерфейсы.
Функционируя в штатном режиме, МХ в зависимости от выставленного sampling input rate отправляет фловы на коллектор Peakflow SP. Коллектор проводит анализ и выводит Alerts по возможным атакам. Оператор системы имеет возможность с алерта создать FlowSpec сообщения, которое будет передано на МХ, для блокировки траффика определенного типа.
При создании правила есть возможность блокировки трафика по следующим критериям:
- Destination Prefix
- Protocol Numbers
- Source Prefix
- Source Ports
- Destination Ports
- ICMP Type
- ICMP Code
- TCP Flags
- Packet Lengths
- DSCP
- Fragment
Взависимости от выбранных критериев для блокировки, на MX передается фильтр, который автоматически применяется и начинает блокировать траффик.
О настройке Arbor-а можно почитать в блоге моего коллеги - https://devnulls.blogspot.com/2016/03/ddos-mitigation-arbor-peakflow-sp-and.html
Пример реальной настройки:
sauron@mordor> show version
Model: mx480
JUNOS Base OS boot [12.3R2.5]
sauron@mordor> show chassis hardware
Hardware inventory:
Item Version Part number Serial number Description
...
Routing Engine 0 REV 08 740-031116 9xxx6 RE-S-1800x4
Routing Engine 1 REV 08 740-031116 9xxx8 RE-S-1800x4
CB 0 REV 18 750-031391 Cxxx3 Enhanced MX SCB
CB 1 REV 18 750-031391 Cxxx2 Enhanced MX SCB
FPC 5 REV 07 750-045372 Cxxx6 MPCE Type 3 3D
...
Настройка будет производиться для карты FPC5.
Настройка отправки sampling
set chassis fpc 5 sampling-instance ARBOR-SAMPLINK-INST1
set chassis fpc 5 inline-services flow-table-size ipv4-flow-table-size 5 // данные применения могут требовать перезагрузки fpc
set chassis fpc 5 inline-services flow-table-size ipv6-flow-table-size 5
set services flow-monitoring version-ipfix template ARBOR-FLOW-TEMPLATE flow-active-timeout 10
set services flow-monitoring version-ipfix template ARBOR-FLOW-TEMPLATE flow-inactive-timeout 20
set services flow-monitoring version-ipfix template ARBOR-FLOW-TEMPLATE template-refresh-rate seconds 25
set services flow-monitoring version-ipfix template ARBOR-FLOW-TEMPLATE option-refresh-rate seconds 25
set services flow-monitoring version-ipfix template ARBOR-FLOW-TEMPLATE ipv4-template
set forwarding-options sampling instance ARBOR-SAMPLINK-INST1 input rate 1000 //чем выше рейт - тем больше нагрузка на fpc, но, чем больше рейт - тем точнея детектирование атаки
set forwarding-options sampling instance ARBOR-SAMPLINK-INST1 input run-length 0
set forwarding-options sampling instance ARBOR-SAMPLINK-INST1 family inet output flow-inactive-timeout 15
set forwarding-options sampling instance ARBOR-SAMPLINK-INST1 family inet output flow-active-timeout 60
set forwarding-options sampling instance ARBOR-SAMPLINK-INST1 family inet output flow-server 10.xx.x.1 port 5001
set forwarding-options sampling instance ARBOR-SAMPLINK-INST1 family inet output flow-server 10.x.x.1 version-ipfix template ARBOR-FLOW-TEMPLATE
set forwarding-options sampling instance ARBOR-SAMPLINK-INST1 family inet output inline-jflow source-address 10.xx.x.2
Трафик будет сниматься с конкретных интерфейсов в том случае, если на него установлен соответствующий фильтр. Фильтр можно ставить, как на Uplink так и на Downlink интерфейс MX. Но, надо понимать, что фильтры, которые будут переданы по FlowSpec обрабатываются после прохождения через Uplink интерфейс.
set firewall family inet filter FLOW-IN term 1 then sample
set firewall family inet filter FLOW-IN term 1 then accept
set firewall family inet filter FLOW-IN term 2 then accept
set firewall family inet filter FLOW-OUT term 1 then sample
set firewall family inet filter FLOW-OUT term 1 then accept
set firewall family inet filter FLOW-OUT term 2 then accept
set interfaces irb unit 777 description Uplink
set interfaces irb unit 777 family inet filter input FLOW-IN
set interfaces irb unit 777 family inet filter output FLOW-OUT
set interfaces irb unit 777 family inet address 193.25.xx.xx/23
set bridge-domains Upl1 domain-type bridge
set bridge-domains Upl1 vlan-id 777
set bridge-domains Upl1 interface ae0.777
set bridge-domains Upl1 routing-interface irb.777
sauron@mordor> show services accounting flow inline-jflow fpc-slot 5
Flow information
FPC Slot: 5
Flow Packets: 4392733600, Flow Bytes: 3697262626829
Active Flows: 57513, Total Flows: 3430048773
Flows Exported: 2874880040, Flow Packets Exported: 578628361
Flows Inactive Timed Out: 2366025991, Flows Active Timed Out: 1063966273
sauron@mordor>show services accounting status inline-jflow fpc-slot 5
Status information
FPC Slot: 5
Export format: IP-FIX
IPv4 Route Record Count: 595204, IPv6 Route Record Count: 26888
Route Record Count: 622092, AS Record Count: 65535
Route-Records Set: Yes, Config Set: Yes
Настройка BGP сессии для взаимодействия с колектором по FlowSpec
set policy-options policy-statement ARBOR-IMPORT-FLOW term A then accept
set protocols bgp group ARBOR-FLOWSPEC family inet unicast
set protocols bgp group ARBOR-FLOWSPEC family inet flow
set protocols bgp group ARBOR-FLOWSPEC peer-as 25yyy
set protocols bgp group ARBOR-FLOWSPEC neighbor 10.xx.x.1 family inet flow no-validate ARBOR-IMPORT-FLOW
sauron@mordor> show bgp neighbor 10.xx.x.1
Peer: 10.xx.x.1+13yyy AS 25yyy Local: 10.xx.x.2+179 AS 25yyy
Type: Internal State: Established Flags: <Sync>
Last State: OpenConfirm Last Event: RecvKeepAlive
Last Error: Cease
Options: <Preference LogUpDown AddressFamily PeerAS Refresh>
Address families configured: inet-unicast inet-flow
Holdtime: 90 Preference: 170
Number of flaps: 3
Last flap event: Stop
Error: 'Cease' Sent: 3 Recv: 0
Peer ID: 193.0.xx.xx Local ID: 193.0.xxx.xxx Active Holdtime: 90
Keepalive Interval: 30 Group index: 16 Peer index: 0
BFD: disabled, down
NLRI for restart configured on peer: inet-unicast inet-flow
NLRI advertised by peer: inet-unicast
NLRI for this session: inet-unicast
Peer does not support Refresh capability
Stale routes from peer are kept for: 300
Peer does not support Restarter functionality
Peer does not support Receiver functionality
Peer supports 4 byte AS extension (peer-as 25133)
Peer does not support Addpath
Table inet.0 Bit: 1000a
RIB State: BGP restart is complete
Send state: in sync
Active prefixes: 0
Received prefixes: 0
Accepted prefixes: 0
Suppressed due to damping: 0
Advertised prefixes: 579357
Last traffic (seconds): Received 0 Sent 0 Checked 0
Input messages: Total 49780 Updates 4 Refreshes 0 Octets 945941
Output messages: Total 5801794 Updates 5748575 Refreshes 0 Octets 512764959
Output Queue[0]: 0
Команды для проверки применения фильтра FlowSpec:
sauron@mordor> show bgp summary
Groups: 17 Peers: 25 Down peers: 0
Table Tot Paths Act Paths Suppressed History Damp State Pending
inet.0
1366159 582440 0 0 0 0
inet6.0
54838 26971 0 0 0 0
inetflow.0
2 2 0 0 0 0
Peer AS InPkt OutPkt OutQ Flaps Last Up/Dwn State|#Active/Received/Accepted/Damped...
10.66.6.1 25133 199 205 0 0 1:34:52 Establ
inetflow.0: 2/2/2/0
sauron@mordor> show route table inetflow.0
inetflow.0: 2 destinations, 2 routes (2 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both
78.xxx.1.yy,212.26.xxx.138/term:1
*[BGP/170] 00:47:22, localpref 100, from 10.66.6.1
AS path: ?, validation-state: unverified
Fictitious
78.xxx.1.yy,212.26.xxx.139/term:2
*[BGP/170] 00:47:21, localpref 100, from 10.66.6.1
AS path: ?, validation-state: unverified
Fictitious
sauron@mordor> show firewall filter __flowspec_default_inet__ detail
Filter: __flowspec_default_inet__
Counters:
Name Bytes Packets
78.xxx.1.yy,212.26.xxx.138 83170900128 55582651
78.xxx.1.yy,212.26.xxx.139 1841565868 3993098
Ручная блокировка на Juniper MX - routing-options flow route
На Juniper MX есть возможность руками создать правило для блокировки трафика по определенным параметрам (destination/source address and port, dscp, fragment, icmp-code and icmp type, packet-length, porotocol, tcp-flags).
Пример конфигурации, блокируется icmp пакеты размером от 15 до 1400 байт:
flow {
route BLOCK-SAME {
match {
source 91.xxx.139.xxx/32;
protocol icmp;
packet-length 15-1400;
}
then discard;
}
}
Проверка:
sauron@mordor> show route table inetflow.0
inetflow.0: 1 destinations, 1 routes (1 active, 0 holddown, 0 hidden)
+ = Active Route, - = Last Active, * = Both
*,91.xxx.139.xxx,proto=1,len>=15&<=1400/term:1
*[Flow/5] 00:12:13
Fictitious
sauron@mordor> show firewall filter __flowspec_default_inet__
Filter: __flowspec_default_inet__
Counters:
Name Bytes Packets
*,91.xxx.139.xxx,proto=1,len>=15&<=1400 0 0
sauron@mordor> ping 91.xxx.139.xxx count 5
PING 91.xxx.139.xxx (91.xxx.139.xxx): 56 data bytes
--- 91.xxx.139.xxx ping statistics ---
5 packets transmitted, 0 packets received, 100% packet loss
sauron@mordor> ping 91.xxx.139.xxx count 5 size 1401
PING 91.xxx.139.xxx (91.xxx.139.xxx): 1401 data bytes
1409 bytes from 91.xxx.139.xxx: icmp_seq=0 ttl=55 time=2.841 ms
1409 bytes from 91.xxx.139.xxx: icmp_seq=1 ttl=55 time=2.688 ms
1409 bytes from 91.xxx.139.xxx: icmp_seq=2 ttl=55 time=2.976 ms
1409 bytes from 91.xxx.139.xxx: icmp_seq=3 ttl=55 time=2.792 ms
1409 bytes from 91.xxx.139.xxx: icmp_seq=4 ttl=55 time=2.720 ms
--- 91.xxx.139.xxx ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max/stddev = 2.688/2.803/2.976/0.102 ms
sauron@mordor> show firewall filter __flowspec_default_inet__
Filter: __flowspec_default_inet__
Counters:
Name Bytes Packets
*,91.xxx.139.xxx,proto=1,len>=15&<=1400 420 5
Вывод: при обычном пинге пакетами 84 байт срабоатывало FlowSpec правило, которое обтрасывало трафик, при пинге пакетами 1400 байт - трафик успешно принимался.
Дополнительно из шелл (как войти в шел?) можно посмотреть активные фловы:
show jnh 0 services v4-flows count 10
Rec# SrcIP DstIP ToS Proto SPort DPort IIF APP PktCount ByteCount OIF Start End TCP H0 N <Bal Hash Idx> <...> <...>
===========================================================================================================================================================================
726872 64.2.191.1 128.0.13.1 0 6 1024 80 321 1 1 576 245760 19f8983e 19f8983e 10 19f8983e 3 <1 0 4> <0 288 2> <0 0 0>
737414 64.2.71.1 128.2.189.1 0 6 1024 80 321 1 1 72 245760 19f89985 19f89985 10 19f89985 3 <1 0 4> <1 208 2> <0 0 0>
642671 64.3.56.1 128.0.243.1 0 6 1024 80 321 1 1 72 245760 19f896f9 19f896f9 10 19f896f9 3 <1 0 12> <1 296 2> <0 0 0>
697571 64.1.17.1 128.3.5.1 0 6 1024 80 321 1 1 72 245760 19f89348 19f89348 10 19f89348 3 <1 0 14> <1 368 2> <0 0 0>
648737 64.2.70.1 128.1.108.1 0 6 1024 80 321 1 1 72 245760 19f88df0 19f88df0 10 19f88df0 3 <1 0 12> <1 136 2> <0 0 0>
699195 64.1.102.1 128.1.89.1 0 6 1024 80 321 1 1 72 245760 19f8a06d 19f8a06d 10 19f8a06d 3 <1 0 10> <1 48 2> <0 0 0>
705567 64.1.142.1 128.2.40.1 0 6 1024 80 321 1 1 72 245760 19f88f1f 19f88f1f 10 19f88f1f 3 <1 0 14> <0 64 2> <0 0 0>
685027 64.1.42.1 128.2.99.1 0 6 1024 80 321 1 1 72 245760 19f87ab7 19f87ab7 10 19f87ab7 3 <1 0 12> <1 296 2> <0 0 0>
670346 64.1.73.1 128.3.0.1 0 6 1024 80 321 1 1 72 245760 19f88371 19f88371 10 19f88371 3 <1 0 4> <1 208 2> <0 0 0>
634472 64.0.164.1 128.3.21.1 0 6 1024 80 321 1 1 72 245760 19f89605 19f89605 10 19f89605 3 <1 0 14> <1 368 2> <0 0 0>
Комментариев нет:
Отправить комментарий