10分钟搭建一台Linux邮件服务器

我有一台Ubuntu Linux服务器,想快速开启邮件服务。例如,我的登录帐号是pyh,并且有一个域名example.com,那么如何把服务器配置成可收发pyh@example.com的邮件呢?在Ubuntu下,这些都很简单,几分钟就搞定。(注:我的是Ubuntu 9.10版本)

假如服务器的IP地址是12.34.56.78,首先配置域名,给该IP地址分配一个名字,例如mail.example.com。然后,将example.com域的MX记录设置为mail.example.com,注意MX不能直接指向IP地址。

然后在Ubuntu里,运行如下命令安装Postfix(不想sudo的话就用root安装):

apt-get install postfix

Postfix是一个MTA(邮件传输代理)。为什么用Postfix呢?因为一是它是Ubuntu的默认MTA,安装简单;二是它的配置文件大家都懂。

安装Postfix后,再安装sqwebmail,执行:

apt-get install courier-authdaemon
apt-get install sqwebmail

courier-authdaemon和sqwebmail都是Courier-MTA的标准组件。前者提供统一验证服务。后者是一套C写的webmail,简单快速,运行它后就可以通过网页来收发电子邮件。

执行上述几个apt-get后,MTA和webmail就都安装好并启动了,pstree看一下:

|-courierlogger---authdaemond---5*[authdaemond]
|-courierlogger---sqwebmaild
|-master-+-anvil
| |-pickup
| |-qmgr
| `-tlsmgr

第三行的master是Postfix的主进程。

安装完后就是配置,包括如下几个步骤:

(一)配置CGI

sqewebmail是通过CGI来运行的,要在web服务器里配置好它们。
系统里需要安装Apache。Apache是最广泛使用的支持CGI的web server,它的配置也大家都懂。

修改httpd.conf,加入如下内容:

  1. ScriptAlias /webmail/ "/usr/lib/courier/courier/webmail/"
  2. AllowOverride None
  3. Options None
  4. Order allow,deny
  5. Allow from all

第一行设置脚本目录别名,用户访问路径包含/webmail/,就定向到/usr/lib/courier/courier/webmail/,这是sqwebmail的可执行程序目录。第二行及后述行设置该目录可执行CGI。

然后,在Apache的文档目录(htdocs)里,设置一个符号链接:

ln -s /usr/share/sqwebmail .

将/usr/share/sqwebmail目录链接到Apache的文档根目录,这里放置sqwebmail的静态文件,如图片、CSS等。

设置完后,重启httpd。

(二)创建Maildir

切换到个人用户身份(如pyh),在家目录(/home/pyh)里,运行如下命令:

  1. maildirmake Maildir
  2. maildirmake -f Spam Maildir
  3. maildirmake -q 100000000S ./Maildir
  4. touch .courier
  5. sudo cp -r Maildir /etc/skel
  6. sudo cp .courier /etc/skel

上述创建好Maildir这个目录,用来存储个人邮件。
第三句设置Maildir的SIZE,单位是字节,这里设置为100M,今后可随时调整。

(三)配置Postfix

修改/etc/postfix/main.cf,我就改了两个地方:

mydestination = 此处值里,加入个人域名example.com,表示允许Postfix接受该域的邮件,否则Postfix拒绝relay。

home_mailbox = Maildir/ 这里修改值为Maildir/,表示Postfix把信件投递到个人家目录的Maildir子目录里。后面的"/"不可少。

其他几个参数,比如myhostname、mydomain、myorigin也最好改成正确的地址,比如:

  1. myhostname = mail.example.com
  2. mydomain = example.com
  3. myorigin = $mydomain

其中myhostname是SMTP会话里HELO命令对应的地址。mydomain和myorigin是默认的发信者域名,不过sqwebmail里也会配置好,所以这2个指令在这里并不是很重要。

Postfix是很强大的MTA,有大量参数可设置,用于控制邮件传输的各方面细节,不在此详述。

修改完配置文件后,重启Postfix:

/etc/init.d/postfix restart

(四)Courier相关配置

也只改动了两个地方,在/etc/courier下,修改defaultdomain文件,将邮件域名example.com写在里面,否则sqwebmail将默认使用本机的主机名作为sender域名(SMTP会话里的mail from命令对应的邮件域名),这很可能造成邮件发不出去。然后修改authdaemonrc文件,更改一个指令如下:

DEFAULTOPTIONS="wbnochangingfrom=1"

表示禁止在webmail里修改From:地址(防止用户伪造其他人身份发信)。

最后,重启下验证服务和sqwebmail:

/etc/init.d/courier-authdaemon restart
/etc/init.d/sqwebmail restart

配置就完成了。


访问webmail,打开浏览器,将地址指向:
http://mail.example.com/webmail/webmail

在出来的页面里输入linux帐号(如pyh)和密码,就可以登录进去收发邮件。

当然,这里只是简单开启一个支持webmail收发邮件的mail server。要提供专业的邮件服务,还要设置虚拟用户、虚拟域、SMTP/POP3/IMAP、反垃圾、反病毒等,可以自己google相关文章。在howtoforge.com有很多类似的好文档。

Leave a comment

About pyh's blog

user-pic Programming and sysadmin with Perl. The former NetEase antispam team leader.