搭建支持邮件客户端的邮件服务器(Postfix + Dovecot)

邮件服务器包含哪些服务(协议)

  • SMTP

    • 服务端口:25
    • 用途:服务器与服务器之间邮件传输(发送与接收)
  • POP3

    • 服务端口:110
    • 用途:邮件客户端从服务器下载邮件

什么是MUA, MTA, MDA

MUA: MUA(Mail User Agent):顾名思义,MUA就是“邮件用户代理”。邮件需要代理,这是由于通常Client端的计算机无法直接寄信(不然为什么要邮件主机?),所以,需要通过MUA帮我们传递信件,不论是送信还是收信,Client端用户都需要通过各个操作系统提供的MUA才能够使用邮件系统。举个例子,Windows里的OutLook Express、Netscape里的mail功能与KDE里的Kmail都是MUA。MUA主要的功能就是接收邮件主机的电子邮件,并提供用户浏览与编写邮件的功能。

MTA: MTA(Mail Transfer Agent):MUA是用在Client端的软件,而MTA是用在邮件主机上的软件,它也是主要的邮件服务器。MTA就是“邮件传送代理”的意思,既然是“传送代理”,那么用户寄信与收信时,都找MTA就对了!因为它负责帮用户传送。基本上,MTA的功能如下。
接收外部主机寄来的信件:既然是邮件主机,接收信件自然是主要功能,只要这个信件里有MTA内部账号,这封信就会被MTA收下来;
帮用户发(寄出)信:既然可以收信,自然也可以发信,只要用户具有合法的使用MTA的权力,就可以利用这台MTA主机把信传送出去!不过要注意,MTA会将信件送给目的地的MTA而不是目的地的MUA。

MDA: MDA(Mail Delivery Agent):“邮件投递代理”主要的功能就是将MTA接收的信件依照信件的流向(送到哪里)将该信件放置到本机账户下的邮件文件中(收件箱),或者再经由MTA将信件送到下个MTA。如果信件的流向是到本机,这个邮件代理的功能就不只是将由MTA传来的邮件放置到每个用户的收件箱,它还可以具有邮件过滤(filtering)与其他相关功能。这很了不起,举两个例子:
如果你知道某个广告信件的主题都是固定的,例如“AV情色XXX”,你想将这种信件直接丢进垃圾箱,可以通过MDA邮件分析功能,将信件丢弃。

常见的MTA, MUA

MTA

  • Sendmail
  • Postfix

MUA

  • Outlook
  • Foxmail

MTA安装与配置

Postfix的安装

dnf install postfix

Postfix的配置

主配置文件

/etc/postfix/main.cf

配置钱的先决条件: MX记录可用

配置后服务的启动和停止

systemctl start/stop/restart/reload postfix.service

main.cf 的配置

  1. myhostname = mail.11-hcz.cn // MX记录域名
  2. mydomain = 11-hcz.cn // 域名
  3. myorigin = $mydomain
  4. mydestination = $myhostname,$mydomain,localhost // 关键
  5. inet_interface = all

dovecot 的配置

dovecot 的功能

  • imap
  • pop3
  • lmtp

dovecot 的配置

  • vim /etc/dovecot.conf

    • 修改 protocols = 对应协议
  • vim /etc/dovecot/conf.d/10-mail.conf

    • mail_location = mbox:~mail:INBOX=/var/mail/%u

项目实施步骤

  1. 配置DNS

虚拟主机笔记里有较详细的配置过程

区域文件需添加MX记录

$TTL 3H
@       IN SOA  @ hczyyds.qq.com. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      @
        A       192.168.11.100
        AAAA    ::1

www     IN      A       192.168.11.100
11-hcz.cn   IN      MX      10      mail.11-hcz.cn    //最后两行重要

测试

  • 启动服务

systemctl restart named.service

firewall-cmd --add-service=dns

  • 客户端设置DNS指向
  • 客户端ping主机域名mail.11-hcz.cn
  • nslookup

    • set type=mx
    • 11-hcz.cn
  1. 安装配置Postfix

dnf install postfix

vim /etc/postfix/main.cf

myhostname = main.11-hcz.cn
mydomain = 11-hcz.cn
myorigin = $mydomain
inet_interfaces = all
#net_interfaces = localhost
mydestination = $myhostname,$mydomain,localhost
  1. 安装配置Dovecot

dnf install dovecot

vim /etc/dovecot/dovecot.conf

  • protocols = imap pop3 lmtp

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

  • mail_location = mbox:~/mail:INBOX=/var/mail/%u

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

  • ssl_cipher_list = ALL:!ADH:!EXP:!aNULL:+HIGH:+MEDIUM

systemctl restart dovecot.service

  1. 测试

创建邮件用户

  • useradd -g mail -s /sbin/nologin mail01;passwd mail01
  • useradd -g mail -s /sbin/nologin mail02;passwd mail02

配置邮件客户端

注意POP3使用SSL连接,端口995

配置相关服务开机启停

systemctl enable named.service
systemctl enable postfix.service
systemctl enable dovecot.service

firewall-cmd --add-service=dns --permanent
firewall-cmd --add-service=smtp --permanent
firewall-cmd --add-service=pop3s --permanent
firewall-cmd --reload

Shell脚本

#配置DNS
dnf install bind -y

ip='192.168.11.100'    # 部署的主机的IP

sed -i "s/listen-on port.*};/listen-on port 53 { ${ip}; };/" /etc/named.conf
sed -i 's/allow-query.*};/allow-query { any; };/' /etc/named.conf

domain='sziit2003010211.cn'  # 配置的邮件服务器要使用的域名

sed -i '$a zone \'"\"${domain}\" IN {\n\ttype master;\n\tfile \"${domain}.zone\";\n};" /etc/named.rfc1912.zones

file="/var/named/${domain}.zone"
cp -p /var/named/named.empty ${file}
sed -i 's/rname.invalid/hczyyds@qq.com/' ${file}
sed -i "s/127.0.0.1/${ip}/" ${file}
sed -i '$a mail    IN    A    '"${ip}" ${file}
sed -i '$a '"${domain}.    IN    MX    10    mail.${domain}." ${file}


systemctl restart named.service

if [ $? -ne 0 ]
then
    echo '启动named失败'
    exit
fi


#解决SMTP服务问题
dnf install postfix -y
file='/etc/postfix/main.cf'

sed -i '$a '"myhostname = mail.${domain}" ${file}
sed -i '$a '"mydomain = ${domain}" ${file}
sed -i '$a myorigin = $mydomain' ${file}
sed -i '$a inet_interfaces = all' ${file}
sed -i '$a mydestination = $myhostname, $mydomain, localhost' ${file}

systemctl restart postfix.service

if [ $? -ne 0 ]
then
    echo '启动postfix失败'
    exit
fi

# 解决POP3服务问题
dnf install dovecot -y
sed -i '$a protocols = imap pop3 lmtp' /etc/dovecot/dovecot.conf
sed -i '$a mail_location = mbox:~/mail:INBOX=/var/mail/%u' /etc/dovecot/conf.d/10-mail.conf
sed -i '$a ssl_cipher_list = ALL:!ADH:!LOW:!EXP:!aNULL:+HIGH:+MEDIUM' /etc/dovecot/conf.d/10-ssl.conf

systemctl restart dovecot.service

if [ $? -ne 0 ]
then
    echo '启动dovecot失败'
    exit
fi

#测试
groupadd mail
useradd -g mail -s /sbin/nologin mail01
echo -e '123\n123' > passwd mail01
useradd -g mail -s /sbin/nologin mail02
echo -e '123\n123' > passwd mail02

systemctl enable named.service
systemctl enable postfix.service
systemctl enable dovecot.service

firewall-cmd --add-service=dns --permanent
firewall-cmd --add-service=smtp --permanent
firewall-cmd --add-service=pop3s --permanent
firewall-cmd --reload