前言
有朋友找到我,让我帮忙配置一台邮件服务器。我的这位朋友也是适用Linux有一段时间的了,并且他还在Linux上开发了几个软件。他愁眉苦脸的跟我说,以前没配过sendmail,在网上查找了一些资料,每每看到文章开头写道:“配置sendmail是一项庞大而复杂的系统工程....”还没读完就晕倒过去。苏醒后,就来找我了,问我能不能有什么速成之类的办法,因为他根本不想研究sendmail是怎么工作的,就想搭建起来能完成工作就可以了。
我决定帮助他解决他所遇到的问题,于是在下班后翻出以前配置邮件服务器的笔记,花了10分钟左右就在他的新安装一台服务器上运行起来了一个邮件服务器(甚至比配置IIS的邮件服务器还快)。在回家的路上,我边开车边想:要是配置所有服务器都能按照一个简单的步骤完成(就想开车一样),那使用 Linux的人不就更多了吗?这里的核心就是一个比较通用的配置文件,并且他还时带SMTP认证的,既然我已经有了这个成果,为什么不和更多的初学者分享呢?也许这就是开放源码社区的精神吧。让我们开始:
按照这个步骤,只要十分钟就可以配置出一个带有SMTP认证的邮件服务器。当然了,邮件服务器需要配置DNS的MX记录和指向等这里就不讨论了。另外主机名和网络配置也要制定好。还有,基本的Linux命令你要知道一些。
[准备工作]
下面这两项工作是必须要准备好的:
1、安装RedHat7.3,缺省安装即可,但是要保证选装了sendmail
2、下载qpopper4.0.3.tar.gz,这个是pop3服务器的源码。(在网上搜索一下,很多的)
[开始计时]
1、复制qpopper4.0.3.tar.gz到/usr/local/src
2、tar zxvf qpopper4.0.3.tar.gz 释放压缩文件
3、cd qpopper4.0.3 进入子目录
4、./configure --prefix=/usr --exec-prefix=/usr --enable-standalone
5、make
6、make install 这一步可能会出错,主要是man文件的目录没有事先建立。执行:mkdir /usr/man;mkdir /usr/man/man8即可(或根据提示进行,希望你能够看得懂出错的地方)。
7、编辑:/etc/mail/sendmail.mc把下面的内容完全覆盖进去:注意下面的第13行中XXX.com改成你的域名:
divert(-1)
dnl This is the sendmail macro config file. If you make changes to this file,
dnl you need the sendmail-cf rpm installed and then have to generate a
dnl new /etc/sendmail.cf by running the following command:
dnl
dnl m4 /etc/mail/sendmail.mc > /etc/sendmail.cf
dnl
include(`/usr/share/sendmail-cf/m4/cf.m4')
VERSIONID(`linux setup for Red Hat Linux')dnl
OSTYPE(`linux')
dnl Uncomment and edit the following line if your mail needs to be sent out
dnl through an external mail server:
dnl define(`SMART_HOST',`XXX.com')
define(`confDEF_USER_ID',``8:12'')dnl
undefine(`UUCP_RELAY')dnl
undefine(`BITNET_RELAY')dnl
define(`confAUTO_REBUILD')dnl
define(`confTO_CONNECT', `1m')dnl
define(`confTRY_NULL_MX_LIST',true)dnl
define(`confDONT_PROBE_INTERFACES',true)dnl
define(`PROCMAIL_MAILER_PATH',`/usr/bin/procmail')dnl
define(`ALIAS_FILE', `/etc/aliases')dnl
dnl define(`STATUS_FILE', `/etc/mail/statistics')dnl
define(`UUCP_MAILER_MAX', `2000000')dnl
define(`confUSERDB_SPEC', `/etc/mail/userdb.db')dnl
define(`confPRIVACY_FLAGS', `authwarnings,novrfy,noexpn,restrictqrun')dnl
define(`confAUTH_OPTIONS', `A')dnl
TRUST_AUTH_MECH(`DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
define(`confAUTH_MECHANISMS', `DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
DAEMON_OPTIONS(`Port=25,Name=MTA')dnl
DAEMON_OPTIONS(`Port=587,Name=MSA,M=Ea')dnl
dnl define(`confTO_QUEUEWARN', `4h')dnl
dnl define(`confTO_QUEUERETURN', `5d')dnl
dnl define(`confQUEUE_LA', `12')dnl
dnl define(`confREFUSE_LA', `18')dnl
dnl FEATURE(delay_checks)dnl
FEATURE(`no_default_msa',`dnl')dnl
FEATURE(`smrsh',`/usr/sbin/smrsh')dnl
FEATURE(`mailertable',`hash -o /etc/mail/mailertable.db')dnl
FEATURE(`virtusertable',`hash -o /etc/mail/virtusertable.db')dnl
FEATURE(redirect)dnl
FEATURE(always_add_domain)dnl
FEATURE(use_cw_file)dnl
FEATURE(use_ct_file)dnl
dnl The '-t' option will retry delivery if e.g. the user runs over his quota.
FEATURE(local_procmail,`',`procmail -t -Y -a $h -d $u')dnl
FEATURE(`access_db',`hash -o /etc/mail/access.db')dnl
FEATURE(`blacklist_recipients')dnl
EXPOSED_USER(`root')dnl
dnl This changes sendmail to only listen on the loopback device 127.0.0.1
dnl and not on any other network devices. Comment this out if you want
dnl to accept email over the network.
dnl DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA')
dnl NOTE: binding both IPv4 and IPv6 daemon to the same port requires
dnl a kernel patch
dnl DAEMON_OPTIONS(`port=smtp,Addr=::1, Name=MTA-v6, Family=inet6')
dnl We strongly recommend to comment this one out if you want to protect
dnl yourself from spam. However, the laptop and users on computers that do
dnl not have 24x7 DNS do need this.
dnl FEATURE(`accept_unresolvable_domains')dnl
dnl FEATURE(`relay_based_on_MX')dnl
dnl FEATURE(`relay_local_from')dnl
MAILER(smtp)dnl
MAILER(procmail)dnl
Cwlocalhost.localdomain
8、在/etc/mail中执行m4 sendmail.mc > /etc/sendmail.cf
9、编辑/etc/mail/local-host-names增加你的域名XXX.com进去。
10、启动:/etc/init.d/sendmail restart
11、启动:/usr/sbin/popper xxx.xxx.xxx.xxx:110 (其中xxx.xxx.xxx.xxx是你的IP地址)
12、useradd -g mail ABC (增加一个用户名)
13、配置你的客户端,别忘了配置SMTP认证,试验一下用户ABC能不能使用了?
恭喜你!你已经有了一个带由SMTP认证的邮件服务器了。不过要完成更复杂的配置,就要仔细研究一下sendmail的mc命令了。你还可以考虑一下,如何让用户自行修改密码呢?答案就是用/usr/sbin/passwd命令作为用户的shell,这样,就可以让用户登陆上来修改自己的密码了。当然,现在有现成的图形界面工具:chpasswd软件是专门修改系统用户密码用的,以后我们再介绍了。