郵件服務系列之 postfix+sasl+dovecot+虛擬域+虛擬用戶+webmail+webman綜合演練

文章內容:介紹的是郵件服務系列配置中 postifx+sasl+dovecot+虛擬域+虛擬用戶+webmail+webman綜合實現
文章工具及說明:在配置時需要編譯安裝的軟件包已經上傳到51下載中心,下載請點擊這裏進行下載;文章中的藍色字體是對內容進行的解釋
安裝前的準備工作
配置yum庫後安裝開發工具與開發庫
#yum groupinstall “Development Tools” “Development Libraries” -y
安裝實驗中所有依賴的軟件包(這些都是在編譯的時候報錯時報告所依賴的;所以這裏就直接安裝了,這些包在紅帽系統自身帶的就有)
#yum install httpd openssl-devel dovecot  perl-DBD-MySQL, tcl tcl-devel libart_lgpl libart_lgpl-devel libtool-ltdl libtool-ltdl-devel expect
這些安裝包是在後面進行相關軟件中需要依賴的,這裏就直接安裝了(安裝包的安裝需要都是在實驗中出現編譯等錯誤後發現的,所以寫文檔時就直接安裝了)
郵件服務依賴於DNS服務,所以首先要進行DNS配置
DNS配置
紅帽5.8上面有新版本bind97,這裏先卸載bind93
#rpm -e bind-libs bind-utils
#yum install bind97 bind97-libs bind-97-utils –y
修改named.conf配置文件
#vim /etc/named.conf
修改options中定義的初始的幾個片段,保留以下內容:
  1. directory       "/var/named";

  2. dump-file       "/var/named/data/cache_dump.db";

  3. statistics-file "/var/named/data/named_stats.txt";

  4. memstatistics-file "/var/named/data/named_mem_stats.txt";

  5. recursion yes;

  6. /* Path to ISC DLV key */

  7. bindkeys-file

添加區域文件定義的內容
編輯正向、反向區域配置文件
#vim /var/named/test1.com.zone
#vim /var/named/172.16.51.zone
檢測配置文件中是否有語法錯誤
修改權限
將DNS服務添加到服務列表,並設定開機啓動
修改resolv.conf配置文件中默認DNS
#vim /etc/resolv.conf
  1. nameserver 172.16.51.31     -----指定DNS服務器

更改主機名(與mail服務器域名保持一致)
#vim /etc/sysconfig/network
HOSTNAME=mail.test1.com
手動執行更改主機名,然後重新登錄終端讓其立即生效
#hostname mail.test1.com
啓動DNS服務器
#service named start
安裝mysql
使用的是系統自帶rpm包
#yum install mysql-server mysql-devel
啓動mysql數據庫
# service mysqld start
連接測試
編譯安裝postfix
關閉sedmail
紅帽5.8系統上sendmail服務默認是開啓的需要手動關閉它,它會影響postfix的服務的運行
#service sendmail stop
#chkconfig sendmail off
創建postfix用戶postfix組以及postdrop用戶postdrop組
使用的源碼包版本是postfix-2.9.6,在編譯安裝的之前要使用date命令查看一下自己系統的的時間;因爲在虛擬機中的linux系統很多都是掛起的,會導致時間錯誤;如果軟件包的開發時間在系統時間的後面,這會讓我們的系統變得凌亂的
#hwclock –s    -----將硬件時間同步到系統時間
開始編譯
#tar xf postfix-2.9.6.tar.gz
#cd postfix-2.9.6
# make makefiles 'CCARGS=-DHAS_MYSQL -I/usr/include/mysql -DUSE_SASL_AUTH -DUSE_CYRUS_SASL -I/usr/include/sasl  -DUSE_TLS ' 'AUXLIBS=-L/usr/lib/mysql -lmysqlclient -lz -lm -L/usr/lib/sasl2 -lsasl2  -lssl -lcrypto'
#make
#make install
在執行make install命令後,會讓選擇一些默認的路徑的安裝位置,這裏編譯的沒有做改動,使用的是默認的,自己可根據需要來進行更改,方便以後文件的管理
  1. install_root: [/]                                 ------postfix安裝路徑

  2. tempdir: [/root/postfix-2.9.1] /tmp/postfix       ------臨時文件的生成目錄

  3. config_directory: [/etc/postfix] /etc/postfix    -------配置文件目錄

  4. daemon_directory: [/usr/libexec/postfix]         -------服務進程目錄

  5. command_directory: [/usr/sbin]                    ------bash命令目錄

  6. queue_directory: [/var/spool/postfix]              ---郵件隊列

  7. sendmail_path: [/usr/sbin/sendmail]                ---smtp的客戶端,用於實現與sendmail客戶端

  8. 兼容的

  9. newaliases_path: [/usr/bin/newaliases]             ---生成新別名

  10. mailq_path: [/usr/bin/mailq]                       ---郵件隊列程序

  11. mail_owner: [postfix]                              ---郵件服務器的運行者

  12. setgid_group: [postdrop]                           ---用於實現將用戶的郵件投遞到它的郵箱中去的

  13. html_directory: [no]/var/www/html/postfix          ---當web服務器沒有配置好就使用no選項

  14. manpages: [/usr/local/man]                         ---man文檔的安裝路徑

  15. readme_directory: [no]                             ---幫助文檔

  16. data_directory:[/var/lib/postfix]                 ---可讀寫文件的存放路徑

準備postfix服務腳本
由於postfix服務腳本過長,所以就放在附件中的txt文本中了,給您帶來的不便還請諒解哦
爲postfix服務腳本添加執行權限並添加到服務列表中
爲postfix準備一些配置
生成別名二進制文件
newaliases 的功能傳是將 /etc/aliases 轉換成其所能理解、處理的數據庫
編輯postfix的配置文件main.cf做出響應更改,所要更改的內容如下
  1. #vim /etc/postfix/main.cf

  2. myhostname = mail.test1.com                 ------指定自己的郵件服務器

  3. mydomain = test1.com                        ------自己創建的域名

  4. myorign = $mydomain                         -----定義出站郵件使用的域名

  5. mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain, ns.$mydomain

  6. 定義哪些域接收郵件

  7. mynetworks = 172.16.0.0/16  127.0.0.0/8       --------定義允許中繼的網絡


啓動postfix
#service postfix start
查看日誌,判斷是否啓動成功
查看端口是否成功監聽
進行測試
創建一個用戶用於測試郵件的收發
#useradd hadoop && echo "hadoop" | passwd --stdin hadoop
連接到郵件服務器進行測試發送
telnet連接域名時,由於需要解析所以時間會慢一些,mail from(誰發送的);rcpt to(發送給誰的);data(郵件內容);內容編輯完成後以點“.”表示結束編寫
查看郵件是否接收
#su - hadoop
配置dovecot
安裝dovecot軟件包
#yum install dovecot –y
編輯dovecot配置文件
更改protocols保留需要的協議
# vim /etc/dovecot.conf
  1. protocols = pop3

添加dovecot到服務列表並啓動dovecot服務
測試郵件的是否可以成功接受
在終端發送郵件,內容是”My name is root too!!”
在windows端安裝郵件客戶端工具,進行用戶及郵件服務器的相關配置後進行郵件收取測試;筆者使用的是outlook2003客戶端工具進行收發郵件
點擊“接收”郵件按鈕
配置基於cyrus-sasl的用戶認證功能
編輯/saslauthd配置文件
#vim /etc/sysconfig/saslauthd
更改MECH指定的內容(把原來的pam改成shadow,讓其從/etc/shadow中檢索賬號)
  1. MECH=shadow

將其添加到服務列表中
做一下簡單的測試,檢索賬號
Postfix是藉助SASL來提供認證功能;提供認證功能是要爲Postfix提供一個配置文件(smtpd.conf);這個配置文件是SASL提供的,通過這個配置文件可以指明postfix是否使用SASL進行認證
編輯sasl配置文件smtpd.conf
#vim /usr/lib/sasl2/smtpd.conf
Pwcheck_method意思是讓postfix知道要通過saslauthd來實現用戶認證
mech_list是指定真正要完成認證的功能是誰
重新啓動saslauthd
#service saslauthd restart
編輯postfix配置文件
爲了驗證啓用了sasl認證,所以修改配置文件中mynetwork選項,定義只爲本地網絡中繼,其他網絡的訪問就需要基於sasl來認證了
  1. mynetworks = 127.0.0.0/8

在配置文件尾部添加定義sasl功能的內容,如下
  1. ############################ CYRUS-SASL ############################

  2. broken_sasl_auth_clients = yes

  3. smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination

  4. smtpd_sasl_auth_enable = yes

  5. smtpd_sasl_local_domain = $myhostname

  6. smtpd_sasl_security_options = noanonymous

  7. smtpd_sasl_path = smtpd

  8. smtpd_banner = Welcome to our $myhostname ESMTP,Warning: Version not Available!

重新啓動postfix
service postfix restart
測試
在命令行中進行驗證
在Outlook中收取郵件

郵件服務系列之虛擬域、虛擬用戶和webmail與webman的實現
編譯安裝courier-authlib
# tar jxvf courier-authlib-0.62.4.tar.bz2
# cd courier-authlib-0.62.4
#./configure \

   --prefix=/usr/local/courier-authlib \

   --sysconfdir=/etc \

   --without-authpam \

   --without-authshadow \

   --without-authvchkpw \

   --without-authpgsql \

   --with-authmysql \

   --with-mysql-libs=/usr/lib/mysql \

   --with-mysql-includes=/usr/include/mysql \

   --with-redhat \

   --with-authmysqlrc=/etc/authmysqlrc \

   --with-authdaemonrc=/etc/authdaemonrc \

   --with-mailuser=postfix \

   --with-mailgroup=postfix \

   --with-ltdl-lib=/usr/lib \

   --with-ltdl-include=/usr/include

# make
# make install
編譯執行的選項內容介紹
  1. 反斜線的意思是續行符

  2. --prefix=/usr/local/courier-authlib \            -----文件的安裝路徑

  3. --sysconfdir=/etc \                              -----配置文件的安裝位置

  4. --without-authpam  --without-authshadow  --without-authvchkpw  --without-authpgsql

  5. -----不支持pam/shadow/vchkpw/pgsql認證,這些選項不添加也可以

  6. -with-authmysql                                 ----支持mysql認證(重要就是支持者一項)

  7. --with-mysql-libs=/usr/lib/mysql                ------指明mysql的庫文件路徑的安裝位置

  8. --with-mysql-includes=/usr/include/mysql        -------指明mysql的頭文件的安裝路徑

  9. --with-redhat                                   ------說明系統類型,表示根據redhat系統實現一些系統優化

  10. --with-authmysqlrc=/etc/authmysqlrc             -----指定courier-authlib服務進程配置文件路徑

  11. --with-authdaemonrc=/etc/authdaemonrc            -----守護進程,courier-authlib服務進程的配置文件

  12. --with-mailuser=postfix                          ----郵件收發管理的用戶

  13. --with-mailgroup=postfix                         -----郵件收發管理的組

  14. --with-ltdl-lib=/usr/lib                         -----ltdl動態模塊加載器,提供一個運行環境

  15. --with-ltdl-include=/usr/include                 ----ltdl文件的頭文件路徑

更改socket文件的權限
# chmod 755 /usr/local/courier-authlib/var/spool/authdaemon
把生成的配置文件重新命名
# cp /etc/authdaemonrc.dist  /etc/authdaemonrc
# cp /etc/authmysqlrc.dist  /etc/authmysqlrc
修改/etc/authdaemonrc配置文件
  1. authmodulelist="authmysql"-----指明認證的模塊

  2. authmodulelistorig="authmysql"------保留的原始模塊

  3. daemons=10                              ------默認啓動啓動的進程個數(根據需要修改)

  4. DEBUG_LOGIN=2                           ----打開調試調試功能(三個取值“0”是關閉,“1”是打開調試;“2”是打開調試並且把登陸時的密碼記錄下來;當第一次使用虛擬用戶登陸,但是登陸不上時這個就需要打開)

  5. 編輯/etc/authmysqlrc配置文件

  6. MYSQL_SERVER localhost                  -----指定服務器所在位置

  7. MYSQL_USERNAME  extmail                 -----連接mysql使用的文檔

  8. MYSQL_SOCKET   /var/lib/mysql/mysql.sock  ----指定mysql套接字文件所在位置

  9. MYSQL_PORT      3306                     -----mysql端口號

  10. MYSQL_DATABASE  extmail                  -----在mysql的哪個庫中爲postfix提供虛擬用戶(這裏這樣的設定是與下文extmail的配置保持一致,自己定義也行)

  11. MYSQL_USER_TABLE  mailbox                 -----mysql的用戶賬號存放的表的位置

  12. MYSQL_CRYPT_PWFIELD  password-----mysql中哪個字段是用戶密碼

  13. MYSQL_UID_FIELD  2525                     -----mysql用戶賬戶的UID就是postfix用戶的UID

  14. MYSQL_GID_FIELD  2525                     -----mysql用戶賬號的GID就是postfix組的ID號

  15. MYSQL_LOGIN_FIELD  username                ------哪個字段是用戶的賬號

  16. MYSQL_HOME_FIELD  concat('/var/mailbox/',homedir)        -----用戶賬號的家目錄所在位置,虛擬用戶沒有家目錄,homedir是變量,等同於用戶名稱;concat是mysql內置的函數用於將兩個字符串連接起來

  17. MYSQL_NAME_FIELD  name-----用戶名稱在哪個字段上

  18. MYSQL_MAILDIR_FIELD  concat('/var/mailbox/',maildir)   -----用戶郵箱目錄

爲courie-authlib提供SysV服務腳本
在解壓出的courier-authlib-0.64.0目錄中提供的有服務腳本直接複製使用就可以了
#cd courier-authlib-0.64.0
# cp courier-authlib.sysvinit /etc/rc.d/init.d/courier-authlib
爲服務腳本添加執行權限並且添加到服務列表,設置開機啓動
啓動courier-authlib服務
# service courier-authlib start   (啓動服務)
讓postfix支持虛擬域和虛擬用戶
創建郵箱目錄並且更改屬主爲postfix
編輯main.cf配置文件
#vim /etc/postfix/main.cf
添加內容如下
  1. ######################## Virtual Mailbox Settings  ########################

  2. virtual_mailbox_base = /var/mailbox                 ----用戶郵箱默認目錄

  3. virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf  

  4. -----郵箱映射表在mysql_virtual_mailbox_maps.cf配置文件中定義的就是就是如何查詢這些用戶相關信息

  5. 也就是一些查找語句

  6. virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf            

  7. -----虛擬域,在mysql_virtual_domains_maps.cf定義的是如何在mysql表中查找域

  8. virtual_alias_domains =                              -----定義別名域

  9. virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf        

  10. ----用戶賬號別名,在mysql_virtual_alias_maps.cf配置文件中定義如何查詢

  11. (上述這三個配置文件會在下文配置extman的時候提供)

  12. virtual_uid_maps = static:2525                       ----定義郵箱的所有者

  13. virtual_gid_maps = static:2525                       ----定義郵箱的組

  14. static意思是靜態地圖類型使用自己已經創建的特定的用戶與組)

  15. virtual_transport = virtual                          ----用戶投遞代理

  16. ########################## QUOTA Settings ########################

  17. message_size_limit = 14336000                        ----郵件大小最大值限定

  18. virtual_mailbox_limit = 20971520                     ----用戶郵箱最大值限定

檢測main.cnf配置文件中配置的參數是否支持
#postconf –n
修改/usr/lib/sasl2/smtpd.conf配置文件
定義authdaemond及其路徑
重新啓動一下saslauthd
#service saslauthd restart
配置extman
# tar xf extman-1.1.tar.gz
# cd extman-1.1
# cd docs
在mysql中執行extman已經設置好的sql語句(創建相關的表等)
# mysql -uroot < extmail.sql   -----密碼爲空,-p選項省略了
導入init腳本到mysql中
# mysql -uroot < init.sql
啓動mysql對用戶進行授權
  1. mysql> GRANTALL LPRIVILEGES ON extmail.* TO extmail@localhost IDENTIFIED BY'extmail'

  2. -----在數據庫extmail上的所有表上創建extmail用戶,密碼也是extmail

  3. mysql> GRANTALL LPRIVILEGES ON extmail.* TO extmail@‘127.0.0.1’ IDENTIFIED BY'extmail'

  4. -----與上條命令意思一樣,考慮到使用本機表示方式不同

  5. mysql> FLUSH PRIVILEGES;  ----更新mysql的系統權限相關表

準備配置文件
在解壓出的# extman-1.1目錄下的docs目錄中有提供的配置文件
修改/etc/postfix/main.cf配置文件
當啓用虛擬域以後,就需要取消中心域,在配置文件中需要註釋 myhostname, mydestination, mydomain, myorigin這些參數指令的指定
重啓postfix服務
# service postfix restart
配置dovecot
編輯創建/etc/dovecot-mysql.conf
# vim /etc/dovecot-mysql.conf
----定義dovecot用戶認證時是基於哪個用戶賬號及密碼去連接mysql數據庫,並且到mysql數據庫中哪個表中去查找用戶的賬號與密碼,這個配置定義後會在dovecot.conf配置文件中引用這個配置文件的定義
connect:指定連接時的服務器,用戶賬號及其密碼等
default_pass_scheme:用戶的加密方式
password_query與user_query:定義以用戶登陸時的用戶名爲條件通過mailbox在相應的字段查找用戶名及密碼,以及uid,gid號
編輯dovecot.conf配置文件
# vim /etc/dovecot.conf
在末行模式下全文搜索mail_location(命令是:/mail_location)添加內容是
%d:dovecot支持的宏,代表用戶所在的域;%n: dovecot支持的宏,代表用戶名
全文搜索auth default 查看mechanisms默認值是否是plain 如果不是修改爲plain
全文搜索 passdb pam  註釋它的定義(後面的“}”也要在添加“#”符號來註釋)
全文搜索passdb sql 啓用passdb sql 的定義內容,添加args內容
全文搜索 userdb passwd 註釋其定義內容
全文搜索userdb sql 定義args
passdb sql與userdb sql :定義dovcot認證時基於sql認證,並且指定相關配置文件區mysql的數據庫中檢索
修改完成,然後保存退出
dovecot配置完成重新啓動dovecot服務
安裝配置Extmail-1.2
Extmail-1.2是個網頁文件配置起來比較簡單
修改extmail主配置文件
#vim  /var/www/extsuite/extmail/webmail.cf
更改內容如下
默認語言修改爲中文
更改郵箱地址
聯繫mysql時使用的賬號及密碼
更改socket文件位置
修改完成,然後保存退出
配置apache
首先在/etc/httpd/conf/httpd.conf配置文件中註釋中心主機
更改apache默認用戶與組
因爲extmail要進行本地郵件的投遞操作,所以必須將運行apache服務器用戶的身份修改爲郵件投遞代理的用戶(這裏沒有打開apache服務器的suexec功能,所以採用了這個方法)
在配置文件的行尾創建虛擬主機
ScriptAlias:指定能夠cgi腳本的目錄;Alias    :指定別名
更改cgi目錄的所有文件的屬主屬組爲postfix
修改完成後保存退出
解決依賴關係
實驗文檔的製作是在整個實驗完成之後又重新的進行梳理,所以整合了會報錯的解決方法
需要用到的perl的Unix::syslogd功能
編譯安裝Unix::syslogd
# tar xf Unix-Syslog-1.1.tar.gz # cd Unix-Syslog-0.100
# cd Unix-Syslog-1.1
# perl Makefile.PL                      -----perl模塊的安裝方式
# make
# make install
編譯安裝Unix::syslogd後啓動apache服務
# service httpd start
現在就可以使用windows中的瀏覽器訪問http服務了(這裏的地址是http://172.16.51.31/extmail/
現在的郵箱還不能登錄沒有虛擬用戶,需要再次配置exman,使其能夠在apache服務器訪問;配置流程與extmail相似
首先創建webman用戶(在webman.cf配置文件指定的默認用戶)
連接mysql創建webman
# mv extman-1.1 /var/www/extsuite/extman  
# cd /var/www/extsuite/extman
# cp /var/www/extsuite/extman/webman.cf.default  /var/www/extsuite/extman/webman.cf
編輯extman配置文件
# vim /var/www/extsuite/extman/webman.cf
修改郵箱位置
配置文件有指定的建立會話的目錄(如下圖)這是配置文件中直接定義的所以需要自己自行創建這個目錄並且屬主屬組是httpd進程的(postfix)
關閉驗證碼模塊
更改UID與GID(是postfixUID與其組的GID)
修改完成,保存退出 創建extman運行時所需的臨時目錄,並修改屬主屬組
修改apache配置文件 # vim /etc/httpd/conf/httpd.conf 虛擬主機定義的內容最終修改如下
修改cgi目錄的屬主數組爲postfix
修改完成後保存退出 重新啓動apache服務
現在Extmail與Extman就可以登陸使用了訪問Extman使用172.16.51.31/extman進行訪問

新建域及註冊新用戶介紹
在進入後臺管理後點擊域列表後可以自己創建自己域,填寫相應的信息後,就可以使用自己設置的域進行註冊用戶了(域創建完成以後,需要重新編輯一下新建域中的允許註冊選項,“保存修改”才能生效);註冊用戶是在extmail登陸界面,在域名的選項框中填寫自己創建的域(筆者創建的域名爲deng.com),然後就可以填寫新用戶的相關信息了;完成這些操作後就可以使用自己註冊的用戶登陸了(筆者創建的用戶爲tom)
登陸界面

用戶登陸後界面

現在整個實驗就完成了,是不是也想手動創建一個屬於自己的郵箱!!心動不如行動哦
文檔的整理是在之前實驗完成之後的又進一步的複習、梳理才完成的,如果內容中有理解不正確的,或者是操作有問題的還請大家指出(交流就是一種進步);在截取的圖片中由於終端的窗口是縮放的,所以有的圖有些模糊(特別是圖上藍色字體),這樣的結果還請大家諒解哦!!
知識一直都在補充期待您的關注哦


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