2007/02/19

CentOS 4.4 postfix2.3+ sasl 2+ dovecot 1.0搭建简洁快速的论坛邮件服务器

在网上找到的postfix加邮件服务器都稿得很复杂,非要什么mysql来管理帐户,我建的就是个论坛用的邮件服务器,一二个用户就行了,根本没有必要用mysql这个大神。所以我搜索了些资料,搭建一个简洁快速的论坛邮件服务器。

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

添加MX记录(这里假设使用固定IP域名)

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

     mx mail.cnprint.org. 10
     a mail 服务器的IP地址
然后再设置mail.cnprint.org的域名A记录,否则,即使你用动态IP建成了邮件服务器,也会被大多数ISP邮件服务器视为垃圾邮件服务器,而无法向其发送邮件。
  mail为别名,10为优先度。这个别名指向服务器的IP地址。
  确认MX记录的添加是否生效的方法:

# host -t mx cnprint.org

cnprint.org mail is handled by 10 mail.cnprint.org.  // 确认MX记录生效
# dig mail.cnprint.org //再查询mail.cnprint.org的域名A记录,已经找到了。
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62310
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 4
;; QUESTION SECTION: ;mail.cnprint.org. IN A ;;
ANSWER SECTION: mail.cnprint.org. 227 IN A 125.83.88.7 // 已经查找到mail.cnprint.org的域名A记录在125.83.88.7这个IP上。

安装Postfix

我们这里下载最新的postfix 2.3 的src rpm自己进行编译,postfix 2.3默认已经不支持sasl2验证了,所以我们要自己重新编译加入对sasl2的支持。

下载并安装Postfix。

cd /usr/local/src
wget ftp://ftp.wl0.org/official/2.3/SRPMS/postfix-2.3.7-1.src.rpm

rpm -i postfix-2.3.7-1.src.rpm

cd /usr/src/redhat/SPECS

vi postfix.specs

搜索并找到下面几行修改如下:

%define with_cdb 0
%define with_ldap 0
%define with_mysql 0
%define with_mysql_redhat 0
%define with_pcre 0
%define with_pgsql 0
%define with_sasl 2
%define with_spf 0
%define with_dovecot 1
%define with_tls 1
%define with_tlsfix 2
%define with_vda 0

编译postfix rpm

rpmbuild -ba postfix.sepc

编译完成后安装postfix:

cd ../RPMS/i386/

rpm -ivh postfix-2.3.7-1.rhel4.i386.rpm

配置Postfix及相关组件

[1] 对Postfix进行配置。

# vi /etc/postfix/main.cf  // 编辑Postfix的配置文件

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

#mydomain = domain.tld  // 找到此行,将等号后面的部分改写为域名

mydomain = cnprint.org  // 变为此状态,设置域名(我们将让此处设置将成为E-mail地址“@”后面的部分)

#myorigin = $mydomain  // 找到此行,将行首的#去掉

myorigin = $mydomain  // 变为此状态,将发信地址“@”后面的部分设置为域名(非系统主机名)

#inet_interfaces = 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_destination message_size_limit = 15728640  // 规定邮件最大尺寸为15MB [2]

配置SMTP认证的相关选项

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

# vi /usr/lib/sasl2/smtpd.conf  // 编辑SMTP认证的配置文件

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

# vi /etc/sysconfig/saslauthd

MECH=shadow  // 找到这一行,在前面加#

#MECH=shadow  //不使用shadow机制

FLAGS=  // 找到此行,在等号后面添加“sasldb”

FLAGS=sasldb   // 定义认证方式为sasldb2

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

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

# mkdir /etc/skel/Maildir  // 在用户模板下建立用户邮箱目录

# chmod 700 /etc/skel/Maildir  // 设置用户邮箱目录属性为700 然后再为已经存在的用户建立相应邮箱目录。

# mkdir /home/cnprintorg/Maildir  // 为用户(这里以cnprintorg用户为例)建立邮箱目录

# chmod 700 /home/cnprintorg/Maildir  // 设置该用户邮箱目录属性为700

# chown cnprintorg. /home/cnprintorg/Maildir  // 设置该用户邮箱目录为该用户所有

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

# saslpasswd2 -u sample.cnprint.org -c cnprintorg  // 为cnprintorg用户设置SMTP认证密码
Password:  // 在这里输入密码(不会显示)

Again (for verification):  // 再次输入密码

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

# chgrp postfix /etc/sasldb2  // 将数据库归属改为postfix,

# chmod 640 /etc/sasldb2  // 将数据库属性改为640

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

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


# /etc/rc.d/init.d/sendmail stop  // 关闭sendmail服务

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

# chkconfig sendmail off  // 关闭sendmail自启动

# chkconfig --list sendmail  // 确认sendmail自启动已被关闭(都为off就OK)

sendmail 0:off 1:off 2:off 3:off 4:off 5:off 6:off

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

# alternatives --config mta  // 设置默认MTA

There are 2 programs which provide 'mta'.
Selection Command
-----------------------------------------------

*+ 1 /usr/sbin/sendmail.sendmail  // 当前状态:sendmail为默认MTA
2 /usr/sbin/sendmail.postfix


Enter to keep the current selection[+], or type selection number: 2  // 在这里输入2,使Postfix成为默认MTA 启动相应服务

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

# chkconfig saslauthd on  // 将SMTP-Auth设置为自启动

# chkconfig --list saslauthd  // 确认SMTP-Auth服务状态

saslauthd 0:off 1:off 2:on 3:on 4:on 5:on 6:off  // 确认2~5为on的状态就OK

# /etc/rc.d/init.d/saslauthd start  // 启动SMTP-Auth Starting saslauthd:           [ OK ]

# chkconfig postfix on// 将Postfix设置为自启动

# chkconfig --list postfix  // 确认Postfix服务状态

postfix 0:off 1:off 2:on 3:on 4:on 5:on 6:off  // 确认2~5为on的状态就OK

# /etc/rc.d/init.d/postfix start  // 启动Postfix Starting postfix:            [ OK ]

至此,就完成了SMTP服务器方面的配置,但目前只具从备客户端通过服务器发送邮件的功能。做为完整的邮件服务器,还需具备从客户端通过POP/IMAP协议接受邮件到本地的功能。

POP / IMAP 是 MUA 从邮件服务器中读取邮件时使用的协议。 其中,与 POP3 是从邮件服务器中下载邮件比起来,IMAP4 则是将邮件留在服务器端直接对邮件进行管理、操作。这里,我们用 Dovecot 来实现对 POP3 及 IMAP4 等协议支持的邮件接收服务器的搭建。 Dovecot 是一个比较新的软件,由 Timo Sirainen 开发,最初发布于 2002年7月。作者将安全性考虑在第一,所以 Dovecot 在安全性方面比较出众。另外,Dovecot 支持多种认证方式,所以在功能方面也比较符合一般的应用。

安装 Dovecot 首先,安装 Dovecot 。

cd /usr/local/src

wget http://download.fedora.redhat.com/pub/fedora/linux/core/updates/6/SRPMS/dovecot-1.0-1.1.rc15.fc6.src.rpm

rpm -i dovecot-1.0-1.1.rc15.fc6.src.rpm

cd /usr/src/redhat/SPECS

由于dovecot默认支持mysql,postgresql,而我们不需要,所以我们编译源代码,去掉对mysql,postgresql的支持。如果现在不编译。等一会儿要求你安装mysql 4.1.20,否则,不会你安装。呵呵。这样mysql 4.1.20可能跟我们手动安装的mysql 5.0冲突,为了系统的稳定,所以我们取消了那些不需要的认证方式。

vi dovecot.spec

搜索以下语句:

%define build_postgres 1
%define build_mysql 1
%define upstream 1.0.rc15

修改为:

%define build_postgres 0
%define build_mysql 0
%define upstream 1.0.rc15


降低对openssl的版本要求,查找:

Prereq: openssl >= 0.9.7f4, /sbin/chkconfig, /usr/sbin/useradd

修改为:
change to Prereq: openssl >= 0.9.7a, /sbin/chkconfig, /usr/sbin/useradd


编译rpm 文件。
rpmbuild -ba dovecot.spec


cd ../RPMS/i386/

rpm -ivh dovecot-1.0-1.1.rc15.i386.rpm

OK.

配置 Dovecot

然后,修改相应配置文件,配置 Dovecot 。
# vi /etc/dovecot.conf  // 编辑Dovecot 的配置文件

#protocols = imap imaps pop3 pop3s  // 找到这一行,去掉行首的#
 
protocols = imap imaps pop3 pop3s  // 变为此状态

# mail_location = maildir:~/Maildir  // 找到这一行,定义邮件目录
 
mail_location = maildir:~/Maildir  // 定义邮件目录为用户目录下的Maildir目录

添加防火墙规则

  由于 POP3 协议与 IMAP4 协议要分别用到110号和143号端口,所以在启动服务前,配置防火墙,开通这两个端口。
# vi /usr/local/sbin/fw.sh  // 编辑防火墙规则

/sbin/iptables -A INPUT -p tcp --dport 25 -j ACCEPT //
/sbin/iptables -A INPUT -p tcp --dport 110 -j ACCEPT // 允许POP使用的110号端口
/sbin/iptables -A INPUT -p tcp --dport 143 -j ACCEPT // 允许IMAP使用的143号端口

# /etc/rc.d/init.d/iptables restart  // 重新启动防火墙,使新的设置生效

Flushing firewall rules:          [ OK ]
Setting chains to policy ACCEPT: filter   [ OK ]
Unloading iptables modules:       [ OK ]
Applying iptables firewall rules:      [ OK ]

启动 Dovecot

最后,启动 Dovecot ,并将其设置为自启动。

# chkconfig dovecot on  // 设置Dovecot为自启动

# chkconfig --list dovecot
dovecot 0:off 1:off 2:on 3:on 4:on 5:on 6:off  // 确认2~5为on的状态就OK

# /etc/rc.d/init.d/dovecot start  // 启动Dovecot服务

Starting Dovecot Imap:        [ OK ]

test

telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 localhost.localdomain ESMTP Postfix
ehlo dd
250-localhost.localdomain
250-PIPELINING
250-SIZE 15728640
250-VRFY
250-ETRN
250-AUTH LOGIN PLAIN //
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
auth login
334 VXNlcm5hbWU6
dfdf
334 UGFzc3dvcmQ6

telnet localhost 110
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
+OK Dovecot ready.


这样我们利用postfix和 dovecot两个RPM包就成功的安装了我们的邮件服务器了。而不会装其他很多无价值的东西。真是又快又简单。

没有评论: