StackFocus.postfix-dovecot
ansible-role-postfix-dovecot
这是一个Ansible角色,用于自动化安装和配置Postfix和Dovecot,并在Ubuntu上使用MySQL进行身份验证。MySQL的模式来源于以下Digital Ocean教程。你可以在 schema.sql 中查看使用的MySQL模式。
角色变量
必需变量
- dovecot_ssl_cert - Dovecot使用的SSL证书的路径。如果需要提供证书链,必须将其与证书合并在同一个文件中。
- dovecot_ssl_key - Dovecot使用的SSL密钥的路径。
- postfix_ssl_cert - Postfix使用的SSL证书的路径。如果适用,还应包括中介CA。
- postfix_ssl_key - Postfix使用的SSL密钥的路径。
- postfix_dovecot_mysql_password - 用于身份验证的SQL数据库服务器上,可以查询数据库的用户的密码。
可选变量
- postfix_dovecot_mysql_host - 用于身份验证的MySQL服务器的完全合格域名或IP地址。默认为
127.0.0.1
。 - postfix_dovecot_mysql_db_name - 用于身份验证的MySQL服务器上的数据库名称。默认为
servermail
。 - postfix_dovecot_mysql_user - 用于身份验证的MySQL服务器上,可以查询数据库的用户。默认为
usermail
。 - postfix_dovecot_mysql_password_scheme - 用于加密数据库密码的密码方案。默认为
SHA512-CRYPT
。 - postfix_default_domain - Postfix使用的默认域值,特别是在Postfix确定发送者域时发送退回消息。设置
/etc/mailname
的内容。 - postfix_inet_protocols - Postfix应该监听的协议。要仅使用IPv4,请将此值设置为
ipv4
。默认为all
。 - postfix_submission_smtpd_client_restrictions - 邮件提交端口(587)上的客户端限制列表。有关更多信息,请访问Postfix文档。默认为
permit_sasl_authenticated
和reject
。 - postfix_smtpd_tls_auth_only - 是否仅允许通过SSL/TLS进行SASL身份验证。默认为
yes
。 - postfix_smtpd_recipient_restrictions - 收件人限制的列表。有关更多信息,请访问Postfix文档。默认为
permit_sasl_authenticated
、permit_mynetworks
和reject_unauth_destination
。 - postfix_smtpd_relay_restrictions - 中继限制的列表。有关更多信息,请访问Postfix文档。默认为
permit_mynetworks
、permit_sasl_authenticated
和defer_unauth_destination
。 - postfix_mynetworks - 受信任的SMTP客户端列表。有关更多信息,请访问Postfix文档。默认为
127.0.0.0/8
、[::ffff:127.0.0.0]/104
、[::1]/128
。 - postfix_mydestination - Postfix配置值
mydestination
的列表。有关信息,请访问Postfix文档。默认为localhost
。 - postfix_mysql_alias_query - 用于查找别名目标的查询,当提供源时使用。默认为
SELECT destination FROM virtual_aliases WHERE source='%s';
。 - postfix_mysql_domains_query - 用于确定域名是否有效的查询。默认为
SELECT 1 FROM virtual_domains WHERE name='%s';
。 - postfix_mysql_users_query - 用于确定电子邮件地址是否有效的查询。默认为
SELECT 1 FROM virtual_users WHERE email='%s';
。 - dovecot_mysql_password_query - 用于在MySQL服务器上验证用户的查询。默认为
SELECT email as user, password FROM virtual_users WHERE email='%u';
。 - postfix_relayhost - 通过上游中继主机发送邮件。有关更多信息,请访问Postfix文档。
- postfix_smtp_tls_security_level - Postfix SMTP服务器(发送)的SMTP TLS安全级别。Debian和Red Hat >= 8的默认值为
dane
,Red Hat 7的默认值为may
。有关更多信息,请访问Postfix文档。 - dovecot_protocols - 要启用的协议列表。默认为
lmtp
和imap
。要启用POP3,请将pop3
添加到此变量中。(注意:在目标上使用apt install dovecot-pop3d
以使用pop3)。 - dovecot_mail_privileged_group - 拥有
dovecot_mail_location
中定义的文件夹的组。这使Dovecot的邮件进程能够在该文件夹中写入。默认为mail
。 - dovecot_disable_plaintext_auth - 确定是否启用不使用SSL的身份验证。默认为'yes'。
- dovecot_auth_mechanisms - Dovecot允许的身份验证机制列表。默认为
plain
和login
。有关更多信息,请阅读Dovecot的身份验证机制文档。 - dovecot_force_imaps - 确定是否禁用IMAP并强制使用IMAPS。默认为
true
。 - dovecot_force_pop3s - 确定是否禁用POP3并强制使用POP3S。默认为
true
。请注意,要启用POP3S,还需将pop3添加到dovecot_protocols
列表变量中。 - dovecot_ssl - 确定是否在所有协议上强制使用SSL。默认为
required
。有关更多信息,请阅读Dovecot的SSL配置文档。 - dovecot_listen - Dovecot监听连接的IP或主机地址列表。默认为
*
(所有IPv4)和'::'(所有IPv6)。 - dovecot_add_example_users - 设置为
true
时,向数据库添加示例用户。
要求
- 此角色必须以sudo/become或root身份运行,否则角色将失败。
- MySQL服务器需要预先配置,且用户应具有数据库的适当权限(请参见[defaults/main.yml]以获取默认值)。
- 在Red Hat服务器上,您需要预先安装PyMSQL(python{2,3}-PyMySQL,选择适合您的版本)。
示例剧本
requirements.yml
roles:
- name: stackfocus.postfix-dovecot
site.yml
- hosts: all
become: yes
gather_facts: true
roles:
- stackfocus.postfix-dovecot
vars:
postfix_dovecot_mysql_db_name: mailserver
postfix_dovecot_mysql_user: mailuser
postfix_dovecot_mysql_password: mailpass
postfix_default_domain: example.com
dovecot_protocols:
- imap
- pop3
- lmtp
dovecot_mail_privileged_group: vmail
dovecot_ssl_cert: /etc/ssl/certs/dovecot.pem
dovecot_ssl_key: /etc/ssl/private/dovecot.pem
postfix_ssl_cert: /etc/ssl/certs/postfix.pem
postfix_ssl_key: /etc/ssl/private/postfix.pem
$ ansible-galaxy install -r requirements.yml
$ ansible-playbook -i inventory site.yml --ask-become-pass
新服务器的扩展示例剧本
在这个例子中,我们使用一些geerlingguy的角色来处理数据库和证书。
requirements.yml
roles:
- name: stackfocus.postfix-dovecot
- name: geerlingguy.mysql
- name: geerlingguy.certbot
剧本为您准备:
- 数据库及其用户
- Let's Encrypt证书
- 邮件传输服务Postfix
- 邮箱服务Dovecot
---
- name: Setup mail
hosts: mailserver.tld
become: true
vars:
mail_domain: mycooldomain.com
mail_database: maildb
mail_db_pass: 'ultrasafepassword'
roles:
- role: geerlingguy.mysql
mysql_databases:
- name: '{{ mail_database }}'
encoding: utf8mb4
collation: utf8mb4_czech_ci
mysql_users:
- name: '{{ mail_database }}'
host: "localhost"
password: '{{ mail_db_pass }}'
priv: "{{ mail_database }}.*:ALL"
- role: geerlingguy.certbot
certbot_certs:
- domains:
- '{{ mail_domain }}'
- 'mail.{{ mail_domain }}'
- role: stackfocus.postfix-dovecot
postfix_dovecot_mysql_db_name: '{{ mail_database }}'
postfix_dovecot_mysql_user: '{{ mail_database }}'
postfix_dovecot_mysql_password: '{{ mail_db_pass }}'
postfix_default_domain: '{{ mail_domain }}'
dovecot_protocols:
- imap
- pop3
- lmtp
dovecot_mail_privileged_group: vmail
dovecot_ssl_cert: /etc/letsencrypt/live/{{ mail_domain }}/fullchain.pem
dovecot_ssl_key: /etc/letsencrypt/live/{{ mail_domain }}/privkey.pem
postfix_ssl_cert: /etc/letsencrypt/live/{{ mail_domain }}/fullchain.pem
postfix_ssl_key: /etc/letsencrypt/live/{{ mail_domain }}/privkey.pem
postfix_smtp_tls_security_level: 'dane'
postfix_mydestination: '{{mail_domain}}'
postfix_myhostname: 'mail.{{mail_domain}}'