Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ this `http://server-ip:port/api/v1/scan/globalcyberalliance.org`, which will ret
"alt3.aspmx.l.google.com.",
"alt4.aspmx.l.google.com."
],
"spf": "v=spf1 include:_u.globalcyberalliance.org._spf.smart.ondmarc.com -all",
"spf": "v=spf1 include:_u.globalcyberalliance.org._spf.smart.ondmarc.com -all"
},
"advice": {
"bimi": [
Expand Down Expand Up @@ -203,7 +203,8 @@ Which will return a JSON response like this:

## Serve Dedicated Mailbox

You can also serve scan results via a dedicated mailbox. It is advised that you use this mailbox for this sole purpose, as all emails will be deleted at each 10 second interval.
You can also serve scan results via a dedicated mailbox. It is advised that you use this mailbox for this sole purpose,
as all emails will be deleted at each 10 second interval.

```shell
dss serve mail --inboundHost "imap.gmail.com:993" --inboundPass "SomePassword" --inboundUser "[email protected]" --outboundHost "smtp.gmail.com:587" --outboundPass "SomePassword" --outboundUser "[email protected]" --advise
Expand All @@ -223,6 +224,7 @@ You can then email this inbox from any address, and you'll receive an email back
| `--dkimSelector` | | Specify a comma seperated list of DKIM selectors (default "") |
| `--dnsBuffer` | | Specify the allocated buffer for DNS responses (default 4096) |
| `--dnsProtocol` | | Protocol to use for DNS queries (udp, tcp, tcp-tls) (default udp) |
| `--dnssec` | | Include scan for DNSSEC records |
| `--format` | `-f` | Format to print results in (yaml, json, csv) (default "yaml") |
| `--nameservers` | `-n` | Use specific nameservers, in host[:port] format; may be specified multiple times |
| `--outputFile` | `-o` | Output the results to a specified file (creates a file with the current unix timestamp if no file is specified) |
Expand Down
14 changes: 7 additions & 7 deletions cmd/dss/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ var (
case "nameservers":
printToConsole("nameservers: " + cast.ToString(cfg.Nameservers))
default:
log.Fatal().Msg("unknown config key")
log.Fatal().Msg("Unknown config key")
}
},
}
Expand All @@ -47,11 +47,11 @@ var (
case "nameservers":
cfg.Nameservers = strings.Split(args[1], ",")
default:
log.Fatal().Msg("unknown config key")
log.Fatal().Msg("Unknown config key")
}

if err := cfg.Save(); err != nil {
log.Fatal().Err(err).Msg("unable to save config")
log.Fatal().Err(err).Msg("Unable to save config")
}

log.Info().Msg("Config updated")
Expand Down Expand Up @@ -93,7 +93,7 @@ func (c *Config) Load() error {
// create config if it doesn't exist
if _, err := os.Stat(c.path); os.IsNotExist(err) {
if err = os.MkdirAll(c.dir, os.ModePerm); err != nil {
log.Fatal().Err(err).Msg("failed to create config directory")
log.Fatal().Err(err).Msg("Failed to create config directory")
}

if err = c.Save(); err != nil {
Expand All @@ -104,11 +104,11 @@ func (c *Config) Load() error {
// read config
configData, err := os.ReadFile(c.path)
if err != nil {
log.Fatal().Err(err).Msg("unable to read config file")
log.Fatal().Err(err).Msg("Unable to read config file")
}

if err = yaml.Unmarshal(configData, &c); err != nil {
log.Fatal().Err(err).Msg("unable to unmarshal config values")
log.Fatal().Err(err).Msg("Unable to unmarshal config values")
}

return nil
Expand All @@ -117,7 +117,7 @@ func (c *Config) Load() error {
func (c *Config) Save() error {
configData, err := yaml.Marshal(c)
if err != nil {
log.Fatal().Err(err).Msg("unable to marshal default config")
log.Fatal().Err(err).Msg("Unable to marshal default config")
}

return os.WriteFile(c.path, configData, os.ModePerm)
Expand Down
2 changes: 1 addition & 1 deletion cmd/dss/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ var (
Use: "dss",
Short: "Scan a domain's DNS records.",
Long: "Scan a domain's DNS records.\nhttps://github.com/globalcyberalliance/domain-security-scanner",
Version: "3.0.16",
Version: "3.0.17",
PersistentPreRun: func(cmd *cobra.Command, args []string) {
var logWriter io.Writer

Expand Down
13 changes: 5 additions & 8 deletions cmd/dss/scan.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import (
"bufio"
"os"

"github.com/globalcyberalliance/domain-security-scanner/v3/pkg/advisor"
"github.com/globalcyberalliance/domain-security-scanner/v3/pkg/model"
"github.com/globalcyberalliance/domain-security-scanner/v3/pkg/scanner"
"github.com/spf13/cobra"
Expand All @@ -26,19 +25,17 @@ var cmdScan = &cobra.Command{
scanner.WithDNSBuffer(dnsBuffer),
scanner.WithDNSProtocol(dnsProtocol),
scanner.WithNameservers(nameservers),
scanner.WithCheckTLS(checkTLS),
}

if len(dkimSelector) > 0 {
opts = append(opts, scanner.WithDKIMSelectors(dkimSelector...))
}

sc, err := scanner.New(log, timeout, opts...)
if err != nil {
log.Fatal().Err(err).Msg("An unexpected error occurred.")
}

domainAdvisor := advisor.NewAdvisor(timeout, cache, checkTLS)

if format == "csv" && outputFile == "" {
log.Info().Msg("CSV header: domain,BIMI,DKIM,DMARC,MX,SPF,TXT,error,advice")
}
Expand All @@ -65,7 +62,7 @@ var cmdScan = &cobra.Command{
}

for _, result := range results {
printResult(result, domainAdvisor)
printResult(result, sc)
}
}

Expand All @@ -84,12 +81,12 @@ var cmdScan = &cobra.Command{
}

for _, result := range results {
printResult(result, domainAdvisor)
printResult(result, sc)
}
},
}

func printResult(result *scanner.Result, domainAdvisor *advisor.Advisor) {
func printResult(result *scanner.Result, sc *scanner.Scanner) {
if result == nil {
log.Fatal().Msg("An unexpected error occurred.")
}
Expand All @@ -99,7 +96,7 @@ func printResult(result *scanner.Result, domainAdvisor *advisor.Advisor) {
}

if advise && result.Error != scanner.ErrInvalidDomain {
resultWithAdvice.Advice = domainAdvisor.CheckAll(result.Domain, result.BIMI, result.DKIM, result.DMARC, result.MX, result.SPF)
resultWithAdvice.Advice = sc.CheckAll(result.Domain, result.BIMI, result.DKIM, result.DMARC, result.DNSSEC, result.MX, result.SPF, result.STS, result.STSPolicy)
}

printToConsole(resultWithAdvice)
Expand Down
8 changes: 3 additions & 5 deletions cmd/dss/serve.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package main
import (
"time"

"github.com/globalcyberalliance/domain-security-scanner/v3/pkg/advisor"
"github.com/globalcyberalliance/domain-security-scanner/v3/pkg/http"
"github.com/globalcyberalliance/domain-security-scanner/v3/pkg/mail"
"github.com/globalcyberalliance/domain-security-scanner/v3/pkg/scanner"
Expand Down Expand Up @@ -53,6 +52,7 @@ var (
scanner.WithDNSBuffer(dnsBuffer),
scanner.WithDNSProtocol(dnsProtocol),
scanner.WithNameservers(nameservers),
scanner.WithCheckTLS(checkTLS),
}

if len(dkimSelector) > 0 {
Expand All @@ -65,9 +65,6 @@ var (
}

server := http.NewServer(log, timeout, cmd.Version)
if advise {
server.Advisor = advisor.NewAdvisor(timeout, cache, checkTLS)
}
server.CheckTLS = checkTLS
server.Scanner = sc

Expand All @@ -85,6 +82,7 @@ var (
scanner.WithDNSBuffer(dnsBuffer),
scanner.WithDNSProtocol(dnsProtocol),
scanner.WithNameservers(nameservers),
scanner.WithCheckTLS(checkTLS),
}

if len(dkimSelector) > 0 {
Expand All @@ -96,7 +94,7 @@ var (
log.Fatal().Err(err).Msg("could not create domain scanner")
}

mailServer, err := mail.NewMailServer(mailConfig, log, sc, advisor.NewAdvisor(timeout, cache, checkTLS))
mailServer, err := mail.NewMailServer(mailConfig, log, sc, advise)
if err != nil {
log.Fatal().Err(err).Msg("could not open mail server connection")
}
Expand Down
Loading