Deep Application Traffic Inspection real-time traffic analysis up to 20Gbps



Similar documents
Network Traffic Monitoring and Analysis with GPUs

GPU-Based Network Traffic Monitoring & Analysis Tools

NetScaler VPX FAQ. Table of Contents

Network Traffic Monitoring & Analysis with GPUs

Where IT perceptions are reality. Test Report. OCe14000 Performance. Featuring Emulex OCe14102 Network Adapters Emulex XE100 Offload Engine

ZEN LOAD BALANCER EE v3.04 DATASHEET The Load Balancing made easy

Cisco PIX vs. Checkpoint Firewall

OpenFlow with Intel Voravit Tanyingyong, Markus Hidell, Peter Sjödin

High-Density Network Flow Monitoring

Wireshark in a Multi-Core Environment Using Hardware Acceleration Presenter: Pete Sanders, Napatech Inc. Sharkfest 2009 Stanford University

HANIC 100G: Hardware accelerator for 100 Gbps network traffic monitoring

Globus Striped GridFTP Framework and Server. Raj Kettimuthu, ANL and U. Chicago

D1.2 Network Load Balancing

Tempesta FW. Alexander Krizhanovsky NatSys Lab.

Monitoring Network Traffic using ntopng

Multi-Gigabit Intrusion Detection with OpenFlow and Commodity Clusters

Packet-based Network Traffic Monitoring and Analysis with GPUs

Infrastructure for active and passive measurements at 10Gbps and beyond

ZEN LOAD BALANCER EE v3.02 DATASHEET The Load Balancing made easy

Network forensics 101 Network monitoring with Netflow, nfsen + nfdump

SDN AND SECURITY: Why Take Over the Hosts When You Can Take Over the Network

EAGLE EYE IP TAP. 1. Introduction

Enabling Technologies for Distributed and Cloud Computing

System Requirements Table of contents

Gigabit Ethernet Packet Capture. User s Guide

An Oracle White Paper July Oracle Primavera Contract Management, Business Intelligence Publisher Edition-Sizing Guide

Game changing Technology für Ihre Kunden. Thomas Bürgis System Engineering Manager CEE

Monitoring Traffic manager

Content Switching Module for the Catalyst 6500 and Cisco 7600 Internet Router

Intel DPDK Boosts Server Appliance Performance White Paper

MoonGen. A Scriptable High-Speed Packet Generator Design and Implementation. Paul Emmerich. January 30th, 2016 FOSDEM 2016

High-Performance IP Service Node with Layer 4 to 7 Packet Processing Features

Datacenter Operating Systems

Intel Ethernet Switch Load Balancing System Design Using Advanced Features in Intel Ethernet Switch Family

Removing Performance Bottlenecks in Databases with Red Hat Enterprise Linux and Violin Memory Flash Storage Arrays. Red Hat Performance Engineering

Reducing Network Traffic in CERNET

SDN 交 換 機 核 心 技 術 - 流 量 分 類 以 及 應 用 辨 識 技 術. 黃 能 富 教 授 國 立 清 華 大 學 特 聘 教 授, 資 工 系 教 授 nfhuang@cs.nthu.edu.tw

Design of an Application Programming Interface for IP Network Monitoring

C-GEP 100 Monitoring application user manual

The Lagopus SDN Software Switch. 3.1 SDN and OpenFlow. 3. Cloud Computing Technology

FWSM introduction Intro 5/1

Stateful Firewalls. Hank and Foo

Securing Local Area Network with OpenFlow

Facilitating Network Management with Software Defined Networking

I3: Maximizing Packet Capture Performance. Andrew Brown

Performance Tuning Guidelines for PowerExchange for Microsoft Dynamics CRM

Cisco Integrated Services Routers Performance Overview

APV9650. Application Delivery Controller

IPV6 流 量 分 析 探 讨 北 京 大 学 计 算 中 心 周 昌 令

Scaling in a Hypervisor Environment

Monitoring high-speed networks using ntop. Luca Deri

Enabling Technologies for Distributed Computing

Agenda. Enterprise Application Performance Factors. Current form of Enterprise Applications. Factors to Application Performance.

基 於 SDN 與 可 程 式 化 硬 體 架 構 之 雲 端 網 路 系 統 交 換 器

NetFlow Aggregation. Feature Overview. Aggregation Cache Schemes

Bivio 7000 Series Network Appliance Platforms

UPC team: Pere Barlet-Ros Josep Solé-Pareta Josep Sanjuàs Diego Amores Intel sponsor: Gianluca Iannaccone

Managing Virtual Servers

Overview of Computer Networks

DB2 Connect for NT and the Microsoft Windows NT Load Balancing Service

VI Performance Monitoring

Scalable Extraction, Aggregation, and Response to Network Intelligence

Software Defined Networking What is it, how does it work, and what is it good for?

High-performance vswitch of the user, by the user, for the user

A Transport Protocol for Multimedia Wireless Sensor Networks

Cloud Networking Disruption with Software Defined Network Virtualization. Ali Khayam

High-Speed Network Traffic Monitoring Using ntopng. Luca

One Server Per City: C Using TCP for Very Large SIP Servers. Kumiko Ono Henning Schulzrinne {kumiko, hgs}@cs.columbia.edu

50. DFN Betriebstagung

Configuring IPS High Bandwidth Using EtherChannel Load Balancing

Internet Firewall CSIS Packet Filtering. Internet Firewall. Examples. Spring 2011 CSIS net15 1. Routers can implement packet filtering

Stingray Traffic Manager Sizing Guide

1. Comments on reviews a. Need to avoid just summarizing web page asks you for:

How to control Resource allocation on pseries multi MCM system

Virtualization Technologies and Blackboard: The Future of Blackboard Software on Multi-Core Technologies

Exam 1 Review Questions

HTGR- Netflow. or, how to know what your network really did without going broke

Testing Challenges for Modern Networks Built Using SDN and OpenFlow

SiteCelerate white paper

Cisco IOS Flexible NetFlow Technology

Question: 3 When using Application Intelligence, Server Time may be defined as.

OF 1.3 Testing and Challenges

Log Management with Open-Source Tools. Risto Vaarandi SEB Estonia

SDN/OpenFlow. Dean Pemberton Andy Linton

Application Latency Monitoring using nprobe

Thomas Fahrig Senior Developer Hypervisor Team. Hypervisor Architecture Terminology Goals Basics Details

DOCUMENT REFERENCE: SQ EN. SAMKNOWS SMARTPHONE-BASED TESTING SamKnows App for Android White Paper. May 2015

INTRODUCTION TO FIREWALL SECURITY

Network Infrastructure Technology Supporting Parallelization and Multiplexing of Services

TIME TO RETHINK PERFORMANCE MONITORING

Introduction to Passive Network Traffic Monitoring

Lab Exercise SSL/TLS. Objective. Step 1: Open a Trace. Step 2: Inspect the Trace

Virtualised MikroTik

CS 91: Cloud Systems & Datacenter Networks Networks Background

Steve Worrall Systems Engineer.

Classic IOS Firewall using CBACs Cisco and/or its affiliates. All rights reserved. 1

Open Source in Network Administration: the ntop Project

Performance of Host Identity Protocol on Nokia Internet Tablet

Networking Virtualization Using FPGAs

Project 4: IP over DNS Due: 11:59 PM, Dec 14, 2015

Transcription:

TELECOM ITALIA Deep Application Traffic Inspection real-time traffic analysis up to 20Gbps EuroBSDcon 2013 Fabrizio Invernizzi fabrizio.invernizzi@telecomitalia.it

TELECOM ITALIA mplane an Intelligent Measurement Plane for Future Network and Application Management Grant Agreement n. 318627

The Mplane project mplane is an FP7 Integrated Project Started in November 2012, 3 years project 11.2+ M cost 7.2 M EC funding 16 partners (8 industrial, 8 research) Goal: design and demonstration of an intelligent measurement plane for the Internet mplane is about large scale network measurements, and intelligent analysis for troubleshooting support embedding measurement into the Internet as an additional capability Fabrizio Invernizzi 3

Agenda Introduction Architecture Lab tests Real traffic Fabrizio Invernizzi T.TG.TD.DNI 4

DATI 3.0 INTRODUCTION Fabrizio Invernizzi 5

Introduction Typical use of DPIs in ISP networks User/Service profiling Lawful interception Policy Enforcement (network nodes decongestion) Security Traffic statistical analysis We are interested only in this Commercial solutions available for ISPs Cisco, Sandvine, Allot, Procera, Fabrizio Invernizzi 6

Why build a new DPI High Flexibility It is not (always) simple build complex, very specific traffic analysis on commercial solutions in short time External data correlation (RIR db, Routing informations, OTT API, ) Specific (on-demand) analysis Targeted to specific traffic flows Rebuild service logic Reduce development time required for a new analysis Fabrizio Invernizzi 7

Previous versions lesson learned Previous versions Kernel (netgraph) based Batch processing (once a day work on the daily interesting traffic) Multiple temporary files Limits Kernel traffic handlings not efficient enough for high speed interfaces (~500Kpkts hard limit) Batch processing uses only a limited portion of system resources High disk I/O Fabrizio Invernizzi T.TG.TD.DNI 8

Previous versions lesson learned disk I/O Daily work (Sqlite indexes) Batch activities Sqlite indexes disabled Fabrizio Invernizzi T.TG.TD.DNI 9

Previous versions lesson learned system load Batch activities Fabrizio Invernizzi T.TG.TD.DNI 10

DATI 3.0 GOALS (1/2) Use general purpose hardware No hardware accelerated traffic filter/disseption Off-the-shelf server hardware Analyse traffic on thy fly Reduce disks I/O Take best advantage of system potentiality No temp files to be managed Traffic throughput 2 x 10 Gbe Analyze at least 1% of the traffic Fabrizio Invernizzi T.TG.TD.DNI 11

DATI 3.0 GOALS (2/2) Analysis programmability No specific language (C, perl, javascript ) Multiple analysis on the same traffic should be possible No specific knowledge of low level details needed for the developer KISS approach Use FreeBSD WE KNOWN IT Solid and stable BSD license Accelerated network driver available (Netmap) Everything is where it should be (even after a new major version release) Fabrizio Invernizzi T.TG.TD.DNI 12

DATI 3.0 ARCHITECTURE Fabrizio Invernizzi 13

Overall architecture In memory Database I/O reduction Efficent, scalable Programmability Languange independent programmability Publish subscribe Event driver inter module comunication BPA BPF classificator Copy of traffic of interest (Efficient) HASH based multi-thread load distribution Flows state NETMAP Pointers to driver rings positions Coding best practises Fabrizio Invernizzi T.TG.TD.DNI 14

NETMAP See Luigi s talk http://2013.eurobsdcon.org/eurobsdcon-2013/talks/#luigirizzo Fabrizio Invernizzi 15

BPA Multithreaded user space application Interface with Netmap Read traffic from Netmap rings Filtering and Classification BPF static signature On match send the packet to a pool of tun interfaces (round robin) Flows (5-tuple) in memory Flow management Creation: packets matches a BPF signature and flow is not present Update: any packets matching the identifying 5-tuple Removal: no packets with the identifying 5-tuple seen in PKT_TTL seconds (30s) On removal send a message on a specific redis channel with collected flow info Fabrizio Invernizzi 16

BPA - architecture Sessions informations Netmap Thread Traffic Event Netmap ring pointer Packet copy (IP_A XOR Port_A XOR IP_B XOR Port_B) % NUM_THREADS if ( pkt_count[proc_id] > num_pkts_unlock ) pthread_cond_signal(&pt_cond[proc_id]) Positive BPF match

BPA sessions management Stored in NUM_TAB pre-allocated simple linked lists (TABS) NUM_TAB = 60 M (~1Gb memory) Slots taken from pre-allocated memory for each thread (~400Mb memory) Use the hash of the packet to select the list tab_id = packet_hash%num_tabs; Check expired thread One for each elaboration thread Continuously check all session and mark a flag in expired ones. Send a message on redis channel If it finds less than EXPIRED_THRESOLD (100) stops for 1 second Expired session will be removed by the elaboration thread and memory returned to the pool Fabrizio Invernizzi 18

BPA Flows Flow identification Protocol [TCP,UDP], IP source, IP destination, Port source, Port destination Flow information 5-tuple, Creation timestamp Packets, Volume, Last match Expired Multiple BPF match in a flow Example: HTTP pipelining Only one flow information is kept All matching packets will be sent to the corresponding tun for elaboration All interested analyzer will receive the redis message Fabrizio Invernizzi 19

user Kernel DATI 3.0 @ EuroBSDcon 2013 Traffic from BPA to field extraction BPA can load balance the matching packets over multiple tuns tun1 tun1 tun0 Field extraction Packet info Field extraction Any application capable of reading from tun interfaces

Field extraction Receives traffic from configured tun interfaces Extract desired traffic fields from packets Store information in redis Gets a unique id from redis (INCRBY) HMSET <key> Timestamp ts field1 value1 fieldn valuen Publish the availability of the information on a specific redis channel Currently using NBEXTRACTOR

Field extraction - nbextractor Deployed by Politecnico di Torino http://www.nbee.org/doku.php Based on library for generic packet processing (netpdl) XML description of packets format Fixed position fields Delimited fields Regex based fields (performance warning!) Just In time compiler available Boost performance Freebsd @64 expected for 1Q2014 Fabrizio Invernizzi 22

The nbextractor process User app NetPFL high-level processing language: extract (eth.src,eth.dst) Extracted fields Eth.src= 11:22:33:44:55:66 Eth.dst= 77:88:99:AA:BB:CC Application-level API: NetBee library Anonimizer High-level compiler (NetPDL+NetPFL) NetVM Assembly Just in Time Compiler Native (x64) Assembly Target CPU (e.g. Intel x86) Full payload packet NetPDL protocol definitions database <protocol name= eth > <field name= src size= 6 /> <field name= dst size= 6 />... </protocol> Packets Network Fabrizio Invernizzi 23

REDIS Extracted information storage Packets fields Aging of data using policy_ttl Effective memory usage Performance Clustering (when available) PUB/SUB system All analyzers interested in an application subscribe a specific channel All analyzer interested in an application sessions information subscribe to a specific channel

Analyzer example (nodejs) var redis = require("redis"); redismessages = redis.createclient('/tmp/redis.sock'); redissessioninfo = redis.createclient('/tmp/redis.sock'); redishash = redis.createclient('/tmp/redis.sock'); redismessages.subscribe(configuration.protocolchannel); redissessioninfo.subscribe(configuration.bpasessionchannel); var sessions = 0; var requests = 0; setinterval(publishstats, configuration.publishstatsperiod); redissessioninfo.on("message", function (channel, message) { } sessions = (sessions *1) + 1; autore T.TG.TD.DNI 25

Analyzer example (nodejs) redismessages.on("message", function (channel, message) { } requests = (requests *1)+1; redishash.hgetall(message, function (err, obj) { if (!obj){ } console.log( Error reading from REDIS DB"); return; console.log(obj.http_referer); function publishstats(){ console.log( Requests:"+requests+ Sessions:"+sessions); requests = 0; sessions = 0; } autore T.TG.TD.DNI 26

DATI 3.0 LAB TESTS Fabrizio Invernizzi 27

Test architecture ANALYSIS INPUT: http_get PUBLISH_PERIOD: 10sec PUBLISH_FORMAT:STDOUT Ixia 1/1 3/1 4/1 ~420 Mbs (~35 Kpkt/s) HTTP GET ~ 20 Gbs (2M pkt/s) Background traffic igb0 ix0 ix1 15x Field Extraction Field Extraction Field Extraction Field Extraction Field Extraction 5x AnalyzerAPP BPF FILTER_NAME http # GET BPF tcp[(tcp[12] >> 4)*4:4]=0x47455420 TAP_IF tun0 TAP_IF tun9 FIELD EXTRACTION INPUT: tun0 tun14 PROTOCOL DEF: netpdl_http_noeth.xml FIELDS:(ip.src,ip.dst,tcp.sport,tcp. dport,http.url,http.referer,http.hos t) REDIS_EXPIRE: 300 REDIS_CHANNEL: http_get 10 Gbe 1 Gbe Fabrizio Invernizzi 28

System Under Test details (1/3) Hardware SondaRedis# dmesg grep memory real memory = 68719476736 (65536 MB) avail memory = 66232705024 (63164 MB) SondaRedis# dmesg grep CPU CPU: Intel(R) Xeon(R) CPU E5620 @ 2.40GHz (2400.13-MHz K8-class CPU) FreeBSD/SMP: Multiprocessor System Detected: 16 CPUs Software SondaRedis# uname -mrp 9.1-PRERELEASE amd64 SondaRedis# redis-cli info grep version redis_version:2.4.4 Fabrizio Invernizzi 29

System Under Test details (2/3) BPA config #Capture Interface IFNAME ix0 IFNAME ix1 IFNAME igb0 #With witch frequency (in seconds) print statistics to syslog TIME_STATS 10 #Redis Unix Socket REDIS_SOCK /tmp/redis.sock #Filters FILTER_NAME http BPF tcp[(tcp[12] >> 4) * 4 : 4] = 0x47455420 TAP_IF tun0 TAP_IF tun14 Fabrizio Invernizzi 30

System Under Test details (3/3) Redis config unixsocket /tmp/redis.sock maxmemory 32000000000 maxmemory-policy volatile-ttl vm-enabled no no persistence Fabrizio Invernizzi 31

Traffic composition Background traffic (each interface) ~1.031 Kpkt/sec Packet size: uniform distribution from 500 bytes to 1518 bytes ~ 9.791 Mbs Random source and destination (on last 16 bits) Valid TCP header, random payload HTTP traffic ~35 Kpkt/sec Packet size: 1500 bytes ~420 Mbs Random source and destination (100 destinations, last 16 bits for source) Valid TCP header with 3 different HTTP GET as payload Fabrizio Invernizzi 32

NbExtractor pseudo-config (1/2) <protocol name="http" longname="http Protocol" showsumtemplate="http"> <format> <fields> <switch expr="buf2int($packet[$currentoffset:4])"> <case value="0x47455420"> <includeblk name="get_payload" /> </case> [...] </switch> </fields> <block name="get_payload" longname="http GET payload"> <field type="fixed" name="method" longname="http Method" size="4" showtemplate="fieldasciilinefast"/> <field type="line" name="url" showtemplate="fieldasciilinefast"/> <field type="pattern" name="host" pattern="(?<=host: )[^\\n]*" showtemplate="fieldasciilinefast"/> <field type="pattern" name="useragent" pattern="(?<=user-agent: )[^\\n]*" showtemplate="fieldasciilinefast"/> Fabrizio Invernizzi 33

NbExtractor pseudo-config (2/2) <field type="pattern" name="referer" pattern="(?<=referer: )[^\\n]*" showtemplate="fieldasciilinefast"/> <field type="pattern" name="cookie" pattern="(?<=cookie: )[^\\n]*" showtemplate="fieldasciilinefast"/> <field type="variable" name="get" longname="get options" expr="$payloadlength-$currentoffset" showtemplate="fieldasciilinefast"/> </protocol> </block> [...] </format> [...] Fabrizio Invernizzi 34

analyzer app pseudo code (nodejs) 1/2 redismessages = redis.createclient(configuration.redissocket); redissessioninfo = redis.createclient(configuration.redissocket); var requests = 0; Var sessions = 0; // Publish statistics setinterval(publishglobalstats, configuration.publishglobalstatsperiod); redismessages.on("message", function (channel, message) { }); requests = (requests *1) +1; redissessioninfo.on("message", function (channel, message) { sessions = (sessions *1) + 1; }); Fabrizio Invernizzi 35

analyzer app pseudo code (nodejs) 2/2 function publishglobalstats(){ console.log(requests+":"+sessions); requests = 0; sessions = 0; } // Subscribe to get fields channel redismessages.subscribe(configuration.protocolchannel); // Subscribe to the sessions info channel redissessioninfo.subscribe(configuration.bpasessionchannel); Fabrizio Invernizzi 36

Test result BPA traffic Lost: 6 out of 1G pkts (@20Gbs, 2.5Mpkts) Fabrizio Invernizzi 37

Test result packets analyzed Packets arrives to the analyzer with some variable delay Fabrizio Invernizzi 38

Test result packets analyzed lost Lost: 0,02% (@20Gbs, 2.5Mpkts) Packets arrives to the analyzer with some variable delay Fabrizio Invernizzi 39

Test result BPA sessions Session identification IP (src, dst) and port (src, dst) Session expiration No match on a session for (at least) 30 seconds Fabrizio Invernizzi 40

Test result system load 60% system idle Stable trend Fabrizio Invernizzi 41

Redis 20 clients Pipelining 15 field extractors 5 BPA threads for session info Commands of 50 packets before send Socket connections No persistence A great amount of memory is required Real traffic tests demonstrate how good is Redis in memory handling Fabrizio Invernizzi 42

LAB test conclusions The system can handle traffic up to 20 Gbs ~2.5Mpkt/sec handled during tests 35 Kpkt/sec analyzed (1.5 % of total traffic) Resources available for real, more complex analyzers 32 GB of memory can be considered enough, 64 GB safe if analyzers use redis for storing temporary information The system is stable 0.02% packets lost in the field extraction/analysis Fabrizio Invernizzi 43

LAB test conclusions - improvements Eliminate the usage of tun interfaces Is this a real limit? Improve field extraction We need 0% loss @2.5Mpkts We need to increase the number of packets per Field extractor instance Too many process can lead to contention problems and reduce scalability Complex to manage Trying to go beyond 100Kpts/sec (~5% or total traffic) analyzed Profiling of interaction with redis is required to better understand howto optimize messages and information storage. A single redis instance could not be enough Redis clustering? Fabrizio Invernizzi 44

DATI 3.0 REAL TRAFFIC Fabrizio Invernizzi 45

System details (1/2) Hardware DATI-TO1_TEMP2# dmesg grep memory real memory = 137438953472 (131072 MB) avail memory = 132546859008 (126406 MB) DATI-TO1_TEMP2# dmesg grep CPU CPU: Intel(R) Xeon(R) CPU X5675 @ 3.07GHz (3066.83-MHz K8-class CPU) FreeBSD/SMP: Multiprocessor System Detected: 24 CPUs Software DATI-TO1_TEMP2# uname -mrp 9.1-PRERELEASE amd64 DATI-TO1_TEMP2# redis-cli info grep version redis_version:2.4.4 Fabrizio Invernizzi 46

System details (2/2) Redis config unixsocket /tmp/redis.sock maxmemory 25000000000 maxmemory-policy volatile-ttl vm-enabled no no persistence BPA configuration #Capture Interface IFNAME ix0 IFNAME ix1 TIME_STATS 300 FILTER_NAME http BPF tcp[(tcp[12] >> 4) * 4 : 4] = 0x47455420 TAP_IF tun0 Fabrizio Invernizzi 47

Traffic trend Traffic volume Packet rate Fabrizio Invernizzi 48

Filtered traffic (HTTP GET) BPA filtered BPA active sessions Fabrizio Invernizzi 49

REDIS stats Redis Memory usage Redis comands processed Redis Expired vs Evicted keys Fabrizio Invernizzi 50

System Idle CPU (green) User CPU (blu) Disk transations Fabrizio Invernizzi 51

Real traffic conclusions possible improvements A lot of work to do No so simple to use flow states Analyzers should keep track of interesting flows You should re implement something already in BPA Improve BPA classification Statistical classification Analyzers/Field extractors feedback Implement a feedback channel toward the BPA Analyzers/field extractors can suggest per flow tags These tags will be sent by BPA associated to usual info Fabrizio Invernizzi 52

? QUESTIONS Fabrizio Invernizzi 53