nixos/server/mods/mail.nix
2026-10-03 00:18:13 +09:00

94 lines
3.1 KiB
Nix

{ config, lib, pkgs, ... }:
let
postfixDir = "/var/spool/postfix";
in {
systemd.tmpfiles.rules = [
"d ${postfixDir} 0700 postfix postfix -"
];
services = let
sslCertDir = config.security.acme.certs."bogaledev.ru".directory;
in {
redis.servers.rspamd = {
enable = true;
user = "rspamd";
};
rspamd = {
enable = true;
postfix.enable = true;
locals = {
"classifier-bayes.conf".text = "autolearn = true;";
"redis.conf".text = ''servers = "${config.services.redis.servers.rspamd.unixSocket}";'';
};
};
postfix = {
enable = true;
enableSubmissions = true;
virtualMapType = "regexp";
mapFiles.smtp_passwd = "/secrets/smtp_passwd";
virtual = "/.*@bogaledev.ru/ mail@bogaledev.ru";
submissionsOptions = {
smtpd_sasl_type = "dovecot";
smtpd_tls_wrappermode = true;
smtpd_sasl_auth_enable = "yes";
smtpd_sasl_path = "${postfixDir}/auth";
milter_macro_daemon_name = "ORIGINATING";
smtpd_client_restrictions = "permit_sasl_authenticated,reject";
};
settings.main = {
smtp_tls_wrappermode = true;
smtp_sasl_auth_enable = true;
smtp_tls_security_level = "verify";
smtpd_tls_security_level = "encrypt";
relayhost = [ "smtp.resend.com:2465" ];
virtual_mailbox_domains = "bogaledev.ru";
smtp_sasl_tls_security_options = "noanonymous";
virtual_transport = "lmtp:unix:${postfixDir}/lmtp";
smtp_sasl_password_maps = "hash:/etc/postfix/smtp_passwd";
smtpd_tls_chain_files = [
"${sslCertDir}/key.pem"
"${sslCertDir}/fullchain.pem"
];
};
};
dovecot2 = {
enable = true;
settings = {
ssl = "required";
mail_gid = "vmail";
mail_uid = "vmail";
mail_driver = "maildir";
protocols = [ "imap" "lmtp" ];
auth_mechanisms = [ "plain" ];
dovecot_config_version = "2.4.5";
dovecot_storage_version = "2.4.5";
mail_path = "/var/spool/mail/vmail";
ssl_server_key_file = "${sslCertDir}/key.pem";
ssl_server_cert_file = "${sslCertDir}/fullchain.pem";
"passdb passwd-file".passwd_file_path = "/secrets/dovecot-pw";
"service auth"."unix_listener ${postfixDir}/auth" = {
mode = "0600";
user = "postfix";
group = "postfix";
};
"service lmtp"."unix_listener ${postfixDir}/lmtp" = {
mode = "0600";
user = "postfix";
group = "postfix";
};
"namespace inbox" = let
mailbox = name: {
auto = "subscribe";
mailbox_special_use = "\\${name}";
};
in {
inbox = true;
"mailbox Sent" = mailbox "Sent";
"mailbox Archive" = mailbox "Archive";
"mailbox Important" = mailbox "Flagged";
"mailbox Spam" = mailbox "Junk" // { mailbox_autoexpunge = "45d"; };
"mailbox Trash" = mailbox "Trash" // { mailbox_autoexpunge = "45d"; };
};
};
};
};
}