87 lines
2.5 KiB
TypeScript
87 lines
2.5 KiB
TypeScript
/**
|
|
* SMTP Security Handler
|
|
* Responsible for security aspects including IP reputation checking,
|
|
* email validation, and authentication
|
|
*/
|
|
import * as plugins from '../../../plugins.js';
|
|
import type { ISmtpAuth } from './interfaces.js';
|
|
import type { ISecurityHandler, ISmtpServer } from './interfaces.js';
|
|
/**
|
|
* Handles security aspects for SMTP server
|
|
*/
|
|
export declare class SecurityHandler implements ISecurityHandler {
|
|
/**
|
|
* Reference to the SMTP server instance
|
|
*/
|
|
private smtpServer;
|
|
/**
|
|
* IP reputation checker service
|
|
*/
|
|
private ipReputationService;
|
|
/**
|
|
* Simple in-memory IP denylist
|
|
*/
|
|
private ipDenylist;
|
|
/**
|
|
* Cleanup interval timer
|
|
*/
|
|
private cleanupInterval;
|
|
/**
|
|
* Creates a new security handler
|
|
* @param smtpServer - SMTP server instance
|
|
*/
|
|
constructor(smtpServer: ISmtpServer);
|
|
/**
|
|
* Check IP reputation for a connection
|
|
* @param socket - Client socket
|
|
* @returns Promise that resolves to true if IP is allowed, false if blocked
|
|
*/
|
|
checkIpReputation(socket: plugins.net.Socket | plugins.tls.TLSSocket): Promise<boolean>;
|
|
/**
|
|
* Validate an email address
|
|
* @param email - Email address to validate
|
|
* @returns Whether the email address is valid
|
|
*/
|
|
isValidEmail(email: string): boolean;
|
|
/**
|
|
* Validate authentication credentials
|
|
* @param auth - Authentication credentials
|
|
* @returns Promise that resolves to true if authenticated
|
|
*/
|
|
authenticate(auth: ISmtpAuth): Promise<boolean>;
|
|
/**
|
|
* Log a security event
|
|
* @param event - Event type
|
|
* @param level - Log level
|
|
* @param details - Event details
|
|
*/
|
|
logSecurityEvent(event: string, level: string, message: string, details: Record<string, any>): void;
|
|
/**
|
|
* Add an IP to the denylist
|
|
* @param ip - IP address
|
|
* @param reason - Reason for denylisting
|
|
* @param duration - Duration in milliseconds (optional, indefinite if not specified)
|
|
*/
|
|
private addToDenylist;
|
|
/**
|
|
* Check if an IP is denylisted
|
|
* @param ip - IP address
|
|
* @returns Whether the IP is denylisted
|
|
*/
|
|
private isIpDenylisted;
|
|
/**
|
|
* Get the reason an IP was denylisted
|
|
* @param ip - IP address
|
|
* @returns Reason for denylisting or undefined if not denylisted
|
|
*/
|
|
private getDenylistReason;
|
|
/**
|
|
* Clean expired denylist entries
|
|
*/
|
|
private cleanExpiredDenylistEntries;
|
|
/**
|
|
* Clean up resources
|
|
*/
|
|
destroy(): void;
|
|
}
|