用 Postfix+Dovecot 在 CentOS7 上快速搭建自己的安全邮件服务器

说“快速”的原因,其实很简单,是因为直接使用 yum 安装而不是通过编译的方式。
说“安全”的原因,是我们需要实现 SSL的传输层加密。
网上各种介绍,各种版本其实都是各种坑,我的这个版本也不能免俗,因此特声明版本如下:

目前介绍的版本是截止写作日期,2018-2-21,农历正月初六, yum 上的最新版本。

Postfix: 2.10.1
cyrus-sasl: 2.1.26
dovecot: 2.2.10

本文不适用非 CentOS7 的操作系统,并且不适合采用编译方法安装 Postfix+Dovecot 的情形。
所有各种  DNS,iptables, SElinux  的设置, 所有和 Web, MySQL 相关的那些应用,均不在本文讨论之列。
如果你之前安装有 sendmail , 请用 # yum erase sendmail 删除软件包。

1. 安装所有软件包,各种 yum install.
# yum install postfix*  cyrus-sasl* dovecot*
其实并不是所有的相关包都是需要安装的, 但是为了实现“快速”,我们就不去纠结是否需要安装那些八辈子都用不到的包了。 毕竟安装一个软件包本身不会引入安全问题。

2. 启动服务
# systemctl enable postfix dovecot
# systemctl start postfix dovecot -l
如果你看到绿色的 running,恭喜你,万里长征第一步成功了。

3. 配置 postfix

  • 把下面的这段添加到 /etc/postfix/main.cf 里:
    smtpd_helo_required = yes
    smtpd_delay_reject = yessmtpd_sasl_type = dovecot
    smtpd_sasl_path = private/auth
    smtpd_sasl_auth_enable = yes
    smtpd_sasl_local_domain = ”
    smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination
    broken_sasl_auth_clients=yes
    smtpd_sasl_authenticated_header = yes
    smtpd_client_restrictions = permit_sasl_authenticated
    smtpd_sasl_security_options = noanonymous
    smtpd_sasl_tls_security_options = noanonymous
    message_size_limit = 15728640

    smtpd_use_tls = yes
    smtpd_tls_auth_only = yes
    smtpd_tls_cert_file = /etc/ssl/certs/youdomain.pem
    smtpd_tls_key_file = /etc/ssl/certs/yourdomain.key
    smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
    smtpd_tls_loglevel = 1
    smtpd_tls_mandatory_ciphers = medium
    smtpd_tls_mandatory_protocols = SSLv3, TLSv1
    smtpd_tls_received_header = yes
    smtpd_tls_security_level = may
    smtpd_tls_session_cache_timeout = 3600s
    tls_random_source = dev:/dev/urandom

    修改 myhostname, mydomain, 为你自己的邮件服务器主机名,以及你的邮件域名。
    把 inet_interfaces 设置为: all.
    把 mydestination 设置为: $myhostname, $mydomain
    把 mynetworks_style 设置为: host
    把 mynetworks 设置为: 127.0.0.0/8
    把 home_mailbox 设置为: Maildir/
    里面提到的证书文件怎么配置,后面再提。

  • 把下面的这段添加到 /etc/postfix/master.cf 里:
    smtps inet n – – – – smtpd -v
    -o syslog_name=postfix/smtps
    -o smtpd_tls_wrappermode=yes
    -o smtpd_sasl_auth_enable=yes
    -o smtpd_reject_unlisted_recipient=no
    -o smtpd_client_restrictions=$mua_client_restrictions
    -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject
    -o milter_macro_daemon_name=ORIGINATING
    -o smtpd_tls_auth_only=yes
    -o smtpd_client_restrictions=permit_sasl_authenticated,reject_unauth_destination,reject
    -o smtpd_sasl_security_options=noanonymous,noplaintext
    -o smtpd_sasl_tls_security_options=noanonymous
    -o smtpd_helo_restrictions=$mua_helo_restrictions
    -o smtpd_sender_restrictions=$mua_sender_restrictions

4. 配置 saslauthd,配置文件是:/etc/sysconfig/saslauthd,采用默认即可,所以这里啥也不用做。

5. 配置 dovecot,主配置文件是:/etc/dovecot/dovecot.conf,其实里面就两行文字,啥也不用改,因为里面各项具体的配置在 /etc/dovecotconf.d 目录下。

  • 修改 10-auth.conf
    disable_plaintext_auth = yes
    auth_mechanisms = plain login
  • 修改 10-mail.conf
    mail_location = maildir:~/Maildir
  • 修改 10-master.conf
    service auth {
    unix_listener /var/spool/postfix/private/auth {
    mode = 0666
    user = postfix
    group = postfix
    }
    }

如果需要跟详细的日志,可以修改 10-logging.conf 文件。

如果不出意外的话,用 # netstat -nat4|grep LIST 命令就应该可以看到如下的端口已经打开:
tcp 0 0 0.0.0.0:110 0.0.0.0:* LISTEN (POP3)
tcp 0 0 0.0.0.0:143 0.0.0.0:* LISTEN    (IMAP)
tcp 0 0 0.0.0.0:465 0.0.0.0:* LISTEN (SMTPS)
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN  (SMTP)
tcp 0 0 0.0.0.0:993 0.0.0.0:* LISTEN (POP3S)
tcp 0 0 0.0.0.0:995 0.0.0.0:* LISTEN (IMAPS)

为了安全起见,你一般只需要在防火墙上打开 IMAPS/POP3S/SMTPS。

这样, 一个支持 smtp authenticate,保证安全的邮件收发服务器就建成了,你也可以拥有自己的企业邮箱了。
邮箱的创建需要手工在 Linux 上添加用户。
如果你有幸看到本教程,哪些网上介绍的走明文密码传输协议的 IMAP/POP3/SMTP,你就基本上可以忽略了。

你或许会遇到 dovecot 证书出错的问题,这个问题可以通过下载 mkcert.sh
然后把其中的
SSLDIR 修改为:${SSLDIR-/etc/pki/dovecot}
再修改一下 /etc/pki/dovecot/dovecot-openssl.cnf 文件,然后运行一下 ./mkcert.sh 即可。

Postfix 的证书,我们需要手工创建,我的创建步骤很简单:
进入 /etc/ssl/certs,运行 make yourdomain.pem,会生成一个包含 key 和 证书 的 pem 文件,我把两部分分开成两个文件。
yourdomain.key(拷贝 pem 文件到 key,删除第二部分的证书) 和 yourdomain.pem(把 key 部分删除)

记得重启 postfix 和  dovecot 服务!

 

 


上一篇:用网络层指标衡量下一代防火墙性能?你OUT啦!


下一篇:ASP.NET MVC 4/5 Authentication 身份验证无效