- 论坛徽章:
- 0
|
本帖最后由 iheaing 于 2010-02-09 12:14 编辑
在 FreeBSD 下安装 postfix、courier-imap 邮件服务器(第一部分:基本功能)
(一)声明:
(1)我在安装过程中,发现大量网站的转贴有排版格式超烂的问题。
所以本文只有 www.chinaunix.net 与 www.freebsdchina.org
发表,不准转贴!如果你藐视这个声明,转贴时请注意文章格式。
(2)如果你的回复少于十个字,请再三考虑是否有回复的必要。
(二)感谢:
作者iheaing感谢 google.com、CU mail论坛的诸位版主、各软件的开发者和……。
(三)安装 www/apache22、lang/PHP5。
(0)略。
(1)安装 www/apache22 时选择支持 pgsql。
(2)lang/php5-extensions不用安装。
(3)网上的howto大多使用 mysql 或 LDAP 来保存用户信息,我是已经有现成的
postgresql 数据库,才选择使用它的。
(四)安装 SASL2。
用于 smtp 验证的软件,postfix 通过它验证用户密码。
我安装这软件时,它是 cyrus-sasl-2.1.23 版本,因为数据库中保存的密码是加密的,
这个软件要读加密后的密码,要下载个补丁才行。
确定在安装时选择了 AUTHDAEMON、LOGIN、PLAIN、PGSQL。
建立 /usr/local/lib/sasl2/smtpd.conf 文件,内容如下:
pwcheck_method: auxprop
log_level: 3
mech_list: PLAIN LOGIN
auxprop_plugin: sql
allowanonymouslogin: no
allowplaintext: yes
srp_mda: md5
srvtab: /dev/null
opiekeys: /dev/null
password_format: crypt
sql_engine: pgsql
sql_hostnames: 192.168.1.3
sql_user: mail
sql_passwd: mailer
sql_database: pmail
sql_select: SELECT password FROM mailbox WHERE username = '%u@%r' AND active = true
更详细的说明请看: http://pieps.org/cyrus/
(五)安装 Postfix 2.6.5。
更详细的说明:
http://codepoets.co.uk/2009/post ... l-users-on-postfix/
安装时选择下面的功能:[PCRE] [SASL2] [TLS] [PGSQL] [VDA]
安装过程中两次提问,均回答 Y。
修改 /etc/rc.conf:
postfix_enable="YES"
sendmail_enable="NO"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"
修改 /etc/periodic.conf 文件如下:
daily_clean_hoststat_enable="NO"
daily_status_mail_rejects_enable="NO"
daily_status_include_submit_mailq="NO"
daily_submit_queuerun="NO"
运行 ldd /usr/local/libexec/postfix/smtpd 可以看到,smtpd 已经支持 pgsql。
/usr/local/libexec/postfix/smtpd:
libpcre.so.0 => /usr/local/lib/libpcre.so.0 (0x280e6000)
libsasl2.so.2 => /usr/local/lib/libsasl2.so.2 (0x28118000)
libpam.so.5 => /usr/lib/libpam.so.5 (0x2812f000)
libcrypt.so.5 => /lib/libcrypt.so.5 (0x28136000)
libssl.so.6 => /usr/lib/libssl.so.6 (0x2814f000)
libcrypto.so.6 => /lib/libcrypto.so.6 (0x28195000)
libpq.so.5 => /usr/local/lib/libpq.so.5 (0x282f1000)
libc.so.7 => /lib/libc.so.7 (0x2830e000)
libintl.so.8 => /usr/local/lib/libintl.so.8 (0x28426000)
libiconv.so.3 => /usr/local/lib/libiconv.so.3 (0x2842f000)
建立邮箱用户的位置:
# mkdir /usr/virtual
# chown 80 /usr/virtual
修改 /usr/local/etc/postfix/main.cf 文件,如果 postfix 已经在运行中,可以运行命令
postfix reload 让它重新加载 mail.cf 文件。
home_mailbox = Maildir/
relay_domains = pgsql:/usr/local/etc/postfix/pgsql/relay_domains.cf
# myhostname = mail.ddss.org
smtpd_error_sleep_time = 1s
smtpd_soft_error_limit = 10
smtpd_hard_error_limit = 20
# 上面三个设置是安全有关的,当客户端引发错误时,postfix 的初始等待时间延长 1s,
# 当错误20次时便hard_error。
# default_database_type = pgsql
# postfix 能支持多种数据库格式,默认是 hash,可使用上面这一设置修改。
# 使用 postconf -m 查看其它支持的格式。
#######PgSQL#######
virtual_gid_maps = static:80
virtual_mailbox_base = /usr/virtual
virtual_uid_maps = static:80
virtual_minimum_uid = 80
virtual_transport = virtual
virtual_alias_maps = pgsql:/usr/local/etc/postfix/pgsql/virtual_alias_maps.cf
virtual_mailbox_domains = pgsql:/usr/local/etc/postfix/pgsql/virtual_domains_maps.cf
virtual_mailbox_maps = pgsql:/usr/local/etc/postfix/pgsql/virtual_mailbox_maps.cf
#######SASL#######
smtpd_sasl_auth_enable = yes
smtpd_sasl_authenticated_header = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_auth_destination, reject
smtpd_client_restrictions = permit_sasl_authenticated
smtpd_sender_restrictions = permit_sasl_authenticated
smtpd_sasl_path = smtpd
#######Quota#######
message_size_limit = 5242880
virtual_mailbox_limit_inbox = no
virtual_mailbox_limit_override = yes
virtual_maildir_extended = yes
virtual_create_maildirsize = yes
virtual_mailbox_limit_maps = pgsql:/usr/local/etc/postfix/pgsql/virtual_mailbox_limits.cf
virtual_mailbox_limit = 52428800
上面大家可以看到在 /usr/local/etc/postfix/pgsql/ 下还有几个文件。
relay_domains.cf 文件如下:
user = mail
password = mailing
hosts = 192.168.1.3
dbname = pmail
query = SELECT domain FROM domain WHERE domain='%s' and backupmx = true
virtual_alias_maps.cf 文件如下:
user = mail
password = mailing
hosts = 192.168.1.3
dbname = pmail
query = SELECT goto FROM alias WHERE address='%s' AND active = true
virtual_domains_maps.cf 文件如下:
user = mail
password = mailing
hosts = 192.168.1.3
dbname = pmail
query = SELECT domain FROM domain WHERE domain='%s' and backupmx = false and active = true
virtual_mailbox_limits.cf 文件如下:
user = mail
password = mailing
hosts = 192.168.1.3
dbname = pmail
query = SELECT quota FROM mailbox WHERE username='%s'
virtual_mailbox_maps.cf 文件如下:
user = mail
password = mailing
hosts = 192.168.1.3
dbname = pmail
query = SELECT maildir FROM mailbox WHERE username='%s' AND active = true
(六)安装courier-imap。
# cd /usr/ports/mail/courier-imap
# make install clean
确定选择 [PGSQL]。
在 /usr/local/etc/courier-imap 目录中,把所有 *.dist 改成 *
修改权限:
# chmod o+x /var/run/authdaemond
#cd /usr/local/etc/authlib
修改 /usr/local/etc/authlib/authdaemonrc
authmodulelist="authpgsql"
authmodulelistorig="authpgsql"
修改 /usr/local/etc/authlib/authpgsqlrc
PGSQL_HOST 192.168.1.3
PGSQL_PORT 5432
PGSQL_USERNAME mail
PGSQL_PASSWORD mailing
PGSQL_DATABASE pmail
PGSQL_USER_TABLE mailbox
PGSQL_CRYPT_PWFIELD password
# 上面这一条表示数据库保存的密码是经过加密的。
PGSQL_UID_FIELD '80'
PGSQL_GID_FIELD '80'
PGSQL_LOGIN_FIELD username
PGSQL_HOME_FIELD '/usr/virtual'
PGSQL_NAME_FIELD name
PGSQL_MAILDIR_FIELD maildir
PGSQL_QUOTA_FIELD quota
(七)启动设置。
修改 /etc/rc.conf,添加:
courier_authdaemond_enable="YES"
courier_imap_imapd_enable="YES"
courier_imap_pop3d_enable="YES"
修改 /etc/mail/aliases:
(八)重启电脑。
(九)安装postfixadmin。
# cd /usr/ports/mail/php5-imap/
# make install clean
# cd /usr/ports/mail/postfixadmin/
# make install clean
确定选择了 PGSQL。它会把所需的 php5-extensions 安装好,php5-imap 除外。
建立 /usr/local/etc/apache22/Includes/postfixadmin.conf 文件。内容如下:
Alias /pa "/usr/local/www/postfixadmin/"
<Directory "/usr/local/www/postfixadmin/">
Options Indexes
AllowOverride AuthConfig
Order allow,deny
Allow from all
</Directory>
(十)设置 PostfixAdmin。
修改 /usr/local/www/postfixadmin/config.inc.php
$CONF['configured'] = true;
$CONF['database_type'] = 'pgsql';
$CONF['database_host'] = '192.168.1.3';
$CONF['database_user'] = 'mail';
$CONF['database_password'] = 'mailing';
$CONF['database_name'] = 'pmail';
$CONF['database_prefix'] = '';
$CONF['database_port'] = '5432';
$CONF['admin_email'] = 'postmaster@ddss.org';
$CONF['encrypt'] = 'md5crypt';
# 上面这设置是使用 postfixadmin 添加用户时,使用 md5crypt 加密密码后保存在数据库里。设置为 cleartext 是明码保存。
$CONF['domain_path'] = 'YES';
$CONF['domain_in_mailbox'] = 'NO';
# 以上两条设置的功能是,在邮件用户里,用户目录为 domain.com/user 这样子的格式。
# ……这个文件有太详细的说明了,再说下去对不起我的英语老师。
在 client 端打开 http://mail.ddss.org/pa/setup.php 即可自动建表,并添加管理员帐号。
(十)测试。
在使用 postfixadmin 添加用户后,使用下面的命令可测试:
# authtest king@ddss.org
Authentication succeeded.
Authenticated: king@ddss.org (uid 80, gid 80)
Home Directory: /usr/virtual
Maildir: ddss.org/king/
Quota: 102400000
Encrypted Password: $1$b5bbfb89$SuyLD6aUWyTWZpgoAH3Z1/
Cleartext Password: (none)
Options: wbnodsn=1
l# authtest -s login one@ddss.org password
Authentication succeeded.
Authenticated: one@ddss.org (uid 80, gid 80)
Home Directory: /usr/virtual
Maildir: ddss.org/one/
Quota: 51200000
Encrypted Password: $1$999026fd$jSNK914O8tV97x1CPwyxO/
Cleartext Password: password
Options: wbnodsn=1
更多测试方法请看:
http://www.extmail.org/docs/extmail_solution_freebsd/#test
[ 本帖最后由 iheaing 于 2010-1-29 17:57 编辑 ] |
|