-- hd [DateTime(2004-08-09T21:39:55Z)] TableOfContents

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','[email protected]'),
('[email protected]','$1$randstr$SHFmBb4tKDRXO1bgdFcLr1','[email protected]','iyaya.net','[email protected]');

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

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

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

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

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

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

mysql < maildb.sql