Documentation
¶
Index ¶
- Constants
- func MakeAlertEntryForHit(e types.Entry, eType string, alertPrefix string, ioc string) types.Entry
- func MakeIPAlertEntryForHit(e types.Entry, matchedIP string, rangerEntry cidranger.RangerEntry, ...) types.Entry
- type AggregateDNSEvent
- type AggregateDNSReplyDetails
- type AggregateFlowEvent
- type AggregatedDNSDetails
- type AggregatedFlowDetails
- type BloomHandler
- type BloomNoFileErr
- type ConcurrentHandler
- type Context
- type ContextChunk
- type ContextCollector
- func (c *ContextCollector) AddFlowListener(flowChan chan types.Entry)
- func (c *ContextCollector) Consume(e *types.Entry) error
- func (c *ContextCollector) GetEventTypes() []string
- func (c *ContextCollector) GetName() string
- func (c *ContextCollector) Mark(flowID string)
- func (c *ContextCollector) Run()
- func (c *ContextCollector) Stop(stoppedChan chan bool)
- func (c *ContextCollector) SubmitStats(sc *util.PerformanceStatsEncoder)
- type ContextCollectorPerfStats
- type ContextShipper
- type ContextShipperAMQP
- type DBHandler
- type DNSAggregator
- type DNSAggregatorPerfStats
- type EventProfile
- type EventProfiler
- type FlowAggregator
- type FlowAggregatorPerfStats
- type FlowExtractor
- type FlowNotifier
- type ForwardHandler
- func (fh *ForwardHandler) AddFields(fields map[string]string)
- func (fh *ForwardHandler) Consume(e *types.Entry) error
- func (fh *ForwardHandler) EnableRDNS(expiryPeriod time.Duration)
- func (fh *ForwardHandler) EnableStenosis(endpoint string, timeout, timeBracket time.Duration, ...) (err error)
- func (fh *ForwardHandler) GetEventTypes() []string
- func (fh *ForwardHandler) GetName() string
- func (fh *ForwardHandler) Run()
- func (fh *ForwardHandler) Stop(stoppedChan chan bool)
- func (fh *ForwardHandler) SubmitStats(sc *util.PerformanceStatsEncoder)
- type ForwardHandlerPerfStats
- type Handler
- type HandlerDispatcher
- type HandlerDispatcherPerfStats
- type IPHandler
- type PDNSCollector
- type RDNSHandler
- type StatsGeneratingHandler
- type StenosisConnector
- type UnicornAggregate
- type UnicornAggregator
- func (a *UnicornAggregator) Consume(e *types.Entry) error
- func (a *UnicornAggregator) CountFlowTuple(key string, bytestoclient int64, bytestoserver int64)
- func (a *UnicornAggregator) CountHTTPHost(destip string, hostname string)
- func (a *UnicornAggregator) GetEventTypes() []string
- func (a *UnicornAggregator) GetName() string
- func (a *UnicornAggregator) Run()
- func (a *UnicornAggregator) Stop(stopChan chan bool)
- type VoidHandler
Constants ¶
const ( // ContextQueueLength is the length of the queue buffering incoming context // bundles to balance out potential transmission delays. ContextQueueLength = 100 )
const DebugOutputInterval = 100000
DebugOutputInterval specifies the amount of cache operations before printing the current cache size, in verbose mode.
Variables ¶
This section is empty.
Functions ¶
func MakeAlertEntryForHit ¶
MakeAlertEntryForHit returns an alert Entry as raised by an external indicator match, e.g. a Bloom filter hit. The resulting alert will retain the triggering event's metadata (e.g. 'dns' or 'http' objects) as well as its timestamp.
func MakeIPAlertEntryForHit ¶ added in v1.0.3
func MakeIPAlertEntryForHit(e types.Entry, matchedIP string, rangerEntry cidranger.RangerEntry, alertPrefix string) types.Entry
MakeIPAlertEntryForHit returns an alert Entry as raised by an external IP hit. The resulting alert will retain the triggering event's metadata as well as its timestamp.
Types ¶
type AggregateDNSEvent ¶
type AggregateDNSEvent struct {
Timestamp []string `json:"timestamp"`
EventType string `json:"event_type"`
SrcIP []string `json:"src_ip,omitempty"`
SrcPort []int `json:"src_port,omitempty"`
DestIP []string `json:"dest_ip,omitempty"`
DestPort int `json:"dest_port,omitempty"`
DNS AggregatedDNSDetails `json:"dns,omitempty"`
}
AggregateDNSEvent holds aggregated flow data.
type AggregateDNSReplyDetails ¶
type AggregateDNSReplyDetails struct {
Rrtype string `json:"rrtype,omitempty"`
Rdata string `json:"rdata,omitempty"`
Rcode string `json:"rcode,omitempty"`
Type string `json:"type,omitempty"`
}
AggregateDNSReplyDetails holds data for a query tuple.
type AggregateFlowEvent ¶
type AggregateFlowEvent struct {
Timestamp []string `json:"timestamp"`
EventType string `json:"event_type"`
SrcIP string `json:"src_ip,omitempty"`
SrcPort []int `json:"src_port,omitempty"`
DestIP string `json:"dest_ip,omitempty"`
DestPort int `json:"dest_port,omitempty"`
Flow AggregatedFlowDetails `json:"flow,omitempty"`
}
AggregateFlowEvent holds aggregated flow data.
type AggregatedDNSDetails ¶
type AggregatedDNSDetails struct {
Rrname string `json:"rrname,omitempty"`
Details []AggregateDNSReplyDetails `json:"rdata,omitempty"`
}
AggregatedDNSDetails holds summarized traffic stats for a given AggregateDNSEvent.
type AggregatedFlowDetails ¶
type AggregatedFlowDetails struct {
PktsToserver int64 `json:"pkts_toserver"`
PktsToclient int64 `json:"pkts_toclient"`
BytesToserver int64 `json:"bytes_toserver"`
BytesToclient int64 `json:"bytes_toclient"`
}
AggregatedFlowDetails holds summarized traffic stats for a given AggregateFlowEvent.
type BloomHandler ¶
type BloomHandler struct {
sync.Mutex
Logger *log.Entry
Name string
EventType string
IocBloom *bloom.BloomFilter
BloomFilename string
BloomFileIsCompressed bool
DatabaseEventChan chan types.Entry
ForwardHandler Handler
DoForwardAlert bool
AlertPrefix string
BlacklistIOCs map[string]struct{}
}
BloomHandler is a Handler which is meant to check for the presence of event type-specific keywords in a Bloom filter, raising new 'alert' type events when matches are found.
func MakeBloomHandler ¶
func MakeBloomHandler(iocBloom *bloom.BloomFilter, databaseChan chan types.Entry, forwardHandler Handler, alertPrefix string) *BloomHandler
MakeBloomHandler returns a new BloomHandler, checking against the given Bloom filter and sending alerts to databaseChan as well as forwarding them to a given forwarding handler.
func MakeBloomHandlerFromFile ¶
func MakeBloomHandlerFromFile(bloomFilename string, compressed bool, databaseChan chan types.Entry, forwardHandler Handler, alertPrefix string, blacklistIOCs []string) (*BloomHandler, error)
MakeBloomHandlerFromFile returns a new BloomHandler created from a new Bloom filter specified by the given file name.
func (*BloomHandler) Consume ¶
func (a *BloomHandler) Consume(e *types.Entry) error
Consume processes an Entry, emitting alerts if there is a match
func (*BloomHandler) GetEventTypes ¶
func (a *BloomHandler) GetEventTypes() []string
GetEventTypes returns a slice of event type strings that this handler should be applied to
func (*BloomHandler) GetName ¶
func (a *BloomHandler) GetName() string
GetName returns the name of the handler
func (*BloomHandler) Reload ¶
func (a *BloomHandler) Reload() error
Reload triggers a reload of the contents of the file with the name.
type BloomNoFileErr ¶
type BloomNoFileErr struct {
// contains filtered or unexported fields
}
BloomNoFileErr is an error thrown when a file-based operation (e.g. reloading) is attempted on a bloom filter object with no file information attached.
func (*BloomNoFileErr) Error ¶
func (e *BloomNoFileErr) Error() string
Error returns the error message.
type ConcurrentHandler ¶
ConcurrentHandler is an interface describing the behaviour for a component to handle events parsed from EVE input, while concurrently performing other actions, such as collecting, integrating and/or forwarding data.
type Context ¶ added in v1.0.8
type Context []string
Context is a collection of JSON events that belong to a given flow.
type ContextChunk ¶ added in v1.0.8
type ContextChunk struct {
Timestamp time.Time `json:"timestamp"`
SensorID string `json:"sensor_id"`
Events []interface{} `json:"events"`
}
ContextChunk represents a collection of events for transmission via AMQP.
type ContextCollector ¶ added in v1.0.8
type ContextCollector struct {
PerfStats ContextCollectorPerfStats
StatsEncoder *util.PerformanceStatsEncoder
StopChan chan bool
StoppedChan chan bool
StopCounterChan chan bool
StoppedCounterChan chan bool
Running bool
StatsLock sync.Mutex
FlowListeners []chan types.Entry
Cache *cache.Cache
MarkLock sync.Mutex
Marked map[string]struct{}
Logger *log.Entry
Ship ContextShipper
// contains filtered or unexported fields
}
ContextCollector is a component that maintains a cache of metadata per flow ID, forwarding it to a specified sink if associated with an alert.
var GlobalContextCollector *ContextCollector
GlobalContextCollector is a shared ContextCollector to be used by FEVER.
func MakeContextCollector ¶ added in v1.0.8
func MakeContextCollector(shipper ContextShipper, defaultTTL time.Duration) *ContextCollector
MakeContextCollector creates a new ContextCollector.
func (*ContextCollector) AddFlowListener ¶ added in v1.0.9
func (c *ContextCollector) AddFlowListener(flowChan chan types.Entry)
AddFlowListener registers flowChan as a channel to emit a 'flow' Entry on whenever a marked flow is forwarded
func (*ContextCollector) Consume ¶ added in v1.0.8
func (c *ContextCollector) Consume(e *types.Entry) error
Consume processes an Entry, adding the data within to the internal aggregated state
func (*ContextCollector) GetEventTypes ¶ added in v1.0.8
func (c *ContextCollector) GetEventTypes() []string
GetEventTypes returns a slice of event type strings that this handler should be applied to
func (*ContextCollector) GetName ¶ added in v1.0.8
func (c *ContextCollector) GetName() string
GetName returns the name of the handler
func (*ContextCollector) Mark ¶ added in v1.0.8
func (c *ContextCollector) Mark(flowID string)
Mark queues metadata for a given flow for forwarding, identified by its flow ID.
func (*ContextCollector) Run ¶ added in v1.0.8
func (c *ContextCollector) Run()
Run starts the metrics collection and submission in the ContextCollector.
func (*ContextCollector) Stop ¶ added in v1.0.8
func (c *ContextCollector) Stop(stoppedChan chan bool)
Stop stops the metrics collection and submission in the ContextCollector.
func (*ContextCollector) SubmitStats ¶ added in v1.0.8
func (c *ContextCollector) SubmitStats(sc *util.PerformanceStatsEncoder)
SubmitStats registers a PerformanceStatsEncoder for runtime stats submission.
type ContextCollectorPerfStats ¶ added in v1.0.8
type ContextCollectorPerfStats struct {
Flows uint64 `influx:"context_flows"`
Events uint64 `influx:"context_events"`
JSONBytes uint64 `influx:"context_json_bytes"`
}
ContextCollectorPerfStats contains performance stats written to InfluxDB for monitoring.
type ContextShipper ¶ added in v1.0.8
ContextShipper is a function that processes a slice of Entries that make up a context of an alert, e.g. all events that share a flow ID relevant for the alert.
type ContextShipperAMQP ¶ added in v1.0.8
type ContextShipperAMQP struct {
Submitter util.StatsSubmitter
InChan chan Context
SensorID string
}
ContextShipperAMQP is a ContextShipper that sends incoming context bundles to an AMQP exchange.
func (*ContextShipperAMQP) Start ¶ added in v1.0.8
func (cs *ContextShipperAMQP) Start(s util.StatsSubmitter) (chan<- Context, error)
Start initiates the concurrent handling of incoming context bundles in the Shipper's input channel. It will stop automatically once this channel is closed.
type DBHandler ¶ added in v1.0.4
DBHandler writes consumed events to a database.
func (*DBHandler) Consume ¶ added in v1.0.4
Consume simply emits ths consumed entry on the default output channel
func (*DBHandler) GetEventTypes ¶ added in v1.0.4
GetEventTypes here is a dummy method -- since this handler is never registered we don't need to set this to an actual event type
type DNSAggregator ¶
type DNSAggregator struct {
SensorID string
Count int64
DNSMutex sync.RWMutex
DNS map[string]*AggregateDNSEvent
PerfStats DNSAggregatorPerfStats
StatsEncoder *util.PerformanceStatsEncoder
SrcIPSet map[string]bool
DestIPSet map[string]bool
AnswerSet map[string]bool
StringBuf bytes.Buffer
FlushPeriod time.Duration
DatabaseOutChan chan types.Entry
CloseChan chan bool
ClosedChan chan bool
Logger *log.Entry
}
DNSAggregator is an aggregator that groups DNS events with the same domain name.
func MakeDNSAggregator ¶
func MakeDNSAggregator(flushPeriod time.Duration, outChan chan types.Entry) *DNSAggregator
MakeDNSAggregator creates a new empty DNSAggregator.
func (*DNSAggregator) Consume ¶
func (a *DNSAggregator) Consume(e *types.Entry) error
Consume processes an Entry, adding the data within to the internal aggregated state
func (*DNSAggregator) GetEventTypes ¶
func (a *DNSAggregator) GetEventTypes() []string
GetEventTypes returns a slice of event type strings that this handler should be applied to
func (*DNSAggregator) GetName ¶
func (a *DNSAggregator) GetName() string
GetName returns the name of the handler
func (*DNSAggregator) Run ¶
func (a *DNSAggregator) Run()
Run starts the background aggregation service for this handler
func (*DNSAggregator) Stop ¶
func (a *DNSAggregator) Stop(stopChan chan bool)
Stop causes the aggregator to cease aggregating and submitting data
func (*DNSAggregator) SubmitStats ¶
func (a *DNSAggregator) SubmitStats(sc *util.PerformanceStatsEncoder)
SubmitStats registers a PerformanceStatsEncoder for runtime stats submission.
type DNSAggregatorPerfStats ¶
type DNSAggregatorPerfStats struct {
DNSAggregateRawCount uint64 `influx:"dns_aggregate_raw_count"`
DNSAggregateCount uint64 `influx:"dns_aggregate_count"`
}
DNSAggregatorPerfStats contains performance stats written to InfluxDB for monitoring.
type EventProfile ¶
EventProfile contains counts per event_type such as occurrences and JSON size.
type EventProfiler ¶
type EventProfiler struct {
SensorID string
Host string
Profile EventProfile
FlushPeriod time.Duration
ProfileMutex sync.Mutex
CloseChan chan bool
ClosedChan chan bool
Logger *log.Entry
Submitter util.StatsSubmitter
SubmitChannel chan []byte
}
EventProfiler counts EVE event type statistics, such as number and size of JSON data received from the input.
func MakeEventProfiler ¶
func MakeEventProfiler(flushPeriod time.Duration, submitter util.StatsSubmitter) (*EventProfiler, error)
MakeEventProfiler creates a new EventProfiler.
func (*EventProfiler) Consume ¶
func (a *EventProfiler) Consume(e *types.Entry) error
Consume processes an Entry, adding the data within to the internal aggregated state
func (*EventProfiler) GetEventTypes ¶
func (a *EventProfiler) GetEventTypes() []string
GetEventTypes returns a slice of event type strings that this handler should be applied to
func (*EventProfiler) GetName ¶
func (a *EventProfiler) GetName() string
GetName returns the name of the handler
func (*EventProfiler) Run ¶
func (a *EventProfiler) Run()
Run starts the background aggregation service for this handler
func (*EventProfiler) Stop ¶
func (a *EventProfiler) Stop(stopChan chan bool)
Stop causes the aggregator to cease aggregating and submitting data
type FlowAggregator ¶
type FlowAggregator struct {
SensorID string
Count int64
FlowsMutex sync.RWMutex
Flows map[string]*AggregateFlowEvent
PerfStats FlowAggregatorPerfStats
StatsEncoder *util.PerformanceStatsEncoder
FlushPeriod time.Duration
StringBuf bytes.Buffer
DatabaseOutChan chan types.Entry
CloseChan chan bool
ClosedChan chan bool
Logger *log.Entry
}
FlowAggregator is an aggregator that groups flows with the same combination of srcIP/destIP/destPort.
func MakeFlowAggregator ¶
func MakeFlowAggregator(flushPeriod time.Duration, outChan chan types.Entry) *FlowAggregator
MakeFlowAggregator creates a new empty FlowAggregator.
func (*FlowAggregator) Consume ¶
func (a *FlowAggregator) Consume(e *types.Entry) error
Consume processes an Entry, adding the data within to the internal aggregated state
func (*FlowAggregator) GetEventTypes ¶
func (a *FlowAggregator) GetEventTypes() []string
GetEventTypes returns a slice of event type strings that this handler should be applied to
func (*FlowAggregator) GetName ¶
func (a *FlowAggregator) GetName() string
GetName returns the name of the handler
func (*FlowAggregator) Run ¶
func (a *FlowAggregator) Run()
Run starts the background aggregation service for this handler
func (*FlowAggregator) Stop ¶
func (a *FlowAggregator) Stop(stopChan chan bool)
Stop causes the aggregator to cease aggregating and submitting data
func (*FlowAggregator) SubmitStats ¶
func (a *FlowAggregator) SubmitStats(sc *util.PerformanceStatsEncoder)
SubmitStats registers a PerformanceStatsEncoder for runtime stats submission.
type FlowAggregatorPerfStats ¶
type FlowAggregatorPerfStats struct {
FlowAggregateRawCount uint64 `influx:"flow_aggregate_raw_count"`
FlowAggregateCount uint64 `influx:"flow_aggregate_count"`
}
FlowAggregatorPerfStats contains performance stats written to InfluxDB for monitoring.
type FlowExtractor ¶
type FlowExtractor struct {
SensorID string
BloomPath string
BloomFilter *bloom.BloomFilter
FlowsMutex sync.RWMutex
Flows *bytes.Buffer
SubmitChannel chan []byte
Submitter util.StatsSubmitter
FlushPeriod time.Duration
FlushCount int
CloseChan chan bool
ClosedChan chan bool
Logger *log.Entry
// contains filtered or unexported fields
}
FlowExtractor is an aggregator that extracts the flows from "hosts of interest" and sends them to the backend.
func MakeFlowExtractor ¶
func MakeFlowExtractor(flushPeriod time.Duration, flushCount int, bloomPath string, submitter util.StatsSubmitter) (*FlowExtractor, error)
MakeFlowExtractor creates a new empty FlowExtractor.
func (*FlowExtractor) Consume ¶
func (fe *FlowExtractor) Consume(e *types.Entry) error
Consume processes an Entry, adding the data within to the flows
func (*FlowExtractor) GetEventTypes ¶
func (fe *FlowExtractor) GetEventTypes() []string
GetEventTypes returns a slice of event type strings that this handler should be applied to
func (*FlowExtractor) GetName ¶
func (fe *FlowExtractor) GetName() string
GetName returns the name of the handler
func (*FlowExtractor) Run ¶
func (fe *FlowExtractor) Run()
Run starts the background aggregation service for this handler
func (*FlowExtractor) Stop ¶
func (fe *FlowExtractor) Stop(stopChan chan bool)
Stop causes the aggregator to cease aggregating and submitting data
type FlowNotifier ¶ added in v1.0.9
FlowNotifier is a handler that just passes flow events on a given channel once encountered.
func MakeFlowNotifier ¶ added in v1.0.9
func MakeFlowNotifier(outChan chan types.Entry) *FlowNotifier
MakeFlowNotifier creates a new FlowNotifier.
func (*FlowNotifier) Consume ¶ added in v1.0.9
func (n *FlowNotifier) Consume(e *types.Entry) error
Consume processes an Entry, emitting an Entry on the output channel
func (*FlowNotifier) GetEventTypes ¶ added in v1.0.9
func (n *FlowNotifier) GetEventTypes() []string
GetEventTypes returns a slice of event type strings that this handler should be applied to -- flow in this case.
func (*FlowNotifier) GetName ¶ added in v1.0.9
func (n *FlowNotifier) GetName() string
GetName returns the name of the handler
type ForwardHandler ¶
type ForwardHandler struct {
Logger *log.Entry
DoRDNS bool
RDNSHandler *RDNSHandler
AddedFields map[string]string
ContextCollector *ContextCollector
StenosisConnector *StenosisConnector
ForwardEventChan chan []byte
FlowNotifyChan chan types.Entry
OutputSocket string
OutputConn net.Conn
Reconnecting bool
ReconnLock sync.Mutex
ReconnectNotifyChan chan bool
StopReconnectChan chan bool
ReconnectTimes int
PerfStats ForwardHandlerPerfStats
StatsEncoder *util.PerformanceStatsEncoder
StopChan chan bool
StoppedChan chan bool
StopCounterChan chan bool
StoppedCounterChan chan bool
Running bool
Lock sync.Mutex
}
ForwardHandler is a handler that processes events by writing their JSON representation into a UNIX socket. This is limited by a list of allowed event types to be forwarded.
func MakeForwardHandler ¶
func MakeForwardHandler(reconnectTimes int, outputSocket string) *ForwardHandler
MakeForwardHandler creates a new forwarding handler
func (*ForwardHandler) AddFields ¶ added in v1.0.11
func (fh *ForwardHandler) AddFields(fields map[string]string)
AddFields enables the addition of a custom set of top-level fields to the forwarded JSON.
func (*ForwardHandler) Consume ¶
func (fh *ForwardHandler) Consume(e *types.Entry) error
Consume processes an Entry and prepares it to be sent off to the forwarding sink
func (*ForwardHandler) EnableRDNS ¶ added in v1.0.6
func (fh *ForwardHandler) EnableRDNS(expiryPeriod time.Duration)
EnableRDNS switches on reverse DNS enrichment for source and destination IPs in outgoing EVE events.
func (*ForwardHandler) EnableStenosis ¶ added in v1.0.9
func (fh *ForwardHandler) EnableStenosis(endpoint string, timeout, timeBracket time.Duration, notifyChan chan types.Entry, cacheExpiry time.Duration, tlsConfig *tls.Config) (err error)
EnableStenosis ...
func (*ForwardHandler) GetEventTypes ¶
func (fh *ForwardHandler) GetEventTypes() []string
GetEventTypes returns a slice of event type strings that this handler should be applied to
func (*ForwardHandler) GetName ¶
func (fh *ForwardHandler) GetName() string
GetName returns the name of the handler
func (*ForwardHandler) Run ¶
func (fh *ForwardHandler) Run()
Run starts forwarding of JSON representations of all consumed events
func (*ForwardHandler) Stop ¶
func (fh *ForwardHandler) Stop(stoppedChan chan bool)
Stop stops forwarding of JSON representations of all consumed events
func (*ForwardHandler) SubmitStats ¶
func (fh *ForwardHandler) SubmitStats(sc *util.PerformanceStatsEncoder)
SubmitStats registers a PerformanceStatsEncoder for runtime stats submission.
type ForwardHandlerPerfStats ¶
type ForwardHandlerPerfStats struct {
ForwardedPerSec uint64 `influx:"forwarded_events_per_sec"`
}
ForwardHandlerPerfStats contains performance stats written to InfluxDB for monitoring.
type Handler ¶
Handler is an interface describing the behaviour for a component to handle events parsed from EVE input.
type HandlerDispatcher ¶
type HandlerDispatcher struct {
Lock sync.Mutex
DispatchMap map[string]([]Handler)
DBHandler Handler
PerfStats HandlerDispatcherPerfStats
Logger *log.Entry
StatsEncoder *util.PerformanceStatsEncoder
StopCounterChan chan bool
StoppedCounterChan chan bool
}
HandlerDispatcher is a component to collect and properly apply a set of Handlers to a stream of Entry objects. Handlers can register the event types they are meant to act on and are called with relevant Entries to perform their job.
func MakeHandlerDispatcher ¶
func MakeHandlerDispatcher(databaseOut chan types.Entry) *HandlerDispatcher
MakeHandlerDispatcher returns a new HandlerDispatcher. The channel passed as an argument is used as an output channel for the default handler, which simply forwards events to a given channel (for example to be written to a database)
func (*HandlerDispatcher) Dispatch ¶
func (ad *HandlerDispatcher) Dispatch(e *types.Entry)
Dispatch applies the set of handlers currently registered in the dispatcher to the Entry object passed to it.
func (*HandlerDispatcher) RegisterHandler ¶
func (ad *HandlerDispatcher) RegisterHandler(agg Handler)
RegisterHandler adds the given Handler to the set of callbacks to be called on the relevant Entries received by the dispatcher.
func (*HandlerDispatcher) Run ¶
func (ad *HandlerDispatcher) Run()
Run starts the background service for this handler
func (*HandlerDispatcher) Stop ¶
func (ad *HandlerDispatcher) Stop(stopChan chan bool)
Stop causes the handler to cease counting and submitting data
func (*HandlerDispatcher) SubmitStats ¶
func (ad *HandlerDispatcher) SubmitStats(sc *util.PerformanceStatsEncoder)
SubmitStats registers a PerformanceStatsEncoder for runtime stats submission.
type HandlerDispatcherPerfStats ¶
type HandlerDispatcherPerfStats struct {
DispatchedPerSec uint64 `influx:"dispatch_calls_per_sec"`
}
HandlerDispatcherPerfStats contains performance stats written to InfluxDB for monitoring.
type IPHandler ¶ added in v1.0.3
type IPHandler struct {
sync.Mutex
Logger *log.Entry
Name string
EventType string
Ranger cidranger.Ranger
IPListFilename string
DatabaseEventChan chan types.Entry
ForwardHandler Handler
DoForwardAlert bool
AlertPrefix string
}
IPHandler is a Handler which is meant to check for the presence of event type-specific keywords in a Bloom filter, raising new 'alert' type events when matches are found.
func MakeIPHandler ¶ added in v1.0.3
func MakeIPHandler(ranger cidranger.Ranger, databaseChan chan types.Entry, forwardHandler Handler, alertPrefix string) *IPHandler
MakeIPHandler returns a new IPHandler, checking against the given IP ranges and sending alerts to databaseChan as well as forwarding them to a given forwarding handler.
func MakeIPHandlerFromFile ¶ added in v1.0.3
func MakeIPHandlerFromFile(IPListFilename string, databaseChan chan types.Entry, forwardHandler Handler, alertPrefix string) (*IPHandler, error)
MakeIPHandlerFromFile returns a new IPHandler created from a new IP range list specified by the given file name.
func (*IPHandler) Consume ¶ added in v1.0.3
Consume processes an Entry, emitting alerts if there is a match
func (*IPHandler) GetEventTypes ¶ added in v1.0.3
GetEventTypes returns a slice of event type strings that this handler should be applied to
type PDNSCollector ¶
type PDNSCollector struct {
SensorID string
Count int64
DNSMutex sync.RWMutex
DNS pDNSEvent
StringBuf bytes.Buffer
FlushPeriod time.Duration
CloseChan chan bool
ClosedChan chan bool
Logger *log.Entry
Submitter util.StatsSubmitter
SubmitChannel chan []byte
}
PDNSCollector extracts and aggregates DNS response data from EVE events and sends them to the backend.
func MakePDNSCollector ¶
func MakePDNSCollector(flushPeriod time.Duration, submitter util.StatsSubmitter) (*PDNSCollector, error)
MakePDNSCollector creates a new pDNSCollector.
func (*PDNSCollector) Consume ¶
func (a *PDNSCollector) Consume(e *types.Entry) error
Consume processes an Entry, adding the data within to the internal aggregated state
func (*PDNSCollector) GetEventTypes ¶
func (a *PDNSCollector) GetEventTypes() []string
GetEventTypes returns a slice of event type strings that this handler should be applied to
func (*PDNSCollector) GetName ¶
func (a *PDNSCollector) GetName() string
GetName returns the name of the handler
func (*PDNSCollector) Run ¶
func (a *PDNSCollector) Run()
Run starts the background aggregation service for this handler
func (*PDNSCollector) Stop ¶
func (a *PDNSCollector) Stop(stopChan chan bool)
Stop causes the aggregator to cease aggregating and submitting data
type RDNSHandler ¶ added in v1.0.6
type RDNSHandler struct {
sync.Mutex
Logger *log.Entry
HostNamer util.HostNamer
PrivateRanges cidranger.Ranger
PrivateRangesOnly bool
}
RDNSHandler is a handler that enriches events with reverse DNS information looked up on the sensor, for both source and destination IP addresses.
func MakeRDNSHandler ¶ added in v1.0.6
func MakeRDNSHandler(hn util.HostNamer) *RDNSHandler
MakeRDNSHandler returns a new RDNSHandler, backed by the passed HostNamer.
func (*RDNSHandler) Consume ¶ added in v1.0.6
func (a *RDNSHandler) Consume(e *types.Entry) error
Consume processes an Entry and enriches it
func (*RDNSHandler) EnableOnlyPrivateIPRanges ¶ added in v1.0.6
func (a *RDNSHandler) EnableOnlyPrivateIPRanges()
EnableOnlyPrivateIPRanges ensures that only private (RFC1918) IP ranges are enriched
func (*RDNSHandler) GetEventTypes ¶ added in v1.0.6
func (a *RDNSHandler) GetEventTypes() []string
GetEventTypes returns a slice of event type strings that this handler should be applied to
func (*RDNSHandler) GetName ¶ added in v1.0.6
func (a *RDNSHandler) GetName() string
GetName returns the name of the handler
type StatsGeneratingHandler ¶
type StatsGeneratingHandler interface {
Handler
SubmitStats(*util.PerformanceStatsEncoder)
}
StatsGeneratingHandler is an interface describing a Handler which also periodically outputs performance statistics using the provided PerformanceStatsEncoder.
type StenosisConnector ¶ added in v1.0.9
type StenosisConnector struct {
Endpoint string
Client api.StenosisServiceQueryClient
TimeBracket time.Duration
Timeout time.Duration
ErrorCount uint64
FlowNotifyChan chan types.Entry
Cache *cache.Cache
}
StenosisConnector is a handler that caches alerts and waits for the associated flow to finish, then annotates all alerts with flow IDs and performs queries against a specified Stenosis server. Alerts will then be annotated with returned tokens and forwarded.
func MakeStenosisConnector ¶ added in v1.0.9
func MakeStenosisConnector(endpoint string, timeout, timeBracket time.Duration, notifyChan chan types.Entry, forwardChan chan []byte, alertCacheExpiry time.Duration, tlsConfig *tls.Config) (*StenosisConnector, error)
MakeStenosisConnector returns a new StenosisConnector for the given parameters.
func (*StenosisConnector) Accept ¶ added in v1.0.9
func (s *StenosisConnector) Accept(e *types.Entry)
Accept registers the given Entry into the connector's cache setup.
type UnicornAggregate ¶
type UnicornAggregate struct {
SensorID string `json:"sensor-id"`
TimestampStart time.Time `json:"time-start"`
TimestampEnd time.Time `json:"time-end"`
FlowTuples map[string](map[string]int64) `json:"tuples"`
ProxyMap map[string](map[string]int64) `json:"proxy-map"`
}
UnicornAggregate represents UNICORN relevant aggregated flow stats.
func MakeUnicornAggregate ¶
func MakeUnicornAggregate() *UnicornAggregate
MakeUnicornAggregate creates a new empty UnicornAggregate object.
type UnicornAggregator ¶
type UnicornAggregator struct {
Logger *log.Entry
Name string
EventType string
Aggregate UnicornAggregate
Submitter util.StatsSubmitter
DummyMode bool
SubmitPeriod time.Duration
CloseChan chan bool
ClosedChan chan bool
StringBuf bytes.Buffer
UnicornTuplesMutex sync.RWMutex `json:"-"`
UnicornProxyMapMutex sync.RWMutex `json:"-"`
}
UnicornAggregator collects and updates an internal structure of flow events grouped by route
func MakeUnicornAggregator ¶
func MakeUnicornAggregator(statsSubmitter util.StatsSubmitter, submitPeriod time.Duration, dummyMode bool) *UnicornAggregator
MakeUnicornAggregator creates a new empty UnicornAggregator object.
func (*UnicornAggregator) Consume ¶
func (a *UnicornAggregator) Consume(e *types.Entry) error
Consume processes an Entry, adding the data within to the internal aggregated state
func (*UnicornAggregator) CountFlowTuple ¶
func (a *UnicornAggregator) CountFlowTuple(key string, bytestoclient int64, bytestoserver int64)
CountFlowTuple increments the flow tuple counter for the given key.
func (*UnicornAggregator) CountHTTPHost ¶
func (a *UnicornAggregator) CountHTTPHost(destip string, hostname string)
CountHTTPHost increments the count for the given IP-hostname pair.
func (*UnicornAggregator) GetEventTypes ¶
func (a *UnicornAggregator) GetEventTypes() []string
GetEventTypes returns a slice of event type strings that this handler should be applied to
func (*UnicornAggregator) GetName ¶
func (a *UnicornAggregator) GetName() string
GetName returns the name of the handler
func (*UnicornAggregator) Run ¶
func (a *UnicornAggregator) Run()
Run starts the background aggregation service for this handler
func (*UnicornAggregator) Stop ¶
func (a *UnicornAggregator) Stop(stopChan chan bool)
Stop causes the aggregator to cease aggregating and submitting data
type VoidHandler ¶ added in v1.0.4
VoidHandler is a handler that does nothing.
func MakeVoidHandler ¶ added in v1.0.4
func MakeVoidHandler() *VoidHandler
MakeVoidHandler creates a new forwarding handler
func (*VoidHandler) Consume ¶ added in v1.0.4
func (fh *VoidHandler) Consume(e *types.Entry) error
Consume processes an Entry and discards it
func (*VoidHandler) GetEventTypes ¶ added in v1.0.4
func (fh *VoidHandler) GetEventTypes() []string
GetEventTypes returns a slice of event type strings that this handler should be applied to
func (*VoidHandler) GetName ¶ added in v1.0.4
func (fh *VoidHandler) GetName() string
GetName returns the name of the handler