免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 14794 | 回复: 8
打印 上一主题 下一主题

[Mail] 变通实现dovecot + postfix + postfixadmin + mysql 虚拟用户认证服务器 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-06-23 12:22 |只看该作者 |倒序浏览
dovecot + postfix + postfixadmin 建立mail服务器中的几个事项
我是新手!
第一次建立自己单位的mail服务器。根据网上的资料都无法通过md5加密口令的smtp认证。自己改动了几个地方,终于实现了。
从网上得到了很多资料,这次回报一下,有什么不对的地方,请大家指出。

首先你可以网上搜一下完整的PHP APACHE MYSQL DOVECOT POSTFIX的安装事项,再看看这篇能不能解决你遇到的问题。

服务器版本:CentOS 4.5 X86_64
其它的相关软件都是最新版本

1.安装PHP的时候,在configure的时候,加上 --with-mycrypt --with-hash ,网上有安装的方法;
2.安装好mysql , 我的mysql装在  /db/mysql
3.创建相应的用户和工作组
#groupadd -g 2002 postfix
#groupadd -g 2003 postdrop
#useradd -u 2002 -g 2002 -G postdrop -d /dev/null -s /sbin/nologin postfix
#useradd  -d /dev/null -s /sbin/nologin dovecot

4.安装dovecot
#./configure --prefix=/usr/local/dovecot --sysconfdir=/etc/dovecot --with-sql --with-sql-drivers --with-mysql
#make && make install

   配置dovecot.conf
#cd /etc/dovecot
#cp dovecot-example.conf dovecot.conf
#vi dovecot.conf
base_dir=/var/run/dovecot
protocols=imap imaps pop3 pop3s
listen=*
disable_plaintext_auth = no
ssl_disable = yes
mail_location = maildir:/mail/%d/%n  //服务器邮箱的统一位置,maildir格式,如/mail/xyz.com/username
pop3_uidl_format=%08Xu%08Xv

auth default {
        ...
        mechanisms = PLAIN LOGIN CRAM-MD5 DIGEST-MD5
        passdb sql { //去掉注释
                args = /etc/dovecot/dovecot-sql.conf
        }
        ...
        userdb sql {//去掉注释
                args = /etc/dovecot/dovecot-sql.conf
        }
        ...
        socket listen {
                ...
                client {
                        path = /var/run/dovecot/auth-client   //postfix依靠dovecot 实现 SMTP AUTH 时要用,在postfix中的main.cf配置文件中的smtpd_sasl_path=要引用这项
                        mode = 0660
                        user = postfix
                        group = postfix
                }
        }
}

配置dovecot-sql.conf
#cp dovecot-sql-example.conf dovecot-sql.conf
#vi dovecot-sql.conf
  driver = mysql
  connect =  host=localhost dbname=postfix user=postfix password=postfixPnp1993
default_pass_scheme=MD5   //改成PLAIN-MD5 后就不会与postfixadmin生成的密码兼容,除非使用下面介绍的修改postfixadmin,
//dovecot的加密方式见 http://wiki.dovecot.org/Authentication/PasswordSchemes
  //关键的地方的,搞了好一阵子。初始是,邮件地址:username@xyz.com pop3账号username,会出现密码不正确,除非pop3账号也填username@xyz.com,否则登陆不上。其实就是PASSWORD_QUERY的代码,改后就可以了,怪的是用where username='%u' 也不可以!!只能substring一下了
  password_query = select username as user,password from mailbox where substring(username,1,instr(username,'@')-1) = '%n' And active='1'
  user_query = select maildir as home,2002 as uid ,2002 as gid from mailbox where username='%u' And active='1'

创建符号链接
#ln -s /usr/local/dovecot/sbin/dovecot /usr/bin/dovecot

5.安装postfixadmin 以及里面的DATABASE_MYSQL.TXT同,网上有很多
6.安装postfix
解压postfix的邮箱限额补丁,如网上介绍
#gzip -d postfix-2.4.1-vda-ng.patch.gz
#cp postfix-2.4.1-vda-ng.patch postfix-2.4.1
#cd postfix-2.4.1
#patch -p1 < postfix-2.4.1-vda-ng.patch

#如下编译
#看这里Postfix SASL Howto  http://www.postfix.org/SASL_README.html
#make -f Makefile.init makefiles \
'CCARGS=-DHAS_MYSQL -I/db/mysql/include/mysql \
-DUSE_TLS -DUSE_SASL_AUTH -DDEF_SERVER_SASL_TYPE=\"dovecot\"' \
'AUXLIBS=-L/db/mysql/lib/mysql -lmysqlclient -lz -lm'
#make
#make install  //一切按照缺省的就行了,可以把tmp设置成/tmp/postfix

#mv /etc/aliases /etc/aliases.old
#ln -s /etc/postfix/aliases /etc/aliases
#/usr/bin/newaliases

#vi /etc/postfix/main.cf
myhostname = mail.xyz.com  ##不能与mysql里的domain重名
mydomain = xyz.com
myorigin = $mydomain
mydestination = $myhostname localhost localhost.$mydomain #一定不要出现与MYSQL->postfix->domain表中重名的 如:$mydomain,所以我就选这行
mynetworks = 127.0.0.0/8
inet_interfaces = all
home_mailbox=Maildir/

#=====================Vritual Mailbox settings=========================
virtual_mailbox_base = /mail/
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_alias_domains =
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_uid_maps = static:2002
virtual_gid_maps = static:2002
virtual_transport = virtual
#====================QUOTA========================
message_size_limit = 52428800  //每个邮件最大尺寸50M
mailbox_size_limit = 209715200 //邮箱大小限制200M
virtual_mailbox_limit = 209715200
virtual_create_maildirsize = yes
virtual_mailbox_extended = yes
virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql_virtual_mailbox_limit_maps.cf
virtual_mailbox_limit_override = yes
virtual_overquota_bounce = yes
#====================SASL ESMTP Authenticat=================
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot  //用dovecot进行认证
smtpd_sasl_path = /var/run/dovecot/auth-client //与dovecot.conf中如下的的path一致,前面讲过
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions =  permit_mynetworks,  //注意,后面到smtpd_sals_local_domain的每一行前面都有一个空格
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
smtpd_sasl_local_domain =
smtpd_sasl_security_options = noanonymous
smtpd_banner=$myhostname ESMTP


查看master.cf文件必须包含下面一行
  
 virtual unix - n n - - virtual

编辑/etc/postfix/mysql_virtual_alias_maps.cf 为以下内容
user = postfix
password = postfix
hosts = localhost
dbname = postfix
table = alias
select_field = goto
where_field = address

编辑/etc/postfix/mysql_virtual_domains_maps.cf 为以下内容
user = postfix
password = postfix
hosts = localhost
dbname = postfix
table = domain
select_field = description
where_field = domain

编辑/etc/postfix/mysql_virtual_mailbox_limit_maps.cf 为以下内容
user = postfix
password = postfix
hosts = localhost
dbname = postfix
table = mailbox
select_field = quota
where_field = username

编辑/etc/postfix/mysql_virtual_mailbox_maps.cf 为以下内容
user = postfix
password = postfix
hosts = localhost
dbname = postfix
table = mailbox
select_field = maildir
where_field = username


如果你在dovecot-sql.conf中用的是default_pass_scheme=PLAIN-MD5,就要修改postfixadmin中的functions.inc.php的函数pacrypt
function pacrypt($pw,$pw_db){
//加入普通的md5加密
   if ($CONF['encrypt']=='md5'){
        $password=md5($pw);
   }
}
//同时也要改其它相关webmail操作中的有关加密password一项

修改config.inc.php
$CONF['encrypt']='md5';

如果你在dovecot-sql.conf中用的是default_pass_scheme=MD5 ,就不需要修改任何地方



好了,使用postfixadmin创建域和帐号
域:xyz.com
用户:test

启动
echo "" > /var/log/maillog

dovecot
postfix start

vi /var/log/maillog
看有没有错误

在客户端用outlook,foxmail,选中发信时服务器需要验证 SMTP AUTH, 测试一下。

这里只是介绍一下自己在安装dovecot+postfix实现smtp auth时的解决办法,其它的问题就google一下!

[ 本帖最后由 yn5411 于 2007-6-23 13:28 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-06-24 14:53 |只看该作者
不错~~~~~~~~~~~~

论坛徽章:
0
3 [报告]
发表于 2007-07-13 14:30 |只看该作者
好东西

论坛徽章:
0
4 [报告]
发表于 2007-09-24 23:35 |只看该作者
myhostname = mail.xyz.com  ##不能与mysql里的domain重名
mydomain = xyz.com
myorigin = $mydomain
mydestination = $myhostname localhost localhost.$mydomain #一定不要出现与MYSQL->postfix->domain表中重名的 如:$mydomain,所以我就选这行
----------------------
virtual_mailbox_base = /var/mailbox/

为什么我用postfixadmin建xyz.com域和test@xyz.com 不能在/var/mailbox/下建相关邮箱目录??
请问,要是只想用xyz.com真实域名做为域名,test@xyz.com 如何做?只用postfixadmin建个虚拟邮箱就成吗??

论坛徽章:
8
综合交流区版块每周发帖之星
日期:2015-12-02 15:03:53数据库技术版块每日发帖之星
日期:2015-10-02 06:20:00IT运维版块每日发帖之星
日期:2015-10-02 06:20:00IT运维版块每日发帖之星
日期:2015-09-14 06:20:00金牛座
日期:2014-10-10 11:23:34CU十二周年纪念徽章
日期:2013-10-24 15:41:34酉鸡
日期:2013-10-19 10:17:1315-16赛季CBA联赛之北京
日期:2017-03-06 15:12:44
5 [报告]
发表于 2007-11-22 09:47 |只看该作者
//关键的地方的,搞了好一阵子。初始是,邮件地址:username@xyz.com pop3账号username,会出现密码不正确,除非pop3账号也填username@xyz.com,否则登陆不上。其实就是PASSWORD_QUERY的代码,改后就可以了,怪的是用where username='%u' 也不可以!!只能substring一下了
  password_query = select username as user,password from mailbox where substring(username,1,instr(username,'@')-1) = '%n' And active='1'
  user_query = select maildir as home,2002 as uid ,2002 as gid from mailbox where username='%u' And active='1'



楼主,下面这个语句还的要斟酌下
password_query = select username as user,password from mailbox where substring(username,1,instr(username,'@')-1) = '%n' And active='1'

如果你这样些的话,对下面两中情况没影响
1)单域
2)多域不同名用户


如果是多域中有相同用户呢?
如何处理?

论坛徽章:
0
6 [报告]
发表于 2007-12-24 17:35 |只看该作者

回复 #1 yn5411 的帖子

socket listen {
                ...
                client {
                        path = /var/run/dovecot/auth-client   //postfix依靠dovecot 实现 SMTP AUTH 时要用,在postfix中的main.cf配置文件中的smtpd_sasl_path=要引用这项
                        mode = 0660
                        user = postfix
                        group = postfix
                }
        }
}

按照LZ说的使用devoct认证,设置后,
telnet locahost 110  陷入忙等,无法正常进入收邮件
这是什么原因呢?

论坛徽章:
0
7 [报告]
发表于 2007-12-24 17:39 |只看该作者

回复 #1 yn5411 的帖子

随便问一下,对虚拟用户sasl认证是不是也要为它们创建密码文件?(dovecot默认为系统用户)
不知道LZ是怎么实现的?

可否把您的sasl相关配置文件贴出来,参考一下。

论坛徽章:
0
8 [报告]
发表于 2008-01-22 14:05 |只看该作者
make -f Makefile.init makefiles 'CCARGS=-DHAS_MYSQL -I/usr/local/mysql5/include/ -DUSE_TLS -DUSE_SASL_AUTH -DDEF_SERVER_SASL_TYPE=\"dovecot\"' 'AUXLIBS=-L/usr/local/mysql5/lib/ -lmysqlclient -lz -lm'

make

出现的问题

/root/lcc/postfix-2.3.12/src/tls/tls_verify.c:161: undefined reference to `X509_NAME_oneline'
../../lib/libtls.a(tls_certkey.o): In function `set_cert_stuff':
/root/lcc/postfix-2.3.12/src/tls/tls_certkey.c:111: undefined reference to `SSL_CTX_use_certificate_chain_file'
/root/lcc/postfix-2.3.12/src/tls/tls_certkey.c:116: undefined reference to `SSL_CTX_use_PrivateKey_file'
/root/lcc/postfix-2.3.12/src/tls/tls_certkey.c:125: undefined reference to `SSL_CTX_check_private_key'
../../lib/libtls.a(tls_certkey.o): In function `tls_set_ca_certificate_info':
/root/lcc/postfix-2.3.12/src/tls/tls_certkey.c:85: undefined reference to `SSL_CTX_load_verify_locations'
/root/lcc/postfix-2.3.12/src/tls/tls_certkey.c:90: undefined reference to `SSL_CTX_set_default_verify_paths'
collect2: ld returned 1 exit status
make: *** [smtpd] Error 1
make: *** [update] Error 1

论坛徽章:
0
9 [报告]
发表于 2008-02-04 13:20 |只看该作者
已经解决      就是去掉  “-DUSE_TLS ”

就可以了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP