电子邮件的运行机制是由IETF出版的一组相关RFC文档定义,其中包括了SMTP、POP3、IMAP4、MIME等标准规范,涉及邮件传递、存取、安全等诸多方面。其在实现中主要包括两个部分MUA和MTA,MUA提供用户管理界面,MTA负责邮件传递。
SMTP定义邮件服务器间的通信,即邮件从发送端到接收端的传递过程,端口25。
MTA就确定这个邮件要路由到哪里,以及如何路由,常见的如SENDMAIL、QMAIL、POSTFIX、EXIM等;Windows的Exchange、imail等。
MUA是邮件系统为用户提供的可读写、发送邮件界面,通常使用的有elm、pine或email等程序。
POP协议规定,用户的邮件投递到一个中间机器上,叫做POP服务器,客户机通过端口110与服务器连接。
IMAP同POP一样,提供客户机存取远程服务器中的信件的功能,但能比POP提供更高效、更强大的邮件访问功能,支持同时对多个信箱进行访问,多个用户同时访问一个信箱,支持客户机取出信件的子集,支持客户机与服务器间的同步。
下面以sendmail为例,介绍简单的邮件服务器实现过程:
Redhat9 会默认安装Sendmail,如果没有选择安装他,则要到安装光盘中找到以下文件安装:
sendmail-812.8-4.i386.rpm sendmail可执行程序
sendmail-cf-812.8-4.i386.rpm sendmail.cf生成器
sendmail-doc-812.8-4.i386.rpm sendmail.cf文档
使用rpm -ivh sendmail-8-i386.rpm进行安装
安装后就是使用了,步骤如下:
首先,激活服务service sendmail restart ,再使用netstat -ln -A inet 察看端口状态,看25端口是否开启
进入/etc/mail编辑主配置文件,修改SMTP守护进程监听ip地址为服务器ip(在264行)vi +264 sendmail.cf
# SMTP daemon options
O DaemonPortOptions=Port=smtp,Addr=192.168.0.151, Name=MTA
# SMTP client options
#O ClientPortOptions=Family=inet, Address=0.0.0.0
# Modifiers to define {daemon_flags} for direct submissions
#O DirectSubmissionModifiers
# Use as mail submission program? See sendmail/SECURITY
#O UseMSP
# privacy flags
O PrivacyOptions=authwarnings,novrfy,noexpn,restrictqrun
编辑/etc/mail/access文件,如果没有就创建,更改如下:
localhost.localdomain RELAY
localhost RELAY
127.0.0.1 RELAY
192.168.0 RELAY
这里表示允许本机和192.168.0.0/24网段中的机为允许进行中继(设为RELAY),添加的纪录是根据我两台机器的ip来设的。
再将access的内容导入access.db实现对access.db的配置(因为access.db不能直接进行更改,所以使用导入的方式实现配置),命令如下:
makemap hash access.db
因为我配置了域名服务器来进行解析,所以下一步是重启域名服务有没有开启(没有建DNS的就不用了,没有建DNS因该如何做,稍后会介绍):
service named restart
nslookup mail.aaa.com //解析邮件纪录,看DNS是否工作正常
然后是建立SMTP后缀,并设置可用邮件后缀,编辑/etc/mail/local-host-names文件
# local-host-names - include all aliases for your machine here.
mail.aaa.com //建立这条纪录,因为我建的DNS中的邮件纪录为mail.aaa.com,aaa.com是我的域名。
aptech.com //这一条纪录是为后面的试验“虚拟用户”准备的
现在邮件服务器基本可以工作了。
telnet mail.aaa.com 25 //telnet到25端口,telnet 192.168.0.151 25(192.168.0.151是我设的ip)也可以。
如果连接成功,服务器会返回一个表示通信连接成功的220应答代码,如果telnet不到,就察看25端口有没有打开。
HELO mail.aaa.com //向服务器表识发件人的身份,成功,会收到250应答代码,这一步可以省略。
mail from :root@mail.aaa.com //指定发件人为root,成功就会返回250应答代码.
rcpt to :net1@mail.aaa.com //指定收件人地址为,成功就会返回250应答代码.
data //发送data命令,准备开始传输邮件内容,成功会返回354应答代码,表示准备接收邮件内容,可以在下一行开始输入邮件内容。
邮件内容写完后回车并输入“.”结束 回车后会返回250代码。
quit结束,退出。
使用mail查看文件.
(可以使用 sendmail -v aa@aa.com < /dev/null 来判断是否可以发送成功
如果出现 Defferd: refused by [127.0.0.1]
需要再/etc/mail/sendmail.mc 中将
DAEMON -OPTIONS('PORT=SMTP,addr=127.0.0.1,Name=MTA')中的addr=127.0.0.1删除掉
使用m4 sendmail.mc > sendmail.cf 重新生成配置文件
重启sendmail服务 service sendmail restart)
现在来介绍没有架设DNS因该如何做:
首先,在/etc/hosts里面建一条记录
# Do not remove the following line, or various programs# that require network functionality will fail.
127.0.0.1 hsxlinux localhost.localdomain localhost
192.168.0.151 mail.aaa.com //192.168.0.151是sendmail服务器ip,mail.aaa.com是sendmail的域名
像上面一样,在access里添加记录,使允许中继.在导入access.db里,因为防火墙默认会阻止25端口,所以在服务器端需要开启防火墙的25端口.
客户机访问:
客户机首先要将DNS指向服务器(如果不指向,在/etc/hosts里面添加一条和上面一样的记录)
如果不出意外,就可以用telnet mail.aaa.com 25访问了,如果是DNS指向的方式就telnet 192.168.0.151 25.
设置别名:
首先,编辑/etc/aliases,在最后面添加如下记录:
# trap decode to catch security attacks
decode: root
# Person who should get root's mail
#root: marc
administrator :root //设置root的别名为administrtor,冒号左边的为别名,右边的为当前系统用户.
user :net1
guest :nobody
使用命令newliases生成新的别名信息库
这样就可以了,当发往别名邮箱时,也就是发往root用户的邮箱中.
进入/etc/aliases添加一条记录如下:
# trap decode to catch security attacks
decode: root
# Person who should get root's mail
#root: marc
administrator :root user :net1 guest :nobody
mailgrp : root net1 net2 //定义一个邮件组,将root、net1、net2三个用户加入这个组,当向组发送邮件时,也会向组中的用户发送邮件.
虚拟邮件帐号:
当网络中存在多个域,而在另一个域中又不想再建立同样的用户时,可以使用sendmail的虚拟邮件帐户功能.我在
首先,编辑local-host-names添加另一个域的域名aptech.com,编辑virtusertable,打开后文件中没有内容,我添加了如下内容:
net@aptech.com root //让root帐号对应aptech.com域中的net帐户.
net1@aptech.com net1
将配置写入数据库:
makemap hash virtusertable.db
然后,在测试一下,如果不出意外,是可以成功的.
设置mail验证:
首先,检查组件cyrus-sasl-2.1.10-4有没有安装,如果没有就先安装,再用命令sendmail -d0.1 -bv检验是否支持安全验证.
编辑/etc/mail/sendmail.mc,在43行和44行找到如下内容:
dnl #
dnl TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
dnl define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
将前面代表注释的"dnl"去掉:
dnl #
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
再找到第92行,同样将前边的注释去掉:
DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl
dnl #
dnl # The following causes sendmail to additionally listen to port 587 for dnl # mail from MUAs that authenticate. Roaming users who can't reach their dnl # preferred sendmail daemon due to port 25 being blocked or redirected find dnl # this useful.
dnl #
DAEMON_OPTIONS(`Port=submission, Name=MSA, M=Ea')dnl
将修改导入sendmail.cf,因为sendmail.cf才是真正的配置文件:
m4 sendmail.mc >sendmail.cf
service sendmail restart重启sendmail服务,这个时候,一般会出错,说sendmail.cf 39行出错,vi sendmail.cf干脆删掉39行,因为也没用,就可以了.
service sendmail restart重启服务,然后telnet会出错,Cnection refused,这是因为sendmail 的264行中ip被覆盖了,编辑sendmail.mc,将264行的ip改回来,并使用
命令:m4 sendmail.mc >sendmail.cf,然后重启sendmail服务.
然后,当你使用linux中的客户端软件Evolution发送邮件,就会需要进行SMTP验证.
linux实现POP3和IMAP:
首先,检查IMAP组件有没有安装,安装后就进行如下步骤:
cd /etc/xinetd.d进入xinetd.d目录,编辑ipop3文件
# default: off
# description: The POP3 service allows remote users to access their mail
# using an POP3 client such as Netscape Communicator, mutt,
# or fetchmail.
service pop3
{
disable = yes
socket_type = stream
wait = no
user = root
server = /usr/sbin/ipop3d
log_on_success += HOST DURATION
log_on_failure += HOST
}
其中有一行"disable = yes",将yes改为no,开启pop3功能(同样的,可以通过编辑imap文件,做同样修改,也可以开启imap功能).
然后,重启xinetd服务,就可以通过pop3来接收邮件了,可以通过linux中的客户端软件Evolution,或windows中的outlook进行测试.
声明: 此文观点不代表本站立场;转载须要保留原文链接;版权疑问请联系我们。