Я настроил топологию сети с Min inet и Onos в качестве контроллера. Я использую SFlow-RT для мониторинга трафика c. Я также использую SFlow для блокировки и разблокировки атаки DDos. Сценарий для этого показан ниже:
setFlow('udp_reflection',
{keys:'ipdestination,udpsourceport',value:'frames'});
setThreshold('udp_reflection_attack',
{metric:'udp_reflection',value:100,byFlow:true,timeout:2});
setEventHandler(function(evt) {
// don't consider inter-switch links
var link = topologyInterfaceToLink(evt.agent,evt.dataSource);
if(link) return;
// get port information
var port = topologyInterfaceToPort(evt.agent,evt.dataSource);
if(!port) return;
// need OpenFlow info to create ONOS filtering rule
if(!port.dpid || !port.ofport) return;
// we already have a control for this flow
if(controls[evt.flowKey]) return;
var [ipdestination,udpsourceport] = evt.flowKey.split(',');
var msg = {
flows: [
{
priority:4000,
timeout:0,
isPermanent:true,
deviceId:'of:'+port.dpid,
treatment:[],
selector: {
criteria: [
{type:'IN_PORT',port:port.ofport},
{type:'ETH_TYPE',ethType:'0x800'},
{type:'IPV4_DST',ip:ipdestination+'/32'},
{type:'IP_PROTO',protocol:'17'},
{type:'UDP_SRC',udpPort:udpsourceport}
]
}
}
]
};
var resp = http2({
url:'http://'+onos+':8181/onos/v1/flows?appId=ddos',
headers:{'Content-Type':'application/json','Accept':'application/json'},
operation:'post',
user:user,
password:password,
body: JSON.stringify(msg)
});
var {deviceId,flowId} = JSON.parse(resp.body).flows[0];
controls[evt.flowKey] = {
time:Date.now(),
threshold:evt.thresholdID,
agent:evt.agent,
metric:evt.dataSource+'.'+evt.metric,
deviceId:deviceId,
flowId:flowId
};
logInfo("blocking " + evt.flowKey);
},['udp_reflection_attack']);
setIntervalHandler(function() {
var now = Date.now();
for(var key in controls) {
let rec = controls[key];
// keep control for at least 10 seconds
if(now - rec.time < 10000) continue;
// keep control if threshold still triggered
if(thresholdTriggered(rec.threshold,rec.agent,rec.metric,key)) continue;
var resp = http2({
url:'http://'+onos+':8181/onos/v1/flows/'
+encodeURIComponent(rec.deviceId)+'/'+encodeURIComponent(rec.flowId),
headers:{'Accept':'application/json'},
operation:'delete',
user:user,
password:password
});
delete controls[key];
logInfo("unblocking " + key);
}
});
Я заливаю трафики c, используя
mininet-onos> iperf h1 h2
mininet-onos> h1 hping3 --flood --udp -k -s 22 h2
Теперь вместо того, чтобы блокировать DDos атаку, я хочу перенаправить ее на другой хост или коммутатор.
Может кто-нибудь помочь мне с этим или изменить этот скрипт, чтобы перенаправить трафик c вместо блокировки траффи c.
С уважением
Усама