学习运维——配置电子邮件传输

来源:互联网 发布:天猫盒子软件 编辑:程序博客网 时间:2024/05/20 22:35

配置电子邮件传输:

电子邮件发送
服务器使用SMTP协议将电子邮件提交至TCP端口25,或由本地客户端通过
/usr/bin/sendmail程序进行提交。如果该MTA是最终目标位置,邮件将传递至MDA。否
则,将使用MX记录在DNS中查找下一个MTA,并使用SMTP进行转发。
MDA:“邮件发送代理”。MDA将邮件发送至收件人的本地邮件存储位置(默认情
况下是/var/spool/mail/user)。Postfix提供自己的MDA,以发送至基于文件的本地默认
邮件存储位置/usr/libexec/postfix/local.

转发:电子邮件服务器(MTA)将提交的邮件转发至另一个服务器,以进行发送

排队:失败的发送或转发尝试排队等待,并由MTA定义重试。(默认情况下,Postfix每小时执行此操作一次)

拒绝:在首次提交期间,电子邮件被电子邮件服务器拒绝

退回:远程服务器接受电子邮件以进行发送以后,又将该电子邮件退回给始发电子邮件服务器和/或用户电子邮件以进行发送以后,又将该电子邮件退回给始发电子邮件服务器和/或用户



一、搭建前的准备工作

1.两台主机(虚拟机也可)

我用的是两台虚拟机


2.两台主机的ip在一个网段内

我的两个虚拟机的ip分别是:

172.25.254.190

172.25.254.191


3.修改主机名

[root@mailwestos ~]# hostnamectl set-hostname mailwestos.westos.com
[root@maillinux ~]# hostnamectl set-hostname maillinux.linux.com



4.在mailwestos.westos.com上先搭建DNS服务器

1>安装bind

[root@mailwestos ~]# yum install bind -y

2>修改配置文件

11          listen-on port 53 { any; };
 17         allow-query     { any; };
 33         dnssec-validation no;   ##不进行dnssec安全认证


3>#vim /etc/named.rfc1912.conf

修改内容如下:

zone "westos.com."  IN {
        type master;
        file "westos.com.zone";
        allow-update { none; };
};
zone "linux.com." IN {
        type master;
        file "linux.com.zone";
        allow-update { none; };
};


4>#vim /var/named/westos.com.zone
$TTL 1D
@       IN SOA  dns.westos.com. root.westos.com. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
                NS      dns.westos.com.
dns             A       172.25.254.190
westos.com.     MX 1    172.25.254.190.

#cp -p westos.com.zone linux.com.zone
#vim linux.com.zone
$TTL 1D
@       IN SOA  dns.linux.com. root.westos.com. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
                NS      dns.westos.com.
dns             A       172.25.254.190
linux.com.      MX 1    172.25.254.191.

5>[root@mailwestos named]# systemctl restart named
 测试:
[root@mailwestos named]# dig -t mx westos.com.

; <<>> DiG 9.9.4-RedHat-9.9.4-14.el7 <<>> -t mx westos.com.
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41193
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;westos.com.            IN    MX

;; ANSWER SECTION:
westos.com.        86400    IN    MX    1 172.25.254.190.

;; AUTHORITY SECTION:
westos.com.        86400    IN    NS    dns.westos.com.

;; ADDITIONAL SECTION:
dns.westos.com.        86400    IN    A    172.25.254.190

;; Query time: 0 msec
;; SERVER: 172.25.254.190#53(172.25.254.190)
;; WHEN: Fri Mar 10 20:43:40 EST 2017
;; MSG SIZE  rcvd: 103

此时,DNS服务器就搭建好了



二、搭建postfix邮件服务器


1.搭建之前我们来先做个小实验:

先用mailwestos.ewestos.com 给maillinux.linux.com发邮件
[root@mailwestos named]# mail root@linux.com
Subject: lsj
slkdjfls
.
EOT
[root@mailwestos named]# mailq
-Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient-------
50C9A17E860      445 Fri Mar 10 21:25:27  root@mailwestos.example.com
              (connect to 172.25.254.229[172.25.254.229]:25: No route to host)
                                         root@linux.com

-- 0 Kbytes in 1 Request.

用maillinux.linux.com 给mailwestos.westos.com发邮件
[root@maillinux ~]# mail root@westos.com
Subject: test
ljkdsf
.
EOT
You have mail in /var/spool/mail/root
[root@maillinux ~]# mailq
-Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient-------
E666426D01A      443 Fri Mar 10 21:26:28  root@maillinux.example.com
(Host or domain name not found. Name service error for name=westos.com type=MX: Host not found, try again)
                                         root@westos.com

-- 0 Kbytes in 1 Request.

可以发现,两台主机谁也发不了邮件;

现在我们来实现两台主机可以互发邮件:

在两台主机上都进行以下操作:


1>修改postfix的配置文件

[root@maillinux ~]# vim /etc/postfix/main.cf
 76 myhostname = maillinux.linux.com                                  ##指定运行Postfix邮件系统的主机名
 83 mydomain = linux.com                                                          ##指定运行 Postfix邮件系统主机的域名
 99 myorigin = $mydomain                                                             ##指定发件人所在的域名
113 inet_interfaces = all                                                                ##接受来自所有网络的请求
116 #inet_interfaces = localhost                                                   ##这行注释掉
164 mydestination = $myhostname, $mydomain, localhost          ##指定Postfix 的接收邮件的收件人域名
2>重启服务
[root@maillinux named]# systemctl restart postfix.service 

3>防火墙

[root@maillinux ~]# firewall-cmd --permanent --add-service=smpt
[root@maillinux ~]# firewall-cmd --reload
[root@maillinux ~]# firewall-cmd --list-all

另一台主机也需要修改做以上操作,若是以上做完不能发,配置postfix服务主机上的/etc/resolv.conf,给他设置为上面的DNS服务器的ip

排错:

>/var/log/maillog

操作

cat /var/log/maillog


以上操作我们用到了一个协议:SMTP 简单传输控制协议

而postfix正是实现 了SMTP的一种服务


2.Postfix邮件服务器介绍


        postfix是Wietse Venema在IBM的GPL协议之下开发的MTA(邮件传输代理)软件。postfix是Wietse Venema想要为使用最广泛的sendmail提供替代品的一个尝试。


        Postfix由postfix RPM包提供,并通过postfix服务脚本控制。它是一个由多个协同操作程序构成的模块化程序,它的组件由master进程控制。


        Postfix的主配置文件是/etc/postfix/main.cf,可以使用文本编辑器或postconf命令进行编辑。postconf命令还可用于确定Postfix的所有当前和默认配置设置或逐项确定这些设置。


        默认情况下,Postfix仅侦听来自本地主机的传入电子邮件。若要重新配置postfix以接收从远程主机发送的本地邮件,必须在/etc/postfix/main.cf中设置inet_interfaces = all


        对电子邮件进行故障排除时,将在/var/log/maillog中保留所有与邮件相关的操作日志,其中包括关于被事件和成功事件的信息。mailq命令(或postqueue -p)显示已排队的所有传出邮件的列表。若要尝试再次立即发送所有已排队的邮件,可以运行postfix flush命令(或postqueue -f);否则,postfix将大约每小时尝试重新发送一次,直至邮件被接受或过期。


3.空壳邮件客户端


        实际上,大多数组织不再只用一个邮件服务器来处理所有入站和出战电子邮件。相反,出于安全方面的考虑邮件服务器专门针对特定角色进行了设置,以便可以面向其具体针对的应用程序更好标准角色包括:


        null客户端:运行本地MTA的客户端计算机,使所有电子邮件都可以转发至中央邮件服务器以进行发送,null客户端不接受任何电子邮件的本地发送。


        仅入站邮件服务器:在站点处理用户的所有传入电子邮件,并将之传递给MDA以发送至用户邮件存储位置的邮件服务器。


        在实际情况中,通常会在仅入站邮件服务器前端安装反垃圾邮件服务器或设备,以过滤垃圾邮件并且仅将 正常邮件转发至入站邮件服务器。


        出站邮件转发:出站邮件转发(或“smarthost”)接收所有出站邮件,并使用MX记录和SMTP协议将邮件转发至目标位置 。


4.Postfix邮件别名的配置

1>[root@maillinux named]# vim /etc/aliases                                      ##设置邮件别名,也可设置群组
admin:          root                                                                                    ##前为假名,后为真名
2>[root@maillinux named]# postalias /etc/aliases                             ##文件加密
3>[root@maillinux named]# systemctl restart postfix.service            ##重启Postfix服务
测试:在westoslinux.westos.com上给maillinux.linux.com  用别名发邮件
[root@mailwestos ~]# mail admin@linux.com
Subject: slkdj
jjjj
.
EOT
[root@mailwestos ~]# mailq
Mail queue is empty
看下westos
>N  2 root                  Fri Mar 10 22:20  21/748   "slkdj"
成功发送


邮件群发:
1>[root@maillinux named]# vim /etc/aliases
more:           :include:/etc/postfix/users
2>[root@maillinux named]# vim /etc/postfix/users
root
student
3>[root@maillinux named]# postalias /etc/aliases  #文件加密
4>[root@maillinux named]# systemctl restart postfix.service
测试:在mailwestos.westos.com给maillinux.linux.com发邮件
[root@mailwestos ~]# mail more@linux.com
Subject: more
hhhh
.
EOT
[root@mailwestos ~]# mailq
Mail queue is empty
看linux
[root@maillinux named]# mail -u student
Heirloom Mail version 12.5 7/5/10.  Type ? for help.
"/var/mail/student": 1 message 1 new
>N  1 root                  Fri Mar 10 22:20  24/877   "more"
[root@maillinux named]# mail
Heirloom Mail version 12.5 7/5/10.  Type ? for help.
"/var/spool/mail/root": 3 messages 1 new
    1 root                  Fri Mar 10 21:38  22/791   "test"
    2 root                  Fri Mar 10 22:20  22/759   "slkdj"
>N  3 root                  Fri Mar 10 22:20  24/874   "more"

5.Postfix虚拟域的配置

1>[root@maillinux named]# vim /etc/postfix/virtual             
wuhui@qq.com        root@linux.com

2>[root@maillinux named]# postmap /etc/postfix/virtual             ##生成Postfix可读取的数据库文件
执行完,/etc/postfix/下会有一个virtual.db

3>[root@maillinux named]# postconf -d | grep virtual

postconf命令:
      -d: 显示默认的配置
      -n:显示修改过的配置
      -m:显示支持查找表的类型
      -A: 客户端支持的SASL插件类型
      -a: 服务器端支持的SASL插件类型
      -e PARA=VALUE:  更改某参数配置信息,并保存至main.cf文件中

4.[root@maillinux named]# postconf -e "virtual_alias_maps = hash:/etc/postfix/virtual"

virtual_alias_domains:用来指定虚拟别名域的名称

virtual_alias_maps用来指定含有虚拟别名域定义的文件路径

5.在本机测试:
[root@maillinux named]# mail wuhui@qq.com
Subject: hhhhhhhhhh
lsd
.
EOT
[root@maillinux named]# mailq
Mail queue is empty


[root@maillinux named]# mail
X-Original-To: wuhui@qq.com
Delivered-To: root@linux.com

如果是另一台主机给本台主机发,则:
1.配置DNS,增加域qq.com

[root@mailwestos ~]# vim /etc/named.rfc1912.zones

zone "qq.com" IN {
        type master;
        file "qq.com.zone";
        allow-update { none; };
};

2.重启named服务

[root@mailwestos ~]# systemctl restart named
3.测试:用mialwestos.westos.com给maillinux.linux.com发邮件

[root@mailwestos named]# mail wuhui@qq.com
Subject: ouioiiuouiou
lkkl
.
EOT
[root@mailwestos named]# mailq
Mail queue is empty

到maillinux.linux.com上看邮件

[root@maillinux ~]# mail
 U 12 root                  Tue Mar 14 19:58  22/751   "ouioiiuouiou"


现在如果回信:[root@maillinux named]# mail root@westos.com
Subject: hui
sldf
.
EOT
[root@maillinux named]# mailq
westos那边:Return-Path: <root@linux.com>
显然是不对的,因为mailwestos.westos.com给wuhui@qq.com发的,收到的回信却是root@linux.com,所以我们要进行下面的操作。

出站地址伪装:
1.[root@maillinux named]# vim /etc/postfix/generic
2.[root@maillinux named]# postmap /etc/postfix/generic
加密过后我们可以看到/etc/postfix下多了一个generic.db
3.[root@maillinux named]# postconf -d | grep generic
4.[root@maillinux named]# postconf -e "smtp_generic_maps = hash:/etc/postfix/generic"
5.[root@maillinux named]# systemctl restart postfix.service
测试:
现在我们在用maillinux.linux.com给mailwestos.westos.com回信
[root@maillinux ~]# mail root@westos.com
Subject: toiuo
kkl
.
EOT
[root@maillinux ~]# mailq
Mail queue is empty

mailwestos.westos.com上显示来信人是:
Return-Path: <wuhui@qq.com>


三、在远程主机上发邮件

我用的远程主机的ip是172.25.254.90

1.在远程主机上安装telnet

[root@foundation90 ~]# yum install telnet

telnet介绍:

        Telnet是teletype network的缩写,现在已成为一个专有名词,表示远程登录协议和方式,分为Telnet客户端和Telnet服务器程序. Telnet可以让用户在本地Telnet客户端上远端登录到远程Telnet服务器上。

        Telnet是位于OSI模型的第7层---应用层上的一种协议,是一个通过创建虚拟终端提供连接到远程主机终端仿真的TCP/IP协议。这一协议需要通过用户名和口令进行认证,是Internet远程登陆服务的标准协议。应用Telnet协议能够把本地用户所使用的计算机变成远程主机系统的一个终端。它提供了三种基本服务:

1)Telnet定义一个网络虚拟终端为远程系统提供一个标准接口。客户机程序不必详细了解远程系统,他们只需构造使用标准接口的程序;

2)Telnet包括一个允许客户机和服务器协商选项的机制,而且它还提供一组标准选项; 

3)Telnet对称处理连接的两端,即Telnet不强迫客户机从键盘输入,也不强迫客户机在屏幕上显示输出。


2.在远程主机上登录并发送邮件

[root@foundation90 ~]# telnet 172.25.254.191 25
Trying 172.25.254.191...
Connected to 172.25.254.191.
Escape character is '^]'.
220 maillinux.linux.com ESMTP Postfix
ehlo hello                ##这是向服务器表明你的用户身份:服务器会返回代码 250表示服务器认可你的身份
250-maillinux.linux.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
mail from:wuhui@qq.com               ##填写发件人的邮箱,即你自己的邮箱名
250 2.1.0 Ok
rcpt to:root@westos.com                ##填写收件人的邮箱
250 2.1.5 Ok
data                         ##远程主机发送的、用于启动邮件内容传输的命令。
354 End data with <CR><LF>.<CR><LF>
lkjlkjlj
.
250 2.0.0 Ok: queued as 1B6BE17D3AB
quit                      ##退出
221 2.0.0 Bye
Connection closed by foreign host.


四、在远程主机上接收邮件

Dovecot介绍:

        Dovecot是一个安全性较好的POP3/IMAP服务器软件,响应速度快而且扩展性好POP3 / IMAP 是 MUA 从邮件服务器中读取邮件时使用的协议。其中,POP3是从邮件服务器中下载邮件,而IMAP则是将邮件留在服务器端直接对邮件进行管理、操作。
        Dovecot使用PAM方式( Pluggable Authentication Module,可插拔认证模块)进行身份认证,以便识别并验证系统用户,通过认证的用户才允许从邮箱中收取邮件。对于RPM方式安装的dovecot,会自动建立该PAM文件。        RHEL6系统自带了Dovecot软件,可通过yum之间安装

        Dovecot支持4种协议:POP3、IMAP、POP3S 、IMAPS
        有sasl认证能力。
        自身支持ssl,可以不依赖openssl。

        POP3:它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议。它是因特网电子邮件的第一个离线协议标准,POP3允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3协议的接收邮件服务器,用来接收电子邮件的。

        POP3协议允许电子邮件客户端下载服务器上的邮件,但是在客户端的操作(如移动邮件、标记已读等),不会反馈到服务器上,比如通过客户端收取了邮箱中的3封邮件并移动到其他文件夹,邮箱服务器上的这些邮件是没有同时被移动的 。

        而IMAP提供webmail 与电子邮件客户端之间的双向通信,客户端的操作都会反馈到服务器上,对邮件进行的操作,服务器上的邮件也会做相应的动作。

        同时,IMAPPOP3那样提供了方便的邮件下载服务,让用户能进行离线阅读。IMAP提供的摘要浏览功能可以让你在阅读完所有的邮件到达时间、主题、发件人、大小等信息后才作出是否下载的决定。此外,IMAP 更好地支持了从多个不同设备中随时访问新邮件。

        POP3 更易丢失邮件或多次下载相同的邮件,但 IMAP 通过邮件客户端与webmail 之间的双向同步功能很好地避免了这些问题。
       
        SASL:在Postfix可以利用SASL来判断用户是否有权使用转发服务,或是辨认谁在使用你的服务器。
        SSL:
                   1)认证用户和服务器,确保数据发送到正确的客户机和服务器;
                   2)加密数据以防止数据中途被窃取;
                   3)维护数据的完整性,确保数据在传输过程中不被改变。


       25端口:SMTP简单邮件传输协议
       110端口:POP3(Post Office Protocol Version3,邮局协议3)服务开放的,是用于接收邮件的。
       143端口:143端口是为IMAP(INTERNET MESSAGE ACCESS PROTOCOL)服务开放的,是用于接收邮件的


       SMTP协议、POP2协议、POP3协议、IMAP协议都是不安全的协议因考虑到网络安全的因素,下面给你介绍基于SSL(SecureSockets Layer安全套接层)协议的安全的邮件收发协议。你的邮件在传输过程中可能被网络黑客截取邮件内容,如果你的邮件机密性非常强,不想被收件人以外的任何人和任何黑客截取,或者是涉及国家机密安全的,等等。那么你的邮件就不该使用上述的三种协议进行收发。
        若你采用SMTP协议发邮件,那么你发出的邮件从你的机器传到服务器的过程中,可能被黑客截取从而泄露。若你采用POP2或者POP3协议收取邮件,那么你的邮件从服务器传至你当前机器的过程可能被黑客截取从而泄露。

        465端口(SMTPS):SMTPS和SMTP协议一样,也是用来发送邮件的,只是更安全些,防止邮件被黑客截取泄露,还可实现邮件发送者抗抵赖功能。防止发送者发送之后删除已发邮件,拒不承认发送过这样一份邮件。

       995端口(POP3S):POP3S和POP3协议一样,也是用来接收邮件的,只是更安全些

       993端口(IMAPS):IMAPS和IMAP协议一样,也是用来接收邮件的,只是更安全些


1-5在邮件服务器上做,6-8在远程客户机上做

1.在邮件服务器上安装服务Dovecot:
[root@maillinux named]# yum install dovecot -y


2.开启Dovecot服务:
[root@maillinux named]# systemctl start dovecot


3.编写主配置文件c
[root@maillinux named]# vim /etc/dovecot/dovecot.conf
48 login_trusted_networks = 0.0.0.0/0             ##允许任何ip来登录
 49 disable_plaintext_auth = no                       ##允许明文密码验证

4.编写子配置文件
[root@maillinux named]# vim /etc/dovecot/conf.d/10-mail.conf
 30 mail_location = mbox:~/mail:INBOX=/var/mail/%u
10-mail.conf:该文件主要定义邮件用户存储相关信息的位置,用户收到的文件放到哪里

5.重启服务
[root@mailwestos conf.d]# systemctl restart dovecot.service


下面在客户机操作:
6.安装mutt
[root@foundation90 ~]# yum install mutt -y

mutt介绍:它是一款基于文字界面的邮件客户端,非常小巧,但功能强大,可以用它来读写,回复保存和删除你的邮件,能在linux命令行模式下收发邮件附件。


7.[root@foundation90 ~]# mutt -f pop://student@172.25.254.191
登录时登录不了,则做以下操作:
[root@maillinux mail]# su - student
[student@maillinux ~]$ ls
mail
[student@maillinux ~]$ cd mail/
[student@maillinux mail]$ ls
[student@maillinux mail]$ mkdir /home/student/mail/.imap
[student@maillinux mail]$ touch /home/student/mail/.imap/INBOX


/etc/skel/:这下面有什么东西,新用户被建立出来时就会有什么东西


8.安装使用邮件客户端 雷鸟thunderbird
>有安装包thunderbird-31.2.0-1.el7.x86_64.rpm

>[root@foundation90 ~]# yum install thunderbird-31.2.0-1.el7.x86_64.rpm

>[root@foundation90 ~]# thunderbird
>注册一个帐号,这个帐号必须是邮件服务器上真实存在的用户或是数据库中有的虚拟用户

>在邮件服务器上真实存在的账户的密码就是他在邮件服务器上的密码,而虚拟用户的密码则是自己给定存储到数据库


接下来我们就来看怎么建立邮件的虚拟用户



五、虚拟用户发邮件的服务配置


1.在邮件服务器上安装数据库:
[root@maillinux myadmin]# yum install mariadb-server.x86_64 httpd php php-mysql.x86_64  -y


2.修改配置文件

[root@maillinux ~]# vim /etc/my.cnf#编写配置文件
skip-networking=1    ###只允许通过一个套接字文件(Unix/Linux系统)或通过命名管道(Windows系统)进行本地连接,不允许ICP/IP连接; 这提高了安全性,但阻断了来自网络的外部连接和所有的Java客户程序(Java客户即使在本地连接里也使用TCP/IP)。


3.开启数据库
[root@maillinux ~]# systemctl restart mariadb#开启数据库


4.[root@maillinux ~]# mysql_secure_installation #进行安全设置


5.安装图形化数据库工具
[root@maillinux ~]# mv phpMyAdmin-3.4.0-all-languages.tar.bz2 /var/www/html/
[root@maillinux html]# tar jxf phpMyAdmin-3.4.0-all-languages.tar.bz2         #解压
5.[root@maillinux html]# rm -fr phpMyAdmin-3.4.0-all-languages.tar.bz2
[root@maillinux html]# mv phpMyAdmin-3.4.0-all-languages/ myadmin        #修改文件夹的名字是为了方便
[root@maillinux html]# cd myadmin/
[root@maillinux myadmin]# cp -p config.sample.inc.php config.inc.php        #创建配置文件
[root@maillinux myadmin]# vim config.inc.php                                              #修改配置文件


6.开启httpd服务

[root@maillinux myadmin]# systemctl restart httpd


7.在浏览器登录,创建email库,mailusers表,表中有四列


8.创建用户并授权

我们肯定不能让客户用root用户登录,所以要给创建一个只能对email库进行操作的用户
[root@maillinux myadmin]# mail -uroot -p
MariaDB [(none)]> CREATE USER postfix@localhost IDENTIFIED BY 'postfix';
MariaDB [(none)]> GRANT INSERT,SELECT ON email.* TO postfix@localhost;
[root@maillinux myadmin]# mysql -upostfix -p
MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| email              |
+--------------------+

9.在网页上对数据库操作,给mailuser表添加一行


10.在/etc/postfix/新建三个文件,即下面黄色高亮显示部分
[root@maillinux postfix]# vim mysql-user.cf
[root@maillinux postfix]# cp mysql-user.cf mysql-domain.cf
[root@maillinux postfix]# cp mysql-user.cf mysql-mailbox.cf


[root@maillinux postfix]# cat mysql-user.cf
hosts = localhost
user = postfix
password = postfix
dbname = email
table = mailuser
select_field = username
where_field = username


[root@maillinux postfix]# cat mysql-domain.cf
hosts = localhost
user = postfix
password = postfix
dbname = email
table = mailuser
select_field = domain
where_field = domain


[root@maillinux postfix]# cat mysql-mailbox.cf
hosts = localhost
user = postfix
password = postfix
dbname = email
table = mailuser
select_field = maildir
where_field = username


11.测试上面三个文件写的是否正确,如果正确会输出下面的

[root@maillinux postfix]# postmap -q "wang@qq.com" mysql:/etc/postfix/mysql-user.cf   
wang@qq.com
[root@maillinux postfix]# postmap -q "qq.com" mysql:/etc/postfix/mysql-domain.cf
qq.com
[root@maillinux postfix]# postmap -q "wang@qq.com" mysql:/etc/postfix/mysql-mailbox.cf
/qq.com/admin


12.用命令修改/etc/postfix/main.cf的默认配置


[root@maillinux postfix]# groupadd -g 888 vmail                                                   
[root@maillinux postfix]# useradd -u 888 -g 888 vmail
[root@maillinux postfix]# postconf -d | grep virtual
[root@maillinux postfix]# postconf -e "virtual_mailbox_base = /home/vmail"            #设置虚拟用户存储的路径
[root@maillinux postfix]# postconf -e "virtual_uid_maps = static:888"                      #设置虚拟用户的身份
[root@maillinux postfix]# postconf -e "virtual_gid_maps = static:888"                      #设置虚拟用户的组

[root@maillinux postfix]# postconf -e "virtual_alias_maps = mysql:/etc/postfix/mysql-user.cf"      
[root@maillinux postfix]# postconf -e "virtual_mailbox_domains = mysql:/etc/postfix/mysql-domain.cf"
[root@maillinux postfix]# postconf -e "virtual_mailbox_maps = mysql:/etc/postfix/mysql-mailbox.cf"


[root@maillinux postfix]# vim /etc/postfix/main.cf

virtual_mailbox_base = /home/vmail                             ##指出邮箱路径的前缀
virtual_uid_maps = static:888                                       ##指出保存虚拟用户邮箱的uid的表在哪里,这是针对每个虚拟用户邮箱在系统中的uid都不一样的情况。虚拟用户的邮箱也可以共用一个
virtual_gid_maps = static:888                                       ##这个与uid情况相同
virtual_alias_maps = mysql:/etc/postfix/mysql-user.cf   ##用来指定含有虚拟别名域定义的文件路径,在数据库里
virtual_mailbox_domains = mysql:/etc/postfix/mysql-domain.cf               ##虚拟网域的名称
virtual_mailbox_maps = mysql:/etc/postfix/mysql-mailbox.cf                   ##指定保存虚拟用户邮箱的路径表在哪里


[root@maillinux vmail]# mail wang@qq.com                  ##检测是否能给数据库里的用户发送邮件
Subject: towang
lskd
lskdj
.
EOT

若无法发送:则有可能是数据库中的maildir里的/qq.com/admin少一个/


[root@maillinux vmail]# postsuper -d DB7A826EB3A  ##删除邮件队列里的某个邮件



六、虚拟用户收邮件的服务配置

1.编写配置文件
[root@maillinux vmail]# vim /etc/dovecot/dovecot.conf
login_trusted_networks = 0.0.0.0/0                     ##允许任何ip地址的主机来访问
disable_plaintext_auth = no                                ##开启明文验证


2.重启服务
[root@maillinux vmail]# systemctl restart dovecot.service


3.
[root@maillinux vmail]# vim /etc/dovecot/conf.d/10-auth.conf           
123 !include auth-sql.conf.ext


4.[root@maillinux vmail]# vim /etc/dovecot/conf.d/auth-sql.conf.ext
到这里看
passdb {
  driver = sql

  # Path for SQL configuration file, see example-config/dovecot-sql.conf.ext
  args = /etc/dovecot/dovecot-sql.conf.ext
}


5.[root@maillinux vmail]# cp /usr/share/doc/dovecot-2.2.10/example-config/dovecot-sql.conf.ext /etc/dovecot/dovecot-sql.conf.ext


6.[root@maillinux vmail]# vim /etc/dovecot/dovecot-sql.conf.ext
 32 driver = mysql
 71 connect = host=localhost dbname=email user=postfix     passwor    d=postfix
 78 default_pass_scheme = PLAIN
107 password_query = \
108   SELECT username, domain, password \
109   FROM mailuser WHERE username = '%u' AND domain = '%d'
125 user_query = SELECT maildir, 888 AS uid, 888 AS gid FROM mailu    ser WHERE username = '%u‘


7.[root@maillinux vmail]# vim /etc/dovecot/conf.d/10-mail.conf

 30 mail_location = maildir:/home/vmail/%d/%n


8.[root@maillinux vmail]# systemctl restart dovecot.service


9.在远程主机上登录数据库:
[root@foundation90 ~]# telnet 172.25.254.191 110
或用雷鸟:[root@foundation90 ~]# thunderbird



一个用户通过邮件客户端,例如雷鸟,收邮件的过程:
1.邮件客户端——>Dovecot:我要收邮件,你可以给我建立IMAP加密连接吗?

2.Dovecot——>邮件客户端:可以,这是我的SSL证书,请把你的帐号和密码给我

3.邮件客户端——>Dovecot:这是我的帐号密码

4.Dovecot——>MySQL:这个帐号、密码正确吗

5.MySQL——>Dovecot:这个帐号密码正确

6.Dovecot打开存放在本地磁盘的mailbox

7.Dovecot拿到该用户的最新邮件及相关信息

8.Dovecot将邮件及其相关信息通过IMAP协议发给邮件客户端


该用户要通过邮件客户端给别人回信

1.邮件客户端 ——>Postfix:我要发邮件,可以给我建立一个安全的SMTP连接吗?

2.Postfix ——>邮件客户端:可以,这是我的SSL证书,请把你的帐号和密码给我

3.邮件客户端 ——> Postfix:这是我的帐号和密码

4.Postfix ——>Dovecot:请帮我查一下这个帐号和密码

5.Dovecot t——>MySQL:这个帐号、密码正确

6.MySQL ——>Dovecot:这个帐号密码正确

7.Dovecot ——>Postfix:这个帐号密码正确

8.Postfix ——>邮件客户端:帐号密码是正确的,允许发送邮件

9.邮件客户端将编写好的邮件通过SMTP协议发送给Postfix

10.Postfix将收到的邮件转发给对方

11.Postfix通过DNS查询对方邮箱的MX记录,并找到对方Postfix所在的服务器

12.邮件被送到对方邮件服务器上的Postfix

13.Postfix——>MySQL:对方邮箱地址里的域名是不是需要处理的域名

14.MySQL返回确认信息给Postfix

15.Postfix将邮件投递给Dovecot的LMTP服务做处理

16.Dovecot将邮件保存到邮件目录用户对应的磁盘路径下

发件完毕!




0 0
原创粉丝点击