基于linux系统的邮件服务器的搭建与安全性测试

 
一、简介
   基于LINUX操作系统的邮件服务器,一般由sendmail(发送邮件)和dovecot(接收邮件)所组成,sendmail的虽然不尽完美,与其他例如qmail,postfix相比配置相当复杂,功能也有限,但是sendmail的历史比较久,所以用户还是占据了50%左右。下面我们就对其进行简单介绍以下。
     SENDMAIL概述
sendmail是最重要的邮件传输代理程序。理解电子邮件的工作模式是非常重要的。一般情况下,我们把电子邮件程序分解成用户代理,传输代理和投递代理。 用户代理用来接受用户的指令,将用户的信件传送至信件传输代理,如: outlook express、 foxmail等。而投递代理则从信件传输代理取得信件传送至最终用户的邮箱,如: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) 案例拓扑
wps_clip_image-23744
(3)实验步骤 ( 友情提示:若在虚拟机上做实验,也有多块网卡的话,尽量关掉其他的,实验中遇到这种问题了,确实有影响。)
    [root@localhost ~]# mount /dev/cdrom /mnt/cdrom/
    [root@localhost ~]# yum install sendmail    #默认的已经安装了
[root@localhost Server]# yum install sendmail-cf-8.13.8-2.el5.i386.rpm
[root@localhost Server]# yum install m4-1.4.5-3.el5.1.i386.rpm
[root@localhost Server]# cd /etc/mail
[root@localhost mail]# ls
wps_clip_image-1523
[root@localhost mail]# vim sendmail.mc
wps_clip_image-2057
[root@localhost mail]# netstat  -tupln |grep sendmail
wps_clip_image-29991
[root@localhost mail]# service sendmail  restart
[root@localhost mail]# netstat  -tupln |grep sendmail
wps_clip_image-20064
[root@localhost mail]# useradd  user1  #新建两个用户,为以后测试时使用
[root@localhost mail]# useradd  user2
[root@localhost mail]# echo "123"  |passwd  --stdin  user1
[root@localhost mail]# echo "123"  |passwd  --stdin  user2
[root@localhost mail]# vim access
wps_clip_image-12524
[root@localhost mail]# service sendmail restart
[root@localhost mail]# cd /mnt/cdrom/Server/
[root@localhost Server]# yum install bind-9.3.6-4.P1.el5.i386.rpm
[root@localhost Server]# yum install bind-chroot-9.3.6-4.P1.el5.i386.rpm
[root@localhost Server]# yum install  caching-nameserver-9.3.6-4.P1.el5.i386.rpm
[root@localhost Server]# cd /var/named/chroot/etc/  #进行bj.com区域有关dns的一些配置
[root@localhost etc]# ll
wps_clip_image-3796
[root@localhost etc]# cp -p named.caching-nameserver.conf  named.conf #拷贝该文件并重命名
[root@localhost etc]# vim named.conf
wps_clip_image-13285
[root@localhost etc]# vim named.rfc1912.zones  #编辑区域文件
wps_clip_image-23048
[root@localhost etc]# cd ../var/named/
[root@localhost named]# cp -p localhost.zone  bj.com.db  #建立对应的数据记录文件并编辑
[root@localhost named]# vim bj.com.db
wps_clip_image-29325
[root@localhost named]# chkconfig named on
[root@localhost named]# service named start
[root@localhost named]# vim /etc/resolv.conf
wps_clip_image-26467
[root@localhost named]# vim /etc/sysconfig/network   #为了保险一点,我把hostname也修改好
wps_clip_image-28703
[root@localhost named]# vim /etc/hosts
wps_clip_image-30943
[root@localhost named]# init 5  #重启一下
[root@mail ~]# service named restart
[root@mail ~]# service sendmail  restart
[root@mail named]# vim /etc/mail/local-host-names   #编辑所管辖的区域,该步应在之前做的,我给漏了,经过测试失败,所以才在这编辑。
wps_clip_image-11186
下面我们先进行测试一下,自己给自己发封邮件,本人用windows的OE进行的测试,虚拟机的网卡为hostonly,所以需要将vmnet1虚拟网卡的dns配置为该dns服务器的ip。
wps_clip_image-18996
Outlook express 的配置过程不再一步一步演示,只给出最后的状态:
wps_clip_image-12078
然后我们可以开着日志监控,再用OE进行邮件的发送,因为没有装dovecot,所以我们只能在邮件服务器上查看到user1的邮件。
[root@mail ~]# tail -f /var/log/maillog  #打开日志进行监控
wps_clip_image-20079
说明:user1自己给自己发送邮件。
wps_clip_image-5903
说明:已经发送成功,在日志中也可以看到
wps_clip_image-22328
[root@mail ~]# su - user1  #切换到user1进行查看是否有邮件
[user1@mail ~]$ mail  #查看邮件
wps_clip_image-24844
说明:已经有邮件了
[root@mail named]# mount /dev/cdrom /mnt/cdrom/
[root@mail named]# cd /mnt/cdrom//Server
[root@mail Server]# yum install -y dovecot-1.0.7-7.el5.i386.rpm #安装dovecot进行邮件的接收
[root@mail Server]# vim /etc/dovecot.conf  #可以不用编辑
[root@mail Server]# chkconfig dovecot on  #开机启动该服务
[root@mail Server]# service dovecot restart
[root@mail Server]# netstat  -tupln |grep dove
wps_clip_image-23381
下面我们用user1发邮件给同一区域的user2,并用user2接收:
wps_clip_image-280
说明:已经发送成功
wps_clip_image-32297
用user2账户进行接收:
wps_clip_image-30556
说明:已经接收了
wps_clip_image-18493
至此,bj.com域的就配置完成了,我们接下来配置sh.com域的
由于我是在虚拟机上做的实验,所以sh.com域的配置就克隆bj.com这台虚拟机的配置,然后修改一下所需要的文件即可。
首先进入克隆的虚拟机,直接进入一级别进行修改,不需要改动太多,首先把ip地址改为
192.168.6.101 ,dns指向也该为该ip,把所有bj.com相关的全改为sh.com这样就完成了,然后重启,现在我将配置文件和配置好的结果截图,如下:
[root@mail ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
wps_clip_image-14109
[root@mail ~]# vim /etc/hosts
wps_clip_image-16670
[root@mail ~]# vim /etc/mail/local-host-names
wps_clip_image-28074
[root@mail ~]# vim /etc/resolv.conf
wps_clip_image-23822
[root@mail ~]# vim /var/named/chroot/etc/named.rfc1912.zones
wps_clip_image-29114
[root@mail ~]# vim /etc/mail/access
wps_clip_image-1373
[root@mail ~]# vim /var/named/chroot/var/named/sh.com.db  #可以直接将bj.com.db改名再编辑
wps_clip_image-9971
[root@mail ~]# service  sendmail restart
[root@mail ~]# service  named  restart
[root@mail ~]# userdel -r user1
[root@mail ~]# userdel -r user2
[root@mail ~]# useradd user3
[root@mail ~]# useradd user4
[root@mail ~]# echo "123" |passwd --stdin user3
[root@mail ~]# echo "123" |passwd --stdin user4
Sh.com域的配置也已经完成
下面我们进行测试sh.com域的邮件服务器是否能够正常发送,因此我们再开一台windows虚拟机,将地址改为192.168.6.222  ,dns指向为192.168.6.101  ,连接方式改为hostonly。
wps_clip_image-30818
我用user3给user4发送邮件,经过测试,可以成功发送并接收:
wps_clip_image-15982
至此,两个域的邮件服务器全都可以正常使用了,下面我们要进行的是实现两个域之间的邮件能够成功发送,所以我们还需要修改两个域的dns服务器的配置,各自添加一条转发的ip地址.
北京地区的邮件服务器配置如下:
[root@mail ~]# vim /var/named/chroot/etc/named.conf
wps_clip_image-26224
[root@mail ~]# rndc reload  #服务重启
[root@mail ~]# dig -t MX sh.com   #查看是否能解析到
wps_clip_image-17512
[root@mail ~]# vim /var/named/chroot/etc/named.rfc1912.zones #为了能更快的发送邮件我们添加反向记录
wps_clip_image-23747
[root@mail ~]# cd /var/named/chroot/var/named/
[root@mail named]# cp -p named.local  192.168.2.db  #为反向记录创建数据文件
[root@mail named]# vim 192.168.2.db
wps_clip_image-12272
[root@mail named]# rndc reload
[root@mail named]# nslookup 192.168.2.100
wps_clip_image-19921
[root@mail named]# nslookup 192.168.2.101
wps_clip_image-21286
上海的邮件服务器配置:
[root@mail ~]# vim /var/named/chroot/etc/named.conf
wps_clip_image-30378
[root@mail ~]# rndc reload
[root@mail ~]# dig -t MX   bj.com  #查看解析是否成功
wps_clip_image-16451
注意:dns反向记录我们在北京那个的已经做了,所以可以不用在上海的这个dns上再做,一样能解析到,只不过是通过北京的dns进行的而已。
[root@mail ~]# nslookup 192.168.2.100
wps_clip_image-6908
[root@mail ~]# nslookup 192.168.2.101
wps_clip_image-10358
下面我们进行测试,用user1给user3发送邮件,并用user3接收该邮件,用user4给user2发邮件,并用user2接收邮件,这样可以测试出双方可以互相发送邮件。同时,我们可以分别在两个邮件服务器上开着日志进行查看。
北京:
wps_clip_image-6791
[root@mail ~]# tail -f /var/log/maillog
wps_clip_image-23177
wps_clip_image-26319
说明:user3已经成功接收到了。
上海:
wps_clip_image-28747
[root@mail ~]# tail -f /var/log/maillog
wps_clip_image-20314
wps_clip_image-27732
说明:user2已经成功收到了。
至此,我们已经实现了两个域之间的邮件服务器的用户互相发送和接收邮件了。下面要进行的就是通过ssl为邮件服务器颁发证书,从而进行安全的邮件传输。
时间有限,我只在北京的邮件服务器上进行了ssl的加密认证,亲们有时间了可以在上海的也进行ssl的安全加密认证。
由于本案例在上一案例ftps的环境下,所以CA的搭建我就不做了,只颁发证书就行了,亲们可以参考上一案例的ssl配置进行操作。
  [root@mail ~]# sendmail -d0.1 -bv  #查看sendmail是否支持ssl机制
wps_clip_image-8420
[root@mail ~]# telnet 127.0.0.1 25  #通过这种方式可以查看是否启用ssl
wps_clip_image-29416
[root@mail ~]# cd /etc/pki/
[root@mail pki]# cd CA/private/
[root@mail private]# ll
wps_clip_image-14129
[root@mail private]# cd ..
[root@mail CA]# mkdir /etc/mail/certs
[root@mail CA]# cd  /etc/mail/certs/
[root@mail certs]# openssl  genrsa  1024 > sendmail.key  #产生sendmail的私钥
[root@mail certs]# openssl   req  -new -key sendmail.key  -out sendmail.csr #产生请求文件
wps_clip_image-24329
[root@mail certs]# openssl  ca -in sendmail.csr   -out sendmail.cert #给sendmail颁发证书
wps_clip_image-24159
[root@mail certs]# ll
wps_clip_image-15601
[root@mail certs]# cp /etc/pki/CA/cacert.pem  .  #要求有证书连,所以拷过来
[root@mail certs]# cd ..
[root@mail mail]# vim sendmail.mc
wps_clip_image-2029
[root@mail mail]# service sendmail restart
[root@mail mail]# cd certs/
[root@mail certs]# chmod  600 *
[root@mail certs]# service sendmail restart
[root@mail certs]# telnet 127.0.0.1 25
wps_clip_image-15760
[root@mail certs]# mkdir -pv /etc/dovecot/certs  #为dovecot创建相关目录
[root@mail certs]# cd /etc/dovecot/certs/
[root@mail certs]# openssl  genrsa 1024 >dovecot.key  #为dovecot产生私钥
[root@mail certs]# openssl  req -new -key dovecot.key -out dovecot.csr
wps_clip_image-14544
[root@mail certs]# openssl  ca -in dovecot.csr -out dovecot.cert
wps_clip_image-4802
[root@mail certs]# chmod 600 *
[root@mail certs]# vim /etc/dovecot.conf
wps_clip_image-328
wps_clip_image-25168
[root@mail certs]# service dovecot restart
[root@mail certs]# netstat -tupln |grep dov
wps_clip_image-5211
如果要对发送方的来源账户进行认证,则需要安装与sasl相关的包,系统默认已经安装,我们只需要启用就行了,若有需要可以编辑相关文档。
[root@mail ~]# vim /etc/mail/sendmail.mc
wps_clip_image-11781
wps_clip_image-1047
wps_clip_image-16731
[root@mail certs]# chkconfig saslauthd on
[root@mail certs]# service saslauthd start
下面进行测试:
   同样我们可以开启日志进行查看,为了显示出安全性,我用抓包工具进行抓包,对比一下,抓包工具在之前的ftps案例已经安装了。
用outlook express进行测试:
wps_clip_image-4374
wps_clip_image-31108
说明:接收时未使用安全连接imap端口为143
wps_clip_image-11981
说明:用user1给user1发送邮件,要求有证书
  [root@mail ~]# tshark -ni eth0 -R "tcp.dstport eq 143"   #监听非加密端口(imap接收)
  当发送邮件时抓包结果:
wps_clip_image-8933
说明:账户密码已经泄漏了。
当使用安全连接后:
wps_clip_image-16187
说明:端口变为993
. wps_clip_image-9025
说明:用user1进行测试,已经成功。
[root@mail ~]# tshark -ni eth0 -R "tcp.dstport eq 993"   #监听加密端口(imap接收)
wps_clip_image-25083
测试完成,上海的邮件服务器也可以进行同样的配置,在此我就不做了。

你可能感兴趣的:(linux,邮件,安全性,outlook,休闲)