一、简介
   基于LINUX操作系统的邮件服务器,一般由sendmail(发送邮件)和dovecot(接收邮件)所组成,sendmail的虽然不尽完美,与其他例如qmail,postfix相比配置相当复杂,功能也有限,但是sendmail的历史比较久,所以用户还是占据了50%左右。下面我们就对其进行简单介绍以下。
     SENDMAIL概述
sendmail是最重要的邮件传输代理程序。理解电子邮件的工作模式是非常重要的。一般情况下,我们把电子邮件程序分解成用户代理,传输代理和投递代理。 用户代理用来接受用户的指令,将用户的信件传送至信件传输代理,如:outlook expressfoxmail等。而投递代理则从信件传输代理取得信件传送至最终用户的邮箱,如:procmail。  当用户试图发送一封电子邮件的时候,他并不能直接将信件发送到对方的机器上,用户代理必须试图去寻找一个信件传输代理,把邮件提交给它。信件传输代理得到了邮件后,首先将它保存在自身的缓冲队列中,然后,根据邮件的目标地址,信件传输代理程序将找到应该对这个目标地址负责的邮件传输代理服务器, 并且通过网络将邮件传送给它。对方的服务器接收到邮件之后,将其缓冲存储在本地,直到电子邮件的接收者查看自己的电子信箱。  显然,邮件传输是从服务器到服务器的,而且每个用户必须拥有服务器上存储信息的空间(称为信箱)才能接受邮件(发送邮件不受这个限制)。可以看到,一个邮件传输代理的主要工作是监视用户代理的请求,根据电子邮件的目标地址找出对应的邮件服务器,将信件在服务器之间传输并且将接收到的邮件缓冲或者 提交给最终投递程序。有许多的程序可以作为信件传输代理,但是sendmail是其中最重要的一个,事实证明它可以支持数千甚至更多的用户,而且占用的系统资源相当少。不过,sendmail的配置十分复杂,因此,也有人使用另外的一些工具,如qmail、postfix等等。当sendmail程序得到一封待发送的邮件的时候,它需要根据目标地址确定将信件投递给对应的服务器,这是通过DNS服务实现的。
例如一封邮件的目标地址是[email protected],那么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将是试图直接与来自邮件地址的主机对话并且发送邮件。例如,[email protected]中没有对应的MX记录,因此sendmail在确定MX交换器失败后,将从DNS取得对方的IP地址并直接和对方对话试图发送邮件。
DOVECOT概述
Dovecot是Linux/UNIX类系统平台上的开源IMAP和POP3服务器。
优势
Dovecot 是一个比较新的软件,由 Timo Sirainen 开发,最初发布于 2002年7月。作者将安全性考虑在第一,所以 Dovecot 在安全性方面比较出众。另外,Dovecot 支持多种认证方式,所以在功能方面也比较符合一般的应用。
缺陷
Dovecot邮件系统没有正确地解析某些邮件头。如果远程***者发送了带有无效消息地址的恶意邮件的话,则IMAP客户端使用FETCH ENVELOPE命令从服务器收取邮件会导致之后的收件人无法接收邮件,因为进程会一直试图解析无效的邮件头直到崩溃。
经典搭配
postfix(作为发送邮件服务器)+dovecot(作为接收邮件服务器)+mysql(作为数据库)
二、学习小结
在linux操作系统下,为了能够通知管理员各种出错信息,sendmail默认是已经安装的
我们可以通过以下的命令进行查看:
chkconfig --list |grep sendmail  #查看在哪个级别开启
service  sendmail  status   #查看服务状态
netstat -tupln |grep sendmail #查看端口
我们可以通过本机进行测试:
tail /etc/passwd #查看都有哪些用户
可以通过以下命令增加用户:
useradd user1
echo  “123” |passwd  --stdin  user1 #传递密码
ll /var/spool/mail/
mail -s ok1 user1  #发送邮件
1111111111  #内容
.  #结束标志
tail /var/lod/maillog  #查看邮件发送情况
su - user1
mail  #user1接收邮件
r 回复  d删除  q 退出并将邮件保存在mbox中  x直接退出邮件还可以通过mail查看
还可以通过telnet 地址  25 进行邮件发送
ehelo  可以通过help进行查看相关命令
一、实验案例
                    sendmail,dovecot的安全与使用
(1)案例简介  
      该案例的基于本博客上一篇文章ftps的实验环境,所以不再进行ssl的安装。
      该案例目的是实现两个不同域的用户互发邮件,并且是基于ssl的证书安全发送邮件。
      该案例所需要安装的包:
        sendmail-8.13.8-2.el5.i386
        dovecot-1.0.7-7.el5.i386.rpm
        sendmail-cf-8.13.8-2.el5.i386.rpm
        m4-1.4.5-3.el5.1.i386.rpm
        bind-9.3.6-4.P1.el5.i386.rpm
        bind-chroot-9.3.6-4.P1.el5.i386.rpm
        caching-nameserver-9.3.6-4.P1.el5.i386.rpm
(2) 案例拓扑
基于linux系统的邮件服务器的搭建与安全性测试
(3)实验步骤 (友情提示:若在虚拟机上做实验,也有多块网卡的话,尽量关掉其他的,实验中遇到这种问题了,确实有影响。)
    [[email protected] ~]# mount /dev/cdrom /mnt/cdrom/
    [[email protected] ~]# yum install sendmail    #默认的已经安装了
[[email protected] Server]# yum install sendmail-cf-8.13.8-2.el5.i386.rpm
[[email protected] Server]# yum install m4-1.4.5-3.el5.1.i386.rpm
[[email protected] Server]# cd /etc/mail
基于linux系统的邮件服务器的搭建与安全性测试
[[email protected] mail]# vim sendmail.mc
基于linux系统的邮件服务器的搭建与安全性测试
[[email protected] mail]# netstat  -tupln |grep sendmail
基于linux系统的邮件服务器的搭建与安全性测试
[[email protected] mail]# service sendmail  restart
[[email protected] mail]# netstat  -tupln |grep sendmail
基于linux系统的邮件服务器的搭建与安全性测试
[[email protected] mail]# useradd  user1  #新建两个用户,为以后测试时使用
[[email protected] mail]# useradd  user2
[[email protected] mail]# echo "123"  |passwd  --stdin  user1
[[email protected] mail]# echo "123"  |passwd  --stdin  user2
[[email protected] mail]# vim access
基于linux系统的邮件服务器的搭建与安全性测试
[[email protected] mail]# service sendmail restart
[[email protected] mail]# cd /mnt/cdrom/Server/
[[email protected] Server]# yum install bind-9.3.6-4.P1.el5.i386.rpm
[[email protected] Server]# yum install bind-chroot-9.3.6-4.P1.el5.i386.rpm
[[email protected] Server]# yum install  caching-nameserver-9.3.6-4.P1.el5.i386.rpm
[[email protected] Server]# cd /var/named/chroot/etc/  #进行bj.com区域有关dns的一些配置
基于linux系统的邮件服务器的搭建与安全性测试
[[email protected] etc]# cp -p named.caching-nameserver.conf  named.conf #拷贝该文件并重命名
[[email protected] etc]# vim named.conf
基于linux系统的邮件服务器的搭建与安全性测试
[[email protected] etc]# vim named.rfc1912.zones  #编辑区域文件
基于linux系统的邮件服务器的搭建与安全性测试
[[email protected] etc]# cd ../var/named/
[[email protected] named]# cp -p localhost.zone  bj.com.db  #建立对应的数据记录文件并编辑
[[email protected] named]# vim bj.com.db
基于linux系统的邮件服务器的搭建与安全性测试
[[email protected] named]# chkconfig named on
[[email protected] named]# service named start
[[email protected] named]# vim /etc/resolv.conf
基于linux系统的邮件服务器的搭建与安全性测试
[[email protected] named]# vim /etc/sysconfig/network   #为了保险一点,我把hostname也修改好
基于linux系统的邮件服务器的搭建与安全性测试
[[email protected] named]# vim /etc/hosts
基于linux系统的邮件服务器的搭建与安全性测试
[[email protected] named]# init 5  #重启一下
[[email protected] ~]# service named restart
[[email protected] ~]# service sendmail  restart
[[email protected] named]# vim /etc/mail/local-host-names   #编辑所管辖的区域,该步应在之前做的,我给漏了,经过测试失败,所以才在这编辑。
基于linux系统的邮件服务器的搭建与安全性测试
下面我们先进行测试一下,自己给自己发封邮件,本人用windows的OE进行的测试,虚拟机的网卡为hostonly,所以需要将vmnet1虚拟网卡的dns配置为该dns服务器的ip。
基于linux系统的邮件服务器的搭建与安全性测试
Outlook express 的配置过程不再一步一步演示,只给出最后的状态:
基于linux系统的邮件服务器的搭建与安全性测试
然后我们可以开着日志监控,再用OE进行邮件的发送,因为没有装dovecot,所以我们只能在邮件服务器上查看到user1的邮件。
[[email protected] ~]# tail -f /var/log/maillog  #打开日志进行监控
基于linux系统的邮件服务器的搭建与安全性测试
说明:user1自己给自己发送邮件。
基于linux系统的邮件服务器的搭建与安全性测试
说明:已经发送成功,在日志中也可以看到
基于linux系统的邮件服务器的搭建与安全性测试
[[email protected] ~]# su - user1  #切换到user1进行查看是否有邮件
[[email protected] ~]$ mail  #查看邮件
基于linux系统的邮件服务器的搭建与安全性测试
说明:已经有邮件了
[[email protected] named]# mount /dev/cdrom /mnt/cdrom/
[[email protected] named]# cd /mnt/cdrom//Server
[[email protected] Server]# yum install -y dovecot-1.0.7-7.el5.i386.rpm #安装dovecot进行邮件的接收
[[email protected] Server]# vim /etc/dovecot.conf  #可以不用编辑
[[email protected] Server]# chkconfig dovecot on  #开机启动该服务
[[email protected] Server]# service dovecot restart
[[email protected] Server]# netstat  -tupln |grep dove
基于linux系统的邮件服务器的搭建与安全性测试
下面我们用user1发邮件给同一区域的user2,并用user2接收:
基于linux系统的邮件服务器的搭建与安全性测试
说明:已经发送成功
基于linux系统的邮件服务器的搭建与安全性测试
用user2账户进行接收:
基于linux系统的邮件服务器的搭建与安全性测试
说明:已经接收了
基于linux系统的邮件服务器的搭建与安全性测试
至此,bj.com域的就配置完成了,我们接下来配置sh.com域的
由于我是在虚拟机上做的实验,所以sh.com域的配置就克隆bj.com这台虚拟机的配置,然后修改一下所需要的文件即可。
首先进入克隆的虚拟机,直接进入一级别进行修改,不需要改动太多,首先把ip地址改为
192.168.6.101 ,dns指向也该为该ip,把所有bj.com相关的全改为sh.com这样就完成了,然后重启,现在我将配置文件和配置好的结果截图,如下:
[[email protected] ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
基于linux系统的邮件服务器的搭建与安全性测试
[[email protected] ~]# vim /etc/hosts
基于linux系统的邮件服务器的搭建与安全性测试
[[email protected] ~]# vim /etc/mail/local-host-names
基于linux系统的邮件服务器的搭建与安全性测试
[[email protected] ~]# vim /etc/resolv.conf
基于linux系统的邮件服务器的搭建与安全性测试
[[email protected] ~]# vim /var/named/chroot/etc/named.rfc1912.zones
基于linux系统的邮件服务器的搭建与安全性测试
[[email protected] ~]# vim /etc/mail/access
基于linux系统的邮件服务器的搭建与安全性测试
[[email protected] ~]# vim /var/named/chroot/var/named/sh.com.db  #可以直接将bj.com.db改名再编辑
基于linux系统的邮件服务器的搭建与安全性测试
[[email protected] ~]# service  sendmail restart
[[email protected] ~]# service  named  restart
[[email protected] ~]# userdel -r user1
[[email protected] ~]# userdel -r user2
[[email protected] ~]# useradd user3
[[email protected] ~]# useradd user4
[[email protected] ~]# echo "123" |passwd --stdin user3
[[email protected] ~]# echo "123" |passwd --stdin user4
Sh.com域的配置也已经完成
下面我们进行测试sh.com域的邮件服务器是否能够正常发送,因此我们再开一台windows虚拟机,将地址改为192.168.6.222  ,dns指向为192.168.6.101  ,连接方式改为hostonly。
基于linux系统的邮件服务器的搭建与安全性测试
我用user3给user4发送邮件,经过测试,可以成功发送并接收:
基于linux系统的邮件服务器的搭建与安全性测试
至此,两个域的邮件服务器全都可以正常使用了,下面我们要进行的是实现两个域之间的邮件能够成功发送,所以我们还需要修改两个域的dns服务器的配置,各自添加一条转发的ip地址.
北京地区的邮件服务器配置如下:
[[email protected] ~]# vim /var/named/chroot/etc/named.conf
基于linux系统的邮件服务器的搭建与安全性测试
[[email protected] ~]# rndc reload  #服务重启
[[email protected] ~]# dig -t MX sh.com   #查看是否能解析到
基于linux系统的邮件服务器的搭建与安全性测试
[[email protected] ~]# vim /var/named/chroot/etc/named.rfc1912.zones #为了能更快的发送邮件我们添加反向记录
基于linux系统的邮件服务器的搭建与安全性测试
[[email protected] ~]# cd /var/named/chroot/var/named/
[[email protected] named]# cp -p named.local  192.168.2.db  #为反向记录创建数据文件
[[email protected] named]# vim 192.168.2.db
基于linux系统的邮件服务器的搭建与安全性测试
[[email protected] named]# rndc reload
[[email protected] named]# nslookup 192.168.2.100
基于linux系统的邮件服务器的搭建与安全性测试
[[email protected] named]# nslookup 192.168.2.101
基于linux系统的邮件服务器的搭建与安全性测试
上海的邮件服务器配置:
[[email protected] ~]# vim /var/named/chroot/etc/named.conf
基于linux系统的邮件服务器的搭建与安全性测试
[[email protected] ~]# rndc reload
[[email protected] ~]# dig -t MX   bj.com  #查看解析是否成功
基于linux系统的邮件服务器的搭建与安全性测试
注意:dns反向记录我们在北京那个的已经做了,所以可以不用在上海的这个dns上再做,一样能解析到,只不过是通过北京的dns进行的而已。
[[email protected] ~]# nslookup 192.168.2.100
基于linux系统的邮件服务器的搭建与安全性测试
[[email protected] ~]# nslookup 192.168.2.101
基于linux系统的邮件服务器的搭建与安全性测试
下面我们进行测试,用user1给user3发送邮件,并用user3接收该邮件,用user4给user2发邮件,并用user2接收邮件,这样可以测试出双方可以互相发送邮件。同时,我们可以分别在两个邮件服务器上开着日志进行查看。
北京:
基于linux系统的邮件服务器的搭建与安全性测试
[[email protected] ~]# tail -f /var/log/maillog
基于linux系统的邮件服务器的搭建与安全性测试
基于linux系统的邮件服务器的搭建与安全性测试
说明:user3已经成功接收到了。
上海:
基于linux系统的邮件服务器的搭建与安全性测试
[[email protected] ~]# tail -f /var/log/maillog
基于linux系统的邮件服务器的搭建与安全性测试
基于linux系统的邮件服务器的搭建与安全性测试
说明:user2已经成功收到了。
至此,我们已经实现了两个域之间的邮件服务器的用户互相发送和接收邮件了。下面要进行的就是通过ssl为邮件服务器颁发证书,从而进行安全的邮件传输。
时间有限,我只在北京的邮件服务器上进行了ssl的加密认证,亲们有时间了可以在上海的也进行ssl的安全加密认证。
由于本案例在上一案例ftps的环境下,所以CA的搭建我就不做了,只颁发证书就行了,亲们可以参考上一案例的ssl配置进行操作。
  [[email protected] ~]# sendmail -d0.1 -bv  #查看sendmail是否支持ssl机制
基于linux系统的邮件服务器的搭建与安全性测试
[[email protected] ~]# telnet 127.0.0.1 25  #通过这种方式可以查看是否启用ssl
基于linux系统的邮件服务器的搭建与安全性测试
[[email protected] ~]# cd /etc/pki/
[[email protected] pki]# cd CA/private/
[[email protected] private]# ll
基于linux系统的邮件服务器的搭建与安全性测试
[[email protected] private]# cd ..
[[email protected] CA]# mkdir /etc/mail/certs
[[email protected] CA]# cd  /etc/mail/certs/
[[email protected] certs]# openssl  genrsa  1024 > sendmail.key  #产生sendmail的私钥
[[email protected] certs]# openssl   req  -new -key sendmail.key  -out sendmail.csr #产生请求文件
基于linux系统的邮件服务器的搭建与安全性测试
[[email protected] certs]# openssl  ca -in sendmail.csr   -out sendmail.cert #给sendmail颁发证书
基于linux系统的邮件服务器的搭建与安全性测试
[[email protected] certs]# ll
基于linux系统的邮件服务器的搭建与安全性测试
[[email protected] certs]# cp /etc/pki/CA/cacert.pem  .  #要求有证书连,所以拷过来
[[email protected] certs]# cd ..
[[email protected] mail]# vim sendmail.mc
基于linux系统的邮件服务器的搭建与安全性测试
[[email protected] mail]# service sendmail restart
[[email protected] mail]# cd certs/
[[email protected] certs]# chmod  600 *
[[email protected] certs]# service sendmail restart
[[email protected] certs]# telnet 127.0.0.1 25
基于linux系统的邮件服务器的搭建与安全性测试
[[email protected] certs]# mkdir -pv /etc/dovecot/certs  #为dovecot创建相关目录
[[email protected] certs]# cd /etc/dovecot/certs/
[[email protected] certs]# openssl  genrsa 1024 >dovecot.key  #为dovecot产生私钥
[[email protected] certs]# openssl  req -new -key dovecot.key -out dovecot.csr
基于linux系统的邮件服务器的搭建与安全性测试
[[email protected] certs]# openssl  ca -in dovecot.csr -out dovecot.cert
基于linux系统的邮件服务器的搭建与安全性测试
[[email protected] certs]# chmod 600 *
[[email protected] certs]# vim /etc/dovecot.conf
基于linux系统的邮件服务器的搭建与安全性测试
基于linux系统的邮件服务器的搭建与安全性测试
[[email protected] certs]# service dovecot restart
[[email protected] certs]# netstat -tupln |grep dov
基于linux系统的邮件服务器的搭建与安全性测试
如果要对发送方的来源账户进行认证,则需要安装与sasl相关的包,系统默认已经安装,我们只需要启用就行了,若有需要可以编辑相关文档。
[[email protected] ~]# vim /etc/mail/sendmail.mc
基于linux系统的邮件服务器的搭建与安全性测试
基于linux系统的邮件服务器的搭建与安全性测试
基于linux系统的邮件服务器的搭建与安全性测试
[[email protected] certs]# chkconfig saslauthd on
[[email protected] certs]# service saslauthd start
下面进行测试:
   同样我们可以开启日志进行查看,为了显示出安全性,我用抓包工具进行抓包,对比一下,抓包工具在之前的ftps案例已经安装了。
用outlook express进行测试:
基于linux系统的邮件服务器的搭建与安全性测试
基于linux系统的邮件服务器的搭建与安全性测试
说明:接收时未使用安全连接imap端口为143
基于linux系统的邮件服务器的搭建与安全性测试
说明:用user1给user1发送邮件,要求有证书
  [[email protected] ~]# tshark -ni eth0 -R "tcp.dstport eq 143"   #监听非加密端口(imap接收)
  当发送邮件时抓包结果:
基于linux系统的邮件服务器的搭建与安全性测试
说明:账户密码已经泄漏了。
当使用安全连接后:
基于linux系统的邮件服务器的搭建与安全性测试
说明:端口变为993
.基于linux系统的邮件服务器的搭建与安全性测试
说明:用user1进行测试,已经成功。
[[email protected] ~]# tshark -ni eth0 -R "tcp.dstport eq 993"   #监听加密端口(imap接收)
基于linux系统的邮件服务器的搭建与安全性测试
测试完成,上海的邮件服务器也可以进行同样的配置,在此我就不做了。