一、前言

很早之前,就想整个自己的邮件服务器玩玩,一直觉得有个自己的邮件服务器是很棒的事情,有了域名,有了服务器,有了闲,赶紧整个邮件服务器来玩玩~

二、选择合适的邮件系统

选择合适的邮件系统能够让我们的部署和使用事半功倍,在网上查找了一番,可供我们选择的有Ewomail和iRedMail,前者有开源和企业版,企业版的功能较多,后者完全开源。Ewomail和iRedMail功能都很强大,管理系统和邮件系统直观,部署都可以通过编写好的脚本来部署,都有详细的说明文档(其中iRedMail的doc没有完全翻译完成)。我选择了iRedMail(因为我傻,先部署的Ewomail域不允许问题自己没解决)

下面给出二者的doc链接,可以去了解一下

Ewomail

iRedMail

三、选择合适的部署方式

有两种部署方式,脚本安装和Docker一键部署,Docker大法好,所以我们使用Docker部署~

选择脚本安装的同学看官方教程/百度一下就能找到方法,这里不多叙述。

Docker有官方的,也有第三方的,官方的还在测试,建议不用于生产环境

我们选择lejmr/iredmail

docker run -p 80:80 -p 443:443\
-h HOSTNAME.DOMAIN\
-e "MYSQL_ROOT_PASSWORD=password"\
-e "SOGO_WORKERS=1"\
-e "TZ=Europe/Prague"\
-e "POSTMASTER_PASSWORD={PLAIN}password"\
-e "IREDAPD_PLUGINS=['reject_null_sender', 'reject_sender_login_mismatch', 'greylisting', 'throttle', 'amavisd_wblist', 'sql_alias_access_policy']"\
-v /srv/iredmail/mysql:/var/lib/mysql\
-v /srv/iredmail/vmail:/var/vmail\
-v /srv/iredmail/clamav:/var/lib/clamav\
--name=iredmail lejmr/iredmail:mysql-latest

注意事项:

①-h HOSTNAME.DOMAIN 要带上mail(e.g. mail.luckykeeper.site)

②-e “MYSQL_ROOT_PASSWORD=password” password可以自定义

③-e “SOGO_WORKERS=1” 是否启用SOGO,不启用改0


SOGo的样子

④-e “TZ=Europe/Prague” 大种花请改 Asia/Shanghai

⑤-e “POSTMASTER_PASSWORD={PLAIN}password” {PLAIN}password整体改成自己的密码(管理员postmaster@hostname.domain的密码)

⑥-e “IREDAPD_PLUGINS=[‘reject_null_sender’, ‘reject_sender_login_mismatch’, ‘greylisting’, ‘throttle’, ‘amavisd_wblist’, ‘sql_alias_access_policy’]”启用的插件

⑦注意看tag,有不同版本,本文发布时最新版本是lejmr/iredmail:mysql-1.3-latest,pull的时候要注意不能直接pull

部署完成后,访问https://[IP]即可访问

1、https://[IP]/mail Roundcube Webmail(发邮件的)

2、https://[IP]/SOGo Android风Webmail(也是发邮件的)

3、https://[IP]/iredadmin 邮箱管理后台

常规操作(添加用户等)so easy~ 略过不表

四、部署后的DNS、TLS操作

要想让刚刚部署完的邮件服务器正常收发邮件,这一步必不可少

1、添加各种记录,如表:

详解

①| TXT | @ | 默认 | v=spf1 mx -all |

SPF记录,添加之后可以起到防垃圾邮件和防止自己发的邮件被识别为垃圾邮件

mx只允许下面要设置的mx值的主机(服务器)发邮件

ip4:/ip6:只允许这个地址的主机(服务器)发邮件

SPF详解

②| TXT | dkim._domainkey | 默认 | 这是存放DKIM的值 |

dkim值,通过公/私钥验证防垃圾邮件和防止自己发的邮件被识别为垃圾邮件

获取dkim key的方法

centos6

[root@mail ~]# amavisd showkeys

centos7/8

[root@mail ~]# amavisd -c /etc/amavisd/amavisd.conf showkeys

复制输出的信息,打开http://www.ewomail.com/list-20.html 整理dkim信息

整理完成后会在”整理显示区域”显示解析记录,接下来设置域名解析即可完成。

等待10分钟后测试是否设置正确。

测试命令:

centos6

[root@mail ~]# amavisd testkeys

centos7/8

[root@mail ~]# amavisd  -c /etc/amavisd/amavisd.conf testkeys

测试报pass,就OK啦~

| A | mail | 默认 | 127.0.0.1 |

设置A/AAAA记录,做ipv4/v6解析

| CNAME | smtp | 默认 | mail.xxx.xxx |
| CNAME | pop | 默认 | mail.xxx.xxx |
| CNAME | imap | 默认 | mail.xxx.xxx |

smtp pop imap的地址

| MX | @ | 默认 | mail.xxx.xxx |

MX的记录值,邮箱的地址


验证SPF和dkim设置

SPF:https://www.kitterman.com/spf/validate.html

dkim:https://dkimvalidator.com/

去这里给指定邮箱发个邮件就能知道

2、配置SSL证书

证书存放位置

- /etc/pki/tls/certs/iRedMail.crt
- /etc/pki/tls/private/iRedMail.key

因为我安装了宝塔,所以直接把宝塔申请的证书改后缀放到指定目录替换即可

五、修改附件大小限制

1、修改 postfix 中邮件大小的设置

Postfix 是一个邮件传送代理(MTA),因此,要修改配置以使它能传送大附件的邮件。

假设要修改附件大小为 100MB,需对 message_size_limit 和 mailbox_size_limit 做如下修改:

# postconf -e message_size_limit='104857600'
# postconf -e mailbox_size_limit='104857600'

之后重启 Postfix 服务,使上述修改生效:

# /etc/init.d/postfix restart

注意:

  • 104857600 是由 100 (MB) x 1024 (KB) x 1024 (Bit) 计算得到的结果。
  • 邮件在发送前会被客户端(Outlook,Thunderbird等)重新编码,导致邮件大小会超过 100MB,所以建议将上述设置中的邮件大小改为 110MB 或 120MB 即可。
  • 如果 mailbox_size_limit 的值比 message_size_limit 小,你会在 Postfix 日志 文件里看到这样的错误信息:fatal: main.cf configuration error: mailbox_size_limit is smaller than message_size_limit.

这样你就可以通过客户端正常发送邮件了。

2、修改 Roundcube 网页邮箱的附件上传大小

如果使用 Roundcube 网页邮箱,需要额外更改两个地方:

2.1修改 PHP 设置允许上传大附件

修改 PHP 配置文件 /etc/php.ini 中的 memory_limit, upload_max_filesize 和 post_max_size 三个参数:

  • 在 RHEL/CentOS 系统上: 配置文件路径是 /etc/php.ini
  • 在 Debian/Ubuntu 系统上,配置文件路径是 /etc/php5/apache2/php.ini
  • 在 FreeBSD 系统上,配置文件路径是 /usr/local/etc/php.ini (Apache),或者是 /etc/php5/fpm/php.ini (Nginx)。
  • 在 OpenBSD 系统上,配置文件路径是 /etc/php-5.4.ini。如果你运行的 PHP 版本号为 5.4 ,路径将会不一样。
memory_limit = 200M; (在Resource Limit部分)
upload_max_filesize = 100M;(在File Upload部分)
post_max_size = 100M;(在Data...上面)

2.2修改 Roundcube 网页邮箱设置以允许上传大附件

修改 roundcube 目录下的 .htaccess 文件:

  • 在 RHEL/CentOS 系统上,此文件路径为 /var/www/roundcubemail/.htaccess

或者/opt/www/roundcubemail-1.x.x/.htaccess

  • 在 Debian/Ubuntu 系统上,此文件路径为 /usr/share/apache2/roundcubemail/.htaccess 或者 /opt/www/roundcubemail/.htaccess.
  • 在 FreeBSD 系统上,此文件路径为 /usr/local/www/roundcubemail/.htaccess
  • 在 OpenBSD 系统上,此文件路径为 /var/www/roundcubemail/.htaccess

注意:某些 Linux/BSD 发行版本可能没有 .htaccess 文件,此时你可以忽略此步骤。

php_value    memory_limit   200M
php_value upload_max_filesize 100M
php_value post_max_size 100M

重启 Apache 或 php-fpm 服务以使上述修改生效。

3、限制 Nginx 上传文件大小

在配置文件 /etc/nginx/nginx.conf 中找到参数 client_max_body_size ,按需要修改大小:

如果nginx.conf中http{}指定了include ,就不能像下面这样直接改,要到include的文件夹找client_max_body_size去改

http {
...
client_max_body_size 100m;
...
}

4、限制 SOGo 上传文件大小(不设置就不限制)

SOGo-3.x 引入新参数 WOMaxUploadSize 用于限制上传文件的大小,请将它添加到 SOGo 配置文件 /etc/sogo/sogo.conf 里并设置一个合适的附件大小。

// set the maximum allowed size for content being sent to SOGo using a PUT or
// a POST call. This can also limit the file attachment size being uploaded
// to SOGo when composing a mail.
//
// - The value is in kilobyte.
// - By default, the value is 0, or disabled so no limit will be set.
WOMaxUploadSize = 102400;

修改后需要重启 SOGo 服务。

5、修改 Outlook 程序的附件大小限制(使用Outlook做客户端需要)

Outlook 有自己的附件大小限制,如果超出限制会弹出错误信息 The attachment size exceeds the allowable limit.

如需要在 Windows 系统上修改 Outlook 程序的附件大小限制,请参照以下步骤:

  • 退出 Outlook 程序
  • 运行注册表编辑器:开始 -> 运行 -> 输入 “regedit”
  • 找到并选择以下任意一个条目:
    • 如果不存在可自行创建。
    • 14.04 表示 Outlook 的版本号,在你的系统上可能不一样。
HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Outlook\Preferences
HKEY_CURRENT_USER\Software\Policies\Microsoft\Office\14.0\Outlook\Preferences

  • 在以上条目底下添加注册表项:

    • 类型:DWORD
    • 名称:MaximumAttachmentSize
    • 值:一个用于表示最大附件大小的整数。例如,30720 表示 30MB 限制。

    注意:

    • 设置为 0 表示无限制。
    • 默认限制为 20MB。可设置小于 20MB 的附件大小。
  • 退出注册表编辑器。

  • 启动 Outlook。

注意:大多数邮箱有跨邮箱附件大小限制,超过10M的邮件往往会被退件,建议用同域邮箱或者其它方式传送附件。

需要开放的端口

25,143,993,995,587,110,465,443

都设置好了?All Done!享用自己的专属邮箱吧~