Files
sslh-multiplex-lab/internal/services/definitions.go
2026-01-29 00:03:02 +00:00

314 lines
6.4 KiB
Go

package services
import "fmt"
type Service struct {
Name string
Port int
Subdomain string
Protocol string
BackendPort int
SNIRequired bool
Config map[string]interface{}
}
func GetDefaultServices(domain string) []Service {
return []Service{
{
Name: "ssh",
Port: 22,
Subdomain: "ssh",
Protocol: "ssh",
BackendPort: 22,
SNIRequired: false,
Config: map[string]interface{}{},
},
{
Name: "https",
Port: 443,
Subdomain: "",
Protocol: "tls",
BackendPort: 8444,
SNIRequired: false,
Config: map[string]interface{}{
"alpn_protocols": []string{"h2", "http/1.1"},
},
},
{
Name: "smb",
Port: 445,
Subdomain: "smb",
Protocol: "regex",
BackendPort: 445,
SNIRequired: false,
Config: map[string]interface{}{
"regex_patterns": []string{"^\\x00\\x00\\x00"},
},
},
}
}
func GetAdditionalServices(domain string) []Service {
return []Service{
{
Name: "ldap",
Port: 389,
Subdomain: "ldap",
Protocol: "regex",
BackendPort: 389,
SNIRequired: false,
Config: map[string]interface{}{
"regex_patterns": []string{"^\\x30"},
},
},
{
Name: "ldaps",
Port: 636,
Subdomain: "ldaps",
Protocol: "tls",
BackendPort: 636,
SNIRequired: true,
Config: map[string]interface{}{},
},
{
Name: "rdp",
Port: 3389,
Subdomain: "rdp",
Protocol: "regex",
BackendPort: 3389,
SNIRequired: false,
Config: map[string]interface{}{
"regex_patterns": []string{"^\\x03\\x00\\x00"},
},
},
{
Name: "mysql",
Port: 3306,
Subdomain: "mysql",
Protocol: "regex",
BackendPort: 3306,
SNIRequired: false,
Config: map[string]interface{}{
"regex_patterns": []string{"^[\\x00-\\xff]{4}\\x0a"},
},
},
{
Name: "postgres",
Port: 5432,
Subdomain: "postgres",
Protocol: "regex",
BackendPort: 5432,
SNIRequired: false,
Config: map[string]interface{}{
"regex_patterns": []string{"^\\x00\\x00\\x00\\x08"},
},
},
}
}
func GetStandardServices(domain string) []Service {
return []Service{
{
Name: "ssh",
Port: 22,
Subdomain: "ssh",
Protocol: "ssh",
BackendPort: 22,
SNIRequired: false,
Config: map[string]interface{}{},
},
{
Name: "https",
Port: 443,
Subdomain: "",
Protocol: "tls",
BackendPort: 8444,
SNIRequired: false,
Config: map[string]interface{}{
"alpn_protocols": []string{"h2", "http/1.1"},
},
},
{
Name: "ldap",
Port: 389,
Subdomain: "ldap",
Protocol: "regex",
BackendPort: 389,
SNIRequired: false,
Config: map[string]interface{}{
"regex_patterns": []string{"^\\x30"},
},
},
{
Name: "ldaps",
Port: 636,
Subdomain: "ldaps",
Protocol: "tls",
BackendPort: 636,
SNIRequired: true,
Config: map[string]interface{}{},
},
{
Name: "smb",
Port: 445,
Subdomain: "smb",
Protocol: "regex",
BackendPort: 445,
SNIRequired: false,
Config: map[string]interface{}{
"regex_patterns": []string{"^\\x00\\x00\\x00"},
},
},
{
Name: "rdp",
Port: 3389,
Subdomain: "rdp",
Protocol: "regex",
BackendPort: 3389,
SNIRequired: false,
Config: map[string]interface{}{
"regex_patterns": []string{"^\\x03\\x00\\x00"},
},
},
{
Name: "mysql",
Port: 3306,
Subdomain: "mysql",
Protocol: "regex",
BackendPort: 3306,
SNIRequired: false,
Config: map[string]interface{}{
"regex_patterns": []string{"^[\\x00-\\xff]{4}\\x0a"},
},
},
{
Name: "postgres",
Port: 5432,
Subdomain: "postgres",
Protocol: "regex",
BackendPort: 5432,
SNIRequired: false,
Config: map[string]interface{}{
"regex_patterns": []string{"^\\x00\\x00\\x00\\x08"},
},
},
{
Name: "redis",
Port: 6379,
Subdomain: "redis",
Protocol: "regex",
BackendPort: 6379,
SNIRequired: false,
Config: map[string]interface{}{
"regex_patterns": []string{"^\\*[0-9]"},
},
},
{
Name: "mongodb",
Port: 27017,
Subdomain: "mongo",
Protocol: "regex",
BackendPort: 27017,
SNIRequired: false,
Config: map[string]interface{}{
"regex_patterns": []string{"^[\\x3d\\xdb]\\x00\\x00\\x00"},
},
},
{
Name: "vnc",
Port: 5900,
Subdomain: "vnc",
Protocol: "regex",
BackendPort: 5900,
SNIRequired: false,
Config: map[string]interface{}{
"regex_patterns": []string{"^RFB"},
},
},
{
Name: "ftp",
Port: 21,
Subdomain: "ftp",
Protocol: "regex",
BackendPort: 21,
SNIRequired: false,
Config: map[string]interface{}{
"regex_patterns": []string{"^220"},
},
},
{
Name: "ftps",
Port: 990,
Subdomain: "ftps",
Protocol: "tls",
BackendPort: 990,
SNIRequired: true,
Config: map[string]interface{}{},
},
{
Name: "smtp",
Port: 25,
Subdomain: "smtp",
Protocol: "regex",
BackendPort: 25,
SNIRequired: false,
Config: map[string]interface{}{
"regex_patterns": []string{"^220"},
},
},
{
Name: "smtps",
Port: 465,
Subdomain: "smtps",
Protocol: "tls",
BackendPort: 465,
SNIRequired: true,
Config: map[string]interface{}{},
},
{
Name: "imap",
Port: 143,
Subdomain: "imap",
Protocol: "regex",
BackendPort: 143,
SNIRequired: false,
Config: map[string]interface{}{
"regex_patterns": []string{"^\\* OK"},
},
},
{
Name: "imaps",
Port: 993,
Subdomain: "imaps",
Protocol: "tls",
BackendPort: 993,
SNIRequired: true,
Config: map[string]interface{}{},
},
{
Name: "pop3",
Port: 110,
Subdomain: "pop3",
Protocol: "regex",
BackendPort: 110,
SNIRequired: false,
Config: map[string]interface{}{
"regex_patterns": []string{"^\\+OK"},
},
},
{
Name: "pop3s",
Port: 995,
Subdomain: "pop3s",
Protocol: "tls",
BackendPort: 995,
SNIRequired: true,
Config: map[string]interface{}{},
},
}
}
func (s *Service) GetFQDN(domain string) string {
return fmt.Sprintf("%s.%s", s.Subdomain, domain)
}