Skip to content

Commit 5eb098a

Browse files
committed
Update sftpgo-logs parser and test files for PR crowdsecurity#1461
1 parent 32de5fe commit 5eb098a

File tree

5 files changed

+41
-11
lines changed

5 files changed

+41
-11
lines changed

.tests/sftpgo-logs/config.yaml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
parsers:
2+
- ./parsers/s01-parse/Azlaroc/sftpgo-logs.yaml
3+
- crowdsecurity/dateparse-enrich
4+
scenarios: []
5+
postoverflows: []
6+
log_file: sftpgo-logs.log
7+
log_type: sftpgo
8+
ignore_parsers: false

.tests/sftpgo-logs/parser.assert

Whitespace-only changes.

.tests/sftpgo-logs/scenario.assert

Whitespace-only changes.

.tests/sftpgo-logs/sftpgo-logs.log

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
{"level":"debug","time":"2025-09-12T00:41:00Z","sender":"connection_failed","client_ip":"80.94.95.115","username":"admin","login_type":"password","protocol":"SSH","error":"not found: sql: no rows in result set"}
2+
{"level":"info","time":"2025-09-12T00:41:01Z","sender":"sftpgo","message":"login attempt","username":"testuser","remote_address":"5.6.7.8","operation":"login","status":"success"}
Lines changed: 31 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,49 @@
11
onsuccess: next_stage
22
pattern_syntax:
3-
SFTPGO_TIME: '%{YEAR}-%{MONTHNUM}-%{MONTHDAY}T%{HOUR}:%{MINUTE}:%{SECOND}\.%{NUMBER}'
4-
SFTPGO_FAILED: '\{"level":"%{WORD:log_level}","time":"%{SFTPGO_TIME:evt_time}","sender":"connection_failed","client_ip":"%{IPV4:client_ip}","username":"%{DATA:username}","login_type":"%{DATA:login_type}","protocol":"%{WORD:protocol}","error":"%{GREEDYDATA:error}"\}'
5-
filter: evt.Parsed.program == 'sftpgo'
3+
SFTPGO_TIME: '%{YEAR}-%{MONTHNUM}-%{MONTHDAY}T%{HOUR}:%{MINUTE}:%{SECOND}(\.%{NUMBER})?Z'
4+
SFTPGO_JSON: '\{%{GREEDYDATA:json_data}\}'
65
nodes:
76
- grok:
8-
name: SFTPGO_FAILED
7+
name: SFTPGO_JSON
98
apply_on: message
9+
condition: 'evt.Parsed.json_data =~ "connection_failed"'
1010
statics:
1111
- meta: log_type
1212
value: sftpgo_auth
1313
- meta: source_ip
14-
expression: evt.Parsed.client_ip
14+
expression: 'parse_json(evt.Parsed.json_data).client_ip'
1515
- meta: target_user
16-
expression: evt.Parsed.username
16+
expression: 'parse_json(evt.Parsed.json_data).username'
1717
- meta: protocol
18-
expression: evt.Parsed.protocol
18+
expression: 'parse_json(evt.Parsed.json_data).protocol'
1919
- meta: login_type
20-
expression: evt.Parsed.login_type
20+
expression: 'parse_json(evt.Parsed.json_data).login_type'
2121
- meta: error
22-
expression: evt.Parsed.error
22+
expression: 'parse_json(evt.Parsed.json_data).error'
2323
- meta: is_failed_login
2424
value: true
2525
- target: evt.StrTime
26-
expression: evt.Parsed.evt_time
26+
expression: 'parse_json(evt.Parsed.json_data).time'
2727
- meta: service
2828
value: sftpgo
29-
description: Parse SFTPGo authentication logs (failed attempts only)
29+
- grok:
30+
name: SFTPGO_JSON
31+
apply_on: message
32+
condition: 'evt.Parsed.json_data =~ "login"'
33+
statics:
34+
- meta: log_type
35+
value: sftpgo_auth
36+
- meta: source_ip
37+
expression: 'parse_json(evt.Parsed.json_data).remote_address'
38+
- meta: target_user
39+
expression: 'parse_json(evt.Parsed.json_data).username'
40+
- meta: protocol
41+
expression: 'parse_json(evt.Parsed.json_data).protocol'
42+
- meta: status
43+
expression: 'parse_json(evt.Parsed.json_data).status'
44+
- target: evt.StrTime
45+
expression: 'parse_json(evt.Parsed.json_data).time'
46+
- meta: service
47+
value: sftpgo
48+
description: Parse SFTPGo authentication logs (failed and successful attempts)
49+
name: Azlaroc/sftpgo-logs

0 commit comments

Comments
 (0)