Figure 1: Real-time SDN Analytics for DDoS mitigation |
This article builds on the test setup described in RESTful control of Cumulus Linux ACLs in order to implement the ONS 2014 SDN Idol winning distributed denial of service (DDoS) mitigation solution - Real-time SDN Analytics for DDoS mitigation.
The following sFlow-RT application implements basic DDoS mitigation functionality:
include('extras/json2.js'); // Define large flow as greater than 100Mbits/sec for 1 second or longer var bytes_per_second = 100000000/8; var duration_seconds = 1; var id = 0; var controls = {}; setFlow('udp_target', {keys:'ipdestination,udpsourceport', value:'bytes', filter:'direction=egress', t:duration_seconds} ); setThreshold('attack', {metric:'udp_target', value:bytes_per_second, byFlow:true, timeout:4, filter:{ifspeed:[1000000000]}} ); setEventHandler(function(evt) { if(controls[evt.flowKey]) return; var rulename = 'ddos' + id++; var keys = evt.flowKey.split(','); var acl = [ '[iptables]', '# block UDP reflection attack', '-A FORWARD --in-interface swp+ -d ' + keys[0] + ' -p udp --sport ' + keys[1] + ' -j DROP' ]; http('http://'+evt.agent+':8080/acl/'+rulename, 'put','application/json',JSON.stringify(acl)); controls[evt.flowKey] = { agent:evt.agent, dataSource:evt.dataSource, rulename:rulename, time: (new Date()).getTime() }; },['attack']); setIntervalHandler(function() { for(var flowKey in controls) { var ctx = controls[flowKey]; var val = flowValue(ctx.agent,ctx.dataSource + '.udp_target',flowKey); if(val < 100) { http('http://'+ctx.agent+':8080/acl/'+ctx.rulename,'delete'); delete controls[flowKey]; } } },5);The following command line argument load the script:
-Dsflow.sumegress=yes -Dscript.file=clddos.jsSome notes on the script:
- The 100Mbits/s threshold for large flows was selected because it represents 10% of the bandwidth of the 1Gigabit access ports on the network
- The setFlow filter specifies egress flows since the goal is to filter flows as converge on customer facing egress ports
- The setThreshold filter specifies that thresholds are only applied to 1Gigabit access ports
- The interval handler function runs every 5 seconds and removes ACLs for flows that have completed
- The sflow.sumegress=yes option instructs sFlow-RT to synthesize egress totals based on the ingress sampled data
The nping tool can be used to simulate DDoS attacks to test the application. The following script simulates a series of DNS reflection attacks:
The chart at the top right of the screen capture shows attack traffic mixed with normal traffic arriving at the edge switch. The switch sends a continuous stream of measurements to the sFlow-RT controller running the DDoS mitigation application. When an attack is detected, an ACL is pushed to the switch to block the traffic. The chart at the bottom right trends traffic on the protected customer link, showing that normal traffic is left untouched, but attack traffic is immediately detected and removed from the link.
while true; do nping --udp --source-port 53 --data-length 1400 --rate 2000 --count 700000 --no-capture --quiet 10.100.10.151; sleep 40; doneThe following screen capture shows a basic test setup and results:
Note: While this demonstration only used a single switch, the solution easily scales to hundreds of switches and thousands of edge ports.This example, along with the large flow marking example, demonstrates that basing the sFlow-RT fabric controller on widely supported sFlow and HTTP/REST standards and including an open, standards based, programming environment (JavaScript / ECMAScript) makes sFlow-RT an ideal platform for rapidly developing and deploying traffic engineering SDN applications in existing networks.