-- hd [2004-08-09 21:39:55]

Freebsd Postfix安装Howto

一直以来使用qmail来充当邮件服务器。最终还是决定使用postfix来试一下,记录下来,希望能对大家有所帮助。 在安装时使用的软件版本:

安装所需要的基础软件

Perl 5

在我们使用有的软件中有不少需要perl的支持,而且需要较新的版本,上述配置推荐使用perl 5.8.x:

cd /usr/ports/lang/perl5.8
make install
make clean
use.perl port

最后一个命令是让操作系统使用的为port中提供的perl,而不是操作系统自带的。在 FreeBSD 5.x 中,由于系统已经不再包含 perl,可能需要手工建立一个到 perl5.8.5 执行文件的符号连接才能够使用use.perl脚本。

Mysql 4

用户最终将存储在Mysql的数据库中,所以需要装一个mysql的服务器,现在stable的版本为4.0,所以就安装这个版本了:

cd /usr/ports/databases/mysql40-server
make install
make clean

pam-mysql

我们需要使用mysql的pam模块来使系统到mysql中进行用户的验证。所以需要安装pam-mysql:

cd /usr/ports/security/pam-mysql
make install
make clean

由于4 stable不在/usr/local/lib中寻找pam的so,所以你需要把它复制过去:

cp /usr/local/lib/pam_mysql.so /usr/lib/pam_mysql.so

cyrus-sasl2

我们使用cyrus-sasl来进行具体的认证和安全处理的工作:

cd /usr/ports/security/cyrus-sasl2
make install
make clean

cyrus-sasl2-saslauthd

为了让认证更快和稳定,我们使用cyrus-sasl2-saslauthd来建立一个Daemon进行验证:

cd /usr/ports/security/cyrus-sasl2-saslauthd
make install
make clean

为了让saslauthd正常启动,你需要在/etc/rc.conf中加入这么一行:

saslauthd_enable="YES"

cyrus-imapd 2.2

为了支持邮件的相关协议,我们使用cyrus-imapd包:

cd /usr/ports/mail/cyrus-imapd22
make install
make clean

注意在进行编译时需要选中以下条目:

为了让imapd能启动,你需要在/etc/rc.conf中加入这么一行:

cyrus_imapd_enable="YES"

数据库准备

启动数据库

刚装完mysql的情况下,需要用这两步启动mysql,如果你重启动了机器,它们应都自动启动了:

/usr/local/etc/rc.d/000.mysql-client.sh start
/usr/local/etc/rc.d/mysql-server.sh start 

使用ps看看mysql是否正常运行。

创建数据库结构

建一个名为maildb.sql的文件,内容如下:

CREATE DATABASE maildb;
GRANT ALL ON maildb.* TO mail@localhost IDENTIFIED BY "password";
FLUSH PRIVILEGES;

USE maildb;

CREATE TABLE USER (
ID int(10) unsigned NOT NULL auto_increment,
USERNAME varchar(128) NOT NULL default '',
PASSWORD varchar(40) NOT NULL default '',
FORWARD varchar(128) NOT NULL default '',
DOMAIN varchar(64) NOT NULL default '',
MAIL varchar(64) NOT NULL default '',
FILTER varchar(64) NOT NULL default 'OK',
PARTITION varchar(32) NOT NULL default 'default',
QUOTA int(11) NOT NULL default '10485760',
STATUS tinyint(4) NOT NULL default '1',
PRIMARY KEY (ID),
UNIQUE KEY USERNAME (USERNAME),
UNIQUE KEY MAIL (MAIL)
) TYPE=MyISAM;


INSERT INTO USER (USERNAME,PASSWORD,FORWARD,DOMAIN,MAIL) 
VALUES ('hd','$1$randstr$SHFmBb4tKDRXO1bgdFcLr1','hd','huangdong.com','hd@huangdong.com'),
('hd@iyaya.net','$1$randstr$SHFmBb4tKDRXO1bgdFcLr1','hd@iyaya.net','iyaya.net','hd@iyaya.net');

我们对表中的相关列进行说明:

md5的密码可以通过向系统中加一个用户再从passwd文件中复制出来,也可以使用下面这个perl的命令行取得:

perl -e 'print crypt("passwd","\$1\$randstr\$"),"\n"' 

用你的密码替换其中的passwd,用一段随机字符替代randstr,这样也可以得到md5后的字符串。

回头再看看sql语句中,我们建议了两个用户一个用户hd是非虚拟域的用户(非虚拟域名为huangdong.com),以及一个hd@iyaya.net这个虚拟域用户。它们的密码为"passwd"(就是使用上面这句perl命令产生的密码)。

用以下命令,执行这个sql文件:

mysql < maildb.sql

认证准备

pam-mysql配置

我们需要将下面的配置加入到/etc/pam.conf中:

imap auth required pam_mysql.so user=mail passwd=password db=maildb table=USER usercolumn=USERNAME passwordcolumn=PASSWORD crypt=1
imap account sufficient pam_mysql.so user=mail passwd=password db=maildb table=USER usercolumn=USERNAME passwordcolumn=PASSWORD crypt=1
pop3 auth required pam_mysql.so user=mail passwd=password db=maildb table=USER usercolumn=USERNAME passwordcolumn=PASSWORD crypt=1
pop3 account sufficient pam_mysql.so user=mail passwd=password db=maildb table=USER usercolumn=USERNAME passwordcolumn=PASSWORD crypt=1
smtp auth required pam_mysql.so user=mail passwd=password db=maildb table=USER usercolumn=USERNAME passwordcolumn=PASSWORD crypt=1
smtp account sufficient pam_mysql.so user=mail passwd=password db=maildb table=USER usercolumn=USERNAME passwordcolumn=PASSWORD crypt=1

同时还需要将原有的两行认证注释:

# imap auth required pam_unix.so try_first_pass
# pop3 auth required pam_unix.so try_first_pass

Cyrus-IMAP认证配置

编辑/usr/local/etc/imapd.conf,确认以下设置的正确:

configdirectory: /var/imap
partition-default: /var/spool/imap
unixhierarchysep: yes
altnamespace: yes
##是否允许匿名登入;认证后才登入是个好主意,请把它设为 no
allowanonymouslogin: no
##限定的信箱容量达多少百分比 (%) 时,系统发出警告
quotawarn: 90
##设置 cyrus server 的管理员为 hd
admins: hd
##设为 no 才不会把不是 8-bit 的 characters 给 reject 掉
reject8bit: no
sievedir: /var/imap/sieve
sasl_pwcheck_method: saslauthd
##此选项列出允许的 mechanisms/authentication methods
sasl_mech_list: plain login cram-md5 digest-md5

设置完成后,执行cyrus imap的工具程序建立它所需要的目录结构:

/usr/local/cyrus/bin/mkimap

bsd/PostfixInstallHowto (last edited 2009-12-25 07:10:13 by localhost)