您的位置:首页技术文章
文章详情页

CentOS邮箱服务器搭建系列——SMTP服务器的构建( Postfix )

【字号: 日期:2024-07-10 18:56:26浏览:24作者:猪猪

前言

在CentOS中,默认的邮件服务器(SMTP方面)是sendmail,但sendmail有若干的缺点,比如,配置复杂、安全漏洞曾被多次发现--并且依然存在隐患、邮件发送速度慢等等,这里就不再一一叙述。而另一个被广泛应用于邮件服务方面的“Postfix”的缺点就少得多,或者说它就是针对于sendmail的缺点,而被设计的。对应sendmail的短处,它在各方面也比较成熟。所以,无特殊要求,这里不推荐用sendmail来构建邮件服务器。本站介绍的邮件服务器配置方法,也将基于Postfix。

添加MX记录(这里假设使用动态域名)

由于MX记录添加后,可能生效要等待一段时间(通常为数分钟或数十分钟,也可能马上生效),所以在安装配置前,我们首先为动态域名添加MX记录。添加方法也会因域名ISP的不同而不同,但大致信息如下:

mx mail.centospub.com. 10a mail 服务器的IP地址

mail为别名,10为优先度。这个别名指向服务器的IP地址。(如有疑问或需要帮忙请到 技术论坛 发贴。)

确认MX记录的添加是否生效的方法:

[root@sample ~]# host -t mx centospub.com

centospub.com mail is handled by 10 mail.centospub.com.  ← 确认MX记录生效

安装Postfix

然后,安装Postfix。

[root@sample ~]# yum -y install postfix  ← 在线安装Postfix

Setting up Install ProcessSetting up repositoriesdag 100% |=========================| 1.1 kB 00:00update 100% |=========================| 951 B 00:00base 100% |=========================| 1.1 kB 00:00addons 100% |=========================| 951 B 00:00extras 100% |=========================| 1.1 kB 00:00Reading repository metadata in from local filesprimary.xml.gz 100% |=========================| 28 kB 00:04update : ################################################## 84/84Added 84 new packages, deleted 1499 old in 3.44 secondsprimary.xml.gz 100% |=========================| 157 B 00:00Added 0 new packages, deleted 1499 old in 1.97 secondsprimary.xml.gz 100% |=========================| 26 kB 00:00extras : ################################################## 102/102Added 102 new packages, deleted 1499 old in 2.73 secondsReducing Dag RPM Repository for Red Hat Enterprise Linux to included packages onlyFinishedParsing package install argumentsResolving Dependencies--> Populating transaction set with selected packages. Please wait.---> Downloading header for postfix to pack into transaction set.postfix-2.2.10-1.RHEL4.2. 100% |=========================| 40 kB 00:00---> Package postfix.i386 2:2.2.10-1.RHEL4.2 set to be updated--> Running transaction checkDependencies Resolved

=============================================================================Package Arch Version Repository Size=============================================================================Installing:postfix i386 2:2.2.10-1.RHEL4.2 base 3.0 M

Transaction Summary=============================================================================Install 1 Package(s)Update 0 Package(s)Remove 0 Package(s)Total download size: 3.0 MDownloading Packages:(1/1): postfix-2.2.10-1.R 100% |=========================| 3.0 MB 00:05Running Transaction TestFinished Transaction TestTransaction Test SucceededRunning TransactionInstalling: postfix ######################### [1/1]

Installed: postfix.i386 2:2.2.10-1.RHEL4.2Complete!

配置Postfix及相关组件

[1] 对Postfix进行配置。

[root@sample ~]# vi /etc/postfix/main.cf  ← 编辑Postfix的配置文件

#myhostname = host.domain.tld  ← 找到此行,将等号后面的部分改写为主机名↓myhostname = sample.centospub.com  ← 变为此状态,设置系统的主机名

#mydomain = domain.tld  ← 找到此行,将等号后面的部分改写为域名↓mydomain = centospub.com  ← 变为此状态,设置域名(我们将让此处设置将成为E-mail地址“@”后面的部分)

#myorigin = $mydomain  ← 找到此行,将行首的#去掉↓myorigin = $mydomain  ← 变为此状态,将发信地址“@”后面的部分设置为域名(非系统主机名)

inet_interfaces = localhost  ← 找到此行,将“localhost”改为“all”↓inet_interfaces = all  ← 变为此状态,接受来自所有网络的请求

mydestination = $myhostname, localhost.$mydomain, localhost  ← 找到此行,在行为添加“$mydomain”↓mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain  ← 变为此状态,指定发给本地邮件的域名

#relay_domains = $mydestination  ← 找到此行,将行首的#去掉↓relay_domains = $mydestination  ← 变为此状态,定义允许转发的域名

#mynetworks = 168.100.189.0/28, 127.0.0.0/8  ← 找到此行,依照自己的内网情况修改↓mynetworks = 168.100.189.0/28, 127.0.0.0/8  ← 变为此状态,指定内网和本地的IP地址范围

#home_mailbox = Maildir/  ← 找到这一行,去掉行首的#↓home_mailbox = Maildir/  ← 变为此状态,指定用户邮箱目录

# SHOW SOFTWARE VERSION OR NOT## The smtpd_banner parameter specifies the text that follows the 220# code in the SMTP server’s greeting banner. Some people like to see# the mail version advertised. By default, Postfix shows no version.## You MUST specify $myhostname at the start of the text. That is an# RFC requirement. Postfix itself does not care.##smtpd_banner = $myhostname ESMTP $mail_name#smtpd_banner = $myhostname ESMTP $mail_name ($mail_version)  ← 找到这一行,接此行添加如下行:smtpd_banner = $myhostname ESMTP unknow  ← 添加这一行,不显示SMTP服务器的相关信息

在配置文件的文尾,添加如下行:

smtpd_sasl_auth_enable = yes  ← 服务器使用SMTP认证smtpd_sasl_local_domain = $myhostname  ← 指定SMTP认证的本地域名(主机名)smtpd_sasl_security_options = noanonymous   ← 不允许匿名的方式认证smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destinationmessage_size_limit = 15728640  ← 规定邮件最大尺寸为15MB

[2] 配置SMTP认证的相关选项

为了提高安全性,我们不将系统用户的密码作为相应用户SMTP认证的密码,而将在后面为用户建立SMTP认证专用的密码。

[root@sample ~]# vi /usr/lib/sasl2/smtpd.conf  ← 编辑SMTP认证的配置文件

pwcheck_method: saslauthd  ← 找到此行,将“saslauthd”改为“auxprop”↓pwcheck_method: auxprop  ← 不使用系统用户密码作为用户的SMTP认证密码

[root@sample ~]# vi /etc/sysconfig/saslauthd

MECH=shadow  ← 找到这一行,在前面加#↓#MECH=shadow  ← 不使用shadow机制

FLAGS=  ← 找到此行,在等号后面添加“sasldb”↓FLAGS=sasldb   ← 定义认证方式为sasldb2

[3] 建立用户的邮箱目录

首先建立用户模板下的邮箱目录,以便于建立新用户时,相应用户的邮箱目录自动被建立。

[root@sample ~]# mkdir /etc/skel/Maildir  ← 在用户模板下建立用户邮箱目录

[root@sample ~]# chmod 700 /etc/skel/Maildir  ← 设置用户邮箱目录属性为700

然后再为已经存在的用户建立相应邮箱目录。

[root@sample ~]# mkdir /home/centospub/Maildir  ← 为用户(这里以centospub用户为例)建立邮箱目录

[root@sample ~]# chmod 700 /home/centospub/Maildir  ← 设置该用户邮箱目录属性为700

[root@sample ~]# chown centospub. /home/centospub/Maildir  ← 设置该用户邮箱目录为该用户所有

[4] 为用户设置SMTP认证密码

[root@sample ~]# saslpasswd2 -u sample.centospub.com -c centospub  ← 为centospub用户设置SMTP认证密码

Password:  ← 在这里输入密码(不会显示)Again (for verification):  ← 再次输入密码

[5] 改变SALS的属性及归属

[root@sample ~]# chgrp postfix /etc/sasldb2  ← 将数据库归属改为postfix,

[root@sample ~]# chmod 640 /etc/sasldb2  ← 将数据库属性改为640

[6] 关闭sendmail服务及设置默认MTA

因为在用Postfix作为SMTP服务器的前提下,我们不准备再用sendmail,所以将sendmail服务关掉,以确保安全及节省系统资源。

[root@sample ~]# /etc/rc.d/init.d/sendmail stop  ← 关闭sendmail服务

Shutting down sendmail: [ OK ]Shutting down sm-client: [ OK ]

[root@sample ~]# chkconfig sendmail off  ← 关闭sendmail自启动

[root@sample ~]# chkconfig --list sendmail  ← 确认sendmail自启动已被关闭(都为off就OK)sendmail 0:off 1:off 2:off 3:off 4:off 5:off 6:off

然后再将默认的MTA设置为Postfix。

[root@sample ~]# alternatives --config mta  ← 设置默认MTAThere are 2 programs which provide ’mta’.

Selection Command-----------------------------------------------*+ 1 /usr/sbin/sendmail.sendmail  ← 当前状态:sendmail为默认MTA2 /usr/sbin/sendmail.postfix

Enter to keep the current selection[+], or type selection number: 2  ← 在这里输入2,使Postfix成为默认MTA

启动相应服务

最后,启动SMTP认证及Postfix服务,并设置相应服务为自启动。

[root@sample ~]# chkconfig saslauthd on  ← 将SMTP-Auth设置为自启动

[root@sample ~]# chkconfig --list saslauthd  ← 确认SMTP-Auth服务状态saslauthd 0:off 1:off 2:on 3:on 4:on 5:on 6:off  ← 确认2~5为on的状态就OK

[root@sample ~]# /etc/rc.d/init.d/saslauthd start  ← 启动SMTP-Auth

Starting saslauthd: [ OK ]

[root@sample ~]# chkconfig postfix on  ← 将Postfix设置为自启动

[root@sample ~]# chkconfig --list postfix  ← 确认Postfix服务状态postfix 0:off 1:off 2:on 3:on 4:on 5:on 6:off  ← 确认2~5为on的状态就OK

[root@sample ~]# /etc/rc.d/init.d/postfix start  ← 启动Postfix

Starting postfix:  [ OK ]

至此,就完成了SMTP服务器方面的配置,但目前只具从备客户端通过服务器发送邮件的功能。做为完整的邮件服务器,还需具备从客户端通过POP/IMAP协议接受邮件到本地的功能。POP/IMAP服务器的构建请参见下一节 < POP / IMAP 服务器的构建( Dovecot ) >。

标签: CentOS
相关文章: