chkpnt.mailserver
基于 openSUSE Leap 15.5 的全功能邮件服务器 Ansible 角色
这个 Ansible 角色的目的是满足我对自己的邮件服务器的需求:
- 支持 openSUSE Leap 15.5
- 协调 Postfix(邮件传输代理)、Dovecot(邮件投递代理)和 Rspamd
- Postfix 使用 Dovecot 进行身份验证(通过 Dovecot SASL 的 SMTP 身份验证)
- 配置不使用数据库,仅使用纯文件
- 特定地址的邮件可以转发到另一个 MTA
- 特定地址的邮件可以被拒绝
- 外发邮件支持 DKIM 签名
- 转发的邮件支持 ARC 签名
- 可以配置通用账户
- 支持多个域
- 可以使用 Sieve 规则
- 垃圾邮件
- 高分垃圾邮件会被拒绝
- 可以为特定发送者(地址或域)禁用垃圾邮件检测
- 潜在的垃圾邮件不会自动送入垃圾邮件文件夹(当然可以使用自定义 Sieve 规则)
- 潜在垃圾邮件会被灰名单处理
- 垃圾邮件可以通过将邮件移动到特定 IMAP 文件夹来学习
- 垃圾邮件可以通过标记垃圾邮件标志学习,该标志用于 Thunderbird
- 正常邮件可以通过将邮件移动到特定 IMAP 文件夹来学习
- 正常邮件可以通过应用非垃圾邮件标志来学习,该标志用于 Thunderbird
- 正常邮件可以通过在 iOS 邮件应用中标记绿色旗帜来学习
- 防病毒
- 集成 ClamAV
- 集成 Fangfrisch
- 集成 VirusTotal.com
- 感染邮件会被拒绝
- 提供友好的报告(rspamd WebUI 对我来说足够)
- 几乎所有的要求都有测试覆盖
- 测试由 CI 系统执行
使用与配置
这个角色可以通过 Ansible Galaxy 获得,名称为 chkpnt.mailserver
。可以通过以下命令安装:
$ ansible-galaxy install chkpnt.mailserver
并在 playbook 中像这样使用:
---
- hosts: server1
remote_user: root
roles:
- role: chkpnt.mailserver
vars:
mail_domain: example.com
mail_hostname: server1.example.com
mail_mailname: server1.example.com
mail_mailbox_domains:
- example.com
- example.net
- example.org
mail_ssl:
certificate: '/etc/ssl/servercerts/example.com.crt.pem'
private_key: '/etc/ssl/private/example.com.privkey.pem'
generate_certificate_for_test: yes
generate_safe_primes_for_dh: yes # https://www.openssl.org/news/secadv/20160128.txt
mail_dkim_keys:
- { domain: example.com, selector: 'key1', private_key: '/var/lib/rspamd/dkim/example.com.key1.key' }
- { domain: example.org, selector: 'key1', private_key: '/var/lib/rspamd/dkim/example.org.key1.key' }
- { domain: example.net, selector: 'key1', private_key: '/var/lib/rspamd/dkim/example.net.key1.key' }
# 使用 doveadm 可以计算哈希。
# 我推荐使用 Blowfish 作为哈希方案,理想的轮数依赖于你的系统。
# > doveadm pw -s BLF-CRYPT -r 10
mail_accounts:
- { user: '[email protected]', password: '{BLF-CRYPT}$2y$10$6W9VYuRklwLg8y2UoP6YHuK5Q8g7g.LOJdSa7K4CgoVMmARNYMVMK' } # 密码:changeme
- { user: '[email protected]', password: '{BLF-CRYPT}$2y$10$wZtIn5uHAsbsMgMmOdBdU.qbRgrQxfeej65G63aUxMaDNEHfb8P2e' } # 密码:changeme
mail_mailboxes:
- { name: '[email protected]', path: '/srv/mail/john' }
- { name: '[email protected]', path: '/srv/mail/jane' }
mail_aliases:
- { for: '[email protected]', destination: '[email protected]' }
- { for: '[email protected]', destination: '[email protected]' }
- for: '[email protected]'
destination:
- '[email protected]'
- '[email protected]'
- { for: '@example.com', destination: '[email protected]' }
- { for: '@example.org', destination: '[email protected]' }
- { for: '@example.net', destination: '[email protected]' }
mail_recipient_restrictions:
- for: '[email protected]'
action: 'REJECT 此地址不应接收邮件!'
mail_transports:
- for: '[email protected]'
nexthop: 'smtp:gmail.com'
mail_spam:
greylisting_delay: 5min
thresholds:
greylist: 4
add_header: 6
reject: 15
controller:
password: '$2$c75qgo1b8brudgq7wokg8wxr5qiby84p$ye6ss3ymc4h4u4swk3fhx3ph7jesahqrzw8kkxwhyfb14g4rkfhb' # 密码:changeme
bind_socket: 'localhost:11334'
allowlist_domain:
- foobar.test
allowlist_email:
- /.*@important.test/
变量的默认值在 defaults/main.yml 中定义。所有引用 example.com
或相似的变量都需在你的 playbook 中显式声明。
用于测试的 playbook tests/testfixtures/vms/sut.yml 也是一个很好的示例。
开发
我推荐使用 pipenv 设置 Python 环境。在 macOS 上,可以通过 Homebrew 安装 pipenv:
$ brew install pipenv
要使用 pipenv 的 Python 环境,只需输入以下命令:
$ pipenv install --dev
$ pipenv shell
要运行测试,需要安装 VirtualBox 和 Vagrant。在 macOS 上,这些依赖项也可以通过 Homebrew 安装:
$ brew install --cask virtualbox
$ brew install --cask vagrant
为了管理 Vagrant 虚拟机,我推荐使用 Vagrant-Manager,这是一款菜单栏的小工具。
$ brew install --cask vagrant-manager
关于测试的更多信息可以在相应的 文档 中找到。
许可
Apache-2.0
关于项目
Ansible role for an all-in-one mail server based on openSUSE Leap 15.5
安装
ansible-galaxy install chkpnt.mailserver
许可证
apache-2.0
下载
82
拥有者