MAIL服务器配置级应用

电子邮件服务器是当今网络中应用最为广泛的网络服务之一,几乎所有的现代企业和公司,政府机构都已经实现了无纸化办公,电子邮件办公已经在很多方面取代了传统观的办公方式。

MAIL系统介绍

邮件系统结构

邮件系统由MUAMail User Agent 邮件用户代理),MSA(Mail Submission Agent 邮件提交代理),MTA(Mail Transfer Agent 邮件传输代理),MDAMail Delivery Agent 邮件投递代理)和MAAil Acdess Agent 邮件访问代理)组成。

MUA  邮件用户代理。MUA是一个邮件系统的客户端程序,提供阅读,发送和接收电子邮件的用户接口,MUA是邮件系统中与用户直接交互的程序。在Windows下,常用的MUAMicrosoftOutlook,国产的Foxmail,在Linux下常用的有Evolution以及Firefox等软件包。

MSA  邮件提交代理。MSA负责消息由MTA发送之前完成所有的准备工作以及错误检测工作,从而检测发送邮件的正确性。随着RFC2476的引入,MSA的工作由MTA完成,即MTA包含了MSA的工作。

MTA  邮件传输代理。邮件传输代理负责邮件的存储和转发,MTA监视用户请求,根据电子邮件的目标地址找到对应到邮件服务器,将信件在服务器之间传输并且将接收到的邮件进行缓冲。因此,MTAMUA的接口,另外还负责在各个服务器之间传递消息。在Linux下常用的MTASendmailQmail以及Postfix等。

MDA  邮件投递代理。主要的功能就是将MTA接收的信件依照信件的流向放置到本机账户下的邮件文件中(收件箱),或者再经由MTA传来的邮件放置到每个用户的收件箱,还将具有邮件过滤(filtering)与其他相关功能,通常MDA也成为本地投递代理(Local Delivery Agent)。在Linux下常用的MDAmail.localprocmail等。

MAA  邮件访问代理。MAA用于将用户连接到系统邮件库,使用POP或者IMAP协议接收邮件。Linux下常用的MAAUW-IMAPCyrus-IMAP等。

上面各部分软件之间没有必然的依赖关系,因此,每部分所选用的软件包相互独立,可以随意选择。在Linux操作系统下要构建一个完整的邮件系统,至少需要以下一些组件。

一个用户端程序。用于完成交互操作,完成MUA功能。如果是Windows下的用户,可以选择FoxmailOutlook。如果是Linux下的用户,可以选择Evolution

一个邮件服务器软件包用于完成MTAMSA的功能。读者选用SendmailQmail以及Postfix中的一种即可。

一个本地投递工具。用来完成MDA功能,如常用的procmail

一种MAA。用来传递邮件给终端用户,如Linux下常用的imap

邮件系统所使用的协议

SMTPSimple Mail Transfer Protocol) 简单邮件传输通信协议。SMTP只负责电子邮件的传送(接收为POP),其使用的端口是25,它是目前 Internet上传输电子邮件的标准协议。

POPPost Office Protocol) 邮局协议。目前版本为3,是关于接收电子邮件的客户机/服务器协议。客户端程序连接到服务器的110端口,通过执行POP命令来下载服务器上的邮件到本地磁盘进行阅读。

IMAPInternet Message Access Protocol) 网际消息访问协议。目前为第4版本,它像POP协议一样提供方便的邮件下载服务,支持POP所具有的全部功能。除此之外,INAP还可以提供其他一些功能。

电子邮件与DNS的关系

当邮件服务器程序收到一封待发的邮件时,它首先需要根据目标地址确定将信息投递给哪一个服务器,这是通过DNS服务器实现的。因此,在配置Mail服务器之前,读者需确保自己的DNS服务器工作正常,以便能够解析Mail中国使用的主机信息。

另外,当邮件目的地址不是当前系统时,将发送中继。

配置RedHat LinuxSendmail服务器

LinuxMAIL软件包组件介绍

软件包组件

要使当前Linux操作系统具备邮件服务器功能,就要求当前系统中有多个软件包,包括MTAMDAMAA等类型的软件包。以下是以SendmailMTA构建邮件服务器时所需要的软件包。

sendmail-8.12.8-4      作为MTA软件包

sendmail-cf-8.12.8-4    配置档

m4-1.4.1-13           转换sendmail配置的程序

mailx-8.1.1-28         最简单收发信软件包

procmail-3.22-9        MDA

php-imag-4.2.2-17      MAA

imap-2001a-18  

主要配置文件

Sendmail几乎所有的配置文件都放置在/etc/mail文件夹内,主要文件包括以下几种。

1./etc/mail/sendmail.cf。这个文件是Sendmail的主要配置文件,所有的参数都由它管理。但是,这个配置文件不太容易看懂。一般采用m4指令来完成修改,m4可以为一些简单的环境设定参数,重新以内定的函式库或者函式定义来创建sendma.cf文件。Sendmail预设的sendmail.cf文件放置在/etc/mail/sendmail.cf内。

2./usr/share/sendmail-cf/cf/xxxx.m4。由于sendmail.cf这个配置文件不应手动修改,所以需要使用m4程序。m4可以将一个简单的环境设定转成sendmail.cf,相应的环境配置文件就是sendmail-cf这个软件包所提供的。

3./etc/mail/local-host-names。这个配置文件主要用来处理一个主机同时拥有多个主机名称时的收发信主机名称问题。当主机又有多个主机名时,如主机名称为test1.your.domain以及test2.your.domain,而且这两个hostnames都希望可以用于收发电子邮件,则需要将这两个名字都写入local-host-names这个配置文件当中,一个主机名字占用一行。

4./etc/mail/access.db。这个文件规定使用本邮件服务器的数据库,要转成这个数据可以需要藉由makemap以及/etc/mail/access文件的配合。这个配置文件是Sendmail里面重要的“使用者权限管理”的数据。

5./etc/mail/aliases.db/etc/aliases.sbaliases.db用来设定信箱别名,用户可以藉由这个档案的设定来规范,其还需要藉由aliasesnewaliases来生成这个配置文件。

6./etc/mail/statistics。这个文件记录Sendmail收发信件的相关信息。

主要执行文件

1./usr/sbin/sendmail。读取sendmail,cf这个档案的设定内容。在发送信件时使用这个程序,预设的启用端口为25.

2./usr/sbin/ipop3dSendmail的功能时处理寄信问题,ipop3d用来处理客户端的收信问题,如果当前的邮件服务器希望为客户端提供使用NetscapeOutlook express来收信,那么就需要提供这个服务。这个服务的设定档为/etc/xinetd.d/ipop3

3./usr/sbin/makemap。主要将access转成access.db的执行文件。

4./usr/sbin/mailststs。将/etc/mail/statistics配置文件读出来的执行文档。可以查看到目前为止Sendmail工作共传送接收了多少邮件。

5./ust/bin/newaliases。将/etc/mail/aliases/etc/mail/aliases.db的执行文件。

6./usr/bin/mailq。用来观察/var/spool/mqueue这个邮件暂存目录的数据情况的指令。

7./usr/bin/m4。将*.mc配置文件转成*.cf配置文件的主要配置文件。需要搭配Sendmail原始码或sendmail-cf这个配置文件才行。

邮件相关目录

1./var/spool/mail。此目录是每个使用者信件放置的目录,一个账号会使用一个档案。

2./var/spool/mqueue。当邮件由于对方主机的问题,或者是网络的问题而无法送出去是,邮件将会暂时的存放在这个目录下,然后主机会每隔大约30-60min重新尝试传送一遍,通常设定为若5天内该封信件还未寄出,就推给原发信者。

    

    案例:

需要安裝的包:sendmail  sendmail-cf sendmail-doc m4

rpm -qa |grep -E "sendmail|m4"

mkdir /mnt/cdrom

mount /dev/cdrom  /mnt/cdrom/

cd /mnt/cdrom/Server/

rpm -ivh sendmail-cf-8.13.8-2.e15.i386.rpm

cd /etc/mail

vim sendmail.mc

116  禁用掉  Addr=0.0.0.0 任意地址

netstat -tupln |grep sendmail

service sendmail restart

netstat -tupln |grep sendmail

useradd user1

useradd user2

echo "123" |passwd --stdin user1

echo "123" |passwd --stdin user2

vim access

测试

telnet 127.0.0.0.1 25

mail from:asd@aa.com

rcpt to:asd@bb.com

telnet 192.168.2.100 25

mail from:asd@aa.com

rcpt to:asd@bb.com

vim access  文件

service sendmail restart

vim local-host-names

bj.com

vim access 

Connet:192.168.2   RELAY

sh.com             RELAY

bj.com             OK

cd /mnt/cdrom/Server/

rpm -ivh bind-9.3.6-4.P1.el5.i386.rpm 

rpm -ivh bind-chroot-9.3.6-4.P1.el5.i386.rpm 

rpm -ivh bind-nameserver

cd /var/named/chroot/etc/

cp -p named.caching-nameserver.conf named.conf

vim named.conf

vim named.rfc1912.zones

cd ../var/named/

cp -p localhost.zone bj.com.db

vim bj.com.db

chkconfig named on

service named start

vim /etc/resolv.conf

search a.com

nameserver 192.168.2.100

vim /etc/sysconfig/network

HOSTNAME=mail.bj.com

vim /etc/hosts

127.0.0.1  mail.bj.com localhost.localdomain localhost

::1  localhost6.localdomain6 localhost6

重启系统

service named status

service sendmail status

tail -f /var/log/maillog

windows

outlook

su -user1

mail

mount /dev/cdrom /mnt/cdrom/

vim /etc/yum.repos.d/rhel-debuginfo.repo

[rhel-server]

name=Red Hat Enterprise Linux server

baseurl=file;///mnt/cdrom/Server

enabled=1

gpgcheck=1

gpgkey=file:mnt/cdrom/RPM-GPG-KEY-redhat-release

rhel-server

yum list all |grep dov

yum install -y dovecot

chkconfig dovecot on

service dovecot restart

netstat -tupln |grep dov

grep 995 /etc/services

grep 993 /etc/services

netstat -tupln |grep dov

vim /etc/dovecot.conf

protocols=imap pop3

service dovecot restart

netstat -tupln |grep dov

tail -f /var/log/maillog

 sh-server

vim /etc/sysconfig/network-scripes/ifcfg-eth0

DEVICE=eth0

BOOTPROTO=static

BROADCAST=192.168.2.255

IPADDR=192.168.2.101

NETMASK=255.255.255.0

NETWORK=192.168.2.0

ONBOOT=yes

vim /etc/sysconfig/network

NETWORKING=yes

NETWORKING_IPV6=no

HOSTNAME=mail.sh.com

vim /etc/hosts

127.0.0.1     mail.sh.com localhost.localdomain localhost

::1      localhost6.localdomain6 localhost6

cd /var/named/chroot/etc/

vim named.rfc1912.zones 

zone "." IN {

       type hint;

       file  "named.ca";

};

zone "localdomain" IN {

       type master:

       file  "localdomain.zone";

       allow-update { none; };

};

zone "sh.com" IN {

       type master;

       file "sh.com.db";

       allow-update {none; };

};

cd ../var/named/

mv bj.com.db sh.com.db

vim sh.com.db

$TTL    86400

@             IN SOA  ns.sh.com.    root(

                                   42      ;serial (d. adams)

                                   3H      ;refresh

                                   15M    ;retry

                                   1W     ;expiry

                                   1D)     ;minimum

@            IN NS             ns.sh.com

ns            IN A              192.168.2.101

mail          IN A              192.168.2.101

pop3          IN CNAME        mail

smtp          IN CNAME        mail

@            IN MX 10          mail

vim /etc/resolv.conf

search a.com

nameserver    192.168.2.101

cd /etc/mail

vim access

sh.com       OK

bj.com       RELAY

vim local-host-names

sh.com

重启系统

service  named status

service  sendmail status

useradd user3

useradd user4

echo "123" |passwd --stdin user3

echo "123" |passwd --stdin user4

 

账号测试

[root@mail ~]#telnet 127.0.0.1 25

Trying 127.0.0.1...

Connected to mail.bj.com (127.0.0.1)

Escape character is '^]'.

220 mail.bj.com ESMTP Sendmail 8.13.8/

EHLO 127.0.0.1

250-mail.bj.com Hello mail.bj.com[127.0.0.1]

250-ENHANCEDSTATUSCODES

250-PIPELINING

250-8BITMIME

250-SIZE

250-DSN

250-AUTH LOGIN PLAIN

 

250 HELP

mail from:user1@bj.com

530 5.7.0 Authentication required