Sendmail在企业网中的应用

Sendmail概述

sendmail是最重要的邮件传输代理程序。理解电子邮件的工作模式是非常重要的。一般情况下,我们把电子邮件程序分解成用户代理,传输代理和投递代理。 用户代理用来接受用户的指令,将用户的信件传送至信件传输代理,如:outlook expressfoxmail等。而投递代理则从信件传输代理取得信件传送至最终用户的邮箱,如:procmail。

当用户试图发送一封电子邮件的时候,他并不能直接将信件发送到对方的机器上,用户代理必须试图去寻找一个信件传输代理,把邮件提交给它。信件传输代理得到了邮件后,首先将它保存在自身的缓冲队列中,然后,根据邮件的目标地址,信件传输代理程序将找到应该对这个目标地址负责的邮件传输代理服务器, 并且通过网络将邮件传送给它。对方的服务器接收到邮件之后,将其缓冲存储在本地,直到电子邮件的接收者查看自己的电子信箱

显然,邮件传输是从服务器到服务器的,而且每个用户必须拥有服务器上存储信息的空间(称为信箱)才能接受邮件(发送邮件不受这个限制)。可以看到,一个邮件传输代理的主要工作是监视用户代理的请求,根据电子邮件的目标地址找出对应的邮件服务器,将信件在服务器之间传输并且将接收到的邮件缓冲或者 提交给最终投递程序。有许多的程序可以作为信件传输代理,但是sendmail是其中最重要的一个,事实证明它可以支持数千甚至更多的用户,而且占用的系统资源相当少。不过,sendmail的配置十分复杂,因此,也有人使用另外的一些工具,如qmail、postfix等等。

当sendmail程序得到一封待发送的邮件的时候,它需要根据目标地址确定将信件投递给对应的服务器,这是通过DNS服务实现的。例如一封邮件的目标地址是ideal@linuxaid.com.cn,那么sendmail首先确定这个地址是用户名(ideal)+机器名(linuxaid.com.cn)的格式,然后,通过查询DNS来确定需要把信件投递给某个服务器。

DNS数据中,与电子邮件相关的是MX记录,例如在linuxaid.com.cn这个域的DNS数据文件中有如下设置:

IN MX 10 mail

IN MX 20 mail1

mail IN A 202.99.11.120

mail1 IN A 202.99.11.121

显然,在DNS中说明linuxaid.com.cn有两个信件交换(MX)服务器,于是,sendmail试图将邮件发送给两者之一。一般来说,排在前面的的MX服务器的优先级别比较高,因此服务 器将试图连接mail.linuxaid.com.cn的25端口,试图将信件报文转发给它。如果成功,你的smtp服务器的任务就完成了,在这以后的任务,将由mail.linuxaid.com.cn来完成。在一般的情况下,mail换器会自动把信件内容转交给目标主机,不过,也存在这样的情况,目标主机(比如linuxaid.com.cn)可能并不存在,或者不执行smtp服务,而是由其mx交换器来执行信件的管理,这时候,最终的信件将保存在mx机器上,直到用户来察看它。

如果DNS查询无法找出对某个地址的MX记录(通常因为对方没有信件交换主机),那么sendmail将是试图直接与来自邮件地址的主机对话并且发送邮件。例如,test@aidgroup.linuxaid.com.cnDNS中没有对应的MX记录,因此sendmail在确定MX交换器失败后,将从DNS取得对方的IP地址并直接和对方对话试图发送邮件。

实验拓扑

Sendmail在企业网中的应用_target

实验目标

实现163.com邮件域的用户能向sina.com邮件域的用户发送邮件,并实现加密认证

实验设备

Red Hat Enterprise Linux 5虚拟机2台,winserver2003虚拟机1台

所需软件

OutLook Express

bind.i386、bind-chroot.i386、caching-nameserver.i386、dovecot.i386、sendmail.i386、cyrus-sasl

实验步骤

163 Mail服务器配置步骤:

安装DNS服务器

[root@localhost ~]#mount /dev/cdrom /mnt/cdrom

[root@localhost ~]#cd /mnt/cdrom/Server

[root@localhost Server]#yum bind.i386 bind-chroot.i386 caching-nameserver.i386

[root@localhost ~]#setup#修改Mail服务器IP

Sendmail在企业网中的应用_center_02

[root@localhost ~]# vim /var/named/chroot/etc/named.rfc1912.zones#添加区域声明,包括正向DNS区域和反向DNS区域

Sendmail在企业网中的应用_的_03

[root@localhost ~]# cd /var/named/chroot/var/named

[root@localhost named]# cp -p localhost.zone 163.com.zone

[root@localhost named]# cp -p localhost.zone 192.168.101.zone

[root@localhost named]# vim 163.com.zone #编辑正向DNS区域文件

Sendmail在企业网中的应用_的_04

[root@localhost named]# vim 192.168.101.zone#编辑反向DNS区域文件

Sendmail在企业网中的应用_blank_05

[root@localhost ~]#vim /var/named/chroot/etc/named.conf # DNS转发,指向sina mail服务器地址

Sendmail在企业网中的应用_的_06

[root@localhost ~]# vim /etc/resolv.conf #指明DNS服务器地址

Sendmail在企业网中的应用_center_07

测试一下DNS正反向解析

Sendmail在企业网中的应用_center_08

[root@localhost ~]# vim /etc/sysconfig/network #修改主机名

Sendmail在企业网中的应用_blank_09

[root@mail ~]# vim /etc/mail/sendmail.mc#修改sendmail的配置脚本,以实现外部机器能telnet到Mail服务器上

Sendmail在企业网中的应用_center_10

[root@mail ~]# vim /etc/mail/access#添加sendmail可被中继的服务器IP

Sendmail在企业网中的应用_target_11

[root@mail ~]# vim /etc/mail/local-host-names#修改Mail服务器的域名

Sendmail在企业网中的应用_的_12

[root@mail ~]# useradd user2#添加用户user2

[root@mail ~]# echo "123"|passwd --stdin user2

[root@mail ~]# yum install dovecot-1.0.7-7.el5.i386.rpm#安装MAA

[root@mail ~]#service named start

[root@mail ~]#service sendmail start

[root@mail ~]#service dovecot start

Sina Mail服务器配置参考163 Mail服务器配置步骤,这里就不再敖述

163 Mail 服务器下PC机outlook配置步骤

Sendmail在企业网中的应用_center_13Sendmail在企业网中的应用_blank_14Sendmail在企业网中的应用_blank_15Sendmail在企业网中的应用_center_16

测试:以user2@163.com的身份向user2@sina.com发送邮件

测试结果:

Sendmail在企业网中的应用_blank_17

在sina Mail服务器上监控邮件日志

Sendmail在企业网中的应用_blank_18

 

Sendmail在企业网中的应用_center_19

Sendmail在企业网中的应用_center_20

上述测试结果表明实验成功!

 

实现加密验证

搭建CA服务器

[root@mail ~]#cd /etc/pki/ tls #进入tls目录

[root@mail tls]# vim openssl.cnf #配置openssl.cnf文件

Sendmail在企业网中的应用_blank_21

[root@mail tls]# cd ..

[root@mail pki]# cd CA

[root@mail CA]# mkdir crl certs newcerts #创建三个目录,两个文件

[root@mail CA]# touch index.txt serial

[root@mail CA]# echo "01" > serial

[root@mail CA]# openssl genrsa 1024 >private/cakey.pem #产生私钥

[root@mail CA]# chmod 600 private/*

[root@mh3570 CA]# openssl req -new -key private/cakey.pem -x509 -out cacert.pem #产生证书

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter '.', the field will be left blank.

-----

Country Name (2 letter code) [CN]:

State or Province Name (full name) [HeNan]:

Locality Name (eg, city) [ZhengZhou]:

Organization Name (eg, company) [mh3570]:

Organizational Unit Name (eg, section) [tec]:

Common Name (eg, your name or your server's hostname) []:mail.163.com

Email Address []:

在Mail服务器上架设CA认证

[root@mail ~]# mkdir -pv /etc/mail/certs

[root@mail ~]# cd /etc/mail/certs

[root@mail certs]# openssl genrsa 1024 > sendmail.key #生成私钥

[root@mail certs]# openssl req -new -key sendmail.key -out sendmail.csr #生成请求

[root@mail certs]# openssl ca -in sendmail.csr -out sendmail.cert #生成证书

[root@mail ~]# cd /etc/mail/certs

[root@mail certs]# ll

total 12

-rw-r--r-- 1 root root 3068 Sep 10 14:50 sendmail.cert

-rw-r--r-- 1 root root 651 Sep 10 14:50 sendmail.csr

-rw-r--r-- 1 root root 887 Sep 10 14:49 sendmail.key

[root@mail certs]# chmod 600 * #修改三者权限,为了安全

[root@mail certs]# ll

total 12

-rw------- 1 root root 3068 Sep 10 14:50 sendmail.cert

-rw------- 1 root root 651 Sep 10 14:50 sendmail.csr

-rw------- 1 root root 887 Sep 10 14:49 sendmail.key

[root@mail ~]# service sendmail start

Starting sendmail: [ OK ]

Starting sm-client: [ OK ]

Sendmail在企业网中的应用_的_22

修改mail的配置脚本文件

[root@mail ~]#vim /etc/mail/sendmail.mc

Sendmail在企业网中的应用_target_23

Sendmail在企业网中的应用_target_24

测试:在163 Mail服务器上以管理员身份向user2发邮件

测试结果:

Sendmail在企业网中的应用_blank_25

Sendmail在企业网中的应用_的_26

上述测试结果表明实验成功!