基本是搞了一个星期。终于搞好了。
我把我组建的过程及中间出现的问题,如何解决。会全部帖出来。目的 一是留一个备忘,二是也给新手一个参考。(我找了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) |