CentOS6.4+LAMP+Postfix+Dovecot+Postfixadmin+Roundcubemail 打造企業級郵件服務器 (1)

大綱php

1、mail 協議 html

2、mail 組件 mysql

3、mail 工做原理(兩種對比)linux

4、安裝前的準備工做web

5、安裝並配置LAMP環境sql

6、安裝並配置postfixadmin數據庫

7、安裝並配置phpmyadminexpress

8、配置postfix郵件發送代理apache

9、安裝並配置dovecot郵件檢索代理vim

10、測試SMTP與POP3服務

11、安裝並配置WebMail(Roundcubemail)

12、安裝並配置病毒掃描與垃圾郵件過濾

十3、安裝並配置managesieve插件

十4、常見問題分析

注:系統,CentOS 6.4 X86_64 。軟件,所有都是RPM包,有興趣的博友能夠嘗試一下所有源碼包安裝!(所安裝的主要軟件以下,LAMP+Postfix+Dovecot+PostfixAdmin+Roundcubemail+Amavisd-new+ClamAV+SpamAssassin+Managesieve) 軟件包下載

1、mail 協議

mail使用的協議有,

協議名稱 協議類型 端口號
smtp tcp 25
pop3 tcp 110
smtps tcp 465
pop3s tcp 995
imap tcp 143
imaps tcp 993

2、mail 組件

1.MTA:mail transfer agent 郵件傳輸代理

常見軟件,

Exchange(微軟)
Sendmail 開源的軟件 目前有50%的郵件服務器使用這個軟件
Postfix  如今用的挺多
Qmail    曇花一現
Exim(英國劍橋大學開發的)

2.MRA:mail retravial agent 郵件檢索代理

常見軟件,

courier-imap:pop3,imap4,imaps,pop3s (俄羅斯開發)
dovecot (主流)

3.MDA:mail delivery agent 郵件投遞代理

常見軟件,

procmail (postfix默認)
maildrop (功能強大,效率高)

4.MUA:mail user agent 郵件用戶代理

常見軟件,

outlook express
Foxmail
pine(linux)
mutt(linux,常常用到的)

5.Mailbox 信箱

mailbox
maildir (主流)
二者的主要區別,mailbox是把全部郵件放在同一個文件中,maildir把每一個用戶的郵件都單獨存放

3、mail 工做原理

1.常規架構

以下圖,

各組件具體說明

(1).經常使用的客戶端

Mail Client:outlook,foxmail等
Web Browser:IE,Firefox,Chrome等

(2).Postfix,最經常使用的MTA,咱們經過postfix來發送郵件

(3).Dovecot,最經常使用的MRA,咱們經過dovecot來收發郵件

(4).amavisd-new,能夠理解成一個代理,Postfix把郵件交給他,他負責聯繫殺毒和反垃圾

(5).SpamAssassin,防垃圾郵件,是郵件系統的基本功能,SpamAssassin,是最有名的,尤爲是和Amavisd ClamAV結合起來,這是一個經得起考慮的組合

(6).ClamAV,對郵件進行病毒掃描

(7).Cyrus-SASL,認證函數庫

(8).Courier-Authlib,調用mysql數據庫進行認證

(9).WebMail,經過瀏覽器來管理收發郵件

(10).OpenLDAP或MySQL,虛擬用戶或虛擬域的存放數據庫

(11).Maildir或Mailbox,用來存放用戶郵件,二者的區別在於maildir爲每一個用戶單獨存放郵件,mailbox是全部郵件都存放在同一文件

(12).phpLDAPadmin,管理LDAP工具,用來管理虛擬用戶與虛擬域

2.具體工做流程

(1). 當郵件經過outlook或foxmail發送到服務器的25端口,postfix接受鏈接,它會作一些基本檢查

  • 發送者是否在黑名單或者實時黑名單,若是在黑名單,立刻拒絕

  • 是不是受權用戶,是受權能夠進行轉發

  • 接收者是不是服務器的用戶,在這裏postfix調用Cyrus-SASL認證函數庫,並經過Courier-Authlib去mysql數據中驗證用戶,若是不是,立刻拒絕

  • 若是咱們啓用了灰名單,會進行判斷是否會拒絕郵件或者接收

(2).postfix 把郵件經過10024端×××給amavis來處理,注意amavis,只會檢查郵件而不會丟棄或者拒絕郵件(如上圖)

(3).amavis調用SpamAssassin檢查郵件是不是spam,若是SpamAssassin認爲郵件是垃圾郵件,會給郵件打上標記spam(以下圖)

(注:你們會看到,只會給郵件打上spam標記,咱們仍是能夠收到這個郵件的)

(4).amavis調用ClamAV,看郵件是否含有病毒

(5).amavis把檢查完的郵件,經過10025端口從新把郵件交回給postfix

(6).postfix把郵件交給LDA(local delivery agent),LDA是負責本地郵件投放到用戶的郵箱,postfix默認使用 procmail 投遞郵件(咱們也可使用其它投遞代理如,maildrop)到 用戶的郵箱並以maildir的方式存放在硬盤上

(7).用戶使用郵件客戶端,經過pop3或imap協議進行鏈接並管理郵件,webmail 是經過imap的方式來讀取或管理郵件

總結,從上面的工做流程咱們能夠看到用Cyrus-SASL,Courier-authlib,Maildrop太麻煩了。一大堆組件,郵件系統原本就很雜。我以能簡單則簡單的原則進行了精簡併且效率更高,Dovecot目前已經實現了SASL,並且Dovecot的SASL可以自動CACHE查詢結果,這個是比較好的。而且Dovecot還能夠當LDA使用。而Postfix也支持Dovecot的SASL驗證。Postfix能夠直接使用Dovecot的後臺認證,不須要分開配置。(若是使用Courier,咱們必須安裝配置額外的認證軟件,好比Saslauthd,配置這個,會是一個惡夢,若是出現問題,很難排錯),而且Dovecot,能夠很方便實現磁盤配額的功能。Dovecot做爲Courier的可替換組件,Dovecot在磁盤讀寫量上比Courier減小25%左右,內存佔用也比Courier節省10%到70%不等。好了,說了這麼多下面咱們來看一下,咱們的精簡架構!

3.精簡架構

通過與上面的對比咱們明顯看到簡單了許多,嘿嘿!下面咱們說一下具體的工做流程,

(1).當郵件發送到服務器的25端口,postfix接受鏈接,它會作一些基本檢查

  • 發送者是否在黑名單或者實時黑名單,若是在黑名單,立刻拒絕

  • 是不是受權用戶,是受權用戶能夠進行轉發

  • 接收者是不是服務器的用戶,Postfix通Dovecot提供的SASL進行認證,若是不是,立刻拒絕

  • 若是咱們啓用了灰名單,會進行判斷是否會拒絕郵件或者接收

(2).postfix 把郵件經過10024端×××給amavis來處理,注意amavis,只會檢查郵件而不會丟棄或者拒絕郵件

(3).amavis調用SpamAssassin檢查郵件是不是spam,若是SpamAssassin認爲郵件是垃圾郵件,會給郵件打上標記spam(同上)

(4).amavis調用ClamAV,看郵件是否含有病毒

(5).amavis把檢查完的郵件,經過10025端口從新把郵件交回給postfix

(6).postfix把郵件交給LDA(local delivery agent),LDA是負責本地郵件投放到用戶的郵箱,(咱們這裏使用dovecot提供的LDA功能,而不是postfix提供的LDA)郵件會進入用戶的郵箱,Dovecot會執行用戶設置的filter,也就是Dovecot經過調用Sieve,放到相關的文件夾

(7).Dovecot 把郵件以maildir的方式存放在硬盤上。

(8).用戶使用郵件客戶端,經過pop3或imap協議進行鏈接。Webmail(RoundCubeMail),是經過imap的方式來讀取郵件。

總結,通過上面的簡單說明你應該知道整個郵件系統的工做流程了,下面咱們將完整的搭建這套企業級的郵件系統!^_^……

4、安裝前的準備工做

1.關閉防火牆與SELinux

[root@mail ~]# service iptables stop
iptables:清除防火牆規則:                                 [肯定]
iptables:將鏈設置爲政策 ACCEPT:filter                    [肯定]
iptables:正在卸載模塊:                                   [肯定]
[root@mail ~]# service ip6tables stop
ip6tables:清除防火牆規則:                                [肯定]
ip6tables:將 chains 設置爲 ACCEPT 策略:filter            [肯定]
:正在卸載模塊:                                           [肯定]
[root@mail ~]# chkconfig iptables off
[root@mail ~]# chkconfig ip6tables off
[root@mail ~]# vim /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
#     targeted - Targeted processes are protected,
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted
[root@mail ~]# reboot

2.修改主機名

[root@mail ~]# vim /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=mail.free.com
[root@mail ~]# reboot

3.下載並安裝yum源

(1).163的yum源

(2).rpmforge軟件倉庫

[root@mail ~]# wget http://mirrors.163.com/.help/CentOS6-Base-163.repo
[root@mail ~]# wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm
[root@mail ~]# ls
anaconda-ks.cfg  CentOS6-Base-163.repo  install.log  install.log.syslog  rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm

(3).備份原有的yum源

[root@mail ~]# cd /etc/yum.repos.d/
[root@mail yum.repos.d]# ls
CentOS-Base.repo  CentOS-Debuginfo.repo  CentOS-Media.repo  CentOS-Vault.repo
[root@mail yum.repos.d]# mkdir backup
[root@mail yum.repos.d]# mv CentOS-* backup/
[root@mail yum.repos.d]# ls
backup
[root@mail yum.repos.d]#

(4). 增長新的yum源

[root@mail ~]# cp CentOS6-Base-163.repo /etc/yum.repos.d/
[root@mail ~]# rpm -ivh rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm
warning: rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 6b8d79e6: NOKEY
Preparing...                ########################################### [100%]
   1:rpmforge-release       ########################################### [100%]
[root@mail ~]# ll /etc/yum.repos.d/
總用量 24
drwxr-xr-x 2 root root 4096 7月  10 22:00 backup
-rw-r--r-- 1 root root 2006 7月  10 22:01 CentOS6-Base-163.repo
-rw-r--r-- 1 root root  739 11月 13 2010 mirrors-rpmforge
-rw-r--r-- 1 root root  717 11月 13 2010 mirrors-rpmforge-extras
-rw-r--r-- 1 root root  728 11月 13 2010 mirrors-rpmforge-testing
-rw-r--r-- 1 root root 1113 11月 13 2010 rpmforge.repo
[root@mail ~]#

(5).清理yum緩存並更新系統

[root@mail ~]# yum clean all
Loaded plugins: fastestmirror
Cleaning repos: base extras rpmforge updates
Cleaning up Everything
Cleaning up list of fastest mirrors
[root@mail ~]# yum update

4.建立一個vmail用戶,用做管理虛擬郵箱的文件夾

useradd -u 2000 -d /var/vmail -m -s /sbin/nologin vmail

5、安裝並配置LAMP環境

說明:最新的PostfixAdmin2.3.6+Roundcubemail0.92的PHP環境要求是最低是PHP5.2,我這裏RPM安裝的是5.3.3

1.安裝LAMP環境

[root@mail ~]#yum -y install httpd mysql mysql-devel mysql-server php php-pecl-Fileinfo php-mcrypt php-devel php-mysql php-common php-mbstring php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc pcre pcre-devel

2.整合Apache與PHP

[root@mail ~]# vim /etc/httpd/conf/httpd.conf
#增長下面現行
AddType application/x-httpd-php .php #apache解析php程序
PHPIniDir "/etc/php.ini" #指定php.ini配置文件路徑
#修改這一行增長index.php
DirectoryIndex index.php index.html index.html.var
#修改apache運行的用戶和組
User vmail
Group vmail

3.測試

[root@mail ~]# vim /var/www/html/index.php
<?
        phpinfo();
?>
[root@mail ~]# service httpd start
正在啓動 httpd:httpd: Could not reliably determine the server's fully qualified domain name, using mail.free.com for ServerName
                                                           [肯定]
[root@mail ~]#
注:會有個警告
[root@mail ~]# vim /etc/httpd/conf/httpd.conf
#增長一行
ServerName localhost:80
[root@mail ~]# service httpd restart #從新啓動不會再有警告
中止 httpd:                                               [肯定]
正在啓動 httpd:                                           [肯定]
[root@mail html]# chkconfig httpd on #加入開機自啓動
[root@mail html]# chkconfig httpd --list
httpd           0:關閉  1:關閉  2:啓用  3:啓用  4:啓用  5:啓用  6:關閉
[root@mail html]#

測試效果以下,

看到這個圖說明LAMP環境安裝成功了,嘿嘿!順即可以看一下imap這個很重要,嘿嘿!

6、安裝並配置postfixadmin

1.查看所需軟件

[root@mail ~]# ll
總用量 12804
-rw-------. 1 root root     970 6月  20 05:03 anaconda-ks.cfg
-rw-r--r--  1 root root    2006 9月   1 2011 CentOS6-Base-163.repo
-rw-r--r--. 1 root root   15709 6月  20 05:03 install.log
-rw-r--r--. 1 root root    4178 6月  20 05:01 install.log.syslog
-rw-r--r--  1 root root 7728693 7月   7 18:48 phpMyAdmin-4.0.4.1-all-languages.zip
-rw-r--r--  1 root root 1597001 7月   7 12:56 postfixadmin-2.3.6.tar.gz
-rw-r--r--  1 root root 3735505 7月   7 12:57 roundcubemail-0.9.2.tar.gz
-rw-r--r--  1 root root   12700 11月 13 2010 rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm
[root@mail ~]#

2.解壓並修改文件名

[root@mail ~]# tar xf postfixadmin-2.3.6.tar.gz -C /var/www/html/
[root@mail ~]# cd /var/www/html/
[root@mail html]# ls
index.php  postfixadmin-2.3.6
[root@mail html]# mv postfixadmin-2.3.6 postfixadmin
[root@mail html]# ls
index.php  postfixadmin
[root@mail html]#

3.配置並測試

[root@mail html]# cd postfixadmin/
#修改前先備份一下配置文件
[root@mail postfixadmin]# cp config.inc.php config.inc.php.bak
[root@mail postfixadmin]# cp setup.php setup.php.bak
[root@mail postfixadmin]# vim config.inc.php
#找到下面幾行並修改
$CONF['configured'] = true;
$CONF['database_type'] = 'mysql';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfix';
$CONF['database_password'] = 'postfix';
$CONF['database_name'] = 'postfix';
$CONF['admin_email'] = 'postmaster@free.com';
$CONF['encrypt'] = 'dovecot:CRAM-MD5';
$CONF['dovecotpw'] = "/usr/bin/doveadm pw";
$CONF['domain_path'] = 'YES';
$CONF['domain_in_mailbox'] = 'NO';
$CONF['aliases'] = '1000';
$CONF['mailboxes'] = '1000';
$CONF['maxquota'] = '1000';
$CONF['fetchmail'] = 'NO';
$CONF['quota'] = 'YES';
$CONF['used_quotas'] = 'YES';
$CONF['new_quota_table'] = 'YES';

4.爲postfixadmin建立Mysql數據庫與權限

[root@mail html]# service mysqld start
[root@mail html]# chkconfig mysqld on #加入開機自啓動
[root@mail html]# chkconfig mysqld --list
mysqld          0:關閉  1:關閉  2:啓用  3:啓用  4:啓用  5:啓用  6:關閉
[root@mail html]#
[root@mail ~]# mysql
mysql> create database postfix;
mysql> grant all on postfix.* to postfix@'localhost' identified by 'postfix';
mysql> flush privileges;

測試一下能不能登陸,

[root@mail html]# mysql -upostfix -ppostfix
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.1.69 Source distribution
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| postfix            |
| test               |
+--------------------+
3 rows in set (0.00 sec)
mysql>
測試成功可能登陸!

5.修改全部者與全部組

[root@mail html]# chown -R vmail.vmail postfixadmin/
[root@mail html]# ll
總用量 8
-rw-r--r--  1 root  root    18 7月  10 22:18 index.php
drwxrwxr-x 14 vmail vmail 4096 7月  10 22:57 postfixadmin
[root@mail html]#

6.具體配置過程以下圖

(1).http://192.168.18.187/postfixadmin/setup.php

注:檢查PHP環境,並初始化數據庫

(2).建立設置密碼並修改配置文件(我這裏的密碼是123456)

[root@mail postfixadmin]# vim config.inc.php    
$CONF['setup_password'] = '6471f6462d427bf547c07fb2a08fdecf:09a43f1679223
4050d298b7d0333c101d4bbd48e';

(3).建立管理員密碼

先輸入你剛纔設置的密碼,我這裏是123456,而後輸入管理員郵箱,我管理員密碼!

出現錯誤,說沒有dovecotpw,是由於咱們還沒安裝dovecot,咱們這裏先來安裝一下dovecot,後面再進行配置!

[root@mail postfixadmin]# yum install -y  dovecot dovecot-devel dovecot-mysql
[root@mail postfixadmin]# chkconfig dovecot on #加入開機自啓動
[root@mail postfixadmin]# chkconfig dovecot --list
dovecot         0:關閉  1:關閉  2:啓用  3:啓用  4:啓用  5:啓用  6:關閉
[root@mail postfixadmin]#

咱們再來設置一下管理員的帳戶與密碼,(我這裏設置是postmaster@free.com 密碼:admin)

看此次設置成功,下面咱們管理帳戶登陸一下

http://192.168.18.187/postfixadmin/login.php

7.postfxiadmin不能自動建立目錄,因此咱們得增長自動創建目錄的功能

(1).創建建立虛擬郵箱腳本,腳本名稱 /usr/local/bin/maildir-creation.sh,腳本內容以下:

[root@mail ~]#vim /usr/local/bin/maildir-creation.sh
#!/bin/bash
#
HOME_DIR="/var/vmail"
USER_NAME="vmail"
GROUP_NAME="vmail"
if [ ! -d ${HOME_DIR}/$1 ] ; then
    mkdir ${HOME_DIR}/$1
    chown -R ${USER_NAME}.${GROUP_NAME} ${HOME_DIR}/$1
fi
mkdir ${HOME_DIR}/$1/$2
chown -R ${USER_NAME}.${GROUP_NAME} ${HOME_DIR}/$1/$2

(2).創建刪除虛擬郵箱腳本,腳本名稱 /usr/local/bin/maildir-deletion.sh ,腳本內容以下:

[root@mail ~]#vim /usr/local/bin/maildir-deletion.sh
#!/bin/bash
#
# vmta ALL = NOPASSWD: /usr/local/bin/maildir-deletion.sh
#
if [ $# -ne 2 ] ; then
  exit 127
fi
DOMAIN="$1"
USER="$2"
HOME_DIR="/var/vmail"
USER_DIR="${HOME_DIR}/${DOMAIN}/${USER}"
TRASH_DIR="${HOME_DIR}/deleted-maildirs"
DATE=`date "+%Y%m%d_%H%M%S"`
if [ ! -d "${TRASH_DIR}/${DOMAIN}" ] ; then
    mkdir -p "${TRASH_DIR}/${DOMAIN}"
fi
if [ -d "${USER_DIR}" ] ; then
    mv ${USER_DIR} ${TRASH_DIR}/${DOMAIN}/${USER}-${DATE}
fi

8.創建刪除目錄

[root@mail ~]# mkdir /var/vmail/deleted-maildirs
[root@mail ~]# chown -R vmail.vmail /var/vmail/deleted-maildirs/

9.賦予腳本可執行權限

[root@mail ~]# chmod 750 /usr/local/bin/maildir-*
[root@mail ~]# chown vmail.vmail /usr/local/bin/maildir-*

10.配置sudo

[root@mail ~]#vim /etc/sudoers
#在 /etc/sudoers 最後增長兩行
vmail ALL = NOPASSWD: /usr/local/bin/maildir-creation.sh
vmail ALL = NOPASSWD: /usr/local/bin/maildir-deletion.sh
#在/etc/sudoers 註釋掉下面內容
#Defaults    requiretty
:wq! #因爲這個文件是隻讀的,因此得強制保存並退出

11.修改postfixadmin的相關文件

[root@mail ~]# cd /var/www/html/postfixadmin/
[root@mail postfixadmin]# vim create-mailbox.php
修改create-mailbox.php 文件,229行內容應該是:
db_log ($SESSID_USERNAME, $fDomain, 'create_mailbox', "$fUsername");
在該行前面增長下面一行,
system("sudo /usr/local/bin/maildir-creation.sh $fDomain ".$_POST['fUsername']);
[root@mail postfixadmin]# vim delete.php
修改delete.php 文件,146行內容應該是,
db_log ($SESSID_USERNAME, $fDomain, 'delete_mailbox', $fDelete);
在該行下面增長下面4行,
$userarray=explode("@",$fDelete);
$user=$userarray[0];
$domain=$userarray[1];
system("sudo /usr/local/bin/maildir-deletion.sh $domain $user");

好了至此postfixadmin配置所有完成,^_^……

7、安裝並配置phpmyadmin

1.解壓並重命令

[root@mail ~]# unzip phpMyAdmin-4.0.4.1-all-languages.zip
[root@mail ~]# mv phpMyAdmin-4.0.4.1-all-languages /var/www/html/
[root@mail ~]# cd /var/www/html/
[root@mail html]# ls
index.php  phpMyAdmin-4.0.4.1-all-languages  postfixadmin
[root@mail html]# mv phpMyAdmin-4.0.4.1-all-languages phpmyadmin
[root@mail html]# ls
index.php  phpmyadmin  postfixadmin
[root@mail html]#

2.修改配置文件

[root@mail html]# cd phpmyadmin/
[root@mail phpmyadmin]# cp config.sample.inc.php config.inc.php     
[root@mail phpmyadmin]#

3.給phpmyadmin受權

mysql> grant all on *.* to root@'localhost' identified by '123456';
Query OK, 0 rows affected (0.03 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

4.測試

好了,登陸成功,如今咱們就能夠用phpmyadmin來管理mysql數據庫了,嘿嘿!

8、配置postfix郵件發送代理

注:Postfix用CentOS6.4系統自帶的,由於CentOS6.4裏面的postfix包已經支持mysql

1.查看postfix版本

[root@mail postfixadmin]# rpm -qa | grep postfix
postfix-2.6.6-2.2.el6_1.x86_64

2.配置postfix

[root@mail ~]# vim /etc/postfix/main.cf
#基本配置
myhostname = mail.free.com
mydomain = free.com
myorigin = $mydomain
inet_interfaces = all
mynetworks_style = host
mynetworks = 192.168.18/24, 127.0.0.0/8
#虛擬域名配置
virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_alias_maps = proxy:mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
# Additional for quota support
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_maildir_limit_message = Sorry, this user has exceeded their disk space quota, please try again later.
virtual_overquota_bounce = yes
#Specify the user/group that owns the mail folders. I'm not sure if this is strictly necessary when using Dovecot's LDA.
virtual_uid_maps = static:2000
virtual_gid_maps = static:2000
#Specifies which tables proxymap can read: http://www.postfix.org/postconf.5.html#proxy_read_maps
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
[root@mail ~]# postconf #檢查配置文件是否有錯誤

3.建立Mysql腳本(注意用戶名和密碼、DBNAME,我這裏全是postfix)
(1).建立/etc/postfix/mysql_virtual_domains_maps.cf文件

[root@mail ~]# vim /etc/postfix/mysql_virtual_domains_maps.cf
user = postfix
password = postfix
hosts = localhost
dbname = postfix
query = SELECT domain FROM domain WHERE domain='%s' AND active = '1'
#optional query to use when relaying for backup MX
#query = SELECT domain FROM domain WHERE domain='%s' AND backupmx = '0' AND active = '1'

(2).建立/etc/postfix/mysql_virtual_alias_maps.cf文件

[root@mail ~]# vim /etc/postfix/mysql_virtual_alias_maps.cf
user = postfix
password = postfix
hosts = localhost
dbname = postfix
query = SELECT goto FROM alias WHERE address='%s' AND active = '1'

(3).建立/etc/postfix/mysql_virtual_mailbox_maps.cf文件

[root@mail ~]# vim /etc/postfix/mysql_virtual_mailbox_maps.cf
user = postfix
password = postfix
hosts = localhost
dbname = postfix
query = SELECT CONCAT(domain,'/',maildir) FROM mailbox WHERE username='%s' AND active = '1'

(4).建立/etc/postfix/mysql_virtual_mailbox_limit_maps.cf文件

[root@mail ~]# vim /etc/postfix/mysql_virtual_mailbox_limit_maps.cf
user = postfix
password = postfix
hosts = localhost
dbname = postfix
query = SELECT quota FROM mailbox WHERE username='%s' AND active = '1'

4.SMTP 認證設定

(1).查看postfix支持的認證,默認支持dovecot

[root@mail ~]# postconf -a
cyrus
dovecot

(2).修改/etc/postfix/main.cf配置文件

[root@mail ~]#vim /etc/postfix/main.cf
#SASL SUPPORT FOR CLIENTS
# Turns on sasl authorization
smtpd_sasl_auth_enable = yes
#Use dovecot for authentication
smtpd_sasl_type = dovecot
# Path to UNIX socket for SASL
smtpd_sasl_path = /var/run/dovecot/auth-client
#Disable anonymous login. We don't want to run an open relay for spammers.
smtpd_sasl_security_options = noanonymous
#Adds support for email software that doesn't follow RFC 4954.
#This includes most versions of Microsoft Outlook before 2007.
broken_sasl_auth_clients = yes
#
smtpd_recipient_restrictions =  permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination

5.使用Dovecot作爲投遞

[root@mail ~]# vim /etc/postfix/main.cf
# TRANSPORT MAP
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1
#修改master.cf文件
[root@mail ~]# vim /etc/postfix/master.cf
#在最後增長這兩行,注意flags前面有兩個空格,否則會報錯
dovecot   unix  -       n       n       -       -       pipe,
  flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/dovecot-lda -f ${sender} -d ${recipient}

9、安裝並配置dovecot郵件檢索代理

說明:dovecot 1.X 與 dovecot 2.X配置文件的區別,1.X因此的配置都在同文件中而2.X是多個文件存放的(/etc/dovecot/dovecot.conf 和 /etc/dovecot/conf.d/),全部2.X配置文件比較分散,我把須要修改的配置文件的內容列出來

1.修改dovecot配置文件

(1).修改/etc/dovecot/dovecot.conf #主配置文件

[root@mail ~]# vim /etc/dovecot/dovecot.conf
protocols = imap pop3
listen = *
dict {
  quota = mysql:/etc/dovecot/dovecot-dict-sql.conf.ext
}
!include conf.d/*.conf

(2).修改/etc/dovecot/conf.d/10-auth.conf

[root@mail ~]# vim /etc/dovecot/conf.d/10-auth.conf
disable_plaintext_auth = no
auth_mechanisms = plain login cram-md5
!include auth-sql.conf.ext

(3).修改/etc/dovecot/conf.d/10-mail.conf

[root@mail ~]# vim /etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:%hMaildir
mbox_write_locks = fcntl

(4).修改/etc/dovecot/conf.d/10-master.conf

[root@mail ~]# vim /etc/dovecot/conf.d/10-master.conf
service imap-login {
  inet_listener imap {
  }
  inet_listener imaps {
  }
}
service pop3-login {
  inet_listener pop3 {
  }
  inet_listener pop3s {
  }
}
service lmtp {
  unix_listener lmtp {
  }
}
service imap {
}
service pop3 {
}
service auth {
  unix_listener auth-userdb {
    mode = 0600
    user = vmail
    group = vmail
  }
#新加下面一段,爲smtp作認證
  unix_listener auth-client {
    mode = 0600
    user = postfix
    group = postfix
  }
}
service auth-worker {
}
service dict {
  unix_listener dict {
    mode = 0600
    user = vmail
    group = vmail
  }
}

(5).修改/etc/dovecot/conf.d/15-lda.conf

[root@mail ~]# vim /etc/dovecot/conf.d/15-lda.conf
protocol lda {
  mail_plugins = quota
  postmaster_address = postmaster@free.com #管理員郵箱
}

(6).修改/etc/dovecot/conf.d/20-imap.conf

[root@mail ~]# vim /etc/dovecot/conf.d/20-imap.conf
protocol imap {
        mail_plugins = quota imap_quota
}

(7).修改/etc/dovecot/conf.d/20-pop3.conf

[root@mail ~]# vim /etc/dovecot/conf.d/20-pop3.conf
protocol pop3 {
  pop3_uidl_format = %08Xu%08Xv
  mail_plugins = quota
}

(8).修改/etc/dovecot/conf.d/90-quota.conf

[root@mail ~]# vim /etc/dovecot/conf.d/90-quota.conf
plugin {
  quota_rule = *:storage=1G
}
plugin {
}
plugin {
  quota = dict:User quota::proxy::quota
}
plugin {
}

(9).增長/etc/dovecot/dovecot-sql.conf.ext

[root@mail ~]# vim /etc/dovecot/dovecot-sql.conf.ext
driver = mysql
connect = host=localhost dbname=postfix user=postfix password=postfix
default_pass_scheme = CRAM-MD5
user_query = SELECT CONCAT('/var/vmail/', maildir) AS home, 2000 AS uid, 2000 AS gid, CONCAT('*:bytes=', quota) as quota_rule FROM mailbox WHERE username = '%u' AND active='1'
password_query = SELECT username AS user, password, CONCAT('/var/vmail/', maildir) AS userdb_home, 2000 AS userdb_uid, 2000 AS userdb_gid, CONCAT('*:bytes=', quota) as userdb_quota_rule FROM mailbox WHERE username = '%u' AND active='1'

(10).增長/etc/dovecot/dovecot-dict-sql.conf.ext

[root@mail ~]# vim /etc/dovecot/dovecot-dict-sql.conf.ext
connect = host=localhost dbname=postfix user=postfix password=postfix
map {
  pattern = priv/quota/storage
  table = quota2
  username_field = username
  value_field = bytes
}
map {
  pattern = priv/quota/messages
  table = quota2
  username_field = username
  value_field = messages
}

2.從新啓動服務

[root@mail ~]# service postfix restart
關閉 postfix:                                             [肯定]
啓動 postfix:                                             [肯定]
[root@mail ~]# service dovecot restart
中止 Dovecot Imap:                                        [失敗]
正在啓動 Dovecot Imap:                                    [肯定]

至此dovecot配置所有完成,^_^ ……
10、測試SMTP與POP3服務

1.postfixadmin建立虛擬域

注:新建free.com測試域!

2.postfixadmin建立測試箱


注:新建test@free.com和loda@free.com兩個測試郵箱!

3.測試鏈接25端口

[root@mail ~]# telnet localhost 25
Trying ::1...
Connected to localhost.
Escape character is '^]'.
220 mail.free.com ESMTP Postfix
ehlo free.com
250-mail.free.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH PLAIN LOGIN CRAM-MD5
250-AUTH=PLAIN LOGIN CRAM-MD5
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
quit
221 2.0.0 Bye
Connection closed by foreign host.
[root@mail ~]#

注:鏈接成功!

4.測試鏈接110端口

[root@mail ~]# telnet localhost 110
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
+OK Dovecot ready.
user 123@free.com
+OK
pass 123456
+OK Logged in.
quit
+OK Logging out.
Connection closed by foreign host.
[root@mail ~]#
注:能夠看到,認證成功並登陸成功!

5.查看自動建立的郵箱

[root@mail ~]# cd /var/vmail/
[root@mail vmail]# ll
總用量 8
drwxr-xr-x 2 vmail vmail 4096 7月  11 00:07 deleted-maildirs
drwx------ 3 vmail vmail 4096 7月  11 01:17 free.com
[root@mail vmail]# cd free.com/
[root@mail free.com]# ls
123
[root@mail free.com]#

注:已自動建立腳本,說明咱們上面的腳本執行成功!

6.foxmail客戶端測試收發郵件

如圖,test@free.com 發給 loda@free.com 郵件

loda@free.com 成功收到郵件!

詳細內容以下,

測試成功能發能收!

7.問題說明

以下圖,當咱們執行postfixadmin的備份,會出現如下警告,並不能實現備份!

從上圖中咱們能夠看出,data.timezone時區問題引發的,下面咱們就來解決一下!

(1).修改/var/www/html/admin/backup.php文件

[root@mail admin]# vim /var/www/html/admin/backup.php
#增長一行(以下圖)
date_default_timezone_set('PRC');

(2).效果以下

注:postfixadmin備份成功!到此一個完整的郵件系統已完成,可是爲了方便的瀏覽和管理文件,咱們下面安裝一下WebMail!

11、安裝並配置WebMail(Roundcubemail)

1.解壓並重命名

[root@mail ~]# tar -xf roundcubemail-0.9.2.tar.gz -C /var/www/html/
[root@mail ~]# cd /var/www/html/
[root@mail html]# ls
admin  index.php  phpmyadmin  roundcubemail-0.9.2
[root@mail html]# mv roundcubemail-0.9.2 webmail
[root@mail html]# ls
admin  index.php  phpmyadmin  webmail
[root@mail html]#

2.配置WebMail

從圖上能夠看出date.timezone報錯,下面咱們來修正一下!

3.修改php.ini

[root@mail installer]# vim /etc/php.ini
date.timezone = Asia/Shanghai

4.修改apache中PHPini的位置

[root@mail installer]# vim /etc/httpd/conf/httpd.conf
PHPIniDir "/etc/php.ini"
[root@mail installer]# service httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]
[root@mail installer]#

5.修改全部Web文件的所屬者與所屬組

[root@mail ~]# cd /var/www/html/
[root@mail html]# ll
total 16
drwxrwxr-x 14 1000 1010 4096 Jul 11 05:25 admin
-rw-r--r--  1 root root   18 Jul 11 04:12 index.php
drwxr-xr-x  9 root root 4096 Jul 11 04:17 phpmyadmin
drwxr-xr-x 11  501   80 4096 Jun 16 23:10 webmail
[root@mail html]# chown -R vmail.vmail admin
[root@mail html]# chown -R vmail.vmail phpmyadmin
[root@mail html]# chown -R vmail.vmail webmail
[root@mail html]# ll
total 16
drwxrwxr-x 14 vmail vmail 4096 Jul 11 05:25 admin
-rw-r--r--  1 root  root    18 Jul 11 04:12 index.php
drwxr-xr-x  9 vmail vmail 4096 Jul 11 04:17 phpmyadmin
drwxr-xr-x 11 vmail vmail 4096 Jun 16 23:10 webmail

6.查看session保存位置

[root@mail html]# vim /etc/php.ini
session.save_path = "/var/lib/php/session"

7.修改session文件的所屬組

[root@mail html]# cd /var/lib/php/
[root@mail php]# ll
total 4
drwxrwx--- 2 root apache 4096 Feb 22 10:56 session
[root@mail php]# chown -R .vmail session/
[root@mail php]# ll
total 4
drwxrwx--- 2 root vmail 4096 Feb 22 10:56 session
[root@mail php]#

8.效果以下

9.單擊NEXT咱們繼續進行設置(下面是必須配置的選項)

(1).配置webmail的顯示名稱


(2).配置Webmail數據庫相關(我這裏所有設置是,roundcubemail)

(3).配置IMAP

(4).  配置SMTP服務器

(5).配置完成效果以下,(你們能夠看到咱們配置好的選項都被列出來了,咱們得下載兩個配置文件main.inc.php和db.inc.php並上傳到時服務器中)

(6).上傳至服務器相關目錄中

[root@mail ~]# cd /var/www/html/webmail/config/
[root@mail config]# ll
total 92
-rw-r--r-- 1 root  root   2905 Jul 10 22:15 db.inc.php
-rw-r--r-- 1 vmail vmail  2893 Jun 16 23:10 db.inc.php.dist
-rw-r--r-- 1 root  root  38438 Jul 10 22:15 main.inc.php
-rw-r--r-- 1 vmail vmail 38414 Jun 16 23:10 main.inc.php.dist
-rw-r--r-- 1 vmail vmail  2731 Jun 16 23:10 mimetypes.php
[root@mail config]#

(7). 給WebMail受權

mysql> CREATE DATABASE roundcubemail;
Query OK, 1 row affected (0.00 sec)
mysql> GRANT ALL PRIVILEGES ON roundcubemail.* TO roundcubemail@localhost IDENTIFIED BY 'roundcubemail';
FLUSH PRIVILEGES;Query OK, 0 rows affected (0.01 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

10.單擊CONTINUE繼續


11.單擊初始化數據庫按鈕

12.初始化完成並用phpmyadmin查看


能夠看到已創建好的數據庫文件!^_^……

13.下面咱們進行WebMail測試

14.登陸並進行收發郵件

能夠看到發送成功,嘿嘿!下面咱們用foxmail接收一下!

能夠看到咱們成功的收到了這封郵件測試成功!至些WebMail安裝成功,下面咱們就得說反垃圾郵件和郵件殺毒了,嘿嘿!

說明:因爲整個mail郵件系統配置複雜,文字與圖片較多我分了兩篇進行說明!下一篇博文中CentOS6.4+LAMP+Postfix+Dovecot+Postfixadmin+Roundcubemail 打造企業級郵件服務器 (2)咱們重點講解,

12、安裝並配置病毒掃描與垃圾郵件過濾

十3、安裝並配置managesieve插件

十4、常見問題分析

相關文章
相關標籤/搜索