2026-08-14 13:04:55 +01:00
{{define "title"}}Blacklist - Email Server{{end}}
{{define "content"}}
< div class = "container-fluid" >
< div class = "d-flex justify-content-between align-items-center mb-4" >
< h2 >< i class = "bi bi-shield-x me-2" ></ i > SMTP/IMAP Abuse Blacklist</ h2 >
</ div >
< div class = "card mb-4" >
< div class = "card-header" >< h5 class = "mb-0" >< i class = "bi bi-list me-2" ></ i > Blacklisted IP Addresses</ h5 ></ div >
< div class = "card-body" >
{{if .entries}}
< div class = "table-responsive" >
< table class = "table table-striped" >
< thead >< tr >< th > IP Address</ th >< th > Reason</ th >< th > Offense #</ th >< th > Type</ th >< th > Blacklisted</ th >< th > Expires</ th >< th > Actions</ th ></ tr ></ thead >
< tbody >
{{range .entries}}
< tr >
< td >< div class = "fw-bold font-monospace" > {{.IPAddress}}</ div ></ td >
< td >< small class = "text-muted" > {{.Reason}}</ small ></ td >
< td > {{.OffenseCount}}</ td >
< td > {{if .Manual}}< span class = "badge bg-secondary" > Manual</ span > {{else}}< span class = "badge bg-warning text-dark" > Auto</ span > {{end}}</ td >
< td >< small class = "text-muted" > {{strftime "%Y-%m-%d %H:%M" .BlacklistedAt}}</ small ></ td >
< td >< small class = "text-muted" > {{strftime "%Y-%m-%d %H:%M" .ExpiresAt}}</ small ></ td >
< td >
< div class = "btn-group" role = "group" >
2026-08-15 21:51:43 +01:00
< form method = "post" action = "/smtp-server/blacklist/{{.ID}}/whitelist" class = "d-inline" >
2026-08-14 13:04:55 +01:00
< button type = "submit" class = "btn btn-outline-success btn-sm" title = "Whitelist this IP" data-confirm = "Remove {{.IPAddress}} from the blacklist and exempt it from abuse detection?" >< i class = "bi bi-shield-check" ></ i ></ button >
</ form >
2026-08-15 21:51:43 +01:00
< form method = "post" action = "/smtp-server/blacklist/{{.ID}}/remove" class = "d-inline" >
2026-08-14 13:04:55 +01:00
< button type = "submit" class = "btn btn-outline-danger btn-sm" title = "Remove entry" data-confirm = "Remove the blacklist entry for {{.IPAddress}}?" >< i class = "bi bi-trash" ></ i ></ button >
</ form >
</ div >
</ td >
</ tr >
{{end}}
</ tbody >
</ table >
</ div >
{{else}}
< div class = "text-center py-4" >
< i class = "bi bi-shield-check text-muted" style = "font-size: 3rem;" ></ i >
< h5 class = "text-muted mt-3" > No IPs currently blacklisted</ h5 >
</ div >
{{end}}
</ div >
</ div >
< div class = "card mb-4" >
< div class = "card-header" >< h6 class = "mb-0" >< i class = "bi bi-plus-circle me-2" ></ i > Manually Blacklist an IP</ h6 ></ div >
< div class = "card-body" >
2026-08-15 21:51:43 +01:00
< form method = "post" action = "/smtp-server/blacklist/add" class = "row g-2 align-items-end" >
2026-08-14 13:04:55 +01:00
< div class = "col-md-4" >
< label class = "form-label small" > IP Address</ label >
< input type = "text" name = "ip_address" class = "form-control font-monospace" placeholder = "203.0.113.7" required >
</ div >
< div class = "col-md-4" >
< label class = "form-label small" > Reason</ label >
< input type = "text" name = "reason" class = "form-control" placeholder = "Optional" >
</ div >
< div class = "col-md-2" >
< label class = "form-label small" > Hours</ label >
< input type = "number" name = "hours" class = "form-control" value = "12" min = "1" required >
</ div >
< div class = "col-md-2" >
< button type = "submit" class = "btn btn-danger w-100" >< i class = "bi bi-shield-x me-1" ></ i > Blacklist</ button >
</ div >
</ form >
</ div >
</ div >
< div class = "card" >
< div class = "card-header" >< h5 class = "mb-0" >< i class = "bi bi-shield-check me-2" ></ i > Abuse-Detection Whitelist</ h5 ></ div >
< div class = "card-body" >
< div class = "alert alert-info small" >
IPs here are exempt from automatic blacklisting for failed SMTP/IMAP auth. This is separate
2026-08-15 21:51:43 +01:00
from the < a href = "/smtp-server/ips" > relay whitelist</ a > , which authorizes unauthenticated sending for a domain.
2026-08-14 13:04:55 +01:00
</ div >
{{if .whitelist}}
< div class = "table-responsive mb-3" >
< table class = "table table-striped" >
< thead >< tr >< th > IP Address</ th >< th > Note</ th >< th > Added</ th >< th > Actions</ th ></ tr ></ thead >
< tbody >
{{range .whitelist}}
< tr >
< td >< div class = "fw-bold font-monospace" > {{.IPAddress}}</ div ></ td >
< td >< small class = "text-muted" > {{.Note}}</ small ></ td >
< td >< small class = "text-muted" > {{strftime "%Y-%m-%d %H:%M" .CreatedAt}}</ small ></ td >
< td >
2026-08-15 21:51:43 +01:00
< form method = "post" action = "/smtp-server/abuse-whitelist/{{.ID}}/remove" class = "d-inline" >
2026-08-14 13:04:55 +01:00
< button type = "submit" class = "btn btn-outline-danger btn-sm" title = "Remove" data-confirm = "Remove {{.IPAddress}} from the abuse-detection whitelist?" >< i class = "bi bi-trash" ></ i ></ button >
</ form >
</ td >
</ tr >
{{end}}
</ tbody >
</ table >
</ div >
{{end}}
2026-08-15 21:51:43 +01:00
< form method = "post" action = "/smtp-server/abuse-whitelist/add" class = "row g-2 align-items-end" >
2026-08-14 13:04:55 +01:00
< div class = "col-md-4" >
< label class = "form-label small" > IP Address</ label >
< input type = "text" name = "ip_address" class = "form-control font-monospace" placeholder = "203.0.113.7" required >
</ div >
< div class = "col-md-5" >
< label class = "form-label small" > Note</ label >
< input type = "text" name = "note" class = "form-control" placeholder = "Optional" >
</ div >
< div class = "col-md-3" >
< button type = "submit" class = "btn btn-primary w-100" >< i class = "bi bi-plus-circle me-1" ></ i > Add</ button >
</ div >
</ form >
</ div >
</ div >
</ div >
{{end}}