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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章