Skip to content

Commit 99ee8e6

Browse files
Kbayeromjabascal10
andauthored
Release/v10.9.0 (#1294)
* feat(integrations): add suricata integration * feat: add support for SURICATA module in syslog integration * feat: add Suricata module integration and database procedures * feat(suricata): enhance logstash filter for Suricata event types and actions * Update suricata.conf * feat(suricata): update Suricata module configuration and log parsing logic * Update changelog and version --------- Co-authored-by: Manuel Abascal <[email protected]>
1 parent b33a85c commit 99ee8e6

File tree

16 files changed

+1104
-363
lines changed

16 files changed

+1104
-363
lines changed

CHANGELOG.md

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
# UTMStack 10.8.6 Release Notes
1+
# UTMStack 10.9.0 Release Notes
22

3-
- Expanded the exclusion dictionary for malicious IP connection logs to reduce false positives.
4-
- Added support for older Linux versions (RedHat 7, RedHat 8, Ubuntu 20.04).
3+
- Added New Suricata Integration.

agent/config/const.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ var (
8585
DataTypeAix DataType = "ibm_aix"
8686
DataTypePfsense DataType = "firewall_pfsense"
8787
DataTypeFortiweb DataType = "firewall_fortiweb"
88+
DataTypeSuricata DataType = "suricata"
8889

8990
ProtoPorts = map[DataType]ProtoPort{
9091
DataTypeSyslog: {UDP: "7014", TCP: "7014"},
@@ -102,6 +103,7 @@ var (
102103
DataTypeAix: {UDP: "7016", TCP: "7016"},
103104
DataTypePfsense: {UDP: "7017", TCP: "7017"},
104105
DataTypeFortiweb: {UDP: "7018", TCP: "7018"},
106+
DataTypeSuricata: {UDP: "7019", TCP: "7019"},
105107
DataTypeNetflow: {UDP: "2055", TCP: ""},
106108
}
107109

@@ -116,7 +118,7 @@ func ValidateModuleType(typ string) string {
116118
switch DataType(typ) {
117119
case DataTypeSyslog, DataTypeVmware, DataTypeEset, DataTypeKaspersky, DataTypeFortinet, DataTypePaloalto,
118120
DataTypeMikrotik, DataTypeSophosXG, DataTypeSonicwall, DataTypeSentinelOne, DataTypeCiscoGeneric,
119-
DataTypeDeceptivebytes, DataTypeAix, DataTypePfsense, DataTypeFortiweb:
121+
DataTypeDeceptivebytes, DataTypeAix, DataTypePfsense, DataTypeFortiweb, DataTypeSuricata:
120122
return "syslog"
121123
case DataTypeNetflow:
122124
return "netflow"

backend/src/main/java/com/park/utmstack/domain/application_modules/enums/ModuleName.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,5 +62,6 @@ public enum ModuleName {
6262
SALESFORCE,
6363
BITDEFENDER,
6464
SOC_AI,
65-
PFSENSE
65+
PFSENSE,
66+
SURICATA,
6667
}

backend/src/main/java/com/park/utmstack/domain/application_modules/factory/ModuleFactory.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ public class ModuleFactory {
6767
private final ModulePfsense modulePfsense;
6868
private final ModuleFortiWeb moduleFortiWeb;
6969
private final ModuleAix moduleAix;
70+
private final ModuleSuricata moduleSuricata;
7071

7172

7273
public ModuleFactory(ModuleFileIntegrity moduleFileIntegrity,
@@ -129,7 +130,8 @@ public ModuleFactory(ModuleFileIntegrity moduleFileIntegrity,
129130
ModuleSocAi moduleSocAi,
130131
ModulePfsense modulePfsense,
131132
ModuleFortiWeb moduleFortiWeb,
132-
ModuleAix moduleAix) {
133+
ModuleAix moduleAix,
134+
ModuleSuricata moduleSuricata) {
133135
this.moduleFileIntegrity = moduleFileIntegrity;
134136
this.moduleO365 = moduleO365;
135137
this.moduleAzure = moduleAzure;
@@ -191,6 +193,7 @@ public ModuleFactory(ModuleFileIntegrity moduleFileIntegrity,
191193
this.modulePfsense = modulePfsense;
192194
this.moduleFortiWeb = moduleFortiWeb;
193195
this.moduleAix = moduleAix;
196+
this.moduleSuricata = moduleSuricata;
194197
}
195198

196199
public IModule getInstance(ModuleName nameShort) {
@@ -316,6 +319,8 @@ public IModule getInstance(ModuleName nameShort) {
316319
return moduleFortiWeb;
317320
if (nameShort.equals(ModuleName.AIX))
318321
return moduleAix;
322+
if (nameShort.equals(ModuleName.SURICATA))
323+
return moduleSuricata;
319324
throw new RuntimeException("Unrecognized module " + nameShort.name());
320325
}
321326
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package com.park.utmstack.domain.application_modules.factory.impl;
2+
3+
import com.park.utmstack.domain.application_modules.UtmModule;
4+
import com.park.utmstack.domain.application_modules.enums.ModuleName;
5+
import com.park.utmstack.domain.application_modules.factory.IModule;
6+
import com.park.utmstack.domain.application_modules.types.ModuleConfigurationKey;
7+
import com.park.utmstack.domain.application_modules.types.ModuleRequirement;
8+
import com.park.utmstack.service.application_modules.UtmModuleService;
9+
import org.springframework.stereotype.Component;
10+
11+
import java.util.Collections;
12+
import java.util.List;
13+
14+
@Component
15+
public class ModuleSuricata implements IModule {
16+
private static final String CLASSNAME = "ModuleSuricata";
17+
18+
private final UtmModuleService moduleService;
19+
20+
public ModuleSuricata(UtmModuleService moduleService) {
21+
this.moduleService = moduleService;
22+
}
23+
24+
@Override
25+
public UtmModule getDetails(Long serverId) throws Exception {
26+
final String ctx = CLASSNAME + ".getDetails";
27+
try {
28+
return moduleService.findByServerIdAndModuleName(serverId, ModuleName.SURICATA);
29+
} catch (Exception e) {
30+
throw new Exception(ctx + ": " + e.getMessage());
31+
}
32+
}
33+
34+
@Override
35+
public List<ModuleRequirement> checkRequirements(Long serverId) throws Exception {
36+
return Collections.emptyList();
37+
}
38+
39+
@Override
40+
public List<ModuleConfigurationKey> getConfigurationKeys(Long groupId) throws Exception {
41+
return Collections.emptyList();
42+
}
43+
}

0 commit comments

Comments
 (0)