MAIL服务器配置级应用
电子邮件服务器是当今网络中应用最为广泛的网络服务之一,几乎所有的现代企业和公司,政府机构都已经实现了无纸化办公,电子邮件办公已经在很多方面取代了传统观的办公方式。
MAIL系统介绍
邮件系统结构
邮件系统由MUA(Mail User Agent 邮件用户代理),MSA(Mail Submission Agent 邮件提交代理),MTA(Mail Transfer Agent 邮件传输代理),MDA(Mail Delivery Agent 邮件投递代理)和MAAil Acdess Agent 邮件访问代理)组成。
MUA 邮件用户代理。MUA是一个邮件系统的客户端程序,提供阅读,发送和接收电子邮件的用户接口,MUA是邮件系统中与用户直接交互的程序。在Windows下,常用的MUA有Microsoft的Outlook,国产的Foxmail,在Linux下常用的有Evolution以及Firefox等软件包。
MSA 邮件提交代理。MSA负责消息由MTA发送之前完成所有的准备工作以及错误检测工作,从而检测发送邮件的正确性。随着RFC2476的引入,MSA的工作由MTA完成,即MTA包含了MSA的工作。
MTA 邮件传输代理。邮件传输代理负责邮件的存储和转发,MTA监视用户请求,根据电子邮件的目标地址找到对应到邮件服务器,将信件在服务器之间传输并且将接收到的邮件进行缓冲。因此,MTA是MUA的接口,另外还负责在各个服务器之间传递消息。在Linux下常用的MTA有Sendmail、Qmail以及Postfix等。
MDA 邮件投递代理。主要的功能就是将MTA接收的信件依照信件的流向放置到本机账户下的邮件文件中(收件箱),或者再经由MTA传来的邮件放置到每个用户的收件箱,还将具有邮件过滤(filtering)与其他相关功能,通常MDA也成为本地投递代理(Local Delivery Agent)。在Linux下常用的MDA有mail.local、procmail等。
MAA 邮件访问代理。MAA用于将用户连接到系统邮件库,使用POP或者IMAP协议接收邮件。Linux下常用的MAA有UW-IMAP、Cyrus-IMAP等。
上面各部分软件之间没有必然的依赖关系,因此,每部分所选用的软件包相互独立,可以随意选择。在Linux操作系统下要构建一个完整的邮件系统,至少需要以下一些组件。
一个用户端程序。用于完成交互操作,完成MUA功能。如果是Windows下的用户,可以选择Foxmail或Outlook。如果是Linux下的用户,可以选择Evolution。
一个邮件服务器软件包用于完成MTA和MSA的功能。读者选用Sendmail、Qmail以及Postfix中的一种即可。
一个本地投递工具。用来完成MDA功能,如常用的procmail。
一种MAA。用来传递邮件给终端用户,如Linux下常用的imap。
邮件系统所使用的协议
SMTP(Simple Mail Transfer Protocol) 简单邮件传输通信协议。SMTP只负责电子邮件的传送(接收为POP),其使用的端口是25,它是目前 Internet上传输电子邮件的标准协议。
POP(Post Office Protocol) 邮局协议。目前版本为3,是关于接收电子邮件的客户机/服务器协议。客户端程序连接到服务器的110端口,通过执行POP命令来下载服务器上的邮件到本地磁盘进行阅读。
IMAP(Internet Message Access Protocol) 网际消息访问协议。目前为第4版本,它像POP协议一样提供方便的邮件下载服务,支持POP所具有的全部功能。除此之外,INAP还可以提供其他一些功能。
电子邮件与DNS的关系
当邮件服务器程序收到一封待发的邮件时,它首先需要根据目标地址确定将信息投递给哪一个服务器,这是通过DNS服务器实现的。因此,在配置Mail服务器之前,读者需确保自己的DNS服务器工作正常,以便能够解析Mail中国使用的主机信息。
另外,当邮件目的地址不是当前系统时,将发送中继。
配置RedHat Linux下Sendmail服务器
Linux下MAIL软件包组件介绍
软件包组件
要使当前Linux操作系统具备邮件服务器功能,就要求当前系统中有多个软件包,包括MTA、MDA、MAA等类型的软件包。以下是以Sendmail为MTA构建邮件服务器时所需要的软件包。
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.sb。aliases.db用来设定信箱别名,用户可以藉由这个档案的设定来规范,其还需要藉由aliases及newaliases来生成这个配置文件。
6./etc/mail/statistics。这个文件记录Sendmail收发信件的相关信息。
主要执行文件
1./usr/sbin/sendmail。读取sendmail,cf这个档案的设定内容。在发送信件时使用这个程序,预设的启用端口为25.
2./usr/sbin/ipop3d。Sendmail的功能时处理寄信问题,ipop3d用来处理客户端的收信问题,如果当前的邮件服务器希望为客户端提供使用Netscape或Outlook 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:[email protected]
rcpt to:[email protected]
telnet 192.168.2.100 25
mail from:[email protected]
rcpt to:[email protected]
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
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:[email protected]
530 5.7.0 Authentication required