golang全功能邮件服务器插件Maddy实现SMTP/IMAP/DKIM/DMARC集成

Golang全功能邮件服务器插件Maddy实现SMTP/IMAP/DKIM/DMARC集成

Maddy邮件服务器介绍

Maddy是一个可组合的一体化邮件服务器,实现了运行电子邮件服务器所需的所有功能:

  • 可以通过SMTP发送消息(作为MTA工作)
  • 可以通过SMTP接收消息(作为MX工作)
  • 存储消息并通过IMAP提供访问
  • 实现保持电子邮件安全的辅助协议(DKIM、SPF、DMARC、DANE、MTA-STS)

Maddy用一个具有统一配置和维护成本最低的守护进程替代了Postfix、Dovecot、OpenDKIM、OpenSPF、OpenDMARC等多个组件。

注意:IMAP存储功能目前处于"测试"阶段。如果您需要稳定且功能丰富的实现,可能需要使用Dovecot代替。Maddy仍然可以处理消息传递业务。

示例配置

以下是一个完整的Maddy配置示例,包含SMTP、IMAP、DKIM和DMARC功能:

// 示例配置文件:/etc/maddy/maddy.conf

# 全局配置
$(hostname) = mail.example.com
$(primary_domain) = example.com
$(local_domains) = $(primary_domain)

tls file /etc/letsencrypt/live/mail.example.com/fullchain.pem /etc/letsencrypt/live/mail.example.com/privkey.pem

# SMTP服务配置
smtp tcp://0.0.0.0:25 {
    limits {
        # 限制每个连接的速率
        all rate 20 1s
    }
    
    # 启用SPF检查
    check {
        require_mx record
        spf
    }
    
    # 启用DMARC检查
    dmarc {
        policy quarantine
    }
    
    # 启用DKIM签名
    dkim {
        selector default
        key file /etc/maddy/dkim.key
    }
    
    # 邮件存储
    deliver_to &local_routing
}

# IMAP服务配置
imap tcp://0.0.0.0:143 {
    auth &local_auth
    storage &local_mailboxes
}

# 身份验证配置
auth.pass_table local_auth {
    table sql_table {
        driver sqlite3
        dsn /var/lib/maddy/users.db
        table_name users
        username_field username
        password_field password
    }
}

# 本地邮件路由
target.local_routing local_routing {
    deliver_to &local_mailboxes
}

# 本地邮箱存储
storage.imapsql local_mailboxes {
    driver sqlite3
    dsn /var/lib/maddy/imap.db
}

DKIM配置示例

要设置DKIM,您需要生成DKIM密钥并配置Maddy:

# 生成DKIM密钥
mkdir -p /etc/maddy/dkim
openssl genrsa -out /etc/maddy/dkim/private.key 2048
openssl rsa -in /etc/maddy/dkim/private.key -pubout -out /etc/maddy/dkim/public.key

# 获取DKIM记录
echo "default._domainkey IN TXT \"v=DKIM1; k=rsa; p=$(grep -v '^-' /etc/maddy/dkim/public.key | tr -d '\n')\""

然后将DKIM记录添加到您的DNS区域文件中。

DMARC配置示例

要启用DMARC,您需要在DNS中添加DMARC记录:

_dmarc.example.com. IN TXT "v=DMARC1; p=quarantine; rua=mailto:dmarc-reports@example.com"

运行Maddy

安装并配置完成后,可以使用以下命令运行Maddy:

# 检查配置是否正确
maddy -config /etc/maddy/maddy.conf verify

# 以系统服务运行
systemctl enable --now maddy

# 或者直接运行
maddy -config /etc/maddy/maddy.conf run

功能总结

Maddy提供的主要功能包括:

  1. SMTP服务:支持发送和接收电子邮件
  2. IMAP服务:支持邮件存储和访问(测试阶段)
  3. 安全协议
    • DKIM:电子邮件签名验证
    • SPF:发件人策略框架
    • DMARC:基于域的消息认证、报告和一致性
    • DANE:基于DNS的TLS认证
    • MTA-STS:邮件传输代理严格传输安全

Maddy是一个用Go编写的现代邮件服务器解决方案,适合那些希望简化邮件服务器配置和维护的用户。


更多关于golang全功能邮件服务器插件Maddy实现SMTP/IMAP/DKIM/DMARC集成的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于golang全功能邮件服务器插件Maddy实现SMTP/IMAP/DKIM/DMARC集成的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


Maddy:全功能邮件服务器插件实现SMTP/IMAP/DKIM/DMARC集成

Maddy是一个用Go语言编写的现代邮件服务器,它集成了SMTP、IMAP、DKIM和DMARC等功能,设计目标是简单易用且安全可靠。下面我将介绍如何使用Maddy搭建全功能邮件服务器。

Maddy核心特性

  • 一体化设计:SMTP、IMAP、DKIM、DMARC等功能集成在一个程序中
  • 配置简单:TOML格式配置文件,逻辑清晰
  • 高性能:Go语言编写,并发性能优秀
  • 安全性:支持TLS、SPF、DKIM、DMARC等安全协议
  • 可扩展:模块化设计,易于扩展

安装Maddy

# 使用预编译二进制
wget https://github.com/foxcpp/maddy/releases/download/v0.6.3/maddy-0.6.3-linux-amd64.tar.xz
tar xf maddy-0.6.3-linux-amd64.tar.xz
sudo cp maddy-0.6.3-linux-amd64/maddy /usr/local/bin/

# 或者从源码编译
git clone https://github.com/foxcpp/maddy
cd maddy
make build
sudo cp maddy /usr/local/bin/

基本配置示例

创建配置文件 /etc/maddy/maddy.conf

# 全局配置
$(hostname) = mail.example.com
$(primary_domain) = example.com
$(local_domains) = $(primary_domain)

tls file /etc/maddy/certs/cert.pem /etc/maddy/certs/key.pem

# SMTP服务配置
smtp tcp://0.0.0.0:25 {
    hostname $(hostname)
    
    # 认证配置
    auth pam pass_table /etc/maddy/passwd
    
    # 安全策略
    check {
        require_mx_record
        dkim
        dmarc
        spf
    }
    
    # 邮件存储
    storage maildir /var/lib/maddy
}

# IMAP服务配置
imap tcp://0.0.0.0:143 {
    auth pam pass_table /etc/maddy/passwd
    storage maildir /var/lib/maddy
}

# 管理界面
admin tcp://127.0.0.1:8080 {
    auth pam pass_table /etc/maddy/passwd
}

DKIM配置

# DKIM签名配置
dkim {
    selector "default"
    domain $(primary_domain)
    key file /etc/maddy/dkim.key
    
    # 对所有外发邮件签名
    sign_outbound {
        apply_to all
    }
}

DMARC配置

# DMARC验证配置
dmarc {
    check {
        policy reject
        pct 100
    }
    
    # 报告配置
    report {
        from postmaster@$(primary_domain)
        org_name "Example Org"
        send_reports yes
    }
}

用户管理

创建用户密码文件 /etc/maddy/passwd

user1@example.com $2a$10$N9qo8uLOickgx2ZMRZoMy.Mrq4ZJXCPr7HwQjFfj86B/3Q8Y2sK1O
user2@example.com $2a$10$ZuV.s5U0b8X1X8QqBoP7AeYg3z7MjM1sZQW8k5D5d5NrQNRD0YJjK

使用以下命令生成密码哈希:

maddy hash --alg bcrypt 'yourpassword'

启动Maddy

maddy -config /etc/maddy/maddy.conf

Go代码集成示例

如果你想在自己的Go应用中集成Maddy的功能,可以使用以下示例:

package main

import (
	"log"
	
	"github.com/foxcpp/maddy"
	"github.com/foxcpp/maddy/config"
)

func main() {
	// 创建新的Maddy实例
	cfg := config.New()
	
	// 加载配置文件
	if err := cfg.LoadFile("/etc/maddy/maddy.conf"); err != nil {
		log.Fatal("Failed to load config:", err)
	}
	
	// 初始化Maddy
	m := maddy.New(cfg)
	
	// 启动服务器
	if err := m.Start(); err != nil {
		log.Fatal("Failed to start server:", err)
	}
	
	// 等待服务器关闭
	m.Wait()
}

高级功能

  1. 邮件过滤
# 在SMTP配置中添加
smtp tcp://0.0.0.0:25 {
    # ...
    filters {
        # 垃圾邮件过滤
        rspamd {
            endpoint "tcp://127.0.0.1:11333"
        }
        
        # 病毒扫描
        clamav {
            endpoint "tcp://127.0.0.1:3310"
        }
    }
}
  1. 数据库后端
# 使用PostgreSQL存储用户和邮件
storage sql {
    driver postgres
    dsn "user=maddy password=secret dbname=maddy host=localhost"
}
  1. 监控和统计
prometheus tcp://127.0.0.1:9090 {
    # 启用Prometheus指标端点
}

总结

Maddy提供了一个简单而强大的方式来搭建全功能邮件服务器,集成了现代邮件服务所需的所有关键功能。通过合理的配置,你可以轻松实现:

  • 安全的SMTP和IMAP服务
  • DKIM签名和验证
  • DMARC策略执行
  • 反垃圾邮件和病毒扫描
  • 高性能邮件存储和检索

Maddy的模块化设计也使得它非常适合作为大型应用中的邮件服务组件集成。

回到顶部