linux邮件服务器架设知识

网址简介:未填写

更新时间:4个月前

访问次数:154

详细介绍

电子是因特网下最流行的应用,跟传统邮件不同,电子邮件迅速又易于分发,还可以发生包含超链接、HTML格式文本、图像、声音甚至视频数据的内容,今天我们现在就去看看linux邮件服务器架设知识。

1,这里想提醒大家一下root用户是不能收信和发信的,sendmail是监听

在25端口的
2建立用户来收信和发信
[root@zy root]# useradd RedHat
[root@zy root]#passwd redhat
3.由于邮件系统必须要有一个别名文件aliases,而且不能为空
[root@zy mail]# echo "root: redhat" > /etc/mail/aliases
我们把所有发给root用户的信转发到redhat下
为了让这个aliases生效,我们需要运行
[root@zy mail]# newaliases
它会自动建立一个新的数据库帐号
4.[root@zy mail]# telnet localhost 25
连接本地服务器,连接成功后它会
220 zy.zhaoyong.com ESMTP Sendmail 8.12.10/8.14.1; Tue, 31 Jul

2007 11:07:46 +0800
上面提示的是sendmail版本号,以及登录时间,我们在下面写入标准的

sendmail语句
mail from: root@zhaoyong.com 代表信是从这里发出的zhaoyong.com是

我的域,它会回应信息为
250 2.1.0 root@zhaoyong.com... Sender ok
接下来我们写入
rcpt to: redhat@zhaoyong.com , rcpt to代表的是发送给谁,这里发

送给本机的redhat用户,下面是回应信息证明发送成功了
250 2.1.5 redhat@zhaoyong.com... Recipient ok
然后输入data命令,下面可打上你想要说的话
data
354 Enter mail, end with "." on a line by itself
zhaoyongaimeinv.
.
250 2.0.0 l6V3U9SP002895 Message accepted for delivery
其中.代表这一行的结束。单独一行.代表写完了
然后我们quit退出
5.[root@zy mail]# tail /var/log/maillog 查看日志确定是否信发送

成功 ,在最后一行看到,stat=send说明是成功的
6.sendmail是发信的现在我们来配置收信的服务器,现在我们配置imap

收信服务器
[root@zy RPMS]# rpm -ivh --aid imap-* 首先安装imap服务在第三张

盘里
1:imap-devel ###################################### [ 50%]
2:imap ################################## [100%]
[root@zy root]# chkconfig imap on 开启imap服务
但是imap是不能独立运行的它需要xinetd超级服务才能启动
[root@zy root]# ls /etc/xinetd.d 可以在这里查看到imap服务
[root@zy root]# service xinetd restart 启动超级服务
[root@zy root]# grep imap /etc/services 我们从/etc/services里过

滤看到imap服务的启动端口是143
imap 143/tcp
imap 143/udp
[root@zy root]# netstat -tnl |grep 143 查看端口是否启用
tcp 0 0 0.0.0.0:143 0.0.0.0:* LISTEN
结果反应我们的服务是启动成功了
现在我们来用outlook测试下
点开始-程序-outlook-工具-帐户-添加-邮件-显示名zhaoyong-

redhat@zhaoyong.com-我的邮件接受服务器是选择imap,接受邮件地址

和发送邮件的地址都是192.168.1.144,大家根据自己的设定写地址了-

帐户名是redhat,密码123,完成。
接着我们来创建邮件大家自己实验
此时我们只是在服务器内部可以工作,如果想要在互联网工作还需要
7.这里我们来讲服务器的转发,当收件人不是服务器本身而是另外的一

个域的时候,就需要服务器转发relay
我们编辑配置文件
Sendmail的配置十分复杂。它的配置文件是sendmail.cf,位

于/etc/mail目录下。由于sendmail.cf的语法深奥难懂,很少有人会直

接去修改该文件来对Sendmail服务器进行配置。我们一般通过m4宏处理

程序来生成所需的sendmail.cf文件。创建的过程中还需要一个模板文件

,系统默认在/etc/mail目 录下有一个sendmail.mc模板文件。
我们可以根据简单、直观的sendmail.mc模板来生成sendmail.cf文件,

而无需直接编辑sendmail.cf文件。可以直接通过修改sendmail.mc模板

来达到定制sendmail.cf文件的目的。这里介绍创建sendmail.cf文件的

步骤:
[root@zy root]# vi /etc/mail/sendmail.mc 加入下面这句话
FEATURE(`access_db')dnl 这句话的意思是打开access_db这个库
因为FEATURE是一个宏定义,所以我们还要加上这句话
include (`/usr/share/sendmail/cf/m4/cf.m4')dnl ,这是我们默认定

义宏定义的文件,/usr/share/sendmail/cf/m4/cf.m4 这个目录是我在

14课的时候建立的,大家可以参考14课的内容
[root@zy mail]# m4 sendmail.mc > sendmail.cf 然后使用m4 将宏语

言翻译成sendnail.cf的配置文件 然后
[root@zy mail]# echo "192.168.1 RELAY" >> access 意思就是来自

192.168.1 这个网段的地址都会被转发出去
[root@zy mail]# makemap hash access < access 然后创建一张表,来

源是access
然后你就会在mail目录下发现一个access.db的文件它就是刚刚创建的表
[root@zy mail]# killall -9 sendmail 杀死你的sendmail服务器然后

从新启动
[root@zy mail]# sendmail -db -q1h-b:
-b指定Sendmail在后台运行,并且监听端口25的请求。
-d:指定Sendmail以Daemon方式运行(守护进程)。
-q:当Sendmail无法将邮件成功地发送到目的地时,它会将邮件保存在

队列里。该参数指定邮件在队列里保存的时间。例子里的1h表示保留1小

时。
然后我们进行测试下,写一封信来自zhaoyong.com这个域的 发送到另外

一台服务器zy.com这个域的,大家自己测试下吧 反正我测试成功了 呵

呵,这个过程如果出错的话,大家注意下自己的dns服务器是否成功,最

好先测试下自己的dns服务器,也可以
[root@zy mail]# tail /var/log/maillog 看看这里的报错消息
8.如果你的客户机地址是变化的,我们就需要配置用户认证模式
[root@zy root]# vi /etc/mail/sendmail.mc 我们就需要修改用户认

证机制,在里面加入如下几行
include (`/usr/share/sendmail/cf/m4/cf.m4')dnl 这句是上面加过的
define(`confAUTH_OPTIONS'.`A y')dnl 这句的意思是打开用户认证选

项,A y 是必须通过认证
TRUST_AUTH_MECH(`LOGIN PLAIN')dnl 表示信任的认证机制我们使用

login和plain 这是大多数客户段支持的认证方式,像outlook就是支持

这样的认证方式
define(`confAUTH_MECHANISMS'.`LOGIN PLAIN')dnl指的是默认定义的

认证机制是login和plain
wq 保存退出
[root@zy mail]# m4 sendmail.mc > sendmail.cf 重新用m4翻译成配置

文件
由于sendmail本身自己不提供认证
所以我们必须打开saslauthd认证服务
[root@zy mail]#chkconfig saslauthd on
[root@zy mail]#services saslauthd restart 然后从新启动
[root@zy mail]#echo "pwcheck_method:saslauthd" >

/usr/lib/sasl2/sendmail.conf 然后编辑一个认证配置文件重定向到

sasl2的默认sendmail.conf 它要通过这个文件来知道sendmail如何通过

用户认证
[root@zy mail]#services saslauthd restart
[root@zy mail]# killall -9 sendmail 杀死你的sendmail服务器然后

从新启动
[root@zy mail]# sendmail -db -q1h-b
下面我们来测试用户
[root@zy mail]# telnet localhost 25 登录服务器的25端口
输入ehlo localhost
如果出现 250-AUTHLOGIN PLAIN 说明成功打开用户认证机制
quit退出
在outlook里测试,我们选择192.168.1.144的属性,然后选择我的服务linux邮件服务器架设知识-第1张图片在下面我盗用下另外一哥们jackiesr的psotfix的邮件服务器架设的文章我觉得写的很好大家研究下,对这一哥们表示敬意
电子邮件服务是基于c/s模式的。对于一个完整电子邮件系统而言,它主要由以下三个部分:用户代理、邮件服务器、电子邮件使用的协议。现在主要的使用协议有SMTP、POP3、IMAP4。其中POP3、IMAP4是接受邮件用的。可以把IMAP4看成是一个远程文件服务器,而把POP看成是个存储转发服务器。
主流的电子邮件服务器有:sendmail、postfix、Qmail。其中sendmail是个很优秀的邮件服务器软件,但是它的安全性比较差,而postfix的安全性就比较好,同时它还可以和sendmail保持兼容性以满足用户的使用习惯。
postfix邮件服务器的安装
RedHat默认的情况下会已经把sendmail安装到os中了,要想使用postfix就必须先把sendmail的服务停止下来。用 netstat -nutlp | grep :25查看25号端口的存在,如果有的话得关闭sendmail服务和开机自动启动命令如下
/etc/rc.d/init.d/sendmail stop
chkconfig sendmail off
安装postfix服务 rpm -ivh postfix...rpm
postfix邮件服务器的配置
postfix邮件服务的最被称道的地方就在它的可读性非常高。它的主配置文件是/etc/postfix/main.cf虽然该配置文件的内容比较多,但其中大部分的内容都是注释,真正自行定义的参数并不多,而且这些参数就算不去定义,按照默认值也可以运行,只不过它只监听127这个接口的邮件收发。
1.设置运行postfix服务的邮件主机名和域名
myhostname = mail.163.com
mydomain = 163.com
2.设置由本机寄出的邮件所使用的域名或主机名称
myorigin = $mydomain
myorigin = $myhostname
3.设置postfix服务监听的网络接口 通常是将所有的网络接口都开放,以便接收任何网络接口的邮件。 inet_interfaces = all
4.设置可接收邮件的主机名称或域名
mydestination = $mydomain, $myhostname
5.设置可转发(Relay)哪些网络的邮件
mynetworks = 192.168.1.0/24, 127.0.0.1/8
注:除了mynetworks外,还有一个用于控制网络邮件转发的参数是mynetworks-style,它主要用来设置可转发邮件网络的方式。通常有以下三种方式。
class:在这种方式下,postfix会自动根据邮件主机的ip地址得知它所在的ip网络类型。
subnet:这是postfix的默认值,postfix会根据邮件主机的网络接口上所设置的ip地址、子网掩码来得知所要开放的ip网段。
host:在这种方式下,postfix只会开放本机。
通常,用户不设置mynetworks-style参数,而是直接设置mynetworks参数。如果这两个参数都设置了,那么mynetworks参数设置有效。
6.设置可转发哪些网域的邮件
mynetworks参数是针对邮件来源的ip设置的,而relay_domains参数则是针对邮件来源的域名或主机名来设置的。relay_domains = 163.com表示任何由域163.com发来的邮件都会被认为是信任的,postfix将自动转发。
完成了上述的基本设置后重新启动postfix服务,这台邮件主机就基本准备好了。但是它目前还只能支持客户端发信,还不能支持收信。
此外,要使它能在单位的内部网络中更好地转发邮件,还必须进行设置DNS。
当编辑好postfix主配置文件/etc/postfix/main.cf后,为了便于调试应在不打开文件的情况下,直接读取文件的各类数据,可执行/usr/sbin/postconf命令。
postconf -n
虚拟别名域的设置
使用虚拟别名域,可以将发给虚拟域的邮件实际投到真实域的用户邮箱中;可以实现群组邮递的功能,即指定一个虚拟邮件地址,任何人发给这个邮件地址的邮件都将由邮件服务器自动转发到真实域中的一组用户的邮箱里。这里的虚拟域可以是不存在的域,而真实域既可以是本地域(即main.cf文件中的mydestination参数指定的域),也可以是远程域或internet域。虚拟域是真实的一个别名,实际上是通过一个虚拟别名表,实现了虚拟域的邮件地址到真实域的邮件地址的重定向。
vi /etc/postfix/main.cf
编辑 virtual_alias_domains = dzxx.cn, jackie.com
virtual_alias_maps = hash:/etc/postfix/virtual
这里virtual_alias_domains用来指定虚拟别名域的名称
virtual_alias_maps用来指定含有虚拟别名域定义的文件路径。
vi /etc/postfix/virtual
@dzxx.cn @jackie.com
admin@jackie.com lbt
st0321@jackie.com st0321001, st0321002...
daliu@jackie.com lbt, liu@163.com
修改完这两个文件 应分别执行 /usr/sbin目录中的命令
postmap /etc/postfix/virtual 生成postfix可以读取的数据库文件/etc/postfix/virtual.db
postfix reload 重新加载main.cf主配置文件
用户别名的设置
使用用户别名最重要的功能是实现群组邮递(也称邮件列表)的功能,通过它可以将发送给某个别名邮件地址的邮件转发到多个真实用户的邮箱中。
在实际应用中,举例配置如下:
1.打开postfix主配置文件/etc/postfix/main.cf,应确认文件中包含以下两条默认语句。
alias_maps = hash:/etc/aliases 用来指定含有用户别名定义的文件路径。
alias_database = hash:/etc/aliases 指定别名表数据库文件路径。
2.编辑配置文件/etc/aliases
st0322: st0322001, st0322002, .....
st0323: :include: /etc/mail/st0323 别忘记了再编辑/etc/mail/st0323文件。
3. postalias /etc/aliases
postfix reload
注:此方法只适用root用户,如果普通用户要实现自己的邮件列表,就该在该用户目录下建立.forward文件来实现,具体方法请查看相关资料。
SMTP认证的配置
如果任何人都可以通过一台邮件服务器来转发邮件,那么相信大家会想到它的坏处的。Postfix默认不会对外开放转发功能,而仅对本机进行转发功能。但是在实际应用中必须在postfix注配置文件中通过设置mynetworks、relay_domains参数来开放一些所信任的网段或网域,都则该邮件服务器几乎没有什么用途。在开放了这些所信任的网段或网域后,还可以通过设置SMTP认证,对要求转发邮件的客户端进行身份验证。目前比较流行的验证机制是通过cyrus SASL包来实现的。
cyrus的安装
我在rh9中只找到了下图的几个包,但是在我的书里确是有7个包(rhel4)希望有哪位高手能给予解答,将不胜感激。除了下图的5个文件包外还应有cyrus-sasl-sql-...和cyrus-sasl-ntlm....两个软件包。
cyrus-sasl V2的密码验证机制
默认情况下cyrusSASL-v2版使用saslauthd这个守护进程进行密码认证,使用下面的命令可查看当前系统中的cyrusSASL-v2所支持的密码验证机制。
saslauthd -v 如果成功可以看到当前可使用的密码验证方法...
测试cyrus-sasl V2的认证功能
ps aux | grep saslauthd 检查saslauthd进程是否已经运行
如果没有运行可以启动它 /etc/init.d/saslauthd start
设置开机自动启动 chkconfig saslauthd on
然后进行如下小测试 /usr/sbin/testsaslauthd -u lbt -p 'mima'
设置postfix启用SMTP认证
postfix默认并没有启用SMTP的认证机制,要启用就必须对主配置文件/etc/postfix/main.cf进行配置。下面给出main.cf文件中的有关SMTP认证的设置部分,位于文件的最后部分。
smtpd_sasl_auth_enable = yes 是否要启用sasl作为SMTP认证方式
smtpd_sasl_local_domain = ''如果采用cyrus-SASL V2版进行认证,那么这里不作设置
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination 表示通过收件人地址对客户端发来的邮件进行过滤。通常有以下几种限制规则:permit_mynetworks表示只要是收件人地址位于mynetworks参数中指定的网段就可以被转发邮件。 permit_sasl_authenticated表示允许转发通过SASL认证的邮件。reject_unauth_destination表示拒绝转发含未信任的目标地址的邮件。
broken_sasl_auth_clients = yes 是否兼容非标准的认证。
smtpd_client_restrictions = permit_sasl_authenticated 表示限制可以向postfix发起SMTP连接的客户端。如果要禁止未经过认证的客户端向postfix发起smtp连接,则可将该参数值设置为permit_sasl_authenticated.
smtpd_sasl_security_options = noanonymous用来限制某些登陆的方式。禁止采用匿名用户登录。
完成上述配置后 可使用/etc/init.d/postfix reload或/etc/init.d/postfix restart重启动服务.
此外,由于当postfix要使用SMTP认证时,会读取/usr/lib/sasl2/smtpd.conf文件中的内容以确定所采用的认证方式,因此要使用saslauthd这个守护进程来进行密码认证,就必须确保这个文件中的内容为:pwcheck_method: saslauthd
测试postfix是否启用了SMTP认证
telnet mail.jackie.com 25
EHLO 163.com
quit 如下图
/etc/init.d/postfix start
/etc/init.d/postfix stop
/etc/init.d/postfix restart
/etc/init.d/postfix reload
ntsysv 自动启动postfix服务
pop和imap邮件服务的实现
postfix服务只是MTA,它只提供SMTP服务,也就是只提供邮件的转发及本地的分发功能。要实现异地的接收,还必须安装POP或IMAP服务。通常情况下是将SMAP服务和POP或IMAP服务装到一个主机上,那么这台主机也就称为了电子邮件服务器。在rhel4中dovecot和cyrus-imapd两个软件可以同时提供pop和imap服务。
dovecot服务的实现 在rehl4的第四张光盘中安装。
dovecot的基本配置 他的基本配置文件是/etc/dovecot.conf。要启用最基本的dovcot服务,只需要修改该配置文件中的以下内容。
protocols = pop3 指定运行的服务协议
pop3_listen = * (是星号) 指定所监听的服务端口 星号代表所有的端口。
启动dovecot服务并设置为自动启动
/etc/rc.d/init.d/dovecot start
chkconfig --level 345 dovecot on
至此就完成了dovecot和postfix服务的安装,之后就可以利用这台电子邮件服务器进行邮件的收发工作了。
注:pop3使用的TCP协议的110端口。
cyrus-imapd服务的安装 在第四张光盘中,以下是相关的软件包
cyrus-imapd-2.2.10-1.RHEL.1.I386.rpm
cyrus-imapd-devel-2.2.10-1.rhel4.1.i386.rpm
cyrus-imapd-murder-2.2.10-1.rhel4.1.i386.rpm
cyrus-imapd-nntp-2.2.10-1.rhel4.1.i386.rpm
cyrus-imapd-utils-2.2.10-1.rhel4.1.i386.rpm
perl-cyrus-2.2.10-1.rhel4.1.i386.rpm
其中最后一个包必须在安装cyrus-imapd-utils-2.2.10-1.rhel4.1.i386.rpm包之前安装。
cyrus-imapd服务的基本配置文件有3个
/etc/sysconfig/cyrus-imapd:用于启动cyrus-imapd服务的配置文件。
/etc/cyrus.conf:是cyrus-imapd服务的主要配置文件,其中包含该服务中各个组件(imap、pop3、sieve和nntp等)的设置参数。
/etc/imapd.conf:是cyrus-imapd服务中的imap服务的配置文件。
默认情况下,这些配置文件基本配置好,只要启动cyrus-imapd服务,就可以同时提供pop和imap服务。但是默认情况下,postfix不支持cyrus-imap信箱,因此为了使postfix与cyrus-imapd整合在一起,必须在postfix的主要配置文件/etc/postfix/main.cf中加入
mailbox_transport = lmtp:unix:/var/lib/imap/socket/lmtp
cyrus-imapd 启动并自动运行
service cyrus-imapd start
chkconfig cyrus-imapd on
用户邮箱的管理
cyrus-imap的一个有点就是它可以为每个用户创建一个邮箱,默认情况下,cyrus-imap的邮箱位于/var/spool/imap目录下。创建邮箱时,为每个邮件命名的格式为:
信件类型.名称【.文件夹名称【.文件夹名称】】...
创建和管理用户邮件邮箱的具体方法:
1为cyrus-imap管理员帐户cyrus设置密码
passwd curus
cyrus-imap管理员帐户cyrus时安装cyrus-imap服务时自动创建的。在第一次为用户创建邮箱前,必须为该帐户设置一个密码,以便以后管理用户信箱时验证用户身份。
2使用cyradm管理工具为用户创建邮件邮箱
cyradm管理工具位于/usr/lib/cyrus-imapd目录中,使用下面的命令可以运行该管理工具。/usr/lib/cyrus-imapd/cyradm -u cyrus localhost
命令中必须用参数-u指定运行该管理工具的用户帐户,通常情况下为管理员帐户cyrus。命令执行时,会提示输入密码,确认无误时可进入管理命令行状态。
localhost.localdomain>
让后使用下面的命令就可以为用户lbt创建一个邮件信箱。
localhost.localdomain>createmailbox user.lbt
使用listmailbox命令列出cyrus-imap系统中已有的用户邮件信箱。
3.在用户邮箱下添加其他文件夹
localhost.localdomain>createmailbox user.lbt.send (发件箱)
localhost.localdomain>createmailbox user.lbt.trash (垃圾箱)
localhost.localdomain>createmailbox user.lbt.drafts (草稿箱)
4.为用户邮件信箱设置配额
localhost.localdomain>setquota user.lbt 5210 为用户设置了5M的配额
localhost.localdomain>listquota user.lbt 查看该邮件信箱的使用情况
还可用另外一个linux下的提示符命令 su -l cyrus -c /usr/lib/cyrus-imap/quota 查看用户邮箱的使用情况。
5.为用户邮件信箱设置权限
默认情况下,当cyrus-imap管理员为用户创建了一个邮件信箱时,只有该用户对该邮件信箱具有完全控制的权限。
[table=98%][tr][td]权 限 缩 写[/td][td] 描 述 [/td][/tr][tr][td] none[/td][td]无任何权限[/td][/tr][tr][td] read[/td][td] 允许读取信箱的内容[/td][/tr][tr][td] post[/td][td] 允许读和向信箱中张贴信息(发邮件)[/td][/tr][tr][td] append[/td][td] 允许读和向信箱中张贴与插入信息[/td][/tr][tr][td] write[/td][td] 除具有append的权限外,还具有在信箱中删除邮件的权限,但不具有变更信箱的权限[/td][/tr][tr][td] all[/td][td] 具有所有的权限[/td][/tr][/table]

设置权限 注:deletemailbox的命令是删除邮箱
localhost.localdomain>setacl user.lbt cyrus all
实际上邮箱的访问权限是由l r s w i p c d a九种权限组合而成。
常用的cyradm管理命令及其缩写的形式如下
listmailbox lm
createmailbox cm
deleatemailbox dm
renamemailbox renm
setaclmailbox sam
deleteaclmailbox dam
listaclmailbox lam
setquota sq
listquota lq
以上就是为大家介绍的linux邮件服务器架设知识,至此电子邮件的服务器端的配置就完成了,剩下的就是客户端的配置相信对于大家来说都不是很难的问题吧。

请发表您的评论