本文由ilanniweb提供友情贊助,首發於爛泥行天下php
想要得到更多的文章,能夠關注個人微信ilanniwebhtml
在前一篇文章《爛泥:Postfix郵件服務器搭建之軟件安裝與配置》中,咱們介紹了psotfix郵件服務器搭建所須要的軟件,以及各個軟件的基本配置。mysql
目前已經達到了經過系統用戶能夠登陸到postfix郵件服務器,可是爲了管理的方便和系統安全,咱們通常是經過postfix的虛擬用戶來管理郵件用戶的。web
Postfix虛擬用戶的原理是,先在系統中建立一個用戶,該用戶不能登陸到系統,而後把郵件用戶所有映射到該系統用戶的家目錄下。sql
對於OS來講全部的操做都是經過該用戶進行的,可是對於postfix的郵件用戶來講又是各自獨立的。這個和vsftpd虛擬用戶的原理類似,而後全部郵件用戶的管理都是經過postfixadmin來進行。數據庫
有關postfix的虛擬用戶,咱們須要根據不一樣的軟件進行不一樣的配置,只有各個軟件的協同配合才能達到自由收發郵件的目的,下面分別介紹下。apache
postfix要支持虛擬用戶,須要修改的配置文件比較多。vim
首先要修改postfix的主配置文件main.cf,以下:瀏覽器
vim /etc/postfix/main.cf安全
queue_directory = /var/spool/postfix
command_directory = /usr/sbin
daemon_directory = /usr/libexec/postfix
data_directory = /var/lib/postfix
mail_owner = postfix
myhostname = mail.ilanni.com
mydomain = ilanni.com
myorigin = $mydomain
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost
local_recipient_maps =
unknown_local_recipient_reject_code = 550
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
debug_peer_level = 2
debugger_command =
     PATH=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
     ddd $daemon_directory/$process_name $process_id & sleep 5
sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix
setgid_group = postdrop
html_directory = no
manpage_directory = /usr/share/man
sample_directory = /usr/share/doc/postfix-2.6.6/samples
readme_directory = /usr/share/doc/postfix-2.6.6/README_FILES
#啓用SMTP認證
smtpd_sasl_type = dovecot
smtpd_sasl_path = /var/spool/postfix/private/auth
smtpd_sasl_application_name = smtpd
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination,reject_unknown_sender_domain
smtpd_sasl_security_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination
smtpd_client_restrictions = permit_sasl_authenticated
smtpd_sasl_security_options = noanonymous
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
#啓用虛擬用戶
virtual_mailbox_base = /home/vmail/
virtual_mailbox_domains = proxy:mysql:/etc/postfix/sql/mysql_virtual_domains_maps.cf
virtual_alias_maps =
   proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf,
   proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_maps.cf,
   proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf
virtual_mailbox_maps =
   proxy:mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf,
   proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1
注意:postfix主配置文件中,須要注意的地方我已經標註出來了,其中還須要說明的是咱們在此啓用的虛擬用戶是《爛泥:Postfix郵件服務器搭建之準備工做》中建立的vmail用戶,該用戶的id是5000,因此在postfix主配置文件會看到vmail的家目錄/home/vmail/,以及vmail的id信息5000。
在如下全部的操做中,若是有vmail相關的信息,這個都是和該用戶進行關聯的。
在master.cf文件添加以下代碼:
vim /etc/postfix/master.cf
dovecot   unix  -       n       n       -       -       pipe
flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/dovecot-lda -f ${sender} -d ${recipient}
鏈接數據庫相關文件有7個,在建立配置文件以前,咱們要在/etc/postfix/目錄下創建sql目錄用來存放這些配置以下:
mkdir /etc/postfix/sql/
如今咱們來建立這些配置文件,注意這些配置文件中,有關數據庫的部分都是《爛泥:Postfix郵件服務器搭建之準備工做》中的用戶名、密碼和數據庫。以下:
vim /etc/postfix/sql/mysql_virtual_alias_maps.cf
user = postfix
password = postfix
hosts = localhost
dbname = postfix
query = SELECT goto FROM alias WHERE address='%s' AND active = '1'
vim /etc/postfix/sql/mysql_virtual_alias_domain_maps.cf
user = postfix
password = postfix
hosts = localhost
dbname = postfix
query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('%u', '@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1'
vim /etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf
user = postfix
password = postfix
hosts = localhost
dbname = postfix
query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1'
vim /etc/postfix/sql/mysql_virtual_domains_maps.cf
user = postfix
password = postfix
hosts = localhost
dbname = postfix
query = SELECT domain FROM domain WHERE domain='%s' AND active = '1'
vim /etc/postfix/sql/mysql_virtual_mailbox_maps.cf
user = postfix
password = postfix
hosts = localhost
dbname = postfix
query = SELECT maildir FROM mailbox WHERE username='%s' AND active = '1'
vim /etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf
user = postfix
password = postfix
hosts = localhost
dbname = postfix
query = SELECT maildir FROM mailbox,alias_domain WHERE alias_domain.alias_domain = '%d' and mailbox.username = CONCAT('%u','@',alias_domain.target_domain) AND mailbox.active = 1 AND alias_domain.active='1'
vim /etc/postfix/sql/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'
以上配置完畢後,如今咱們來測試postfix是否已經正確與cyrus-sasl進行集成,使用以下命令:
telnet mail.ilanni.com 25
ehlo ilanni.com
注意:圖中的ehlo ilanni.com命令,該命令須要手工輸入,而若是出現250-AUTH PLAIN LOGIN和250-AUTH=PLAIN LOGIN兩行,則說明postfix已經正確啓用smtp認證。
dovecot配置文件比較多,下面咱們一一介紹。
vim /etc/dovecot/dovecot.conf
protocols = imap pop3
listen = *
!include conf.d/*.conf
passdb {
  driver = sql
  args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
  driver = static
  args = uid=5000 gid=5000 home=/home/vmail/%d/%n
}
#調試日誌
auth_debug_passwords=yes
mail_debug=yes
auth_verbose=yes
auth_verbose_passwords=plain
vim /etc/dovecot/conf.d/10-auth.conf
disable_plaintext_auth = no
auth_mechanisms = plain login cram-md5
!include auth-system.conf.ext
10-ssl.conf文件主要是關於postfix的ssl認證相關的配置,在此咱們先禁用ssl。以下:
vim /etc/dovecot/conf.d/10-ssl.conf
ssl = no
10-mail.conf文件主要定義郵件用戶存儲相關信息的位置。以下:
vim /etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:/home/vmail/%d/%n/Maildir
mbox_write_locks = fcntl
10-logging.conf文件是定義dovecot日誌的配置文件,咱們也能夠不啓用此配置文件。可是爲了調試咱們在此仍是啓用了該配置文件選項。
注意:若是後續日誌中提示沒有寫入權限的話,修改其權限便可。
vim /etc/dovecot/conf.d/10-logging.conf
info_log_path = /var/log/dovecot_info.log
debug_log_path = /var/log/dovecot_debug.log
10-master.conf文件定義了dovecot的pop3和imap端口,以及其餘的一些信息。
vim /etc/dovecot/conf.d/10-master.conf
service imap-login {
  inet_listener imap {
    port = 143
  }
}
service pop3-login {
  inet_listener pop3 {
    port = 110
  }
}
service auth {
   unix_listener auth-userdb {
mode = 0600
    user = vmail
    group = vmail
  }
  # Postfix smtp-auth
unix_listener /var/spool/postfix/private/auth {
    mode = 0666
    user = postfix
  }
}
修改15-lda.conf文件,是爲了防止dovecot報錯,錯誤以下:
咱們只需在15-lda.conf文件中添加postmaster_address = postmaster@example.com便可,以下:
vim /etc/dovecot/conf.d/15-lda.conf
postmaster_address = postmaster@example.com
vim /etc/dovecot/dovecot-sql.conf.ext
driver = mysql
connect = host=localhost dbname=postfix user=postfix password=postfix
default_pass_scheme = MD5-CRYPT
password_query = SELECT username AS user,password FROM mailbox WHERE username = '%u' AND active='1'
user_query = SELECT maildir, 5000 AS uid, 5000 AS gid, CONCAT('dict:storage=',floor(quota/1000),' proxy::quota') as quota FROM mailbox WHERE username = '%u' AND active='1'
dovecot配置完畢後,咱們如今來配置postfixadmin,postfixadmin須要lamp的支持。有關lamp的安裝,能夠查看《爛泥:Postfix郵件服務器搭建之準備工做》。
postfixadmin不能經過yum方式進行安裝,咱們須要去下載postfixadmin軟件包,以下:
tar -xf postfixadmin-2.93.tar.gz
mv postfixadmin-2.93 /var/www/html/postfixadmin
chown -R apache:apache /var/www/html/postfixadmin
chmod -R 755 /var/www/html/postfixadmin
postfixadmin安裝完畢後,咱們如今來配置postfixadmin。postfixadmin的配置文件是config.inc.php,咱們只需修改這個文件便可。以下:
vim /var/www/html/postfixadmin/config.inc.php
$CONF['configured'] = true;
$CONF['default_language'] = 'cn';
$CONF['database_type'] = 'mysql';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfix';
$CONF['database_password'] = 'postfix';
$CONF['database_name'] = 'postfix';
$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';
3.3 啓動postfixadmin
postfixadmin配置完畢後,咱們如今來啓動postfixadmin。
Postfixadmin不是一個單獨的程序,它是依賴於apache的,因此咱們只須要啓動apache便可。以下:
/etc/init.d/httpd start
chkconfig httpd on
如今咱們在瀏覽器中打開以下鏈接:
http://mail.ilanni.com/postfixadmin/setup.php
經過上圖,咱們能夠很明顯的看出postfixadmin已經正常啓動,並且其所依賴的各個組件也已經正常安裝和配置。
在postfixadmin的配置文件中有一個選項是填寫管理員後臺管理密碼的,默認是changeme。以下:
如今咱們來修改默認密碼,以下:
經過上圖,咱們能夠很明顯的看出默認已經密碼已經被咱們成功的修改了。
修改完畢後,咱們複製該密碼到postfixadmin的配置文件,將原來的changeme替換成功如今的加密後的密碼便可。以下:
vim /var/www/html/postfixadmin/config.inc.php
後臺管理密碼修改完畢後,咱們如今來添加一個管理員帳號admin@ilanni.com。以下:
經過上圖,咱們能夠很明顯的看出管理員admin@ilanni.com已經添加成功。
如今咱們來使用這個管理員登陸看看後臺,後臺登陸地址爲http://mail.ilanni.com/postfixadmin/login.php
以下:
經過上圖,咱們能夠很明顯的看出新添加的管理員已經能夠登陸postfixadmin管理後臺了。
postfixadmin管理員登陸地址是:
http://mail.haiyn.com/postfixadmin/login.php
postfixadmin 普通用戶登陸地址是:
http://mail.ilanni.com/postfixadmin/users/login.php
postfixadmin是支持多域名管理的,在此咱們先添加一個域名ilanni.com。以下:
經過上圖,咱們能夠很明顯的看出ilanni.com這個域名已經添加成功。
ilanni.com這個域名添加完畢後,咱們如今來給這個域名添加新的郵件用戶。以下:
經過上圖,咱們能夠很明顯的看出ilannimail@ilanni.com,這個郵件用戶已經被成功建立。
ilannimail@ilanni.com郵件用戶被添加後,咱們如今來使用郵件客戶端測試是否能夠正常發送和收取郵件。
首先咱們先來測試該用戶是否能夠正常鏈接郵件服務器,以下:
經過上圖,咱們能夠很明顯的看出郵件用戶ilannimail已經正常鏈接postfix郵件服務器。
如今咱們來測試發送郵件功能,以下:
經過上圖,咱們能夠很明顯的看出ilaninmail用戶已經成功的向外域郵箱發送郵件。
如今咱們來測試收取郵件功能,以下:
經過上圖,咱們能夠很明顯的看出ilaninmail用戶已經成功的向收取外域郵箱發送過來的郵件。
如今咱們來查看下postfixadmin數據庫postfix中的數據,以下:
這個是postfix數據庫postfixadmin所生成的表。
admin表中存儲的是管理員用戶。
alias表中存儲的是全部的郵件用戶。
domain表中存儲的是虛擬域名。
本篇文章咱們主要是針對postfix虛擬用戶,進行操做的。如今咱們虛擬域名已經添加,郵件用戶也已經建立。
那麼咱們如今來查看下,咱們的這些操做在系統上產生了哪些影響。
切換到vmail用戶的家目錄,以下:
ll /home/vmail/
經過上圖,咱們能夠很明顯的看出ilanni.com這個虛擬域名在vmail用戶的家目錄下產生了ilanni.com這個目錄。
如今咱們再來看看ilanni.com這個目錄下都有哪些文件,以下:
ll /home/vmail/ilanni.com/
經過上圖,咱們能夠很明顯的看出在ilanni.com這個虛目錄下產生了ilannimail和wxy這兩個目錄,而這兩個目錄名稱恰好對應咱們前面建立的郵件用戶ilannimail和wxy。
這樣看起來就剛恰好和咱們前面解釋的postfix虛擬用戶原理相照應了。
咱們如今查看ilannimail目錄下文件,以下:
ll /home/vmail/ilanni.com/ilannimail/Maildir/
經過上圖,咱們能夠很明顯的看出該目錄下面文件很少,如今咱們主要關注cur目錄。由於經過該目錄下的文件個數,能夠知道ilannimail用戶有多少封郵件。如下兩張截圖,就能夠證實這個說法。以下:
cd /home/vmail/ilanni.com/ilannimail/Maildir/cur
能夠看到cur目錄下有三個文件。
經過foxmail客戶端也能夠看到ilanimail用戶確實只有三封郵件,這就證實了,咱們前面的猜想是正確的。知道cur目錄下的文件個數,能夠知道ilannimail用戶有多少封郵件。
由cur目錄下的文件個數可知目前ilannimail有三封郵件,那麼這三個文件分別對應哪三封郵件呢?
其實咱們能夠根據文件的名稱中的unix時間戳來定位,如今咱們以1457768362.M305033P28093.iZ23r061d7kZ,S=4526,W=4615:2,RS文件爲例。
經過文件名,咱們能夠知道該文件的unix時間戳是1457768362,那麼能夠查找這個unix時間戳對應的實際時間,以下:
經過上圖,能夠知曉是15:39:22這封郵件。
固然咱們也能夠查看這個文件的內容,以下:
cat 1457768362.M305033P28093.iZ23r061d7kZ,S=4526,W=4615:2,RS