Skip to content

Commit 6b1bfaf

Browse files
committedJan 26, 2020
add syslog output
1 parent fce4453 commit 6b1bfaf

File tree

3 files changed

+79
-0
lines changed

3 files changed

+79
-0
lines changed
 

‎cmd/capture.go

+76
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"encoding/json"
66
"fmt"
77
"io/ioutil"
8+
syslog "github.com/RackSec/srslog"
89
"net/http"
910
"os"
1011
"os/signal"
@@ -192,6 +193,18 @@ func setupOutput(outputs []string) *flamingo.RecordWriter {
192193
continue
193194
}
194195

196+
if strings.HasPrefix(output, "syslog:") || output == "syslog" {
197+
writer, cleaner, err := getSyslogWriter(output)
198+
if err != nil {
199+
log.Fatalf("failed to configure output %s: %s", output, err)
200+
}
201+
rw.OutputWriters = append(rw.OutputWriters, writer)
202+
if cleaner != nil {
203+
rw.OutputCleaners = append(rw.OutputCleaners, cleaner)
204+
}
205+
continue
206+
}
207+
195208
// Assume anything else is a file output
196209
writer, cleaner, err := getFileWriter(output)
197210
if err != nil {
@@ -252,6 +265,65 @@ func getWebhookWriter(url string) (flamingo.OutputWriter, flamingo.OutputCleaner
252265
}, flamingo.OutputCleanerNoOp, nil
253266
}
254267

268+
func getSyslogWriter(url string) (flamingo.OutputWriter, flamingo.OutputCleaner, error) {
269+
270+
var syslogWriter *syslog.Writer
271+
var err error
272+
273+
// Supported formats
274+
// - syslog:unix:/dev/log
275+
// - syslog:host:port
276+
// - syslog:udp:host
277+
// - syslog:udp:host:port
278+
// - syslog:tcp:host:port
279+
280+
bits := strings.Split(url, ":")
281+
switch len(bits) {
282+
case 1:
283+
syslogWriter, err = syslog.Dial("", "", syslog.LOG_ALERT, "flamingo")
284+
case 2:
285+
syslogWriter, err = syslog.Dial("udp", fmt.Sprintf("%s:514", bits[1]), syslog.LOG_ALERT, "flamingo")
286+
case 3:
287+
switch bits[1] {
288+
case "unix":
289+
syslogWriter, err = syslog.Dial("", bits[2], syslog.LOG_ALERT, "flamingo")
290+
case "udp", "tcp", "tcp+tls":
291+
syslogWriter, err = syslog.Dial(bits[1], fmt.Sprintf("%s:514", bits[2]), syslog.LOG_ALERT, "flamingo")
292+
default:
293+
syslogWriter, err = syslog.Dial("udp", fmt.Sprintf("%s:%s", bits[1], bits[2]), syslog.LOG_ALERT, "flamingo")
294+
}
295+
296+
case 4:
297+
switch bits[1] {
298+
case "unix":
299+
syslogWriter, err = syslog.Dial("", bits[2], syslog.LOG_ALERT, "flamingo")
300+
case "udp", "tcp", "tcp+tls":
301+
syslogWriter, err = syslog.Dial(bits[1], fmt.Sprintf("%s:%s", bits[2], bits[3]), syslog.LOG_ALERT, "flamingo")
302+
default:
303+
err = fmt.Errorf("unsupported syslog transport %s", bits[1])
304+
}
305+
default:
306+
err = fmt.Errorf("unsupported syslog destination %s", url)
307+
}
308+
309+
if err != nil {
310+
return flamingo.OutputWriterNoOp, flamingo.OutputCleanerNoOp, err
311+
}
312+
313+
err = syslogWriter.Debug("flamingo is starting up")
314+
if err != nil {
315+
return flamingo.OutputWriterNoOp, flamingo.OutputCleanerNoOp, err
316+
}
317+
318+
return func(rec map[string]string) error {
319+
bytes, err := json.Marshal(rec)
320+
if err != nil {
321+
return err
322+
}
323+
return sendSyslog(syslogWriter, string(bytes))
324+
}, func() { syslogWriter.Close() }, nil
325+
}
326+
255327
func setupTLS() {
256328
tlsCertData := ""
257329
tlsKeyData := ""
@@ -510,3 +582,7 @@ func sendWebhook(url string, msg string) error {
510582

511583
return nil
512584
}
585+
586+
func sendSyslog(w *syslog.Writer, msg string) error {
587+
return w.Alert(msg)
588+
}

‎go.mod

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ module github.com/atredispartners/flamingo
33
go 1.13
44

55
require (
6+
github.com/RackSec/srslog v0.0.0-20180709174129-a4725f04ec91
67
github.com/audibleblink/go-ntlm v0.0.0-20190308023621-c1bc43845e23
78
github.com/golang/mock v1.4.0 // indirect
89
github.com/hdm/gosnmp v0.0.0-20191201190541-fbffabc0d968

‎go.sum

+2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
2+
github.com/RackSec/srslog v0.0.0-20180709174129-a4725f04ec91 h1:vX+gnvBc56EbWYrmlhYbFYRaeikAke1GL84N4BEYOFE=
3+
github.com/RackSec/srslog v0.0.0-20180709174129-a4725f04ec91/go.mod h1:cDLGBht23g0XQdLjzn6xOGXDkLK182YfINAaZEQLCHQ=
24
github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
35
github.com/audibleblink/go-ntlm v0.0.0-20190308023621-c1bc43845e23 h1:2LStrPaZzohiCtPXvfyHgwHovqBfB3RU0/CtH1N0isk=
46
github.com/audibleblink/go-ntlm v0.0.0-20190308023621-c1bc43845e23/go.mod h1:zJPIj8bkusLxnNA2qIcUQdcNqSHN9HISRCIiVhGPIbA=

0 commit comments

Comments
 (0)
Please sign in to comment.