Linux下配置部署sendmail服务器

这篇具有很好参考价值的文章主要介绍了Linux下配置部署sendmail服务器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、电子邮件系统的组成

Linux系统中的电子邮件系统包括3个组件:MUA(Mail user Agent,邮件用户代理)、MTA(Mail Transfer Agent,邮件传送代理)、MDA (Mail Dilivery Agent,邮件投送代理)

1、MUA

MUA是电子邮件系统的客户端程序,它是用户与电子邮件系统的接口,主要负责邮件的发送和接受以及邮件的撰写,阅读等功能,目前主流的用户代理平台有OutLook、foxmail和Linux中的Mail

2、MTA

MTA是电子邮件系统的服务器程序、它主要负责邮件的存储和转发。最常用的MTA软件由基于Windows平台的Exchange、和基于Linux平台的Sendmail和postfix。

3、MDA

MDA又是也称LDA(Local Dilivery Agent,本地投递代理)MTA把邮件投递到邮件接受者所在的邮件服务器**MDA则负责把邮件按照接收者的用户名投递到邮箱中**

4、MUA,MTA,MDA的协同工作

总的来说,当使用MUA程序写信时,应用程序会把信件发送给sendmail或者postfix这样的MTA程序。如果信件时寄给局域网或本地主机的,那么MTA程序应该从地址上就可以确定这个信息。

二、与电子邮件相关的协议

常用的电子邮件协议有SMTP,POP3,IMAP4

SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,该协议默认工作再TCP的25端口。SMTP属于客户机/服务器类型,它是一组用于由源地址目的地址传送到邮件的规则,由他来控制新建的中转方式,SMTP属于TCP/IP协议簇,它帮助每台计算机再发哦是那个或中专新建时找到下一个目的地。

POP3(Post Office Protocol3)即邮局协议的第三个版本。该协议默认工作在TCP的110端口,POP3同样属于客户机/服务器模型,它是规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的协议。它是Internet电子邮件的第一个离线协议标准,POP3允许从服务器上把邮件存储到本地主机即自己的计算机上,同时删除保存在邮件服务器上的邮件。


三、邮件中继

中继是指要求你的服务器向其他服务器传递邮件的一种请求。一个服务器处理的邮件只有两类,一类是外发的邮件,一类是接收的邮件,前者是本域用户通过服务器要向外部转发的邮件,后者是发给本域用户的。

一个用户不应该处理过路的邮件,就是既不是你的用户转发的,也不是发给你的用户的,而是一个外部用户发给另一个外部用户的。这一行为称为第三方中继。如果是不需要经过验证就可以中继邮件到组织外的,称为Open RELAY(开放中继),“第三方中继”和“开放中继”是要禁止的,但中继是不能关闭的。这里需要了解几个概念。

(1)中继:用户通过服务器将邮件传递到组织外

(2)OPEN RELAY:不受限制的组织外中继,即无验证的用户也可提交中继请求。

(3)第三方中继:由服务器提交的OPEN RELAY 不是从客户端直接提交的。比如网段域是A,我通过服务器B中转邮件到C域,这时服务器B上看待的是连接请求来源于A域的服务器,而邮件既不是服务器B所在域用户提交的,也不是发给B域的,这就是属于第三方中继。这是垃圾邮件的根本。如果用户通过直接连接你的服务器发送邮件,这是无法阻止的,比如群发软件。如果关闭了OPEN RELAY,那么他只能发信到你的组织内用户,无法将邮件中继出组织。

**sendmail相关配置文档**

**sendmail.cf**:sendmail核心配置文件,位于/etc/mail/sendmail.cf

sendmail.mc:sendmail提供sendmail文件模板,通过编辑此文件后再使用m4工具将结果导入sendmail.cf完成配置Sendmail核心配置文件,降低配置复杂性,位于/etc/mail/sendmail.mc

local-host-name:定义收发邮件服务器的域名和主机别名,位于/etc/mail/local-host-names

accesss.db:用来设置Sendmail服务器为哪些主机进行转发邮件,位于/etc/mail/access.db

aliases.db:用来定义邮件别名,位于/etc/mail/aliases.db

virtusertaable.db:用来设置虚拟账户,位于/etc/mail/virtusertable.db

***

四、Sendmail常规服务器配置

1.Sendmail服务器配置步骤

如果想要成功地假设Sendmail服务器,除了需要理解其工作原理外,还需要清楚整个设定流程,以及在整个流程中每一步的作用。一个建议Sendmail服务器设定流程主要包含一下几个步骤。

(1)配置好DNS

(2)检查是否安装Sendmail

(3)修改/etc/mail/sendmail.mc

(4)使用m4工具编译产生sendmail.cf文件,启动Sendmail服务器

(5)修改/etc/mail/access文件

(6)编译生成access.db

(7)修改/etc/mail/local-host-names。

(8)启动Sendmail服务器

(9)创建用户

(10)测试

2.Sendmail.cf和sendmail.mc

sendmail.cf是Sendmail的核心配置文件,有关Sendmail参数的设定大都需要修改文件。正因如此,sendmail的文件实在太复杂,可以说是天书,为了降低设置的复杂性,人们使用修改sendmail.mc文件来代替直接修改Sendmail.cf文件。

所以只需要通过修改sendmail.mc,再使用m4工具将结果导入sendmail.cf文件中即可。通过这种方法可以大大降低配置复杂度。、

sendmail.mc内容非常庞大,但大部分都被注释,以"dnl"开头随后的信息无效,我们再通常配置sendmail服务器的时候,只需要修改以下内容

116				DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl

在括号中的Addr字段表示SMTP协议侦听的地址为127.0.0.1.我们在通常的配置中,需要将其改为题目所要求的网段或者0.0.0.0以来加大侦听范围,否则,邮件将无法正常发送信件

3.m4工具的使用

m4工具是一个强大的宏处理过滤器,他的复杂性完全不亚于sendmail.cf。在使用m4工具之前,请先确认服务器上安装了该软件包,默认情况下m4工具是被安装好的。

在配置过程中,需要利用m4工具将编辑后的sendmail.mc文件内容重定向到sendmail.cf文件中。这样可避免去直接编辑复杂的sendmail.cf文件;如下所示:

m4 sendmail.mc > sendmail.cf 

注意:此时如果sendmail报错,那么就是因为sendmail.cf中有错误,在第39行多空了一个,我们只需要把那多的一行删掉,在重启即可。

4.local-host-names文件

该文件用来定义收发邮件的主机别名,默认情况下该文件位于/etc/mail下,为了使sendmail服务正常工作,必须在该文件中添加主机名称或主机别名,否则提示错误。

假如邮件服务器有两个主机名称,分别是mail.skils.com和mail1.skills.com,而只想收到发给mail.skills.com的信件,发给mail1.skills.com的信件则不受,那么需要添加mail.skills.com到loxal-host-names中

如下所示:

# local-host-names - include all aliases for your machine here.
mail.skills.com
skills.com

如果想要所有主机别名都可以收发邮件,请参照上述例子把所有的主机别名都添加到文件中即可。

5.别名和群发设置:

用户别名是经常用到的一个功能,别名就是给用户起另外一个名字。例如给用户A起个别名为B,则以后发给B的邮件实际A用户来接收。

为什么要用到这个功能呢?

  • 首先root用户无法收发邮件,如果有发给root用户的信件必须为root用户建立别名。
  • 其次群发设置需要用到这个功能,企业内部在使用邮件服务的时候,经常会按照部门群发信件,发给财务部的邮件只能财务部的所有人才会收到,其他则收不到。

使用格式如下:

aliases:   user[,user,user,...]

其中alias邮件地址中的用户名,而recioient实际接收该邮件的用户。下面通过几个例子来说明用户别名的设置方法:

例1:

为user1账号设置别名为toto,为user2账号设置别名为popo

[root@localhost named]# vim /etc/mail/aliases     //创建aliases文件并对其修改
toto:   user1
popo:   user2

例2:

假设网络组在此服务器内都有一个电子邮件账户,现在我们要给网络组的所有成员发送一封相同内容的电子邮件。可以使用别名机制中的有机胺列表功能实现:

group: net1,ne2,net3,....

6.利用Access文件设置邮件中继

Access文件用于控制邮件中继(RELAY)和邮件的进出管理。可以利用Access文件来限制哪些客户端可以使用此邮件服务器来转发邮件。例如限制莫某个域的客户端拒绝转发邮件,也可以限制某个网段的客户端可以转发邮件。其格式如下:

对象				处理方式

对象和处理方式的表现形式并不单一,每一行都包含对象和对它们的处理方式。下面对常见的对象和处理方式的类型做简单介绍。

Access文件中的每一行都具有一个对象和一种处理方式,我们要根据环境需要进行二者的组合。

Connect:localhost.localdomain           RELAY
Connect:localhost                       			 RELAY
Connect:127.0.0.1  									 RELAY

例:允许192.168.0.0网段自由发送邮件,但拒绝客户端ftp.skills.com及除192.168.123.101以外的192.168.123.0网段的所有主机

Connect:localhost.localdomain          RELAY
Connect:localhost                       			RELAY
Connect:127.0.0.1                       				RELAY
Connect:192.168.0                     			    RELAY
Connect:192.168.123                    		    REJECT
Connect:ftp.skills.com                           REJECT
Connect:192.168.123.101                       OK

最后使用makemap命令生成新的access.db数据库

[root@localhost named]# cd /etc/mail
[root@localhost mail]# makemap hash access.db<access

7.设置SMTP验证

利用access.db文件实现邮件中继代理时,对于利用拨号上网的用户不太现实,此时可以使用SMTP验证机制对指定的用户进行邮件中继。

编辑/etc/mail/sendmail.mc文件,修改和认证相关的配置行。

 52  TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
 53  define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
 78 FEATURE(`no_default_msa', `dnl')dnl
 125 DAEMON_OPTIONS(`Port=submission, Name=MSA, M=Ea')dnl

删除这几行每行开头的dnl

(1)TRUST_AUTH_MECH的作用是使Sendmail不管Access文件中如何设置,都能relay那些通过LOGIN、PLAIN、或DIGEST-MD5方式验证的邮件

(2)confAUTH_MECHANISMS的作用是确定系统的认证方式

(3)`Port=submission, Name=MSA, M=Ea的作用是开启认证,并以子进程运行MSA,实现邮件的账户和密码的验证。

7.2 使用m4命令重新生成/etc/mail/sendmail.cf文件
[root@localhost mail]# m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
7.3 重启sendmail服务 和 saslauthd服务
systemctl restart sendmail  saslauthd

8.设置邮箱容量

设置用户邮件大小设置,原来限制为2MB,建议设置为20MB,注意**单位为字节**。2000000=2M,20000000=20M

 36 define(`UUCP_MAILER_MAX', `20000000')dnl

设置本地邮箱的域名

157 LOCAL_DOMAIN(`skills.com')dnl

设置完毕,使用m4工具生成新的sendmail.cf文件

m4 /etc/mail/sednmail.mc > /etc/mail/sendmail.cf

五、设置虚拟域用户

使用虚拟域。可以将发送给虚拟域的邮件投递到真是域的用户邮箱中。利用虚拟域也可以实现邮件列表的功能。这里的虚拟域可以是不存在的域,而真实域既可以是本地域,也可以是远程域名Inter中的域。

虚拟域是真实域的别名,通过虚拟域用户表/etc/mail/virtusertable.db,实现了虚拟域的邮件地址到真实域的邮件地址的重定向。

虚拟域用户表/etc/mail/virtuserable.db文件**是通过/etc/mail/virtuserable文件生成**的。如下所示

虚拟域地址				真实域地址

虚拟域地址和真实域地址之间用Tab分隔,该文件中虚拟域地址和真实域地址可以写完整也可以只有域名或用户名,如下几种格式皆可

@sales.com		@smile.com
user1@smile.com		user2
user1@smile.com		user1,user2,user3

如果要实现邮件列表功能,则各个真实域地址之间用逗号分隔。


例题:

Sendmail邮件服务器的域为smile.com,为该邮件服务器设置虚拟域skills.com。并为user1@smile.com指定虚拟域名别名user1@skills.com。

具体步骤如下:

(1)配置DNS服务器,并设置虚拟域的MX资源记录

1 修改DNS区域解析文件,添加skills.com域

zone "skills.com" IN {
        type master;
        file "1";
        allow-update { none; };
};
zone "123.168.192.in-addr.arpa" IN {
        type master;
        file "2";
        allow-update { none; };
};

2 创建并编辑skills.com区域的正向解析文件/var/named/1

      cd /var/named/
      cp -a named.localhost 1
      cp -a named.loopback 2

$TTL 1D
@       IN SOA  @ rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      @
        A       127.0.0.1
        AAAA    ::1
@       IN      MX      10      mail.skills.com
mail    IN      A       192.168.123.101
(2) 将虚拟域skills.com加入到/etc/mail/local-host-named文件中
echo "skills.com" >> /etc/mail/local-host-names 

(3)配置邮件中继

利用vim编辑器编辑/etc/mail/access文件

[root@localhost named]# vim /etc/mail/access
skills.com				RELAY

使用makemap命令生成/etc/mail/access.db文件

[root@localhost named]# makemap hash /etc/mail/access.db < /etc/mail/access

设置虚拟域列表/etc/mail/virtuserable,并生成/etc/mail/virtuserable.db

使用vim编辑器编辑/etc/mail.access文件

vim /etc/mail/virtusertable
user1@skils.com			user1@smile.com

生成新的/etc/mail/virtusertable.db文件

makemap hash /etc/mail/virtusertable.db < /etc/mail/virtusertable

重启sendmail服务 注:若此处重启失败 可以使用systemctl status sendmail(named) -l查看服务状态 一般来说查看的就是named.conf,sendmail.cf两个文件


六、 调试Sendmail服务器

1.使用Telnet登录服务器并发出邮件

当Sendmail服务器搭建好后,使用telnet工具可以快速的登录服务器的25端口并发出邮件。

2.下载telnet工具及mail工具

(mail工具可以快速的帮助我们查看各个邮件用户的邮箱)

yum install -y telnet mailx

下载完毕后,我们关闭防火墙

systemctl stop firewalld
setenforce 0

3.登录sendmail服务器

[root@localhost mail]#  
[root@localhost mail]# telnet localhost 25      //利用telnet命令登录邮件服务器25端口
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 localhost.localdomain ESMTP Sendmail 8.14.7/8.14.7; Mon, 15 May 2023 00:26:24 +0800
mail from:user1@smile.com    //设置发信人地址
250 2.1.0 user1@smile.com... Sender ok
rcpt to:user2@skills.com     //设置收件人地址
250 2.1.5 user2@skills.com... Recipient ok
data					//data表示要开始写信内容了
354 Enter mail, end with "." on a line by itself
this is a happy mail   
wish you happy everyday!    				//这两行都是信件的内容
.								//“.”表示结束信件内容 千万不要漏掉了
250 2.0.0 34EGQO8V001584 Message accepted for delivery
quit					//退出telnet服务器的命令
221 2.0.0 localhost.localdomain closing connection

telnet中,每当我们输入过指令后,服务器都会回复一段数字代码。熟知这些代码,有利于我们更好的掌握sendmail并判断服务器错误原因。

4.常见的回应代码及其含义

回应代码 说明
220 表示SMTP服务器开始提供服务
250 表示命令指定完毕,回应正确
354 开始输入信件的内容,并以“.”结束
500 表示SMTP语法错,无法执行命令
501 表示指令参数或引述的语法错误
502 表示不支持该命令

5.利用Mailx命令接收电子邮件

安装好并重启mailx后,我们可以输入以下命令来查询邮件

[root@localhost mail]# mail -u user2     使用命令查看user2的邮箱
Heirloom Mail version 12.5 7/5/10.  Type ? for help.
"/var/mail/user2": 1 message 1 new 
>N  1 user1@smile.com       Mon May 15 00:27  13/520    //邮件编号
& 1    //查看邮件编号1
Message  1:
From user1@smile.com  Mon May 15 00:27:49 2023   //信件来源与发信时间
Return-Path: <user1@smile.com>     //返回路径
Date: Mon, 15 May 2023 00:26:24 +0800  //接收时间
From: user1@smile.com 
X-Authentication-Warning: localhost.localdomain: localhost [127.0.0.1] didn't use HELO protocol
Status: R

this is a happy mail
wish you happy everyday!    //邮件内容

& quit   //使用命令退出
Held 1 message in /var/mail/user2

6.用户邮件目录/var/spool/mail

我们可以在邮件服务器上进行用户邮件的查看,这可以确保邮件服务器邮件再正常工作了,Sendmail再/var/spool/mail目录中为每个用户分别建立单独的文件用于存放每个用户的邮件这些名字和用户名是相同的

[root@localhost mail]# ls /var/spool/mail
user1  user2

7.邮件队列

邮件服务器配置成功后,就能够为用户提供E-mail的发送服务了,但是如果接收这些邮件的服务器出现问题,或者因为其他原因导致邮件无法安全到达目的地。这封邮件可能就会失踪。所以sendmail采用了邮件队列来保存这些发送不成功的信件。

我们可以通过mailq来查询

[root@localhost mail]# mailq
                /var/spool/mqueue (1 request)
-----Q-ID----- --Size-- -----Q-Time----- ------------Sender/Recipient-----------
34EGNRUH001537       40 Mon May 15 00:24 "this is a happy mail"<user1@skills.com
                 (host map: lookup (smile.com): deferred)
                                         user2@smile.com
                Total requests: 1

其中相关参数的说明:

Q-ID:表示此封邮件队列的编号

size:表示邮件的大小

Q-Time:邮件进入/var/spool/mqueue目录的时间,并说明无法立即发送的原因

Sender/Recipient:发信人和收信人的邮件地址


七、邮件服务器配置常记的几件事

第一件:一定把DNS服务器配置好。保证DNS服务器和sendmail服务器、客户端之间的通信正常

第二件:关闭防火墙 或者 打开服务器的端口

第三件:将selinux关闭 可以使用setenfroce 0

第四件:注意网卡在虚拟机的连接方式 文章来源地址https://www.toymoban.com/news/detail-767279.html

到了这里,关于Linux下配置部署sendmail服务器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux 服务器搭建配置,开发效率一飞冲天 - Centos 篇

    大家好,我是比特桃。最近白嫖了一台 Centos 云服务器,用来做日常开发,特此记录一下搭建配置的过程。 我之前有篇文章是基于 Ubuntu 的:Linux 服务器搭建配置,开发效率一飞冲天 - Ubuntu 篇 如同个人电脑一样,每个人都有各自的喜好及需求。我个人用的所有终端,都遵循

    2024年02月11日
    浏览(40)
  • 『Linux从入门到精通』第 ① 期 - Linux环境搭建 | 云服务器购买 | Xshell环境配置

    目录 💐专栏导读 💐文章导读  🌷Linux环境的搭建方式 🌷云服务器购买 🌷Xshell的安装及使用 🌺Xshell安装 🌺Xshell使用 🌷如何进行共享账号? 🌺创建账号 🌺设置密码 🌺如何登录自己的账号 🌺root与普通用户的区别 🌸作者简介: 花想云 ,在读本科生一枚,致力于 C/

    2024年02月01日
    浏览(68)
  • Linux中搭建FTP服务器,匿名用户访问、本地用户访问、虚拟用户访问(详细解答安装配置步骤)

    对于Linux搭建服务器步骤详解:可以基于匿名访问、本地用户访问、虚拟用户访问 FTP服务访问可分为三种 匿名用户:用户名为ftp或者anonymous,提供任意密码或无密码访问即可. 本地用户:要求有用户名和相对应密码,适用于使用者都是使用此服务器的人。 虚拟用户(出于安全

    2024年02月10日
    浏览(62)
  • C++项目——集群聊天服务器项目(一)项目介绍、环境搭建、Boost库安装、Muduo库安装、Linux与vscode配置

    今天开始想更新一个C++项目,实现一个 支持跨服务器通信、支持负载均衡的集群聊天服务器项目 。项目会应用muduo网络库、CMake编译、MySQL数据库、JSon序列化与反序列化、Redis消息订阅模式以及Nginx负载均衡功能。 有兴趣的宝可以跟我一起实操起来,巩固自己的C++学习吧~ 本项

    2024年04月14日
    浏览(59)
  • 【Linux环境搭建】用云服务器搭建Linux环境

    目录 1. 我们为什么要学Linux 2. 云服务器购买 3. 远程连接云服务器 4. 如何创建新用户   5. 第一个Linux程序 总结: 写在最后: 作为一个程序员,你必须学好Linux,至于为什么,这个问题, 在我们日后的学习中,自然会慢慢展现出来,而校招对于Linux也有掌握的要求, 所以我们

    2024年02月03日
    浏览(61)
  • 【Linux】云服务器搭建Linux环境

    目录 🍊一.环境选择🍊 🍎二.购买云服务器🍎 🍏三.使用XShell远程登录云服务器🍏 1.下载XShell 2.进入授权界面,填写姓名和邮件,选择只需Xshell   3.填写信息后,会将下载链接发到邮件,点击链接下载安装即可 4.进入XShell ,使用命令行方式远程登录云服务器          

    2024年02月04日
    浏览(62)
  • 【Linux】主机搭建 Linux服务器环境 笔记

    过年买了个 mini 主机当玩具玩一下,这里记录下。 已有主力机 (windows) 的情况下,使用过如下四种 Linux宿主环境。这里总结下区别。 优点 云服务器 虚拟机 笔记本电脑 mini主机 价格低 √ √ 便携 √ √ 环境隔离 √ √ √ 详细过程不贴出来了,把关键点回忆一下,方便以后快

    2024年02月21日
    浏览(61)
  • Linux-帆软 服务器部署

    (一)下载安装帆软 (1)部署包部署 1、下载已经打包好的 帆软-tomcat安装包,因为该安装包已经把所需要的环境都打包了,下载启动tomcat后就可以用了 具体步骤参考官网:https://help.fanruan.com/finereport/doc-view-2919.html 2、下载的方式可以不采用官网的本地下载再上传的方式,可

    2024年02月09日
    浏览(48)
  • Linux-搭建DNS服务器

    操作系统:CentOS 7 IP地址:10.27.106.201 测试域名:aec.testuc.com 作用:主要提供解析aec.testuc.com域名的服务 主要修改以下两个地方 末尾添加如下配置: 拷贝其他区域数据文件,保留源文件的权限和属主的属性复制 修改该文件,结果如下: 仅检查语法不检查逻辑关系。当显示的

    2023年04月17日
    浏览(38)
  • linux——搭建NTP服务器

    NTP是网络时间协议(Network Time Protocol)的缩写,是一种用于同步计算机时钟的协议。它可以通过互联网或局域网等网络传输时间信息,使得多台计算机的时钟保持同步。NTP是一种分布式的协议,它通过多个时间服务器之间的协作来提供高精度的时间同步服务。NTP协议广泛应用

    2024年02月09日
    浏览(54)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包