Postfix(四):结合MySQL配置支持虚拟用户

下载: 

extman-1.0.0.tar.gz

http://www.extmail.org/download

courier-authlib

 

安装数据库

  
  
  
  
  1. [root@mail src]# tar -zxvf extman-1.0.0.tar.gz   
  2. [root@mail src]# cd extman-1.1   
  3. [root@mail extman-1.1]# /usr/local/mysql/bin/mysql -u root -p < docs/extmail.sql   
  4. Enter password:   
  5. [root@mail extman-1.1]# /usr/local/mysql/bin/mysql -u root -p < docs/init.sql   
  6. Enter password:  

 

配置

  
  
  
  
  1. [root@mail extman-1.1]# vi /etc/postfix/main.cf   
  2.  
  3.  
  4. // 注释掉   
  5. 164 #mydestination = $myhostname localhost.$mydomain $mydomain   
  6. // 添加:   
  7.  
  8.  
  9.     661 # virtual user support   
  10.     662 virtual_mailbox_base = /mailbox   
  11.     663 virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf   
  12.     664 virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf   
  13.     665 virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf   
  14.     666 virtual_uid_maps = static:1000   
  15.     667 virtual_gid_maps = static:1000  
  16.  
  17. // 建立虚拟用户映射表文件   
  18. [root@mail extman-1.1]# cp docs/mysql_virtual_* /etc/postfix/  
  19.  

 

支持SMTP认证


 

  
  
  
  
  1. 安装courier-authlib   
  2. [root@mail src]# tar jxvf courier-authlib-0.63.0.tar.bz2   
  3. [root@mail src]# cd courier-authlib-0.63.0   
  4. [root@mail courier-authlib-0.63.0]# ./configure --prefix=/usr/local/courier-authlib --without-stdheaderdir --with-authmysql --with-mysql-libs=/usr/local/mysql/lib/mysql --with-mysql-includes=/usr/local/mysql/include/mysql/   
  5. [root@mail courier-authlib-0.63.0]# make && make install   
  6. [root@mail courier-authlib-0.63.0]# make install-configure                   # 生成默认配置文件  
  7.  
  8. 上面的命令会生成 authmysqlrc和authdaemonrc作用分别为  
  9.  
  10. authdaemonrc: 主配置, 设置使用的认证方式   
  11. authmysqlrc: 数据库配置文件,设置连接地址、查询方式等   
  12. 修改主配文件,authdaemonrc   
  13. [root@mail courier-authlib-0.63.0]# cd /usr/local/courier-authlib/   
  14. [root@mail courier-authlib]# vi etc/authlib/authdaemonrc  
  15.  
  16. 27 #authmodulelist="authuserdb authpam authldap authmysql authcustom authpipe"   
  17. 28 authmodulelist="authmysql"   
  18. 34 #authmodulelistorig="authuserdb authpam authldap authmysql authcustom authpipe"   
  19. 35 authmodulelistorig="authmysql" 
  20.  
  21. [root@mail courier-authlib]# vi etc/authlib/authmysqlrc   
  22.  
  23.  
  24. 26 MYSQL_SERVER            localhost             # Mysql服务器的位置   
  25. 27 MYSQL_USERNAME          extmail           # MySQL登录用户名   
  26. 28 MYSQL_PASSWORD          extmail           # MySQL登录密码   
  27. 49 MYSQL_SOCKET            /var/mysql/mysql.sock      # 去掉前面的#号   
  28. 68 MYSQL_DATABASE          extmai              # MySQL数据库名字   
  29. 83 MYSQL_USER_TABLE        mailbox           # MySQL用户邮箱存储的表的名字   
  30. 133 MYSQL_HOME_FIELD        concat('/mailbox/',homedir)    # 用户宿主目录完整路径   
  31. 150 MYSQL_MAILDIR_FIELD     concat('/mailbox/',maildir)        # 用户的完成邮件存储路径(去掉前面的#号)  
  32.  
  33. // 修改smtpd.conf,改为通过authdaemond进行认证   
  34.  
  35.  
  36. [root@mail courier-authlib]# vi /usr/lib/sasl2/smtp.conf   
  37.  
  38. pwcheck_method:saslauthd   
  39. authdaemond_path:/usr/local/couier-authlib/var/spool/authdaemon/socket   
  40. // 调整socket目录权限   
  41. [root@mail courier-authlib]# chmod -R 755 var/spool/authdaemon/   
  42. // 添加库文件搜索路径  
  43.  
  44. [root@mail courier-authlib]# vi /etc/ld.so.conf  
  45.  
  46.  
  47. /usr/local/courier-authlib/lib/courier-authlib  
  48.  
  49. [root@mail courier-authlib]# ldconfig  
  50.  
  51. // 启动courier-authlib   
  52.  
  53.  
  54. [root@mail courier-authlib]# cp /usr/src/courier-authlib-0.63.0/courier-authlib.sysvinit /etc/init.d/courier-authlib   
  55. [root@mail courier-authlib]# chmod 755 /etc/init.d/courier-authlib   
  56. [root@mail courier-authlib]# service courier-authlib start   
  57. Starting Courier authentication services: authdaemond   
  58.  

配置dovecot支持虚拟用户


 

  
  
  
  
  1. [root@mail courier-authlib]# vi /etc/dovecot/conf.d/10-mail.conf   
  2.  
  3.  
  4.      24    mail_location = maildir:/mailbox/%d/%n/Maildir   
  5. [root@mail courier-authlib]# cd /etc/dovecot   
  6. [root@mail dovecot]# vi conf.d/10-auth.conf   
  7. 注释掉121,去掉122的注释   
  8. 121 #!include auth-system.conf.ext     
  9. 122 !include auth-sql.conf.ext        
  10. [root@mail dovecot]# vi dovecot-sql.conf.ext   
  11.  
  12. 29 driver = driver   
  13. 66 connect = host=localhost dbname=extmail user=extmail password=extmail   
  14. 73 default_pass_scheme = CRYPT   
  15. 102 password_query = \   
  16. 103   SELECT username AS user, password AS password \   
  17. 104   FROM mailbox WHERE username = '%u'   
  18. 122 user_query = \   
  19. 123   SELECT maildir, uidnumber AS uid, gidnumber AS gid \   
  20. 124   FROM mailbox WHERE username = '%u'   
  21.  
  22.  
  23. // 简历邮箱目录,并调整权限   
  24. [root@mail dovecot]# mkdir -p /mailbox/extmail.org/postmaster/Maildir   
  25. [root@mail dovecot]# chown -R postfix.postfix /mailbox/  
  26.  
  27. [root@mail dovecot]# kill `pgrep dovecot`; dovecot          # 重启dovecot 

 

部署Extmail邮件使用界面

安装依赖:

下载:

Unix-Syslog-1.1.tar.gz
DBI-1.616.tar.gz 
DBD-mysql-4.019.tar.gz 
 

  
  
  
  
  1. [root@mail src]# wget http://search.cpan.org/CPAN/authors/id/M/MH/MHARNISCH/Unix-Syslog-1.1.tar.gz   
  2. [root@mail src]# wget http://search.cpan.org/CPAN/authors/id/T/TI/TIMB/DBI-1.616.tar.gz   
  3. [root@mail src]# wget http://search.cpan.org/CPAN/authors/id/C/CA/CAPTTOFU/DBD-mysql-4.019.tar.gz  
  4.  
  5.    
  6.  
  7. [root@mail src]# tar zxvf Unix-Syslog-1.1.tar.gz   
  8. [root@mail src]# cd Unix-Syslog-1.1   
  9. [root@mail Unix-Syslog-1.1]# perl Makefile.PL ;make ;make install  
  10.  
  11.    
  12.  
  13. [root@mail src]# tar -zxvf DBI-1.616.tar.gz   
  14. [root@mail src]# cd DBI-1.616   
  15. [root@mail DBI-1.616]# perl Makefile.PL && make && make install  
  16.  
  17. [root@mail src]# tar -zxvf DBD-mysql-4.019.tar.gz   
  18. [root@mail DBD-mysql-4.019]# perl Makefile.PL --libs="-L/usr/local/mysql/lib/mysql -lmysqlclient -lz" -cflags=-I/usr/local/mysql/include/mysql && make && make install 

 

安装extmail套件

  
  
  
  
  1. [root@mail extmail]# tar -zxvf extmail-1.2.tar.gz -C /usr/local/nginx/html/   
  2. [root@mail src]# cd /usr/local/nginx/html   
  3. [root@mail html]# mv extmail-1.2/ extmail   
  4. [root@mail html]# cd extmail/   
  5. [root@mail extmail]# mv webmail.cf.default webmail.cf   
  6. [root@mail extmail]# vi webmail.cf   
  7.  
  8. 1 # sys_config, the config file and webmail programe root   
  9. 2 SYS_CONFIG = /usr/local/nginx/html/extmail   
  10. 3   
  11. 4 # sys_langdir, the i18n dir   
  12. 5 SYS_LANGDIR = /usr/local/nginx/html/extmail/lang   
  13. 6   
  14. 7 # sys_templdir, the template dir   
  15. 8 SYS_TEMPLDIR = /usr/local/nginx/html/extmail/html   
  16. 127 SYS_MAILDIR_BASE = /mailbox   
  17. 139 SYS_MYSQL_USER = extmail   
  18. 140 SYS_MYSQL_PASS = extmail   
  19. 141 SYS_MYSQL_DB = extmail   
  20. 142 SYS_MYSQL_HOST = localhost   
  21. 143 SYS_MYSQL_SOCKET = /tmp/mysql.sock 

这里由于使用nginx服务器作为WEB服务器,我们需要先配置nginx支持cgi,

可以参考这篇文章:http://linuxsvr.blog.51cto.com/2537584/643772

  
  
  
  
  1. # ifconfig eth0:0 192.168.3.3/24 

我们这里的Nginx配置文件http { ….} 里添加一个基于ip和域名的虚拟主机:

  
  
  
  
  1. server{  
  2.     listen 192.168.3.3:80;  
  3.     server_name mail.gateway.org;  
  4.  
  5.     location / {  
  6.             root /usr/local/nginx/html/extmail/html;  
  7.     }  
  8.  
  9.     location /extmail/ {  
  10.             alias   /usr/local/nginx/html/extmail/html/;  
  11.     }  
  12.  
  13.     location /extmail/cgi/ {  
  14.             alias   /usr/local/nginx/html/extmail/cgi/;  
  15.     }  
  16.  
  17.     location ~.*\.cgi$ {  
  18.  
  19.             fastcgi_pass 127.0.0.1:8999;  
  20.             fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;  
  21.             include fastcgi_params;  
  22.     }  

重启nginx

然后在浏览器里访问:mail.gateway.org(如果你配备了DNS服务器,并对这一条进行解析,可以这么访问,如果没有就基于ip访问,我没有配备DNS服务器所以就用ip访问)

使用用户名:postmaster 密码extmail 域extmail.org 登录

 

接下来我们开始extmail的管理界面

部署Extman WEB管理界面

依赖软件

GD-2.44.tar.gz                                             # GD库

File-Tail-0.99.3.tar.gz                                 # 日志分析

rrdtool-1.4.4-1.el5.wrl.i386.rpm             # 数据画图工具

rrdtool-perl-1.4.4-1.el5.wrl.i386.rpm    # rrdtool的相互依赖包

下载依赖包:

GD-2.44.tar.gz   http://download.chinaunix.net/download.php?id=25978&ResourceID=3479                                          

  
  
  
  
  1. File-Tail-0.99.3.tar.gz  
  2.  
  3. [root@mail src]# wget http://search.cpan.org/CPAN/authors/id/M/MG/MGRABNAR/File-Tail-0.99.3.tar.gz                     
  4.  
  5. [root@mail src]# wget http://www.express.org/~wrl/rrdtool/rrdtool-1.4.4-1.el5.wrl.i386.rpm                                            
  6.  
  7. [root@mail src]# wget http://www.express.org/~wrl/rrdtool/rrdtool-perl-1.4.4-1.el5.wrl.i386.rpm          
  8.  

安装依赖:

  
  
  
  
  1. GD:  
  2. [root@mail src]# yum -y install gd-devel                       # GD库依赖  
  3. [root@mail src]# tar -zxvf GD-2.44.tar.gz   
  4. [root@mail src]# cd GD-2.44  
  5. [root@mail GD-2.44]# perl Makefile.PL   
  6. [root@mail GD-2.44]# make && make install  
  7.  
  8.    
  9.  
  10. File-Tail  
  11. [root@mail src]# tar -zxvf File-Tail-0.99.3.tar.gz   
  12. [root@mail src]# cd File-Tail-0.99.3  
  13. [root@mail File-Tail-0.99.3]# perl Makefile.PL   
  14. [root@mail File-Tail-0.99.3]# make && make install  
  15.  
  16. rrdtool,rrdtool和rrdtoo-perl是相互依赖关系,必须一起装才不会报错:  
  17. [root@mail src]# yum -y install ruby                            # rrdtool是用ruby写的,所以要先安装ruby  
  18. [root@mail src]# rpm -ivh rrdtool-1.4.4-1.el5.wrl.i386.rpm rrdtool-perl-1.4.4-1.el5.wrl.i386.rpm  
  19.  

 

好了,现在我们开始安装Extman套件
安装

 

  
  
  
  
  1. [root@mail src]# tar -zxvf extman-1.0.0.tar.gz -C /usr/local/nginx/html/                             # 解压到nginx的html目录  
  2. [root@mail src]# cd /usr/local/nginx/html/  
  3. [root@mail html]# mv extman-1.1/ extman                                                                            # 重命名为extman  
  4. [root@mail html]# chown -R postfix.postfix extman/cgi/                                                    # 改变extman下cig的属主和属组为postfix运行账户  
  5. [root@mail html]#vi extman/webman.cf      # 编辑配置文件  
  6.  
  7.  
  8. 1:SYS_CONFIG = /usr/local/nginx/html/extman/webman.cf  
  9. 3:SYS_LANGDIR = /usr/local/nginx/html/extman/lang  
  10. 5:SYS_TEMPLDIR = /usr/local/nginx/html/extman/html  
  11. 7:SYS_MAILDIR_BASE = /mailbox  
  12. 9:SYS_SHOW_WARN = 0  
  13. 11:SYS_SESS_DIR = /var/extman                                                                 # 系统当前会话文件的保存目录  
  14.  
  15.  
  16. 131:SYS_MYSQL_SOCKET = /tmp/mysql.sock  
  17.  
  18. [root@mail html]# mkdir /var/extman ; chmod 777 /var/extman       # 创建extman目录并给权限为777  
  19. [root@mail html]# vi ../conf/nginx.conf                                                   # 调整nginx配置  
  20.  server{  
  21.      listen 192.168.3.3:80;  
  22.      server_name mail.gateway.org;  
  23.  
  24.      location / {  
  25.              root /usr/local/nginx/html/extmail/html;  
  26.      }  
  27.  
  28.      location /extmail/ {  
  29.              alias   /usr/local/nginx/html/extmail/html/;  
  30.      }  
  31.  
  32.      location /extmail/cgi/ {  
  33.              alias   /usr/local/nginx/html/extmail/cgi/;  
  34.      }  
  35.  
  36.      location /extman/ {  
  37.              alias   /usr/local/nginx/html/extman/html/;  
  38.      }  
  39.  
  40.      location /extman/cgi/ {  
  41.              alias   /usr/local/nginx/html/extman/cgi/;  
  42.      }  
  43.        
  44.      location ~.*\.cgi$ {  
  45.  
  46.              fastcgi_pass 127.0.0.1:8999;  
  47.              fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;  
  48.              include fastcgi_params;  
  49.      }  
  50. }  
  51.  
  52. [root@mail html]# kill -9 `pgrep nginx` && /usr/local/nginx/sbin/nginx          # 重启nginx  
  53.  

启用 mailgraph_ext 图形日志插件:

  
  
  
  
  1. [root@mail mailgraph_ext]# cd extman/addon/mailgraph_ext/                               
  2. [root@mail mailgraph_ext]# mkdir /usr/local/mailgraph_ext/                
  3. [root@mail mailgraph_ext]# cp mailgraph_ext.pl /usr/local/mailgraph_ext/  
  4. [root@mail mailgraph_ext]# cp qmonitor.pl /usr/local/mailgraph_ext/  
  5. [root@mail mailgraph_ext]# ./mailgraph-init start  
  6. [root@mail mailgraph_ext]# cd /usr/local/nginx/html/extman  
  7. [root@mail extman]# daemon/cmdserver –daemon                         # 启动cmdserver ,如果不启动登录后台的时候会显示系统信息 No such file or directory   
  8.  

访问:http://192.168.3.3/extman/
用户名:[email protected]  密码:extmail*123* 域extmail.org

 

如果验证码不正确,把服务器的时间和本地之间调成一致.

现在就可以对邮件系统进行管理,添加域添加账户.查看图形日志(如果不显示则GD库安装有问题)

 

 

 

错误总结:

错误
访问http://192.168.3.3/extman/

502错误

查看日志

2011/08/20 15:55:45 [error] 24791#0: *11 FastCGI sent in stderr: "Prototype mismatch: sub Encode::IMAPUTF7::decode ($$;$) vs none at /usr/local/nginx/html/extman/libs/Encode/IMAPUTF7.pm line 76.

解决方法:

编辑extman/libs/Encode/IMAPUTF7.pm文件(修改之前注意备份)
将“no warnings 'redefine';^M”那一行修改成“no warnings;”

参考:http://www.extmail.org/forum/viewthread.php?tid=14393&page=1#pid82269

错误:

登录后台显示

系统信息   Connection refused

待解决

 

错误:

添加域名的时候不会在/mailbox/下创建相应的文件夹
解决:
运行cgiwrap-fcgi.pl的时候用的root账户运行,而mailbox的数组和属主都是postfix所以要使用postfix运行perl-fcgi.
postfix是禁止登陆的,所以不能使用su postfix -c 的命令,Linux指定某个用户执行某个程序可以使用setuid
 

  
  
  
  
  1. [root@mail ~]# cd /usr/local/bin/  
  2. [root@mail bin]# chown postfix.postfix cgiwrap-fcgi.pl   
  3. [root@mail bin]# chmod +s cgiwrap-fcgi.pl  
然后再运行就是已postfix用户运行的了

 写完这点就忙去了,我试了,上面的弄完还是不行,用代码测试了权限什么都没问题,所以换了一个版本,换了extman-1.0.0.tar.gz就正常了.不知道是版本的问题还是个人问题.

还有文件夹不是创建域的时候创建应该是注册或添加用户的时候创建

本文出自 “cold night” 博客,转载请与作者联系!

你可能感兴趣的:(linux,postfix,ExtMail,虚拟用户,extman)