Archlinux下配置邮件服务器(Postfix, Courier IMAP, Squirrelmail)

翻译并修改自Archlinux Wiki。话说Archlinux的Wiki真好啊,基本上需要的资料都能找到。和AUR一起,是我最喜欢Archlinux的两样东西。

1. 安装MySQL、PHP和Apache并配置。
此处不多说,参照此文

2. 安装配置Postfix

pacman -S postfix

2.1 配置DNS
如果你有自己的域名,需要配置好MX记录和A(或者CNAME)记录,具体方法不在本文讨论之内。

2.2 修改/etc/postfix/main.cf
按照如下示例修改main.cf文件(yourdomain.net替换成你自己的域名):

myhostname = mail.yourdomain.net
mydomain = yourdomain.net
myorigin = $mydomain
mydestination = localhost
mynetworks_style = host
relay_domains = $mydestination
home_mailbox = Maildir/

然后在文件末尾添加如下配置:

virtual_mailbox_domains = virtualdomain.tld
virtual_alias_maps = hash:/etc/postfix/virtual_alias, mysql:/etc/postfix/mysql_virtual_forwards.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailboxes.cf
virtual_mailbox_base = /home/vmailer
virtual_uid_maps = static:5003
virtual_gid_maps = static:5003
virtual_minimum_uid = 5003
virtual_mailbox_limit = 0

其中virtualdomain.tld是你想设置的邮箱域名,例如可以是你的真实域名:yourdomain.net
具体参数的含义参考Wiki。

2.3 修改/etc/postfix/aliases
在此文件里修改或者添加类似如下参数:

root: cactus

cactus是虚拟用户名,即给别人的收件人名。此处设为转给root用户接收,也可以设置为其他用户。
设置完成后,执行:

postalias /etc/postfix/aliases

2.4 新建/etc/postfix/virtual_alias
默认没有此文件,需要新建后粘贴下列配置:

MAILER-DAEMON:  postmaster
postmaster:     root

# General redirections for pseudo accounts
bin:            root
daemon:         root
named:          root
nobody:         root
uucp:           root
www:            root
ftp-bugs:       root
postfix:        root

# Put your local aliases here.

# Well-known aliases
manager:        root
dumper:         root
operator:       root
abuse:          postmaster

# trap decode to catch security attacks
decode:         root

# Person who should get root's mail. Don't receive mail as root!
root:           cactus@virtualdomain.tld

修改最后一行即可。然后也是执行下列命令:

postalias /etc/postfix/virtual_alias

2.5 新建/etc/postfix/mysql_virtual_domains.cf
粘贴如下配置:

user = postfixuser
password = XXXXXXXXXX
hosts = localhost
dbname = postfix
table = domains
select_field = 'virtual'
where_field = domain

2.6 新建/etc/postfix/mysql_virtual_mailboxes.cf
粘贴如下配置:

user = postfixuser
password = XXXXXXXXXX
hosts = localhost
dbname = postfix
table = users
select_field = concat(domain,'/',email,'/')
where_field = email

2.7 新建/etc/postfix/mysql_virtual_forwards.cf
粘贴如下配置:

user = postfixuser
password = XXXXXXXXXX
hosts = localhost
dbname = postfix
table = forwardings
select_field = destination
where_field = source

2.8 测试Postfix配置
执行下列命令,如果没有任何错误提示,则配置正常:

postfix check

2.9 添加daemon
在/etc/rc.conf里,在DAEMONS字段中加入postfix,例如:

DAEMONS=(syslog-ng hotplug !pcmcia iptables network netfs crond sshd mysqld postfix httpd)

2.10 新建邮件用户

groupadd -g 5003 vmail
useradd -g vmail -u 5003 -d /home/vmailer -s /bin/false vmailer
mkdir /home/vmailer
chown vmailer.vmail /home/vmailer
chmod -R 750 /home/vmailer
passwd vmailer

3. 配置MySQL
登录mysql,设置必要的用户和数据库:

mysql -u root -p

3.1 创建邮件服务器专用数据库及mysql用户
建立数据库:

CREATE DATABASE postfix;
USE postfix;

建立用户并授权:

CREATE USER 'postfixuser' IDENTIFIED BY 'XXXXXXXXXX';
GRANT SELECT, INSERT, UPDATE, DELETE ON domains TO postfixuser;
GRANT SELECT, INSERT, UPDATE, DELETE ON forwardings TO postfixuser;
GRANT SELECT, INSERT, UPDATE, DELETE ON users TO postfixuser;

其中,postfixuser和XXXXXXXXXX是在第二步提到的那3个cf文件里配置的。

3.2 建立表
在mysql中直接复制执行下列命令:

CREATE TABLE `domains` (
  `domain` varchar(50) NOT NULL default '',
  PRIMARY KEY  (`domain`),
  UNIQUE KEY `domain` (`domain`)
);

CREATE TABLE `forwardings` (
  `source` varchar(80) NOT NULL default '',
  `destination` text NOT NULL,
  PRIMARY KEY  (`source`)
);

CREATE TABLE `users` (
  `email` varchar(80) NOT NULL default '',
  `password` varchar(20) NOT NULL default '',
  `quota` varchar(20) NOT NULL default '20971520',
  `domain` varchar(255) NOT NULL default '',
  UNIQUE KEY `email` (`email`)
);

3.3 加入域名

INSERT INTO `domains` VALUES ('virtualdomain.tld');

3.4 加入一个用户

INSERT INTO `users` VALUES ('cactus@virtualdomain.tld', ENCRYPT('secret'), '20971520', 'virtualdomain.tld');

其中,secret是cactus@virtualdomain.tld这个邮箱帐户的密码。

3.5 测试Postfix

/etc/rc.d/postfix start

用其他邮箱给你配置好的邮箱地址发一封邮件,然后执行:

find /home/vmailer

看到类似以下输出时,说明Postfix工作正常:

/home/vmailer/virtualdomain.tld/cactus@virtualdomain.tld
/home/vmailer/virtualdomain.tld/cactus@virtualdomain.tld/tmp
/home/vmailer/virtualdomain.tld/cactus@virtualdomain.tld/cur
/home/vmailer/virtualdomain.tld/cactus@virtualdomain.tld/new
/home/vmailer/virtualdomain.tld/cactus@virtualdomain.tld/new/1102974226.2704_0.bonk.testmail.org

最后的那个1102974226.2704_0.bonk.testmail.org文件就是邮件本身,可以用cat命令查看内容。

4. 安装配置Courier IMAP
安装Courier IMAP:

pacman -S courier-imap courier-imap-mysql

4.1 配置/etc/authlib/authdaemonrc

authmodulelist="authmysql"

即把其他认证类型屏蔽掉,只留这一个。

4.2 配置/etc/authlib/authmysqlrc

MYSQL_SERVER            localhost
MYSQL_USERNAME          postfixuser
MYSQL_PASSWORD          XXXXXXXXXX
MYSQL_SOCKET            /var/run/mysqld/mysqld.sock
MYSQL_DATABASE          postfix
# MYSQL_NAME_FIELD      name
MYSQL_USER_TABLE        users
MYSQL_CRYPT_PWFIELD     password
MYSQL_UID_FIELD         '5003'
MYSQL_GID_FIELD         '5003'
MYSQL_LOGIN_FIELD       email
MYSQL_HOME_FIELD        "/home/vmailer"
MYSQL_MAILDIR_FIELD     concat(domain,'/',email,'/')
MYSQL_QUOTA_FIELD       quota

将斜体部分替换成你自己的对应设置,其他地方照抄即可。

4.3 重启一下服务

/etc/rc.d/authdaemond start
/etc/rc.d/courier-imap start
/etc/rc.d/courier-imap stop
/etc/rc.d/authdaemond stop

然后,修改/etc/conf.d/courier-imap

CI_DAEMONS="imapd"
#CI_DAEMONS="imapd pop3d imapd-ssl pop3d-ssl"

4.4 添加daemon
在/etc/rc.conf里,添加courier-imap服务:

DAEMONS=(syslog-ng hotplug !pcmcia iptables network netfs crond sshd mysqld postfix authdaemond courier-imap httpd)

4.5 建立软链接
笔者在依照wiki配置Courier IMAP的过程中,最后出现不认虚拟域名的问题,于是采用软链接的方法解决:

ln -s /home/vmailer/virtualdomain.tld/cactus@virtualdomain.tld /home/vmailer/Maildir

4.6 启动Courier IMAP

/etc/rc.d/courier-imap start

可以从/var/log/mail.log中查看排错信息。

4.7 测试Courier IMAP

telnet localhost imap
Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
* OK [[CAPABILITY IMAP4rev1 ... ]] Courier-IMAP ready.

A LOGIN "cactus@virtualdomain.tld" "password"
A OK LOGIN Ok.

B SELECT "Inbox"
* FLAGS (\Draft \Answered ... \Recent)
* OK [[PERMANENTFLAGS (\Draft \Answered ... \Seen)]] Limited
* 8 EXISTS
* 5 RECENT
* OK [[UIDVALIDITY 1026858715]] Ok
B OK [[READ-WRITE]] Ok

Z LOGOUT
* BYE Courier-IMAP server shutting down
Z OK LOGOUT completed
Connection closed by foreign host.

斜体字是用户输入。

5. 安装配置Squirrelmail
可以事先配置SSL,保证安全传输。不在本文讨论之列。
安装Squirrelmail:

pacman -S squirrelmail

默认安装在/srv/http/squirrelmaildir目录下,即Archlinux的apache默认目录。

5.1 执行配置脚本

cd /srv/http/squirrelmaildir/config
perl conf.pl

脚本启动后,按“D”,回车。然后输入”courier”,即选择Courier IMAP的预配置。同时可选修改同目录下config.php内的若干处设置。

5.2 测试配置
用浏览器访问squirrelmail/src/configtest.php,可能会提示目录不存在或无法访问等错误。按照错误提示建立目录及修改权限,并且在/etc/php/php.ini的open_basedir变量中加入新建的目录即可。

5.3 登录Squirrelmail
使用之前自定义的用户名:cactus@virtualdomain.tld 密码: secret,登录网页邮箱。

至此,一个可用的邮件服务器及网页邮箱已经搭建完成,如有问题,欢迎回复讨论!

如需转载此文,请标明来源,谢谢!

本文为悠然居(https://wordpress.youran.me/)的原创文章,转载请注明出处!

3 thoughts on “Archlinux下配置邮件服务器(Postfix, Courier IMAP, Squirrelmail)”

  1. 注意,现在Courier-imap和Squirrelmail已从官方源移出,进入AUR。请先安装AUR里的yaourt再用其安装两者。
    话说什么时候archlinux变得这么复杂了,连安装系统时候的那个图形化界面都没了,改成像Gentoo那样的全命令行形式。这明显抬高了archlinux的门槛啊

    Safari 5.1 Safari 5.1 iPad iOS 5.1.1 iPad iOS 5.1.1

Leave a Reply to youran Cancel reply

Your email address will not be published. Required fields are marked *