手把手教你搭建邮件服务

邮件服务是互联网中最基本的一种服务。应用十分广泛。
在这里插入图片描述
邮件格式通常都是用户名+域名
例如 : [email protected]
这篇文章就教大家如何搭建邮件服务。

邮件的工作流程

邮件系统的组成

邮件服务器也采用的是C/S工作模式,通过SMTP,POP,IMAP协议来是实现邮件的发送和接收的。

每个邮件系统主要由4部分组成:

  1. MUA:邮件用户代理,客户端收发邮件的软件 – 写信人
  2. MDA:邮件投递代理,在邮件服务器上将邮件存放到相应的位置 —邮件投递
  3. MTA:邮件传输代理,服务器上的部署邮件服务器的软件----邮件装箱投递
  4. MRA:邮件收取代理,为MUA读取邮件提供标准接口,主要使用POP3和IMAP协议—收件人

流程

  • 两个不同的域的用户进行邮件收发 使用客户端或者编辑器写邮件发送到自己域内的邮件服务器
  • 邮件服务器通过域内的客户端发送邮件到目标域
  • 客户端通过DNS查询MX记录和A记录解析对方的IP地址,多个MX记录就找优先级高的 国内为10
  • 目标服务端的服务正常监听在指定端口上来接收客户端的请求 确认邮件的目标用户是否在本域
  • 如果在域内,通过邮件投递代理把邮件存放到指定的邮件目录 /var/spool/mail/redhat
  • 该用户登录系统后进行邮件检测,然后收取邮件即可

在这里插入图片描述

邮件使用的三种协议

POP3

POP3是Post Office Protocol 3的简称,即邮局协议的第3个版本,它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议。它是因特网电子邮件的第一个离线协议标准

  • POP3协议允许电子邮件客户端下载服务器上的邮件,但是在客户端的操作(如移动邮件、标记已读等),不会反馈到服务器上,比如通过客户端收取了邮箱中的3封邮件并移动到其他文件夹,邮箱服务器上的这些邮件是没有同时被移动的。110
  • (与IMAP有什么区别?) Pop3是从邮件服务器中下载邮件存起来支持不在线用户,基于TCP/IP,明文,使用110端口
    问题:不能同步

IMAP

IMAP全称是Internet Mail Access Protocol,即交互式邮件存取协议,它是跟POP3类似邮件访问标准协议之一。

  • 不同的是,开启了IMAP后,您在电子邮件客户端收取的邮件仍然保留在服务器上,同时在客户端上的操作都会反馈到服务器上,如:删除邮件,标记已读等,服务器上的邮件也会做相应的动作。所以无论从浏览器登录邮箱或者客户端软件 登录邮箱,看到的邮件以及状态都是一致的。
  • (与POP3有什么区别?)
    将邮件留在服务器端直接对邮件进行管理、操作,比POP3更先进支持邮件头部预览主题来源,基于TCP/IP,使用143端口

SMTP postfix

SMTP 的全称是“Simple Mail Transfer Protocol”,即简单邮件传输协议。

  • 它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。SMTP 服务器就是遵循 SMTP 协议的发送邮件服务器。
  • SMTP 认证,简单地说就是要求必须在提供了账户名和密码之后才可以登录 SMTP 服务器,这就使得那些垃圾邮件的散播者无可乘之机。 增加 SMTP 认证的目的是为了使用户避免受到垃圾邮件的侵扰。 25
  • ESMTP:(Extended SMTP) 是对标准 SMTP 协议进行的扩展。
  • 它与 SMTP 服务的区别仅仅是,使用 SMTP 发信不需要验证用户帐户,而用 ESMTP 发信时,服务器会要求用户提供用户名和密码以便验证身份。在所有的验证机制中,信息全部采用Base64编码。验证之后的邮件发送过程与SMTP 方式没有两样。

POP3 和IMAP区别

  1. IMAP客户端上收取邮件后邮件依旧保留在服务器上,同时在客户端上的操作也会保留在服务器端,POP3不会
  2. IMAP更好的支持从多个设备中随时访问新邮件
  3. IMAP提供的摘要游览功能可以让你阅读完所有的邮件到达时间、主题、发件人、大小等信息后才作初是否下载的决定。
  4. pop3需要下载所有的邮件,IMAP不能将所有的邮件下载,而是通过客户端直接对服务器上的邮件进行操控。所有的IMAP可以对数据进行加密从而保证通信安全。
  5. IMAP整体上为用户带来了更为便捷和可靠的的体验 ----pop3 更容易丢失邮件或者多次重复下载相同的邮件。

常用端口:

+s 代表加了认证

25 smtp:发送邮件
110 pop3: 接收邮件
143 imap:接收邮件
995 pop3s
993 imaps
465 smtps

邮件的提供形式

免费的邮件服务

干扰 (广告,域名不能自定义) 不安全 没有保障

租用的邮件服务

可以自定义域名 自定义管理(通讯录) 自定义功能

  • 系统界面简易,系统配置由运营商完成;企业IT人员只需要进行用户管理及日常运行监控。故障维护响应速度慢。
  • 只提供简单的邮件收发、网络硬盘等功能,企业管理员权限低,受限制大,不能针对各项系统配置进行调整。
  • 每个用户只有限定的空间大小,邮箱使用受到限制。若需扩大邮箱空间,需要向服务商购买。
  • 邮件存储在运营商的服务器,存在泄密的风险、数据管理和备份权限低,数据管理权限受到多方限制,存在安全隐患。
  • 国内品牌租用邮箱大多数都通过代理商做,客户很难找到厂家的技术进行咨询。系统维护更多依靠自己的技术力量进行。
  • 成本高,对于长期使用的企业,每年需要支付相当的企业邮箱租用费用,长期以往,成本更高。

自建的邮件服务

数据在本地 功能(邮件过滤 附件大小 邮件备份 垃圾邮箱处理 )

  • 首先,有助于提升企业形象。自建邮件系统后,企业邮件会以企业网站域名作为后缀的电子邮件地址,具有非常强的企业性质,有利于企业树立形象,增加客户信任度。
  • 其次,管理方便,可控性强。相比免费邮箱服务,企业自建邮件系统可以根据需求自行设置存储空间,以及子帐号数量和级别设定,可自由命名,分配容量,自行群发、分组、修改密码、设定功能限制等。同时可以在人员调动时,随时将账号回收,重新分配,在一定程度上避免泄露企业机密。
  • 第三,从稳定性和安全性考虑,自建邮件系统优势明显,比如可以根据企业需求自行定制邮件服务器和带宽,还可以通过内部的邮件备份保证数据安全。

邮件的配置

基础mail的使用

安装邮件服务

#yum install postfix -y 安装邮件服务,一般都是安装好的。

写邮件

[root@qq ~]# mail to redhat
Subject: test //主题
111 //正文内容
. //.代表结束
EOT
[root@qq ~]# su - redhat 切换用户进行查看
在这里插入图片描述

邮件群发

在这里插入图片描述

搭建完整的mail服务

在这里插入图片描述

域内互访,域间互发

邮件服务的主配置文件内容:

#主配置文件
/etc/postfix/main.cf  主配文件
/etc/postfix/master.cf 运行参数配置文件  (功能开关)
/etc/postfix/access    邮件SMTP服务的访问控制文件
/etc/postfix/canonical  邮件服务的规范表格格式
/etc/postfix/generic     邮件服务的一般的表格格式
/etc/postfix/header_checks  邮件服务的内置内容的检查
/etc/postfix/relocated   迁移
/etc/postfix/transport 
/etc/postfix/virtual   虚拟别名库文件   /etc/alias
Vim /etc/postfix/main.cf 配置文件介绍
queue_directory = /var/spool/postfix  本地邮件队列路径
队列管理器总共设置了五个做不同用途的队列,包括:输入、活动、等待、故障、保留。每个队列在queue_directory
参数指定的路径下各有一个专属的子目录。默认的队列目录是/var/spool/postfix/。
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix  所有在master.cf中用到的服务程序存放的路径
data_directory = /var/lib/postfix    存放缓存。随机数等可写的书籍文件存放位置
mail_owner = postfix
#default_privs=nobody 本地投递代理的运行身份
#myhostname=host.domain.tld设置邮件服务器的完全合格的域名
#mydomain=domian.tld  本地域名
#myorigin=$mydomain 发送邮件时设置的发件人的域名
inet_interfaces = localhost  设置postfix从哪个接口接受邮件
inet_protocols = all
mydestination = $myhostname, localhost.$mydomain, localhost  设置邮件可以发送到哪些域名
unknown_local_recipient_reject_code = 550 拒绝邮件的错误代码550
#mynetworks=168.100.189.0/28,127.0.0.0/8 设置信任的邮件客户端地址
#relay_domains=$mydestination 设置邮件转发到哪去
alias_maps = hash:/etc/aliases   设置别名数据库
alias_database = hash:/etc/aliases
Header_checks=regexp:/etc/postfix/header_checks 检查邮件有的 设置
sendmail_path = /usr/sbin/sendmail.postfix   postfix发送邮件的程序路径
newaliases_path = /usr/bin/newaliases.postfix    postfix完整的别名程序路径
mailq_path = /usr/bin/mailq.postfix      postfix的mailq程序路径
setgid_group = postdrop   设置邮件提交和队列管理的命令
html_directory = no  本地没有安装postfix的html文档
manpage_directory = /usr/share/man     帮助手册的位置
sample_directory = /usr/share/doc/postfix-2.10.1/samples   示例目录的位置
readme_directory = /usr/share/doc/postfix-2.10.1/README_FILES 自述目录位置

配置postfix服务 (自定义邮件域信息)

编辑主配置文件:vim /etc/postfix/main.cf
使用:set nu 查看行数,对指定行进行修改。

#配置邮件服务器主机名
76 myhostname = mail.openlab.com
#配置域名(这个邮件服务器管理的是哪个区域范围的邮件发送)
83 mydomain = openlab.com
#指定邮件发送时的域名
99 myorigin = $mydomain
#指定网络接口(默认只监听本地但是如果要与外界通信那么就要监听所有地址)
113 inet_interfaces = all
116 注释掉#指定服务器的目标区域  设置邮件可以发送到哪些域名
164 mydestination = $myhostname, localhost.$mydomain, localhost,$mydomain
#指定允许网络网段地址, 设置信任的邮件客户端地址
264 mynetworks = 192.168.221.0/24
#转发域   设置邮件转发到哪去
296 relay_domains = $mydestination

配置dovecot服务 imap 143

dovecot: 邮件接收服务器

#配置dovecot主配置文件
[root@localhost ~]# vi /etc/dovecot/dovecot.conf  (本地邮件传输协议)
24 protocols = imap pop3 lmtp
48 login_trusted_networks = 192.168.171.0/24  允许登录接受的ip段
#配置dovecot子配置文件
[root@localhost ~]# vi /etc/dovecot/conf.d/10-mail.conf
25 mail_location = mbox:~/mail:INBOX=/var/mail/%u
注意:有的系统可能没有权限;
chmod 0600 /var/mail/*
如果不执行上面这个命令,可能会出现在系统中可以收到邮件,但是客户端无法收到邮件,
注意查看系统/var/log/maillog日志
yum install cyrus-sasl

安装foxmail进行测试

安装foxmail,可以去官网下载。这里我不知道如何上传,需要的私我。
第一次进入后点击手动设置:
在这里插入图片描述
建立连接,邮件的账号是你linux中有的用户。这里的user1我先在linux里进行了创建。
在这里插入图片描述
连接成功:如果连接失败,检查是否停掉防火墙,和关闭setenforce,
是否重启postfix服务,和dovecot服务。
#systemctl stop firewalld.service
#setenforce 0
#systemctl restart postfix.service
#systemctl restart dovecot.service
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

开启SASL认证

配置SASL全称Simple Authentication and Security Layer,是一种用来扩充C/S模式验证能力的机制。在Postfix可以利用SASL来判断用户是否有权使用转发服务,或是辨认谁在使用你的服务器。

开启SASL认证sasl auth model
编辑main.cf配置文件,
开启SASL认证
vim /etc/postfix/main.cf
编辑main.cf配置文件,追加如下行:
broken_sasl_auth_clients = yes                                                                          #启用SASL对客户端进行认证
smtpd_sasl_auth_enable = ye                                                                                  #启用SASL认证
smtpd_sasl_security_options = noanonymous                                                                               #匿名用户
smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination
#定义收件人限定   =允许sasl接收限制l认证,允许mynetworks,拒绝unauth目的地
#配置完成后,重启以下服务
systemctl restart postfix
systemctl restart dovecot
systemctl restart saslauthd
在window安装foxmail
在window上打开foxmail
tail -f /var/log/maillog

变化在于端口,已经更改,重新导入一个用户就可以验证。

在浏览器中访问邮件

网上下载一下小松鼠的包内容,或者私我要,小松鼠。
将小松鼠导入到linux中,可以复制,粘贴进去,或者其他方式。
在这里插入图片描述

安装php并进行php测试。
[root@mail ~]# yum install httpd php php-gd -y
		安装服务,要使用web,需得有web服务。使用php,进行测试。
[root@mail ~]# systemctl --now enable httpd
[root@mail ~]# vim /var/www/html/phpinfo.php
[root@mail ~]# cat /var/www/html/phpinfo.php
<?php
 phpinfo();
?>

vim /etc/httpd/conf/httpd.conf ,如果测试有问题,就看看http的主配置文件。
或者重启httpd服务。
如果没有问题,在浏览器访问结果如下:注意输入的浏览器地址。
在这里插入图片描述
随后删除刚才创建的php文件。

下载SquirrelMail

[root@mail ~]# ll | egrep “squirrelmail|zh_CN”
-rw-r–r--. 1 root root 664076 12月 14 2015 squirrelmail-webmail-1.4.22.tar.gz
-rw-r–r--. 1 root root 115672 4月 25 2011 zh_CN-1.4.22-20110425.tar.gz

  上面我采用导入到复制粘贴到redhat目录下的方式。
配置
	1> 解压
	这里切到你刚才上传文件的地方。
	[root@mail ~]# tar xf squirrelmail-webmail-1.4.22.tar.gz -C /var/www
	[root@mail ~]# ln -sv /var/www/squirrelmail-webmail-1.4.22/ /var/www/webmail  #建立链接
	"/var/www/webmail" -> "/var/www/squirrelmail-webmail-1.4.22/"
	[root@mail ~]# tar xf zh_CN-1.4.22-20110425.tar.gz -C /var/www/webmail/
	
	2> 创建目录,设置权限
	创建用于存放邮件内容(如签证,名称和主题)、上传附件的data和attach目录(其中在解压SquirrelMail软件包后, data目录已自动生成),并确保网站运行用户(Apache网站默认以“apache.apache”身份访问)对这两个目录有访问和写入权限。
	[root@mail ~]# cd /var/www/webmail/    #这里使用ll查看一下是否有data目录,如没有,说明解压错误!重新上传文件进行解压。
	[root@mail webmail]# mkdir attach
	[root@mail webmail]# chown -R apache.apache data/ attach/
	[root@mail webmail]# chmod -R 730 attach/
	
	3> 建立和调整SquirrelMail的配置文件
	[root@mail webmail]# cd config
	[root@mail config]# cp -a config_default.php config.php
	[root@mail config]# vim config.php    #使用:/输入内容进行查找更改
		$domain = 'qq.com';   
		$imap_server_type4 = 'dovecot';
		$data_dir = '/var/www/webmail/data/';
		$attachment_dir = '/var/www/webmail/attach/';
		$squirrelmail_default_language = 'zh_CN';
		$default_charset = 'zh_CN.UTF-8';		
		$imapServerAddress = '192.168.150.148';
		$smtpServerAddress = '192.168.150.148';
		$provider_uri = 'http://mail.qq.com/';
httpd配置
	[root@mail config]# vim /etc/httpd/conf/httpd.conf 
		ServerName mail.qq.com:80    
		添加:
		Alias / /var/www/webmail/   #将webmail设为首页
	[root@mail config]# httpd -t
	Syntax OK
	[root@mail config]# systemctl restart httpd

测试:
	[root@mail config]# useradd haha     添加测试用户
	[root@mail config]# echo haha:haha | chpasswd 
	
	http://mail.qq.com/src/login.php #这里采用ip地址登录,还没做dns服务。
测试

浏览器输入网址。
在这里插入图片描述
然后进行登录检查:这里我登录上user1给redhat发了一条测试信息。
在这里插入图片描述
到这里呢,我们搭建好了一个域内互相发送邮件,分别利用软件,和web页面进行了测试。

域外互访

要实现域外互访,必先至少有两个域,这里我需要多一台虚拟机进行操作
同时需要配置dns服务。

配置dns服务,进行域名解析

1.配置httpd的服务。

vim /etc/httpd/conf.d/vhost.conf
<Virtualhost 192.168.168.153:80>
        DocumentRoot /var/www/webmail
        Servername mail.qq.com
</Virtualhost>

2.配置dns,
对dns服务不了解的朋友可以关注我,我后面会更新dns服务。
yum install bind -y 安装dns服务。

[root@localhost ~]# cat /etc/named.conf

options {
        listen-on port 53 { 192.168.168.153; };
        directory       "/var/named";
};

zone "qq.com" IN {
        type master;
        file "named.qq.com";
};

[root@localhost ~]# cat /var/named/named.qq.com
$TTL    1D
@       IN      SOA     @       root.qq.com (
                                        2020041301
                                        3H
                                        3H
                                        1M
                                        1M )
        IN      NS      dns.qq.com.
        IN      MX      10 mail.qq.com.#10代表级别,越低优先级越高
dns     IN      A       192.168.168.153
mail    IN      A       192.168.168.153


重启服务进行测试
[root@localhost ~]# systemctl restart named
[root@localhost ~]# nslookup
> server 192.168.168.153
Default server: 192.168.168.153
Address: 192.168.168.153#53
> mail.qq.com
Server:         192.168.168.153
Address:        192.168.168.153#53

Name:   mail.qq.com #解析成功
Address: 192.168.168.153
> exit

3.修改主机dns,进行测试
先修改linux的dns主机。修改后关闭网络再打开即可。在这里插入图片描述
再修改主机的dns服务。修改完成后应用,可以看到
在这里插入图片描述
配置后,首选dns是你配置的dns服务器。
在这里插入图片描述
进行测试:可以看到通过域名进行访问是可以访问的。
在这里插入图片描述

实现跨域,再配置一个域。

首先保证两台虚拟机之间可以通信。

[root@localhost ~]# ping 192.168.168.153
PING 192.168.168.153 (192.168.168.153) 56(84) bytes of data.
64 bytes from 192.168.168.153: icmp_seq=1 ttl=64 time=0.032 ms
64 bytes from 192.168.168.153: icmp_seq=2 ttl=64 time=0.045 ms
验证两台虚拟机可以通信。

再另一台虚拟机上进行相同配置:只需要更改qq.com为baidu.com.

mount /dev/sr0 /mnt
mount: /dev/sr0 is write-protected, mounting read-only
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# setenforce 0
[root@localhost ~]# vim /etc/postfix/main.cf
[root@localhost ~]# yum install dovecot -y
[root@localhost ~]# vim /etc/dovecot/dovecot.conf
[root@localhost ~]# vim /etc/dovecot/conf.d/10-mail.conf
[root@localhost ~]# chmod 0600 /var/mail/*
[root@localhost ~]# systemctl restart dovecot
[root@localhost ~]# systemctl restart postfix.service

[root@localhost ~]# yum install httpd php php-gd -y
[root@localhost ~]# vim /var/www/html/phpinfo.php
[root@localhost ~]# systemctl status httpd
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf
[root@localhost redhat]# tar xf squirrelmail-webmail-1.4.22.tar\(1\).gz -C /var/www
[root@localhost redhat]# ln -sv /var/www/squirrelmail-webmail-1.4.22/ /var/www/webmail/var/www/webmail’ ->/var/www/squirrelmail-webmail-1.4.22/[root@localhost redhat]# tar xf zh_CN-1.4.22-20110425.tar\(1\).gz -C /var/www/webmail/
[root@localhost redhat]# cd /var/www/webmail/
[root@localhost webmail]# mkdir attach
[root@localhost webmail]# chown -R apache.apache data/ attach/
[root@localhost webmail]# chmod -R 730 attach/
[root@localhost webmail]# cd config
[root@localhost config]# cp -a config_default.php config.php
[root@localhost config]# vim config.php
[root@localhost config]# vim /etc/httpd/conf/httpd.conf
[root@localhost config]# httpd -t
Syntax OK
[root@localhost config]# systemctl restart httpd
[root@localhost config]# useradd shuaibo
[root@localhost config]# echo shuaibo:redhat | chpasswd

[root@localhost ~]# yum install bind -y
[root@localhost ~]# vim /etc/named.conf
[root@localhost named]# vim /var/named/named.baidu.com
[root@localhost named]# systemctl restart named
[root@localhost named]# nslookup
> server 192.168.168.157
Default server: 192.168.168.157
Address: 192.168.168.157#53
> mail.baidu.com
Server:         192.168.168.157
Address:        192.168.168.157#53

Name:   mail.baidu.com
Address: 192.168.168.157
> exit

这里将一个主机作为解析dns服务器,解析两个域,
两台主机ip:192.168.168.153:qq域
192.168.168.157:baidu域
##/etc/name.cof
options {
        listen-on port 53 { 192.168.168.157; };
        directory       "/var/named";
};

zone "baidu.com" IN {
        type master;
        file "named.baidu.com";
};
zone "qq.com" IN {
        type master;
        file"named.qq.com";
};
##/var/named/named.qq.com
TTL    1D
@       IN      SOA     @       root.qq.com. (
                                2020041301
                                1H
                                1M
                                1M
                                1M )
        IN      NS      ns.qq.com.
        IN      MX      10 mail.qq.com.
ns      IN      A       192.168.168.157
mail    IN      A       192.168.168.153

##/var/named/named.baidu.com
$TTL    1D
@       IN      SOA     @       root.baidu.com. (
                                        2020041301
                                        3H
                                        3H
                                        1M
                                        1M )
        IN      NS      dns.baidu.com.
        IN      MX      10 mail.baidu.com.
dns     IN      A       192.168.168.157
mail    IN      A       192.168.168.157

然后进行保存测试,将虚拟机的dns服务器改为刚才配置的dns服务器,并将你的主机的dns服务器同样改为刚才配置的dns服务器。清理浏览器缓存进行访问即可实现不同域之间进行收发邮件。
这里截图我就不发了,之前发布了文章不知道怎么没有生效,虚拟机已经恢复快照了,这里就是一个简单测试,如果在主机上不能测试
就在虚拟机里进行测试。

宁可与敌人明打,不欲受同人暗算。

喜欢的点个赞吧。

猜你喜欢

转载自blog.csdn.net/qq_42707739/article/details/105492712