пятница, 4 марта 2016 г.

Juniper MX + Arbor = DDoS Mitigation

Пример связки 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 type internal
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 байт:

sauron@mordor> show configuration routing-options                        
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>

Комментариев нет:

Отправить комментарий