一、删除系统自带的sendmail

apt remove sendmail

二、安装postfix,dovecot

apt install postfix dovecot-core dovecot-imapd dovecot-pop3d

三、配置postfix

  • 生成受信任的证书
  • 上面的证书可以通过自己创建一个域名的方式进行生成,然后将证书用于下面的SSL证书配置

1、配置postfix基本参数

vi /etc/postfix/main.cf
// 76行,将等号后面的部分改写为本机主机名
myhostname = mail.kyzy.cc
// 82行,设置域名
mydomain = kyzy.cc
// 97行,把$myhostname改为$mydomain
myorigin = $mydomain
// 112行,把后面的localhost改成all
inet_interfaces = all
// 163行,把前面的注释拿掉,并加一下$mydomain
mydestination = $myhostname, localhost.$mydomain, localhost,$mydomain
// 209行,把前面的注释拿掉。
local_recipient_maps =
// 257行 Postfix默认将子网内的机器设置为可信任机器,如果只信任本机,就设置为host
mynetworks_style = host
// 263行,设置内网和本地IP
mynetworks = 受信任的IP地址,千万不要用0.0.0.0/0,不然分分钟就变成垃圾邮件中转服务器
 // 303行 配置哪些地址的邮件能够被Postfix转发,当然是mydomain的才能转发,否则其他人都可以用这台邮件服务器转发垃圾邮件了
relay_domains = $mydomain
// 426行,设置邮件收取目录(【注意】dovecot的10-mail.conf中的mail_location=maildir:~/Maildir虽然位置代表同一个,但是设置的值却不是一样的)
home_mailbox = Maildir/
// 568行,把前面的注释拿掉
smtpd_banner = $myhostname ESMTP $mail_name

2、配置SSL/TLS

vi /etc/postfix/main.cf

配置如下:

# SSL/TSL配置
smtpd_use_tls = yes
smtpd_tls_security_level = may
smtpd_tls_loglevel = 3
smtpd_tls_session_cache_timeout = 3600s
smtpd_tls_session_cache_database = btree:/var/spool/postfix/smtpd_tls_cache
# 这里是上面生成的可信任证书,如果配置不正确会提示证书不受信任(如果使用的是dovecot,那么这里可以注释掉,因为dovecot会接替postfix进行证书的验证)
smtpd_tls_cert_file = /var/www/html/ssl/mail.kyzy.cc.pem
smtpd_tls_key_file = /var/www/html/ssl/mail.kyzy.cc.key
tls_random_source = dev:/dev/urandom
smtpd_tls_auth_only = yes
smtpd_tls_mandatory_ciphers     = medium
tls_medium_cipherlist           = AES128+EECDH:AES128+EDH
smtpd_tls_mandatory_protocols   = !SSLv2,!SSLv3,!TLSv1,!TLSv1.1
smtpd_tls_protocols             = !SSLv2,!SSLv3,!TLSv1,!TLSv1.1
smtpd_relay_restrictions = permit_mynetworks reject_unauth_destination
smtpd_delay_reject=yes
message_size_limit = 10485760
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unknown_sender_domain,reject_unknown_recipient_domain,reject_unauth_destination,permit_auth_destination,reject

smtp_helo_name = $mydomain

smtpd_recipient_restrictions参数介绍:

permit_mynetworks: 允许本地网络
permit_sasl_authenticated: 允许sasl认证过的用户发送邮件
reject_unauth_destination: 拒绝没有经过认证的目标地址(这个一定要放在最后)
reject_invalid_hostname: HELO命令中的主机名称无效时返回501
reject_non_fqdn_hostname: HELO命令中的主机名称不是FQDN形式则返回504
reject_non_fqdn_recipient: 收件地址不是FQDN则返回504
reject_non_fqdn_sender: 发件地址不是FQDN则返回504
reject_unauth_pipelining: 拒绝不守规定的流水线操作
reject_unknown_client: DNS查不出客户端IP的PTR记录时拒绝
reject_unknown_hostname: HELO命令中的主机名称没有A和MX记录时拒绝
reject_unknown_recipient_domain: 收件人地址的网域部分查不出有效的A或MX记录时拒绝
reject_unknown_sender_domain: 发件人地址的网域部分查不出有效的A或MX记录时拒绝
permit_auth_destination: 允许经过认证的目标地址
check_policy_service: 自定义邮件筛选器,例如过滤或拒绝垃圾邮件,例如《Postfix 配合 SPF 拒绝欺诈邮件》

该参数的值是逗号(",")分割的,并且匹配规则也是根据顺序来的,当匹配了某个规则后会停止后面的匹配,所以优先级高的要放在前面,这个就需要看每个人的不同需要了。

检查配置:可用过postconf命令来检查配置,如果配置的参数没有被使用,会进行提示的。

3、配置master.cf

vi /etc/postfix/master.cf

找到

#smtps     inet  n       -       n       -       -       smtpd
#  -o smtpd_tls_wrappermode=yes
#  -o smtpd_sasl_auth_enable=yes

将这两行注释打开

smtps     inet  n       -       n       -       -       smtpd
 -o smtpd_tls_wrappermode=yes
 -o smtpd_sasl_auth_enable=yes

4、重新启动postfix

service postfix restart

5、查看监听的端口

netstat -tnlp | grep master

或者

netstat -tunlp | grep 465

请输入图片描述

四、 配置dovecot

1、配置dovecot的ssl.conf

vi /etc/dovecot/conf.d/10-ssl.conf

ssl = no

改为

ssl = yes ; 开启
或者
ssl = required ; 强制

修改这两个参数的值(这里是上面生成的可信任证书,非常重要,事实上如果使用了dovecot后证书的真正使用是这个文件,并非上面postfix的main.cf里面的证书配置)

ssl_cert = </var/www/html/ssl/mail.kyzy.cc.pem
ssl_key = </var/www/html/ssl/mail.kyzy.cc.key

2、配置收件目录

vi /etc/dovecot/conf.d/10-mail.conf

配置如下:

# 30行: 取消注释并添加(postfix的main.cf中的home_mailbox是Maildir/,两个位置一样,但值并不一样)
mail_location = maildir:~/Maildir

3、修改imaps、pop3s配置

vi /etc/dovecot/conf.d/10-master.conf
  inet_listener imaps {
    port = 993
    ssl = yes
  }
 inet_listener pop3s {
    port = 995
    ssl = yes
  }

4、配置auth方式

vi /etc/dovecot/conf.d/10-auth.conf

配置如下:

# 9行: 取消注释并修改
disable_plaintext_auth = no
# 97行: 添加
auth_mechanisms = plain login

5、重启服务

service dovecot start

6、查看端口监听

netstat -tnlp | grep dovecot

请输入图片描述

五、启动postfix,dovecot

service postfix restart
service dovecot restart

systemctl enable postfix
systemctl enable dovecot

添加账户

useradd -m no-reply -d /home/no-reply -s /bin/bash
passwd no-reply

注意1:如果mac客户端无法链接账号,则在/etc/postfi/main.cf中暂时这样设置,mynetworks = 0.0.0.0/0,然后关闭电脑上的vpn,添加完毕账号后再次还原设置开启vpn就没问题了(这一条是写给我自己的)。

注意2:如果使用PHPMaler发送邮件的一定要记得检查PHPMailer里面所使用的用户是否在系统中存在,否则是找不到发件人的。

到此,教程已经完毕,如果不希望使用系统用户作为邮件的用户则可用继续参考下一篇教程《Postfix + Dovecot + SSL + MySQL邮件服务器配置》

《关于 Ciphers》