CentOS 5.5 x64上使用Postfix + Dovecot + MySQL搭建邮件服务器


最近公司需要一台邮件服务器,在查阅了大量的资料以后决定采用Postfix + Dovecot + MySQL来搭建这套邮件系统。由于仅仅需要通过客户端来收发邮件,因此不安装Postfixadmin这类WEB管理工具。 

系统环境 

操作系统:CentOS 5.5 x64  

安装需要的包 

更新系统

  
  
  
  
  1. yum update 

YUM安装Postfix,Dovecot,MySQL

CentOS base和update repository的Postfix版本不包括对MySQL的支持,我们需要从CentOS plus repository安装Postfix,在使用YUM安装之前,先修改etc/yum.repos.d/CentOS-Base.repo文件

  
  
  
  
  1. [base] 
  2. name=CentOS-$releasever - Base 
  3. ... 
  4. exclude=postfix* 
  5.  
  6. #released updates 
  7. [updates] 
  8. name=CentOS-$releasever - Updates 
  9. ... 
  10. exclude=postfix* 

YUM安装所需软件包

  
  
  
  
  1. yum --enablerepo=centosplus install postfix 
  2. yum install dovecot mysql-server   

配置MySQL 

设置MySQL开机启动

  
  
  
  
  1. chkconfig mysqld on 
  2. service mysqld start 

设置root密码,删除匿名账号,删除test库

  
  
  
  
  1. mysql_secure_installation   

创建Virtual Domains和Users 

登陆MySQL,创建postfix数据库

  
  
  
  
  1. CREATE DATABASE postfix

创建MySQL账号,并赋权限 

  
  
  
  
  1. GRANT SELECTINSERTUPDATEDELETE ON postfix.* TO 'postfix_admin'@'localhost' IDENTIFIED BY 'postfix_admin_password'; 
  2. GRANT SELECTINSERTUPDATEDELETE ON postfix.* TO 'postfix_admin'@'localhost.locahdomain' IDENTIFIED BY 'postfix_admin_password'; 
  3. FLUSH PRIVILEGES; 

创建表结构 

  
  
  
  
  1. CREATE TABLE domains (domain varchar(50) NOT NULL, PRIMARY KEY (domain) ); 
  2. CREATE TABLE forwardings (source varchar(80) NOT NULL, destination TEXT NOT NULL, PRIMARY KEY (source) ); 
  3. CREATE TABLE users (email varchar(80) NOT NULL, password varchar(20) NOT NULL, PRIMARY KEY (email) ); 
  4. CREATE TABLE transport ( domain varchar(128) NOT NULL default '', transport varchar(128) NOT NULL default '', UNIQUE KEY domain (domain) ); 

配置Postfix

创建virtual domain配置文件/etc/postfix/mysql-virtual_domains.cf

  
  
  
  
  1. user = postfix_admin 
  2. password = postfix_admin_password 
  3. dbname = postfix 
  4. query = SELECT domain AS virtual FROM domains WHERE domain='%s'
  5. hosts = 127.0.0.1  

创建virtual forwarding配置文件/etc/postfix/mysql-virtual_forwardings.cf

  
  
  
  
  1. user = postfix_admin 
  2. password = postfix_admin_password 
  3. dbname = postfix 
  4. query = SELECT destination FROM forwardings WHERE source='%s'
  5. hosts = 127.0.0.1  

创建virtual mailbox配置文件/etc/postfix/mysql-virtual_mailboxes.cf

  
  
  
  
  1. user = postfix_admin 
  2. password = postfix_admin_password 
  3. dbname = postfix 
  4. query = SELECT CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') FROM users WHERE email='%s' 
  5. hosts = 127.0.0.1  

创建virtual email配置文件/etc/postfix/mysql-virtual_email2email.cf

  
  
  
  
  1. user = postfix_admin 
  2. password = postfix_admin_password 
  3. dbname = postfix 
  4. query = SELECT email FROM users WHERE email='%s' 
  5. hosts = 127.0.0.1  

给配置文件设置合适的权限

  
  
  
  
  1. chmod o= /etc/postfix/mysql-virtual_*.cf 
  2. chgrp postfix /etc/postfix/mysql-virtual_*.cf 

创建处理email的用户和组,所有的邮件都会存放在该用户的home目录下

  
  
  
  
  1. groupadd -g 5000 vmail 
  2. useradd -g vmail -u 5000 vmail -d /home/vmail -m  

执行以下命令完成Postfix的配置

   
   
   
   
  1. postconf -e 'myhostname = server.example.com' 
  2. postconf -e 'mydestination = $myhostname, localhost, localhost.localdomain' 
  3. postconf -e 'mynetworks = 127.0.0.0/8' 
  4. postconf -e 'inet_interfaces = all' 
  5. postconf -e 'message_size_limit = 30720000' 
  6. postconf -e 'virtual_alias_domains =' 
  7. postconf -e 'virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf, mysql:/etc/postfix/mysql-virtual_email2email.cf' 
  8. postconf -e 'virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual_domains.cf' 
  9. postconf -e 'virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf' 
  10. postconf -e 'virtual_mailbox_base = /home/vmail' 
  11. postconf -e 'virtual_uid_maps = static:5000' 
  12. postconf -e 'virtual_gid_maps = static:5000' 
  13. postconf -e 'smtpd_sasl_type = dovecot' 
  14. postconf -e 'smtpd_sasl_path = private/auth' 
  15. postconf -e 'smtpd_sasl_auth_enable = yes' 
  16. postconf -e 'broken_sasl_auth_clients = yes' 
  17. postconf -e 'smtpd_sasl_authenticated_header = yes' 
  18. postconf -e 'smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination' 
  19. postconf -e 'smtpd_use_tls = yes' 
  20. postconf -e 'smtpd_tls_cert_file = /etc/pki/dovecot/certs/dovecot.pem' 
  21. postconf -e 'smtpd_tls_key_file = /etc/pki/dovecot/private/dovecot.pem' 
  22. postconf -e 'virtual_create_maildirsize = yes' 
  23. postconf -e 'virtual_maildir_extended = yes' 
  24. postconf -e 'proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $virtual_mailbox_limit_maps' 
  25. postconf -e 'virtual_transport = dovecot'
  26. postconf -e 'dovecot_destination_recipient_limit = 1'  

编辑/etc/postfix/master.cf文件,在文件底部增加dovecot服务

  
  
  
  
  1. dovecot   unix  -       n       n       -       -       pipe 
  2.   flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -f ${sender} -d ${recipient}  

停止sendmail,启动postfix

  
  
  
  
  1. service sendmail stop 
  2. chkconfig sendmail off 
  3. chkconfig postfix on 
  4. service postfix start 

Postfix配置到这里就完成了

配置Dovecot

Dovecot的配置文件是/etc/dovecot.conf,在编辑之前我们先备份一下

  
  
  
  
  1. cp -a /etc/dovecot.conf /etc/dovecot.conf-backup 

修改/etc/dovecot.conf,修改过后的配置文件应该是这样的

  
  
  
  
  1. grep -v "#" /etc/dovecot.conf | sed "/^\s*$/d" 
  2.  
  3. protocols = imap imaps pop3 pop3s 
  4. log_timestamp = "%Y-%m-%d %H:%M:%S " 
  5. mail_location = maildir:/home/vmail/%d/%n/Maildir 
  6. ssl_cert_file = /etc/pki/dovecot/certs/dovecot.pem 
  7. ssl_key_file = /etc/pki/dovecot/private/dovecot.pem 
  8. namespace private { 
  9.     separator = . 
  10.     prefix = INBOX. 
  11.     inbox = yes 
  12. protocol lda { 
  13.     log_path = /home/vmail/dovecot-deliver.log 
  14.     auth_socket_path = /var/run/dovecot/auth-master 
  15.     postmaster_address = [email protected] 
  16. protocol pop3 { 
  17.     pop3_uidl_format = %08Xu%08Xv 
  18. auth default { 
  19.     user = root 
  20.     passdb sql { 
  21.         args = /etc/dovecot-sql.conf 
  22.     } 
  23.     userdb static { 
  24.         args = uid=5000 gid=5000 home=/home/vmail/%d/%n allow_all_users=yes 
  25.     } 
  26.     socket listen { 
  27.         master { 
  28.             path = /var/run/dovecot/auth-master 
  29.             mode = 0600 
  30.             user = vmail 
  31.         } 
  32.         client { 
  33.             path = /var/spool/postfix/private/auth 
  34.             mode = 0660 
  35.             user = postfix 
  36.             group = postfix 
  37.         } 
  38.     } 

 由于用户名和密码是存放在MySQL中的,因此我们需要创建配置文件/etc/dovecot-sql.conf

  
  
  
  
  1. driver = mysql 
  2. connect = host=127.0.0.1 dbname=postfix user=postfix_admin password=postfix_admin_password 
  3. default_pass_scheme = CRYPT 
  4. password_query = SELECT email as user, password FROM users WHERE email='%u'; 

更改/etc/dovecot-sql.conf权限,只允许dovecot组访问

  
  
  
  
  1. chgrp dovecot /etc/dovecot-sql.conf 
  2. chmod o= /etc/dovecot-sql.conf 

启动Dovecot

  
  
  
  
  1. chkconfig dovecot on 
  2. service dovecot start 

Dovecot配置完成

配置别名

编辑/etc/aliases

增加以下两行内容:

  
  
  
  
  1. postmaster: root 
  2. root: [email protected] 

执行以下命令使新的别名生效,并重启Postfix

  
  
  
  
  1. newaliases 
  2. service postfix restart 

测试Postfix和Dovecot

测试Postfix

使用telnet测试Postfix 

  
  
  
  
  1. telnet localhost 25 

连接到Postfix后输入 

  
  
  
  
  1. ehlo localhost 

Postfix工作正常的话,输出是

  
  
  
  
  1. Trying 127.0.0.1... 
  2. Connected to localhost. 
  3. Escape character is '^]'
  4. 220 plato.example.com ESMTP Postfix 
  5. ehlo localhost 
  6. 250-plato.example.com 
  7. 250-PIPELINING 
  8. 250-SIZE 30720000 
  9. 250-VRFY 
  10. 250-ETRN 
  11. 250-STARTTLS 
  12. 250-AUTH PLAIN 
  13. 250-AUTH=PLAIN 
  14. 250-ENHANCEDSTATUSCODES 
  15. 250-8BITMIME 
  16. 250 DSN  

测试Dovecot

使用telnet测试Dovecot 

  
  
  
  
  1. telnet localhost pop3  

Dovecot正常工作的话,输出应该是

  
  
  
  
  1. Trying 127.0.0.1... 
  2. Connected to localhost.localdomain. 
  3. Escape character is '^]'
  4. +OK Dovecot ready. 

当Postfix和Dovecot测试都通过以后,我们接下来应该建立域和邮箱用户了

建立域和邮箱用户

在建立域之前,首先需要确认你的DNS服务器做了正确的MX解析,DNS做好之后,我们登录MySQL插入域和邮箱用户的记录

  
  
  
  
  1. mysql -u root -p
  2.  
  3. USE mail;
  4. INSERT INTO domains (domain) VALUES ('example.com');
  5. INSERT INTO users (email, passwordVALUES ('[email protected]', ENCRYPT('password')); 

测试MailBox

域和邮箱建立好之后,我们试着给用户发送一封测试邮件 

  
  
  
  
  1. mailx [email protected] 

为了确认是否收到邮件,我们进入邮箱目录/home/vmail/example.com/sales/Maildir,输入find命令 

  
  
  
  
  1. find 

应该能够看到以下输出

  
  
  
  
  1. ./dovecot-uidlist 
  2. ./cur 
  3. ./new 
  4. ./new/1285609582.P6115Q0M368794.li172-137 
  5. ./dovecot.index 
  6. ./dovecot.index.log 
  7. ./tmp 

接下来可以使用Foxmail,Outlook之类的客户端工具来收发邮件了。

排错

在安装过程中有问题,可以通过以下日志文件来查看日志,排查问题 

  
  
  
  
  1. /var/log/maillog
  2.  
  3. /home/vmail/dovecot-deliver.log

 

你可能感兴趣的:(mysql,centos,postfix,邮件服务器,Dovecot)