Chinaunix首页 | 论坛 | 博客
  • 博客访问: 20056
  • 博文数量: 28
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: -60
  • 用 户 组: 普通用户
  • 注册时间: 2017-03-31 10:59
文章分类
文章存档

2011年(1)

2010年(3)

2009年(2)

2007年(9)

2006年(13)

分类:

2007-09-17 16:51:59

基本是搞了一个星期。终于搞好了。

我把我组建的过程及中间出现的问题,如何解决。会全部帖出来。目的 一是留一个备忘,二是也给新手一个参考。(我找了CU很久,发现论坛上的精华已经太老了。可能是软件版本的问题。如果你完全按照他们的做法是很难实现的。)

我是参照anstan 大哥的 精华帖  《postfix邮件系统》 所做
   此帖最后更新日期:2005年11月5日

我的系统 及 软件本版

as5 + postfix-2.4.5 + cyrus-sasl-2.1.22 + courier-authlib-0.59.3 + courier-imap-4.1.3 + postfixadmin-2.1.0 + mysql-4.1.20(mysql的版本好像无所谓。)

辅助软件 apache 2.0.X + php (任意。我用的是5) + phpMyadmin (版本任意)

出了MYSQL 其他软件都是最新版。

由于时间关系,软件下载地址我就不链接了。

好了 废话少说  let`s go !!!

一、安装mysql
# tar zxvf mysql-4.1.20.tar.gz
# cd cd mysql-5.0.15
# groupadd mysql
# useradd -g mysql mysql
#./configure --prefix=/usr/local/mysql --with-charset=gbk --with-extra-charsets=utf8,gb2312,big5 --enable-thread-safe-client
# make
# make install
#cp support-files/my-medium.cnf /etc/my.cnf
#cp support-files/mysql.server /etc/init.d/mysql

安装完以后要初始化数据库
# cd /usr/local/mysql
# /usr/local/mysql/bin/mysql_install_db --user=mysql
# chown -R mysql var
# chgrp -R mysql .

启动mysql
#/etc/init.d/mysql start
ss -ant | grep 3306

为了能让系统找到mysql,请运行如下命令
# PATH=$PATH:/usr/local/mysql/bin
# export PATH
# echo "/usr/local/mysql/lib/mysql" >> /etc/ld.so.conf
# ldconfig

注:由于我的mysql版本是4.1.20 所以加了 --enable-thread-safe-client 。 如果你不加,编译php的时候会提示一个mysql的错误。(具体错误我找不到了。)我感觉好像是mysql的版本低。php版本高的原因。如果你用mysql 5的话 就不用加了。

二、安装apache
# groupadd vmail -g 1001
# useradd vmail -u 1001 -g 1001 -s/sbin/nologin -d/dev/null
# tar jxvf httpd-2.0.55.tar.bz2
# cd httpd-2.0.55
# ./configure --prefix=/usr/local/apache
# make
# make install

设置自启动
# cp support/apachectl /etc/init.d/httpd
# chmod +x /etc/init.d/httpd
# /etc/init.d/httpd start

三、安装PHP
# tar jxvf php-5.2.2.tar.bz2
# cd php-5.2.2
# mkdir /usr/local/php
# ./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --with-apxs2=/usr/local/apache/bin/apxs
#make
#make install
#cp php.ini-dist /usr/local/php/lib/php.ini

# vi /usr/local/apache/conf/httpd.conf
找到#AddType application/x-tar .tgz 这行,在下面加两行
AddType application/x-httpd-php .php
找到下面一行在后面加上index.php,这表示网站的默认页也能够为index.php
DirectoryIndex index.html index.html.var index.php

把User nobody
Group #-1
改为
User vmail
Group vmail

重启APACHE

四、安装postfixadmin


#tar -zxf postfixadmin-2.4.5.tar.gz
#cp -r postfixadmin-2.4.5 /usr/local/apache/htdocs/postfixadmin
#chown -R vmail:vmail /usr/local/apache/htdocs/postfixadmin
导入postfixadmin的数据库
#/usr/local/mysql/bin/mysql < /usr/local/apache/htdocs/postfixadmin/DATABASE_MYSQL.TXT
# cp config.inc.php.sample config.inc.php
# vi config.inc.php
本例中的配置如下: 跟参考帖一样没动
$CONF['default_language'] = 'cn';
$CONF['database_type'] = 'mysql';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfixadmin';
$CONF['database_password'] = 'postfixadmin';
$CONF['database_name'] = 'postfix';
$CONF['encrypt'] = 'md5crypt';
$CONF['domain_path'] = 'YES';
$CONF['domain_in_mailbox'] = 'NO';
$CONF['quota'] = 'YES';
$CONF['quota_multiplier'] = '1024000';

然后打开浏览器,输入 进入postfixadmin的欢迎界面,点击网页上的setup,看看检查是否通过,记得要删除setup.php文件。

五、安装 cyrus-sasl-2.1.22
先关闭as4默认安装的sasl
# mv /usr/lib/sasl /usr/lib/sasl.OFF
# mv /usr/lib/sasl2 /usr/lib/sasl2.OFF
#tar -zxf cyrus-sasl-2.1.22.tar.gz
#cd cyrus-sasl-2.1.22
#./configure --disable-anon -enable-plain --enable-login --enable-sql --with-mysql=/usr/local/mysql --enable-sample --with-authdaemond
#make
#make install

更新lib库
# echo "/usr/local/lib" >> /etc/ld.so.conf
# ldconfig
重要
# ln -s /usr/local/lib/sasl2 /usr/lib/sasl2

注:安装SASL的时候最好不要指定安装路径。如果你直径的安装路径的时候,以后安装authlib的时候会出问题。会提示你sasl找不到authdaemon的SOCKET
所以以后 安装authlib 的时候也不指定路径。

六、安装postfix 2.4.5
如果你的系统上原来有sendmail,先将其停止并将其文件改名
# /etc/init.d/sendmail stop
# chkconfig --level 0123456 sendmail off
# mv /usr/bin/newaliases /usr/bin/newaliases.orig
# mv /usr/bin/mailq /usr/bin/mailq.orig
# mv /usr/sbin/sendmail /usr/sbin/sendmail.orig

开始安装
# groupadd -g 12345 postfix
# useradd -u 12345 -g 12345 -c postfix -d/dev/null -s/sbin/nologin postfix
# groupadd -g 54321 postdrop
# tar zxf postfix-2.4.5.tar.gz
# cd postfix-2.2.5
# make -f Makefile.init makefiles CCARGS="-DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/local/include/sasl -DHAS_MYSQL -I/usr/local/mysql/include/mysql " AUXLIBS="-L/usr/local/lib -lsasl2 -L/usr/local/mysql/lib/mysql -lmysqlclient -lz -lm"
(注意这里是我自己看postfix官方的文档上的结果。如果你参照anstan哥的精华帖。postfix绑定不了sasl)
#make
#make install
之后一路回车 postfix OK 了

检验一下sasl是否绑定到了postfix上
#postconf -a
cyrus
dovecot
如果有cyrus说明你已经成功了。没有从新postfix吧。找问题。

(注:install_root: [/]  正确的:后面都应该有提示的 表示正确的  如果没有那么有可能 postfix找不到你libmysqlclient.so.12  使用ldconfig就可以达到这个目的# echo /usr/local/mysql/lib/mysql >> /etc/ld.so.conf  # ldconfig )

vi /etc/postfix/main.cf
#=====================BASE=========================
myhostname = mail.test.hk
mydomain = test.hk
myorigin = $mydomain
mydestination = $myhostname localhost localhost.$mydomain
mynetworks = 127.0.0.0/8
inet_interfaces = all

#=====================Vritual Mailbox settings=========================
virtual_mailbox_base = /var/mailbox
virtual_mailbox_maps = mysql:/etc/postfix/mysql/mysql_virtual_mailbox_maps.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql/mysql_virtual_domains_maps.cf
virtual_alias_domains =
virtual_alias_maps = mysql:/etc/postfix/mysql/mysql_virtual_alias_maps.cf
virtual_uid_maps = static:1001
virtual_gid_maps = static:1001
#virtual_transport = maildrop
#virtual_transport = vmail
maildrop_destination_recipient_limit = 1
maildrop_destination_concurrency_limit = 1

################## maildrop      #############

#mail_owner = maildrop
#mailbox_transport = maildrop
#fallback_transport = maildrop
#maildrop_destination_recipient_limit = 1


######################################


#====================QUOTA========================
message_size_limit = 14336000
virtual_mailbox_limit = 20971520
virtual_create_maildirsize = yes
virtual_mailbox_extended = yes
virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql/mysql_virtual_mailbox_limit_maps.cf
virtual_mailbox_limit_override = yes
virtual_maildir_limit_message = Sorry, the user's maildir has overdrawn his diskspace quota, please try again later.
virtual_overquota_bounce = yes

#====================SASL========================
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions =
  permit_mynetworks,
  permit_sasl_authenticated,
  reject_invalid_hostname,
  reject_non_fqdn_hostname,
  reject_unknown_sender_domain,
  reject_non_fqdn_sender,
  reject_non_fqdn_recipient,
  reject_unknown_recipient_domain,
  reject_unauth_pipelining,
  reject_unauth_destination,
  permit
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_security_options = noanonymous
smtpd_sasl_application_name = smtpd
smtpd_banner=$myhostname ESMTP "Version not Available"
(注意:我上的配置文件里的注释。我去掉了maildrop)

建立/var/mailbox并设置权限
# mkdir /var/mailbox
# chown -R vmail:vmail /var/mailbox
# chmod -R ug+rwx,o-rwx /var/mailbox

建立/etc/postfix/mysql文件夹和MySQL查询配置文件
# mkdir /etc/postfix/mysql
1、vi /etc/postfix/mysql/mysql_virtual_alias_maps.cf
user = postfix
password = postfix
hosts = localhost
dbname = postfix
table = alias
select_field = goto
where_field = address

2、vi /etc/postfix/mysql/mysql_virtual_domains_maps.cf
user = postfix
password = postfix
hosts = localhost
dbname = postfix
table = domain
select_field = description
where_field = domain
#additional_conditions = and backupmx = '0' and active = '1'

3、vi /etc/postfix/mysql/mysql_virtual_mailbox_maps.cf
user = postfix
password = postfix
hosts = localhost
dbname = postfix
table = mailbox
select_field = maildir
where_field = username
#additional_conditions = and active = '1'

4、vi /etc/postfix/mysql/mysql_virtual_mailbox_limit_maps.cf
user = postfix
password = postfix
hosts = localhost
dbname = postfix
table = mailbox
select_field = quota
where_field = username
#additional_conditions = and active = '1'

配置 /usr/local/lib/sasl2/smtpd.conf
sasl密码验证机制为authdaemond
# vi /usr/local/lib/sasl2/smtpd.conf
pwcheck_method:authdaemond
log_level:3
srp_mda:md5
password_format:crypt
mech_list: PLAIN LOGIN
authdaemond_path: /usr/local/var/spool/authdaemon/socket

检验postfix 是否支持了认证
#postfix start
#telnet localhost 25
ehlo localhost
ehlo localhost
250-mail.1x.hk
250-PIPELINING
250-SIZE 14336000
250-VRFY
250-ETRN
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN

250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
看间了 红的部分的字样  说明 postfix 已经 有 验证 机制了。 可以继续往下做了。

七、安装Courier-authlib 0.57
新版本的imap不再包含authentication library,必须先安装 Courier authentication library
#tar -zxf courier-authlib-0.59.3.tar.tar
# cd courier-authlib-0.59.3
# ./configure --with-redhat --with-authmysql=yes --with-mailuser=vmail --with-mailgroup=vmail --with-mysql-libs=/usr/local/mysql/lib/mysql --with-mysql-includes=/usr/local/mysql/include/mysql/
# make
# make install
# make install-configure
重要
# chmod +x /usr/local/var/spool/authdaemon/

# vi /usr/local/etc/authlib/authdaemonrc
authmodulelist="authmysql"
DEBUG_LOGIN=2
(注:打开authdaemon的日志 方便调试。  调试成功之后把2 改成 0)

# mv /usr/local/etc/authlib/authmysqlrc /usr/local/etc/authlib/authmysqlrc.old
备份一下authlib的配置文件。
# vi /usr/local/etc/authlib/authmysqlrc
MYSQL_SERVER localhost
MYSQL_SOCKET /tmp/mysql.sock
MYSQL_DATABASE postfix
MYSQL_USERNAME postfix
MYSQL_PASSWORD postfix
MYSQL_USER_TABLE mailbox
MYSQL_LOGIN_FIELD username
MYSQL_CRYPT_PWFIELD password
MYSQL_UID_FIELD '1001'
MYSQL_GID_FIELD '1001'
#MYSQL_HOME_FIELD '/var/mailbox/'
#MYSQL_MAILDIR_FIELD maildir

MYSQL_HOME_FIELD        concat('/var/mailbox/',maildir)
MYSQL_MAILDIR_FIELD     concat('/var/mailbox/',maildir)
MYSQL_NAME_FIELD name
MYSQL_QUOTA_FIELD concat(quota,'S')
MYSQL_WHERE_CLAUSE active='1'
DEFAULT_DOMAIN test.hk

注意:确认在这个文件中不能用空格键(包括行尾),只能用tab键。
确认只使用单引号,比如:'/var/mailbox/','UID','GID'(本文为'1001')
localhost不能用单引号
确认你的/etc/hosts文件中有localhost
编译时如果支持Ipv6可能导致错误
MYSQL_GID_FIELD 和MYSQL_UID_FIELD是maildrop的UID和GID,而不是MySQL的
  
这是anstan哥的原话   IPV6 我没有编译  我修改了一下他的配置,因为用他的 mysql会找不到你的用户目录。

# cp courier-authlib.sysvinit /etc/rc.d/init.d/courier-authlib
# chmod 755 /etc/rc.d/init.d/courier-authlib
# chkconfig --level 0123456 courier-authlib on
手动启动服务:
# authdaemond start

在postfixadmin中建立一测试帐户

测试smtp
# perl -MMIME::Base64 -e 'print encode_base64("test\@test.hk");'
dGVzdC5oaw==
# perl -MMIME::Base64 -e 'print encode_base64("test");'
dGVzdA==

# telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.localdomain (127.0.0.1).
Escape character is '^]'.
220 ESMTP "Version not Available"
ehlo
250-
250-PIPELINING
250-SIZE 14336000
250-VRFY
250-ETRN
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250 8BITMIME
auth login
334 VXNlcm5hbWU6
dGVzdC5oaw==
334 UGFzc3dvcmQ6
dGVzdA==
235 Authentication successful

看见 Authentication successful 恭喜你的用户验证 已经OK 了。  如果不成功 #tail -60 /var/log/maillog  看里面说什么

继续往下走。

八、安装courier-imap-4.1.3
#tar -xf courier-imap-4.1.3.tar.tar
#cd courier-imap-4.1.3
# ./configure --prefix=/usr/local/imap --with-redhat --disable-root-check --enable-unicode=utf-8,iso-8859-1,gb2312,gbk,gb18030 --with-trashquota --with-dirsync
#make
#make install
# make install-configure

# vi /usr/local/imap/etc/pop3d
POP3DSTART=YES

# vi /usr/local/imap/etc/imapd
IMAPDSTART=YES

将MAILDIRPATH=Maildir改为
MAILDIRPATH=/var/mailbox/


让imap自启动:
# cp courier-imap.sysvinit /etc/rc.d/init.d/courier-imap
# chmod 755 /etc/rc.d/init.d/courier-imap
# chkconfig --level 0123456 courier-imap on

测试POP3
# telnet localhost 110
+OK Hello there
user
+OK Password required.
pass test
+OK Logged in.
quit
+OK bye-bye

如果能 登录成功   再次恭喜你  一起都OK 了 。

下面说一下我碰到的问题   FAQ
Aug 29 13:47:06 mail pop3d: authdaemon: s_connect() failed: No such file or directory

建议你从下安装一下SASL 和 authdaemon  在试试

Aug 30 00:09:46 mail postfix/trivial-rewrite[5822]: fatal: file /etc/postfix/main.cf: parameters mail_owner and setgid_group: user postfix and group postdrop have the same group ID: 101

这是你的POSTFIX 用户和组 建的 有问题 。 把原来的DEL 掉  从新建一下试试

暂时 就 这么多    做的 时候 碰见好多 问题     以后大家做的碰见了 问题 就 回帖吧 一器 解决 。

还有好多 功能 没有加    在以后 我会把 他们一个一个的加上  。
阅读(2155) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

jack55192008-08-29 13:50:08

大大您好 依照你所提示的安裝步驟 作到PHP5就無法繼續下去 錯誤部分是無法執行PHP make 請教應如何修改makefile 謝謝

chinaunix网友2008-04-22 21:15:11

请问,我一步一步的按照做,但最后创建域和用户邮箱时不能再/var/mailbox下生成域和用户邮箱的目录,是什么问题呢,谢谢