Docker中的全栈但简单的邮件服务器(SMTP,IMAP,反垃圾邮件,防病毒..)

2020-11-23 00:16:49

完整但简单的邮件服务器(SMTP,IMAP,反垃圾邮件,防病毒...)。仅配置文件,无SQL数据库。保持简单和版本化。易于部署和升级。

从v7.1.0版本开始,默认变量的使用已略有更改。请查阅环境变量部分

具有SSL支持,LDAP身份验证,筛选和配额的Dovecot for SASL,IMAP(和可选的POP3)

加上地址(也就是扩展名分隔符)可以直接使用:给您的电子邮件[email protected]转到[email protected]

在打开问题之前,请查看此自述文件,Wiki和Postfix / Dovecot文档。

注意:您需要停用某些服务,例如ClamAV才能在具有512MB RAM的主机上运行。即使使用1G RAM,您也可能在没有交换的情况下遇到问题,请参阅FAQ。

注意:.env中的变量仅在docker-compose.yml文件中扩展,而不在容器中扩展。在容器中使用环境变量的情况下,文件mailserver.env用于这种情况。

注意:如果要使用裸域(主机名等于域名),请参阅FAQ。

编辑文件.env和docker-compose.yml。在.env中,取消注释变量SELINUX_LABEL。如果要在其他容器之间共享卷绑定安装,请将-Z切换为-z。在docker-compose.yml中,取消注释包含$ {SELINUX_LABEL}的行,并注释掉或删除上面的行。

注意:使用setup.sh时,请使用选项-z或-Z。该值应与.env文件中SELINUX_LABEL的值匹配。请参阅Wiki,以获取有关setup.sh的更多信息。

现在已经生成了密钥,您只需将config / opendkim / keys / domain.tld / mail.txt的内容粘贴到domain.tld.hosts区域中即可配置DNS服务器。

你完成了!并且不要忘记使用./setup.sh -h来查看setup.sh脚本的其余功能。

如果您在SPF和/或转发邮件方面遇到任何问题,请尝试SRS。您可以通过设置ENABLE_SRS = 1来启用SRS。有关更多信息,请参见变量描述。

当两端都支持STARTTLS时,可以通过TLS保护连接。在端口110、143和587上,docker-mailserver将拒绝无法保护的连接。需要端口25支持不安全的连接。

接收电子邮件并过滤垃圾邮件和病毒。要提交外发邮件,您应该首选需要身份验证的提交端口(465,587)。除非配置了中继主机,否则传出电子邮件将通过端口25离开服务器(因此,出站流量不得被您的提供商或防火墙阻止)。

版本:'3.8'服务:邮件:图片:tvial / docker-mailserver:最新主机名:邮件#$ {HOSTNAME}域名:domain.com#$ {DOMAINNAME}容器名:邮件#$ {CONTAINER_NAME}端口:-“ 25: 25“-” 143:143“-” 587:587“-” 993:993“卷:-邮件数据:/ var / mail-邮件状态:/ var / mail-state-邮件日志:/ var / log / mail-./ config /:/ tmp / docker-mailserver /环境:-ENABLE_SPAMASSASSIN = 1-SPAMASSASSIN_SPAM_TO_INBOX = 1-ENABLE_CLAMAV = 1-ENABLE_FAIL2BAN = 1-ENABLE_POSTGREY = 1-ONE_DIR = 1-DMS_DEBUG = 0 cap_add:-NET_EMIN-始终重新启动:SYS_PTRAC :maildata:mailstate:maillogs:

版本:'3.8'服务:邮件:图片:tvial / docker-mailserver:最新主机名:邮件#$ {HOSTNAME}域名:domain.com#$ {DOMAINNAME}容器名:邮件#$ {CONTAINER_NAME}端口:-“ 25: 25“-” 143:143“-” 587:587“-” 993:993“卷:-邮件数据:/ var / mail-邮件状态:/ var / mail-state-邮件日志:/ var / log / mail-./ config /:/ tmp / docker-mailserver /环境:-ENABLE_SPAMASSASSIN = 1-SPAMASSASSIN_SPAM_TO_INBOX = 1-ENABLE_CLAMAV = 1-ENABLE_FAIL2BAN = 1-ENABLE_POSTGREY = 1-ONE_DIR = 1-DMS_DEBUG = 0-ENABLE_LDAP = 1-LDAP_SERVER_HOST = ld ldap容器/ IP /服务器名称-LDAP_SEARCH_BASE = ou = people,dc = localhost,dc = localdomain-LDAP_BIND_DN = cn = admin,dc = localhost,dc = localdomain-LDAP_BIND_PW = admin-LDAP_QUERY_FILTER_USER =(&(mail =%s)( mailEnabled = TRUE))-LDAP_QUERY_FILTER_GROUP =(&(mailGroupMember =%s)(mailEnabled = TRUE))-LDAP_QUERY_FILTER_ALIAS =(|(&(mailAlias =%s)(objectClass = PostfixBookMailForward))(&(mailAlias =%s)( objectClass =发布fixBookMailAccount)(mailEnabled = TRUE)))-LDAP_QUERY_FILTER_DOMAIN =(|(&(mail = * @%s)(objectClass = PostfixBookMailAccount)(mailEnabled = TRUE))(&(mailGroupMember = * @%s)(objectClass = PostfixBookMailAccount) (mailEnabled = TRUE))(&(mailalias = * @%s)(objectClass = PostfixBookMailForward))-DOVECOT_PASS_FILTER =(&(objectClass = PostfixBookMailAccount)(uniqueIdentifier =%n)-DOVECOT_USER_FILTER =(&(objectClass = PostfixBookMailAccount) (uniqueIdentifier =%n))-ENABLE_SASLAUTHD = 1-SASLAUTHD_MECHANISMS = ldap-SASLAUTHD_LDAP_SERVER = ldap-SASLAUTHD_LDAP_BIND_DN = cn = admin,dc = localhost,dc =本地域-SASLAUTHD_LDAP_PASSWORD = admin-SASLAUTHD = LDAP,people = localdomain-SASLAUTHD_LDAP_FILTER =(&(objectClass = PostfixBookMailAccount)(uniqueIdentifier =%U))[email protected]_MESSAGE_SIZE_LIMIT = 100000000 cap_add:-NET_ADMIN-SYS_PTRACE重新启动:始终是卷:maildata邮件状态:

如果某个选项无法如本文所述工作,请检查您是否正在运行最新的映像!粗体为默认值。

注意:自docker-mailserver v7.1.0起,环境变量的比较以不同的方式执行。如果您以前使用VARIABLE =''作为空值,请更新为现在使用VARIABLE =。

1 =>将所有状态合并到一个目录(/ var / mail-state)中,以允许使用Docker卷进行持久化

旧=>未实现。如果确实需要,请自定义覆盖后缀和dovecot设置Wiki的TLS密码

空=>允许邮件地址欺骗。任何登录的用户都可以使用伪造的发件人地址创建电子邮件。另请参阅Wikipedia(不建议使用,但出于向后兼容的原因而为默认)

1 =>(推荐)拒绝邮件欺骗。每个用户只能发送自己的别名地址。具有扩展名分隔符的地址无法发送消息。

启用发件人重写方案。如果您的邮件服务器充当转发器,则需要SRS。有关更多说明,请参见postsrsd。

为mynetworks选项设置不同的选项(可以在postfix-main.cf中覆盖)警告:将Docker网络的网关添加到受信任主机列表中,例如使用network或connected-networks选项,可以创建一个开放中继,例如,如果在主机上启用了IPv6,但在Docker中未启用IPv6。

网络=>添加docker默认桥接网络(172.16.0.0/12);警告:在这种情况下,docker-compose可能会使用其他主机(例如192.168.0.0/16)使用PERMIT_DOCKER = connected-networks

如果您的网络接口与eth0不同,例如在Kubernetes中使用HostNetworking时,可以将其设置为所需的任何接口。然后将使用此接口。

此选项正在激活POSTFIX_DAGENT的用法,以指定不同于默认dovecot套接字的ltmp客户端。

设置所有用户的邮箱大小限制。如果设置为零,则大小将不受限制(默认)。

设置所有用户的邮件大小限制。如果设置为零,则大小将不受限制(不建议!)

=>指定要为其提供邮件的标准域名。这用于许多配置功能,因此,如果您无法设置主机名(例如,您在不允许的容器平台中),请在此环境变量中进行指定。

强制=>允许其他测试完成。拒绝尝试发送带有550 SMTP答复的邮件的尝试,并记录helo / sender /收件人信息。下次客户端连接时重复此测试。

drop =>立即使用521 SMTP回复删除连接。下次客户端连接时重复此测试。

忽略=>忽略此测试的失败。允许其他测试完成。下次客户端连接时重复此测试。此选项对于测试和收集统计信息而不阻止邮件很有用。

mdbox ==>(实验性)使用Dovecot高性能邮箱格式,每个文件多个消息,每个框多个文件

该选项已在2019年11月添加。在docker-mailserver中使用Maildir以外的其他格式被认为是实验性的,仅应用于测试目的。有关更多详细信息,请参阅Dovecot文档。

这是一个新选项。仍然支持旧的REPORT选项以实现向后兼容性。如果未设置此选项,并且使用旧选项启用了报告,则将使用logrotate。

更改轮换日志和发送(不建议使用)报告的时间间隔。

注意:此变量用于控制容器内的logrotate旋转并在日志旋转时发送pflogsumm报告。为了向后兼容,仍支持该变量,但添加了新选项LOGROTATE_INTERVAL,仅旋转日志。

请注意,只有容器内部的日志会受到影响。完整的日志输出仍可通过docker logs邮件(或您各自的容器名称)获得。如果要控制docker生成的日志文件的logrotation,请参阅:Docker Logging Drivers。

另请注意,默认情况下,回收容器时日志会丢失。要保留日志,请挂载卷。

最后,logrotate间隔可能会影响生成报告的时间。当报告由日志轮换触发时就是这种情况。

/!\垃圾邮件发送:启用垃圾邮件处理程序后,标记为垃圾邮件的邮件将不会被发送。使用SPAMASSASSIN_SPAM_TO_INBOX = 1接收垃圾邮件。

1 =>垃圾邮件将发送到收件箱,并使用SA_SPAM_SUBJECT标记为垃圾邮件。

注意:此spamassassin设置需要ENABLE_SPAMASSASSIN = 1。默认情况下,邮件服务器配置为隔离垃圾邮件。如果隔离了电子邮件,则将它们压缩并存储在取决于上述ONE_DIR设置的位置。如果ONE_DIR = 1,则位置为/ var / mail-state / lib-amavis / virusmails /。如果ONE_DIR = 0,则为/ var / lib / amavis / virusmails /。这些路径在docker容器内。要禁止这种行为并发送垃圾邮件,请将其设置为很高的值,例如100.0。

注意:此spamassassin设置需要ENABLE_SPAMASSASSIN = 1。通过插入关键字SCORE:*** SPAM(SCORE)***,将spamassassin分数添加到主题行。

注意:仅当您对贝叶斯数据库有信心来识别垃圾邮件时才激活它。

注意:仅当您对贝叶斯数据库有信心识别火腿时,才激活此选项。

注意:为了准备将ldap服务器与此容器结合使用,本文可能会有所帮助

注意:如果要结合使用邮件服务器和docker-compose,可以在此处设置服务名称

注意:左边的值是目录属性,右边的值是dovecot变量。

注意:左边的值是目录属性,右边的值是dovecot变量。

35 =>删除自上次被看到以来早于N天的条目

例如使用SASLAUTHD_MECHANISMS rimap,您需要指定imap服务器的IP地址/服务器名称==> xxx.xxx.xxx.xxx

电子邮件具有“信封”发件人(指示发送服务器)和“标头”发件人(指示发送者)。更严格的SPF政策可能要求您同时替换这两者,而不仅仅是信封发送者。

您可以指定多个键,以逗号分隔。第一个用于签名,其余的用于验证。这就是您旋转和到期密钥的方式

如果自动检测失败,不是您想要的或希望有单独的容器处理DSN,请设置此选项

默认主机和端口,以中继所有邮件。格式:[example.com]:587(如果需要与$ RELAY_USER和$ RELAY_PASSWORD兼容,请不要忘记括号,如下所述)。