sendmail是最重要的邮件传输代理程序。Sendmail作为一种免费的邮件服务器软件,已被广泛的应用于各种服务器中,它在稳定性、可移植性、及确保没有bug等方面具有一定的特色,且可以在网络中搜索到大量的使用资料一般情况下,我们把电子邮件程序分解成用户代理,传输代理和投递代理。 用户代理用来接受用户的指令,将用户的信件传送至信件传输代理而投递代理则从信件传输代理取得信件传送至最终用户的邮箱邮件传输是从服务器到服务器的,而且每个用户必须拥有服务器上存储信息的空间(称为信箱)才能接受邮件(发送邮件不受这个限制)。可以看到,一个邮件传输代理的主要工作是监视用户代理的请求,根据电子邮件的目标地址找出对应的邮件服务器,将信件在服务器之间传输并且将接收到的邮件缓冲或者 提交给最终投递程序。有许多的程序可以作为信件传输代理,但是sendmail是其中最重要的一个,事实证明它可以支持数千甚至更多的用户,而且占用的系统资源相当少。不过,sendmail的配置十分复杂,且无验证,没有防范垃圾机制,没有防病毒机制。当sendmail程序得到一封待发送的邮件的时候,它需要根据目标地址确定将信件投递给对应的服务器,这是通过DNS服务实现的。sendmail首先确定这个地址是用户名+机器名的格式,然后,通过查询DNS来确定需要把信件投递给某个服务器。DNS数据中,与电子邮件相关的是MX记录

MUA (mail user agent   邮件用户代理),用于用户端发送邮件或者阅读邮件linux有mutt这个工具 MTA (mail tranfer agent 邮件传输代理 ),相当于一个邮局,server端的软件,主要的功能有,接收MUA发来的邮件和把邮件发送给下一个MTA,可以说是一个邮件路由(mail router),server端的软件就属于MTA,现在开源的有sendmail,postfix,qmail等 

MDA (mail devilery agent 邮件投递代理),主要是将MTA所接受的邮件,依照邮件的目的地将此邮件放到本机账号下或者是给下一个MTA,一般就是指mail这样的命令

邮件的协议:

 发信: SMTP (simple mail tranfer protocol 简单邮件传输协议)   端口号 TCP的25端口,在发信时,MUA会主动连接MTA的port 25,然后经由SMTP协议发送出去,SMTP分为接受SMTP和发送SMTP,它不管两端主机的配置或者系统等,只要两边SMTP协议OK就可以发送邮件 

收信: POP   (post office protocol    邮局协议),来连接到MTA,以读取或者下载邮件,现在常用的版本是POP3,端口为110 IMAP   (internet message access protocol 网络报文件协议),能在下载邮件前先下载邮件头信息,以可以让用户选择性下载 端口 143。

首先来测试一下环境

这里我用的centos的系统,默认似乎是安装过了sendmail的,并且是启动过的。

接着安装dovecotyum install dovecot

启动dovecot service dovecot start

这时是可以发信件的,为了测试可以先添加两个账号user1user2,然后向其发送一份邮件

由日志看出,发送成功了,真的发送成功了吗,要看user1能否收到这封标题为1的内容为12387681498649821的邮件,为了验证,要切换到user1,进行收信

说明真的发成功,好神奇呀。。。

在后续操作之前,先安装一个工具sendmail-cf

接下来来修改/etc/mail/目录下的三个文件

vim sendmail.mc ,让其监听所有地址,以达到用客户端也可以发信件的目的

vim access (做中继)在后面追加,实现这个网段地址的中继,及到163.com域的都无条件接受,到sina.com的进行中继

vim local-host-names 

经过测试,没有问题,基于上面的基本配置后,下面来开始对sendmail的搭建

一:163.com部分的基本搭建

首先来安装并搭建DNS服务器(为了节省资源,把邮件服务器和ns服务器搭在一台机器上)

至此,dns就安装安装完成了,然后开始搭建

然后切换到安装目录,来产生配置文件

然后编辑该配置文件

 

然后修改区域生成文件vim named.rfc1912.zones (填写内容只是说明用法)

然后去生成163.com.zone

接着编辑163文件

然后启动dns服务器:service named start

接着要做DNS指向:编辑/etc/resolv.conf

然后修改主机名: vim /etc/sysconfig/network

接着也要把hosts文件也要修改了

重启sendmail DNS服务器

接下来就是测试来看是否搭建成功

由图可知,基本搭建成功。

二:sina.com的基本搭建

这里我用redhat来搭建sendmail,在redhatsendmail依然默认已经安装并启动,下面来安装dovecot yum install dovecot

启动dovecotservice dovecot start

建立用户user3 user4

接下来依旧来安装并搭建DNS服务器(为了节省资源,把邮件服务器和ns服务器搭在一台机器上)


然后切换到安装目录,来产生配置文件

然后编辑该配置文件

然后修改区域生成文件vim named.rfc1912.zones (填写内容只是说明用法)

然后去生成sina.com.zone

 

接着编辑sina文件

然后启动dns服务器:service named start

接着要做DNS指向:编辑/etc/resolv.conf

安装一个工具sendmail-cf

接下来来修改/etc/mail/目录下的三个文件

vim sendmail.mc ,让其监听所有地址,以达到用客户端也可以发信件的目的

vim access (做中继)在后面追加,实现这个网段地址的中继,及到sina.com域的都无条件接受,到163.com的进行中继

vim local-host-names 

然后修改主机名: vim /etc/sysconfig/network

接着也要把hosts文件也要修改

重启sendmail DNS服务器

接下来就是测试来看是否搭建成功

由此知,基本搭建也已经成功了。

下面来测试从163sina发送是否成功

由此知,已成功完成二者的邮件收发。

为了实现快速发送,这里要对二者的DNS做反向解析

163

vim /var/named/chroot/etc/named.rfc1912.zones 

然后去生成这个文件

编辑生成的192.168.102.local文件

然后执行:rndc reload

接下来做sinaDNS反向解析

sina

vim /var/named/chroot/etc/named.rfc1912.zones 

然后生成192.168.102.local文件

编辑生成的192.168.102.local文件

然后执行:rndc reload

然后分别重启二者的sendmailDNS服务器,这时再进行测试,发现速度快了很多。

利用证书实现对信息的加密:

实现这个功能,在一台机器上实现就好,这里我在sina.com上实现

 为了试验的需要,这里要安装一款抓包工具

yum install wireshark

由于要利用证书,所以要做CA

 cd /etc/pki/

vim tls/openssl.cnf 

接下来创建三个目录两个文件:

创建一个序列号到serial中:echo 01 >serial 

创建私钥并修改权限:

生成证书:

至此,CA架设就完成了。

创建一个目录来存放为sendmail申请的证书

切换到所创建的目录:cd /etc/mail/certs

生成私钥

做请求

产生证书

openssl ca -in sendmail.csr -out sednmail.crt

 chmod 600 sendmail.key 

编辑文件,使证书生效

重启sendmail服务器

测试

此时,接收时还是明文,这时假如接受时使用pop3simaps,又该怎么做呢,这时,可以再来创建一证书

 mkdir -pv /etc/dovecot/certs

生成私钥:

做请求:

产生证书: openssl ca -in dovecot.csr -out dovecot.crt

chmod 600 dovecot.key 

然后结合dovecot来用,vim /etc/dovecot.conf 

重启服务:

service dovecot restart

测试

启用抓包工具

在服务器上发以信件,这时在客户端收发

抓包图示显示,没有任何有价值的东西显示出来

此时就是先了加密。

认证:

但是sendmail自身没有身份认证能力,要想实现身份认证,必须要借助sasl协议,而这个协议要想正常工作,就必须要安装cyrus-sasl这个包,只有安装了这个包,才会形成saslauthd这个服务器软件,下面就来安装cyrus-sasl

由此信息可知,这个包已经安装过了,但是还缺少devel包,是要装上的

此时去看一个文件

cd /usr/lib/sasl2/

 vim Sendmail.conf 

这时可知,saslauthd已与sendmail结合了,下面来启动这个服务器软件

接着要去修改sendmail的配置文件,来和saslauthd结合

打开检测机制:

反红的那个表达式的意思是让其强制身份认证。

然后重启服务

然后来用一个不存在的账号来测试:

Telnet 127.0.0.1 25

可以看出要求认证了。

当利用auth login指令测试时,账号不能输明文的,要输入base64编码的账号,这时要产生这个base64编码

接着把密码也生成base64编码

继续刚才的测试,输入auth login后加入编码过的用户

此时就能发信息了,这时在服务器短可以发信件了,那在客户端呢

在客户端依旧以一个不合法的用户来测试

说明是不能发送的,说明认证也就成功了。