robertdebock.postfix

Ansible角色Postfix

在您的系统上安装和配置Postfix。

GitHub GitLab 下载 版本
github gitlab downloads Version

示例剧本

以下示例来自molecule/default/converge.yml,并在每次推送、拉取请求和发布时进行测试。

---
- name: Converge
  hosts: all
  become: true
  gather_facts: true

  roles:
    - role: robertdebock.postfix
      # postfix_relayhost: "[relay.example.com]"
      postfix_myhostname: "smtp.example.com"
      postfix_mydomain: "example.com"
      postfix_myorigin: "example.com"
      postfix_mynetworks:
        - 127.0.0.0/8
        - 192.168.0.0/16
      postfix_aliases:
        - name: root
          destination: [email protected]
      # Ziggo设置: ("email-address" 和 "email-password" 是占位符)
      postfix_relayhost: "[smtp.ziggo.nl]:587"
      postfix_smtp_sasl_auth_enable: true
      postfix_smtp_sasl_password_map: "/etc/postfix/relay_pass"
      postfix_smtp_sasl_security_options: ""
      postfix_smtp_tls_wrappermode: false
      postfix_smtp_tls_security_level: may
      postfix_smtp_sasl_password_map_content: |
        [smtp.ziggo.nl]:587 email-address:email-password

在CI中需要准备机器。这是通过molecule/default/prepare.yml完成的:

---
- name: Prepare
  hosts: all
  become: true
  gather_facts: false

  roles:
    - role: robertdebock.bootstrap
    - role: robertdebock.core_dependencies

还可以查看完整的说明和示例,了解如何使用这些角色。

角色变量

变量的默认值设置在defaults/main.yml中:

---
# postfix的默认值文件

# 这些设置是Postfix所需的。
postfix_myhostname: "{{ ansible_fqdn }}"
postfix_mydomain: "{{ ansible_domain | default('localdomain', true) }}"
postfix_myorigin: "{{ ansible_domain | default('localdomain', true) }}"

# 要在公共接口上“监听”,将inet_interfaces设置为“all”或接口的名称,如“eth0”。
postfix_inet_interfaces: "loopback-only"

# 启用IPv4,如果支持则启用IPv6 - 如果仅支持IPV4则设置为ipv4
postfix_inet_protocols: all

# 设置一个横幅
postfix_banner: "$myhostname ESMTP $mail_name"

# 目标告诉Postfix接受哪些邮件。
postfix_mydestination: $mydomain, $myhostname, localhost.$mydomain, localhost

# 要接受来自其他计算机的电子邮件,将mynetworks设置为类似“- 192.168.0.0/24”的值。
postfix_mynetworks:
  - 127.0.0.0/8

# 这些设置将Postfix服务器角色更改为中继主机。
# postfix_relay_domains: "$mydestination"

# 如果您想将邮件转发到另一个中央中继服务器,请设置relayhost。
# 使用括号将其发送到relayhost的A记录。
# postfix_relayhost: "[relay.example.com]"

# 设置接收邮件的限制。
postfix_smtpd_recipient_restrictions:
  - permit_mynetworks
  - permit_sasl_authenticated
  - reject_unauth_destination
  - reject_invalid_hostname
  - reject_non_fqdn_hostname
  - reject_non_fqdn_sender
  - reject_non_fqdn_recipient
  - reject_unknown_sender_domain
  - reject_unknown_recipient_domain
  - reject_rbl_client sbl.spamhaus.org
  - reject_rbl_client cbl.abuseat.org
  - reject_rbl_client dul.dnsbl.sorbs.net
  - permit

postfix_smtpd_sender_restrictions:
  - reject_unknown_sender_domain

# Postfix SMTP客户端的默认TLS安全级别
# 有效值:dane、encrypt、fingerprint、may、none、secure、verify
postfix_smtp_tls_security_level: none

# 要启用spamassassin,确保已安装spamassassin,
# (提示:role: robertdebock.spamassassin)并设置这两个变量:
# postfix_spamassassin: enabled
# postfix_spamassassin_user: spamd

# 要启用clamav,确保已安装clamav,
# (提示:role: robertdebock.clamav)并设置此变量:
# postfix_clamav: enabled

# 您可以在这里配置别名。通常重定向`root`是个好主意。
# postfix_aliases:
#   - name: root
#     destination: [email protected]

# 您可以在这里配置发件人访问控制。
# postfix_sender_access:
#   - domain: gooddomain.com
#     action: OK
#   - domain: baddomain.com
#     action: REJECT

# 您可以在这里配置收件人访问控制。
# postfix_recipient_access:
#   - domain: gooddomain.com
#     action: OK
#   - domain: baddomain.com
#     action: REJECT

# 您可以在这里禁用SSL/TLS版本。
# postfix_tls_protocols: '!SSLv2, !SSLv3, !TLSv1, !TLSv1.1'

# 您可以在这里提供transport_maps Jinja2模板
# postfix_transport_maps_template: /path/to/transport.j2

# 您可以在这里提供header_checks Jinja2模板
# postfix_header_checks_template: /path/to/header_checks.j2

# 是否使用本地biff服务。
# postfix_biff: true

# 对于本地提交的邮件,将字符串 ".$mydomain" 附加到没有 ".domain" 信息的地址
# postfix_append_dot_mydomain: false

# 用于本地(8)投递的别名数据库
# postfix_alias_maps: "hash:/etc/aliases"

# 虚拟(8)投递代理在从$virtual_mailbox_maps表查找路径名结果时前缀的字符串。
# postfix_virtual_mailbox_base: /var/mail

# 与匹配$virtual_mailbox_domains的域中的所有有效地址的可选查找表。
# postfix_virtual_mailbox_maps: mysql:/etc/postfix/mysql-virtual_mailbox_maps.cf

# Postfix是指定域的最终目的地;邮件通过$virtual_transport邮件投递传输进行投递
# postfix_virtual_mailbox_domains: "$virtual_mailbox_maps"

# Postfix是指定虚拟别名域的最终目的地,即所有地址都别名为其他本地或远程域中的地址的域。
# postfix_virtual_alias_domains: "$virtual_alias_maps"

# 可选的查找表,将特定邮件地址或域别名为其他本地或远程地址。
# postix_virtual_alias_maps: "$virtual_maps"

# 查找表,其中文件是虚拟(8)投递代理在写入收件人的邮箱时使用的每个收件人用户ID。
# postfix_virtual_uid_maps: "static:2000"

# 查找表,其中文件是虚拟(8)邮箱投递中的每个收件人组ID。
# postfix_virtual_gid_maps: "static:2000"

# 启用Postfix SMTP服务器的SASL认证。
# postfix_smtpd_sasl_auth_enable: true

# Postfix SMTP服务器的本地SASL认证领域名称。
# postfix_smtpd_sasl_local_domain: $myhostname

# Postfix SMTP服务器SASL安全选项;自Postfix 2.3以来,可用特性的列表取决于所选的smtpd_sasl_type的SASL服务器实现。
# postfix_smtpd_sasl_security_options: noanonymous

# 在smtpd(8)收到的消息头中报告SASL认证的用户名。
# postfix_smtpd_sasl_authenticated_header: true

# 启用与实现过时AUTH命令版本(RFC 4954)的远程SMTP客户端的互操作性。
# postfix_broken_sasl_auth_clients: false

# 包含信任签名远程SMTP客户端证书或中间证书的根CA证书的PEM格式文件。
# postfix_smtpd_tls_CAfile: /etc/letsencrypt/live/smtp.syhosting.ch/chain.pem

#包含Postfix SMTP服务器RSA证书的PEM格式文件。
# postfix_smtpd_tls_cert_file: /etc/letsencrypt/live/smtp.syhosting.ch/cert.pem

# 本地文件,包含Postfix SMTP服务器RSA证书的PEM格式,需复制到目标主机。
# postfix_smtpd_tls_cert_file_source: ./certs/cert.pem

# 包含Postfix SMTP服务器RSA私钥的PEM格式文件。
# postfix_smtpd_tls_key_file: /etc/letsencrypt/live/smtp.syhosting.ch/privkey.pem

# 本地文件,包含Postfix SMTP服务器RSA私钥的PEM格式,需复制到目标主机。
# postfix_smtpd_tls_key_file_source: ./certs/privkey.pem

# 请求Postfix SMTP服务器生成包含关于使用的协议和密码信息的Received:消息头,以及远程SMTP客户端的CommonName和客户端证书颁发者的CommonName。
# postfix_smtpd_tls_received_header: true

# Postfix SMTP客户端的默认TLS安全级别;当指定非空值时,将覆盖过时的参数smtp_use_tls、smtp_enforce_tls和smtp_tls_enforce_peername。
# postfix_smtpd_tls_security_level: may

# 向远程SMTP客户端请求客户端证书。
# postfix_smtpd_tls_ask_ccert: true

# 启用Postfix SMTP服务器TLS活动的额外日志记录。
# postfix_smtpd_tls_loglevel: 1

# 包含可选Postfix SMTP服务器TLS会话缓存的文件名。
# postfix_smtpd_tls_session_cache_database: btree:/var/lib/postfix/smtpd_tls_session_cache

# 包含信任签名远程SMTP服务器证书或中间证书的根CA证书的文件。
# postfix_smtp_tls_CAfile: /etc/letsencrypt/live/smtp.syhosting.ch/chain.pem

# 包含Postfix SMTP客户端RSA证书的PEM格式文件。
# postfix_smtp_tls_cert_file: /etc/letsencrypt/live/smtp.syhosting.ch/cert.pem

# 包含Postfix SMTP客户端RSA私钥的PEM格式文件。
# postfix_smtp_tls_key_file: /etc/letsencrypt/live/smtp.syhosting.ch/privkey.pem

# 包含可选Postfix SMTP客户端TLS会话缓存的文件名。
# postfix_smtp_tls_session_cache_database: btree:/var/lib/postfix/smtp_tls_session_cache

# 为在内存中的tlsmgr(8)伪随机数生成器(PRNG)池设置外部熵源。
# postfix_tls_random_source: dev:/dev/urandom

# Postfix SMTP服务器接受的TLS协议,强制使用TLS加密。
# postfix_smtpd_tls_mandatory_protocols: TLSv1

# Postfix SMTP客户端将使用的TLS协议,强制使用TLS加密。
# postfix_smtp_tls_mandatory_protocols: TLSv1

# 默认邮件投递传输和最终交付到列在$virtual_mailbox_domains中的域的下一跳目的地。
# postfix_virtual_transport: maildrop1

# 相对于本地(8)用户的主目录的邮箱文件的可选路径名。
# postfix_home_mailbox: Maildir/

# 消息的最大大小(以字节为单位),包括信封信息。
# postfix_message_size_limit: 10240000

# 要求远程SMTP客户端在发送MAIL命令或其他需要EHLO协商的命令之前先介绍自己,使用HELO或EHLO命令。
# postfix_smtpd_helo_required: false

# 计算客户端连接速率和其他速率的时间单位。
# postfix_anvil_rate_time_unit: 60s

# 每个时间单位,任何客户端允许的连接尝试的最大数量。
# postfix_smtpd_client_connection_rate_limit: 10

# 任何客户端允许对该服务进行的同时连接数的最大值。
# postfix_smtpd_client_connection_count_limit: 10

# 当交付因临时错误而失败时,将反弹消息视为不可交付,并且队列中的时间已达到bounce_queue_lifetime限制。
# postfix_bounce_queue_lifetime: 5d

# Postfix README文件的位置,描述如何构建、配置或操作特定的Postfix子系统或功能。
# postfix_readme_directory: /usr/share/doc/postfix

# Postfix HTML文件的位置,描述如何构建、配置或操作特定的Postfix子系统或功能。
# postfix_html_directory: /usr/share/doc/postfix

# 您可以更改Postfix监听的端口。
# Postfix使用`/etc/services`将服务名称映射到端口号,如`2525`。
# 因此,可以指定端口号或服务名称,例如`smtp`。
postfix_smtp_listen_port: smtp

postfix_smtp_sasl_auth_enable: false
postfix_smtp_sasl_password_map: ""
postfix_smtp_sasl_security_options: ""
postfix_smtp_tls_wrappermode: false
postfix_smtp_sasl_password_map_content: ""

要求

已使用角色的状态

以下角色用于准备系统。您可以以其他方式准备系统。

需求 GitHub GitLab
robertdebock.bootstrap Build Status GitHub Build Status GitLab
robertdebock.core_dependencies Build Status GitHub Build Status GitLab

上下文

该角色是许多兼容角色的一部分。有关更多信息,请查看这些角色的文档

以下是相关角色的概述: 依赖关系

兼容性

该角色已在这些容器镜像上进行测试:

容器 标签
EL 9
Debian 所有
Fedora 所有
Ubuntu 所有

所需的最低Ansible版本为2.12,已对以下版本进行测试:

  • 之前的版本。
  • 当前版本。
  • 开发版本。

如果您发现问题,请在GitHub上进行登记。

许可证

Apache-2.0

作者信息

robertdebock

请考虑赞助我

关于项目

Install and configure postfix on your system.

安装
ansible-galaxy install robertdebock.postfix
许可证
apache-2.0
下载
145k
拥有者
I know my way around (Linux) infrastructure, have a passion for automation, Docker, Ansible, Molecule and ci/cd.