postfix+Courier-authlib+extmail
一、安裝DNS服務:
1、配置本地yum
[root@localhost ~]# vim/etc/yum.repos.d/rhel-debuginfo.repo
2、使用本地yum安裝DNS軟件包。
編輯好本地yum之後,使用yum安裝DNS服務所需的軟件包。
[root@localhost ~]# yum install bind bind-chrootcaching-nameserver
3、編輯DNS的配置文件。
[root@localhost ~]# cd /var/named/chroot/etc/
[root@localhost etc]# cp -pnamed.caching-nameserver.conf named.conf
[root@localhost etc]# vim named.conf
[root@localhost etc]# vim named.rfc1912.zones
[root@localhost etc]# cd ../var/named/
[root@localhost named]# cp -p localhost.zone a.com.zone
至此DNS服務已經配置完成。啓動DNS服務,service named start。讓named服務隨系統啓動,chkconfig named on。
因爲該服務器是mail.a.com.域中的郵件交換器,所以要將服務的主機名改爲mail.a.com。修改主機名的方法有兩種,一種是臨時修改,註銷之後再次登錄生效,重啓失效。使用命令:“hostname主機名”另一種是永久修改,需要重啓生效,編輯/etc/sysconfig/network文件,修改“HOSTNAME=主機名”。
[root@localhost named]# vim /etc/sysconfig/network
//HOSTNAME=mail.a.com
註銷後重新登錄,即可生效。
二、安裝extmail前的準備工作
因爲extmail是通過web來進行收發郵件,在線註冊,身份驗證的,所以需要httpd和mysql,openssl一些軟件包。
httpd mysql mysql-server mysql-developenssl-devel dovecot perl-DBD-MySQL tcl tcl-devel libart_lgpl libart_lgpl-devel
libtool-ltdl libtool-ltdl-devel expect
主要的軟件包是:
dovecot //郵件的接收服務
httpd //利用web來進行收發電子郵件
mysql //mysql客戶端
mysql-server //mysql的服務
其它的就是一些依賴的軟件包,安裝完成後,需要對某些服務進行設置。
①給mysql添加管理員登錄口令,以及對其操作的授權。
[root@mail~]# mysqladmin -u root -p password 'redhat'
mysql>mysql -uroot -p 密碼:redhat
mysql>grant all privileges on *.* to root@'%' identified by 'redhat'; 對網絡上的賬號進行授權
mysql>flush privileges; 刷新數據庫裏面的權限
三、安裝extmail相關軟件
軟件包介紹:
Unix-Syslog-0.100.tar.gz //日誌補丁軟件包
courier-authlib-0.63.1.20111230.tar.bz //結合mysql進行身份驗證
extmail-1.2.tar.gz //實現收發信件
extman-1.1.tar.gz // 實現web註冊
postfix-2.8.2.tar.gz //postfix安裝包,提供smtp服務
因爲使用的是源代碼進行安裝,安裝時需要進行編譯,所以系統要具備基本的開發環境,安裝圓滿了才能夠順利進行。使用:yum grouplist查看系統開發環境所具備的基本組。
1、安裝postfix
注意在安裝postfix之前,要先關閉掉系統自帶的sendmail,否則會和postfix的安裝衝突。
servic sendmail stop //關閉sendmail服務
chkconfig sendmail off //不隨系統啓動
① tar -zxvf postfix-2.8.2.tar.gz -C /usr/local/src/
//解壓縮postfix壓縮包到/usr/local/src目錄中
② cd /usr/local/src/postfix-2.8.2
//進入解壓縮後的目錄中
③ groupadd -g 2525 postfix
//添加一個組,組ID:2525
④ useradd -g postfix -u 2525 -s /sbin/nologin -M postfix
//創建一個無登錄權限無家目錄的用戶postfix到組postfix中
⑤ groupadd -g 2526 postdrop
//添加一個組,組ID:2526
⑥ useradd -g postdrop –u 2526 -s /sbin/nologin -M postdrop
//創建一個無登錄權限無家目錄的用戶postdropx到組postdrop中
⑦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'
//生成postfix的make文件
⑧ make //編譯
⑨ make install //安裝
按照以下的提示輸入相關的路徑([]號中的是缺省值,”]”後的是輸入值,省略的表示採用默認值)
install_root: [/] /
tempdir: [/usr/local/src/postfix-2.6.5] /tmp
config_directory: [/etc/postfix]
command_directory: [/usr/sbin]
daemon_directory:[/usr/libexec/postfix]
data_directory:[/var/lib/postfix]
html_directory: [no]/var/www/postfix_html
mail_owner: [postfix] //系統中要有postfix這個用戶
mailq_path: [/usr/bin/mailq]
manpage_directory: [/usr/local/man]
newaliases_path: [/usr/bin/newaliases]
queue_directory: [/var/spool/postfix]
readme_directory: [no]
sendmail_path:[/usr/sbin/sendmail]
setgid_group: [postdrop] //系統中要有postdrop這個組
⑩ newaliases
//生成別名二進制文件,這個步驟如果忽略,會造成postfix效率極低:
安裝好postfix之後,爲它編寫一個服務控制腳本或者利用rpm包中的postfix中的控制腳本。這裏使用的是rpm包中postfix的服務控制腳本來控制源碼安裝的postfix。
2、編輯postfix的配置文件。
#vi /etc/postfix/main.cf
修改以下幾項爲您需要的配置
myhostname = mail.a.com
mydomain = a.com
inet_interfaces = all
mydestination = $myhostname,localhost.$mydomain, localhost, $mydomain
mynetworks = 192.168.30.0/24,127.0.0.0/8
myorigin=$mydomain
說明:
myhostname 參數指定運行postfix郵件系統的主機的主機名,默認情況下,其值被設定爲本地機器名;
mydomain 參數指定您的域名,默認情況下,postfix將myhostname的第一部分刪除而作爲mydomain的值;
inet_interfaces 參數指定postfix系統監聽的網絡接口;
mydestination 參數指定postfix接收郵件時收件人的域名,即您的postfix系統要接收到哪個域名的郵件;
mynetworks 參數指定你所在的網絡的網絡地址,postfix系統根據其值來區別用戶是遠程的還是本地的,如果是本地網絡用戶則允許其訪問;
myorigin 參數用來指明發件人所在的域名;
注意:
每修改參數及其值後執行 postfixreload 即可令其生效;但若修改了inet_interfaces,則需重新啓動postfix;
四、爲postfix開啓基於cyrus-sasl的認證功能
1、查看postfix是否支持cyrus-sasl認證。
2、產生postfix與sasl結合的文件。
利用sasl與sendmail結合的文件產生sasl與postfix認證的文件
[[email protected]]# cd /usr/lib/sasl2/
[root@mailsasl2]# cp -p Sendmail.conf smtpd.conf
[root@mailsasl2]# service saslauthd start
[root@mailsasl2]# chkconfig saslauthd on
啓動saslauthd服務:service saslauthd start
3、修改postfix的配置文件,啓用sasl認證。
#vim /etc/postfix/main.cf
添加如下內容:
broken_sasl_auth_clients = yes //啓用客戶端認證
smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject_invalid_hostname,reject_non_fqdn_hostname,reject_unknown_sender_domain,reject_non_fqdn_sender,reject_non_fqdn_recipient,reject_unknown_recipient_domain,reject_unauth_pipelining,reject_unauth_destination //對客戶驗證的說明
smtpd_sasl_auth_enable = yes //服務器啓用認證
smtpd_sasl_local_domain = $myhostname //認證的主機
smtpd_sasl_security_options =noanonymous //拒絕非認證登錄
smtpd_banner = Welcome to our$myhostname ESMTP,Warning: Version not Available! //登錄時的提示信息
4、重新加載配置文件:service postfix reload
五、安裝Courier authenticationlibrary
1、安裝
①tar -jxvfcourier-authlib-0.63.1.20111230.tar.bz2 -C/usr/local/src/
//解壓縮courier-authlib壓縮包
② cd/usr/local/src/courier-authlib-0.63.1.20111230/
//進入解壓縮後的文件中
③ ./configure \
--prefix=/usr/local/courier-authlib \
--sysconfdir=/etc \
--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-ltdl-lib=/usr/lib \
--with-ltdl-include=/usr/include
//對環境進行配置,紅色參數至關重要,要確保路徑的正確性。
④ make //編譯
⑤ make install //安裝
2、共享庫文件以及頭文件
爲了使其它程序能夠查找到courier-authlib的庫文件和頭文件,需要將它的這些文件共享到系統的庫文件和頭文件中.
①共享庫文件
在/etc/ld.so.conf.d/目錄中創建一個文件:courier-authlib.conf
#touch /etc/ld.so.conf.d/courier-authlib.conf
內容是:courier-authlib的庫文件的路徑:/usr/local/courier-authlib/lib/courier-authlib/
②共享頭文件
ln -s/usr/local/courier-authlib/include /usr/include/courier-authlib
//創建一個連接,將courier-authlib的頭文件鏈接到系統的庫文件目錄中
4、修改文件的權限
chmod 755/usr/local/courier-authlib/var/spool/authdaemon
5、修改認證模塊文件和mysql結合文件
# cp /etc/authdaemonrc.dist /etc/authdaemonrc
# cp /etc/authmysqlrc.dist /etc/authmysqlrc
① 修改/etc/authdaemonrc文件
② 修改/etc/authmysqlrc
編輯/etc/authmysqlrc 爲以下內容,其中2525,2525 爲postfix 用戶的UID和GID。
MYSQL_SERVER localhost
MYSQL_PORT 3306 (指定mysql監聽的端口,這裏使用默認的3306)
MYSQL_USERNAME extmail (這時爲後文要用的數據庫的所有者的用戶名)
MYSQL_PASSWORD extmail (密碼)
MYSQL_SOCKET /var/lib/mysql/mysql.sock (msyql的sock文件路徑)
MYSQL_DATABASE extmail (訪問extmail的數據庫)
MYSQL_USER_TABLE mailbox (存放extmail用戶的表)
MYSQL_CRYPT_PWFIELD password (對passwo字段加密)
MYSQL_UID_FIELD '2525' (extmail用戶文件的用戶ID)
MYSQL_GID_FIELD '2525' (extmail用戶文件的組ID)
MYSQL_LOGIN_FIELD username (登錄時的字段名username)
MYSQL_HOME_FIELD concat('/var/mailbox/',homedir) (用戶的家目錄)
MYSQL_NAME_FIELD name (用戶名字段name)
MYSQL_MAILDIR_FIELD concat('/var/mailbox/',maildir) (用戶郵件目錄)
6、產生courier-authlib的服務控制腳本
# cd/usr/local/src/courier-authlib-0.63.1.20111230/
# cp courier-authlib.sysvinit/etc/init.d/courier-authlib
# chmod 755 /etc/init.d/courier-authlib
# chkconfig --add courier-authlib
# chkconfig --level 2345courier-authlib on
# service courier-authlib start (啓動服務)
7、創建extmail用戶的虛擬家目錄
新建虛擬用戶郵箱所在的目錄,並將其權限賦予postfix用戶:
#mkdir -pv /var/mailbox
#chown –R postfix:postfix /var/mailbox
8、cyrus-sasl與courier-authlib結合
接下來重新配置SMTP 認證,編輯 /usr/local/lib/sasl2/smtpd.conf ,確保其爲以下內容:
pwcheck_method: authdaemond
log_level: 3
mech_list:PLAIN LOGIN
authdaemond_path:/usr/local/courier-authlib/var/spool/authdaemon/socket
然後重啓saslauthd服務:service saslauthd restart
六、安裝extman及其相關配置
讓postfix支持虛擬域和虛擬用戶
1、編輯/etc/postfix/main.cf,添加如下內容:
########################Virtual MailboxSettings########################
virtual_mailbox_base = /var/mailbox
virtual_mailbox_maps =mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_mailbox_domains =mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_alias_domains =
virtual_alias_maps =mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_uid_maps = static:2525
virtual_gid_maps = static:2525
virtual_transport = virtual
maildrop_destination_recipient_limit =1
maildrop_destination_concurrency_limit= 1
##########################QUOTASettings########################
message_size_limit = 14336000
virtual_mailbox_limit = 20971520
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,the user's maildir has overdrawn his diskspace quota, please Tidy your mailboxand try again later.
virtual_overquota_bounce = yes
2、安裝extman
① tar -zxvf extman-1.1.tar.gz
//解壓縮extman軟件包到當前目錄
② 使用extman源碼目錄下docs目錄中的extmail.sql和init.sql建立數據庫:
# cd extman-1.1/docs
-------------------------------------------------------------------------------------------------------------
# mysql -u root -p <extmail.sql
# mysql -u root -p <init.sql
# mysql -u root -p 進行驗證
③ 授予用戶extmail訪問extmail數據庫的權限
mysql> GRANT all privileges onextmail.* TO extmail@localhost IDENTIFIED BY 'extmail';
mysql> GRANT all privileges onextmail.* TO [email protected] IDENTIFIED BY 'extmail';
mysql>FLUSH PRIVILEGES; 讓設置的內容生效
cp mysql_virtual_* /etc/postfix/
//將extman-1.0.1/docs目錄中的mysql開頭的文件拷貝到/etc/postfix,設置虛擬域文件
service postfix restart
七、配置dovecot
1、在開始我們使用的是yum來安裝dovecot,這裏只需要對其進行配置
# vi /etc/dovecot.conf
要修改的內容如下:
mail_location =maildir:/var/mailbox/%d/%n/Maildir
auth default {
mechanisms = plain
passdb sql {
args = /etc/dovecot-mysql.conf
}
userdb sql {
args = /etc/dovecot-mysql.conf
}
2、產生dovecot與mysql結合的文件
首先要修改postf的配置文件:
# vim /etc/postfix/main.cf
#vim /etc/dovecot-mysql.conf //產生一個文件,內容如下:
driver = mysql
connect = host=localhost dbname=extmailuser=extmail password=extmail (如mysql源碼安裝,host=/tmp/mysql.sock)
default_pass_scheme = CRYPT
password_query = SELECT username ASuser,password AS password FROM mailbox WHERE username = '%u'
user_query = SELECT maildir, uidnumberAS uid, gidnumber AS gid FROM mailbox WHERE username = '%u'
重啓dovecot服務:service dovecot restart 。
監控日誌,tail -f /var/log/maillog/ 出現如下信息說明正常:
八、安裝Extmail (首先要確保安裝了httpd)
1、安裝
① # tar -zxvf extmail-1.2.tar.gz
//解壓縮到當前目錄
② # mkdir -pv/var/www/extsuite
//創建一個目錄,用來作爲一個web站點
# mv extmail-1.2/var/www/extsuite/extmail
# mv extman-1.1/var/www/extsuite/extman
//將extmail和extman拷貝到新建的站點目錄下,以便通過web訪問。
③ 修改extmail目錄下的cgi目錄下文件的屬性
④ 修改主配置文件
# cd /var/www/extsuite/extmail/
# cp webmail.cf.default webmail.cf
# vim webmail.cf
部分修改選項的說明:
------------------------------------------------------------------
SYS_MESSAGE_SIZE_LIMIT = 5242880
用戶可以發送的最大郵件
SYS_USER_LANG = en_US
語言選項,可改作:
SYS_USER_LANG = zh_CN
SYS_MAILDIR_BASE = /home/domains
此處即爲您在前文所設置的用戶郵件的存放目錄,可改作:
SYS_MAILDIR_BASE = /var/mailbox
SYS_MYSQL_USER = db_user
SYS_MYSQL_PASS = db_pass
以上兩句句用來設置連接數據庫服務器所使用用戶名、密碼和郵件服務器用到的數據庫,這裏修改爲:
SYS_MYSQL_USER = extmail
SYS_MYSQL_PASS = extmail
SYS_MYSQL_HOST = localhost
指明數據庫服務器主機名,這裏默認即可
SYS_MYSQL_TABLE = mailbox
SYS_MYSQL_ATTR_USERNAME = username
SYS_MYSQL_ATTR_DOMAIN = domain
SYS_MYSQL_ATTR_PASSWD = password
以上用來指定驗正用戶登錄裏所用到的表,以及用戶名、域名和用戶密碼分別對應的表中列的名稱;這裏默認即可
SYS_AUTHLIB_SOCKET =/var/spool/authdaemon/socket
此句用來指明authdaemo socket文件的位置,這裏修改爲:
SYS_AUTHLIB_SOCKET =
usr/local/courier-authlib/var/spool/authdaemon/socket
⑤ 重啓相關服務
九、配置httpd
由於extmail要進行本地郵件的投遞操作,故必須將運行apache服務器用戶的身份修改爲您的郵件投遞代理的用戶;本例中打開了apache服務器的suexec功能,故使用以下方法來實現虛擬主機運行身份的指定。此例中的MDA爲postfix自帶,因此將指定爲postfix用戶:
如果您沒有打開apache服務器的suexec功能,也可以使用以下方法解決:
# vi /etc/httpd/httpd.conf
User postfix
Group postfix
<VirtualHost *:80>
ServerName mail.a.com
DocumentRoot /var/www/extsuite/extmail/html/
ScriptAlias /extmail/cgi /var/www/extsuite/extmail/cgi
Alias /extmail /var/www/extsuite/extmail/html
</VirtualHost>
十、安裝extamil日誌補丁
extmail將會用到perl的Unix::syslogd功能,您可以去http://search.cpan.org搜索下載原碼包進行安裝。
① # tar -zxvf Unix-Syslog-0.100.tar.gz
//解壓縮文件
② # cd Unix-Syslog-0.100
# perl Makefile.PL //使用perl工具進行配置
# make //編譯
# make install //安裝
十一、extmail與extman結合
修改配置文件以符合本例的需要:
# cd /var/www/extsuite/extman
# chown -R postfix:postfix cgi/
# cp webman.cf.default webman.cf
# vi webman.cf
修改內容如下:
----------------------------------------------------------------
SYS_MAILDIR_BASE = /home/domains
此處即爲您在前文所設置的用戶郵件的存放目錄,可改作:
SYS_MAILDIR_BASE = /var/mailbox
修改
SYS_CAPTCHA_ON = 1 爲 SYS_CAPTCHA_ON =0
修改
SYS_LANG = en_US 爲 SYS_LANG = zh_CN
③ 通過web訪問extman的目錄
在apache的主配置文件中Extmail的虛擬主機部分,添加如下兩行:
ScriptAlias /extman/cgi /var/www/extsuite/extman/cgi
Alias /extman /var/www/extsuite/extman/html
重啓httpd服務:service httpd restart
④創建其運行時所需的臨時目錄,並修改其相應的權限:
#mkdir -pv /tmp/extman
#chown postfix.postfix /tmp/extman
⑤ 使用虛擬域
在postfix主配置文件中的mydestination選項中,我們指明瞭哪些域是本地的域,但是在extmail中,我們使用了虛擬域,爲了產生衝突,需要禁用到postfix中的mydestination選項,如果不禁用,那在設置郵箱域時,必須和postfix中指明的相同。
十二、測試
好了,到此爲止,重新啓動apache服務器後,您的Webmail和Extman已經可以使用了,可以在瀏覽器中輸入指定的虛擬主機的名稱進行訪問,如下:
選擇管理即可登入extman進行後臺管理了。默認管理帳號爲:[email protected] 密碼爲:extmail*123*。首先應該添加一些域名。
說明:
(1) 添加域名後,如果無法自由註冊,請重新編輯該域的屬性,允許自由註冊。
(2) 如果您安裝後無法正常顯示校驗碼,安裝perl-GD模塊會解決這個問題。如果想簡單,您可以到以下地址下載適合您的平臺的rpm包,安裝即可: http://dries.ulyssis.org/rpm/packages/perl-GD/info.html
(3) extman-1.1自帶了圖形化顯示日誌的功能;此功能需要rrdtool的支持,您需要安裝此些模塊纔可能正常顯示圖形日誌。
(4)如果登陸http://ip/extmail後出現:
DBIconnect(‘database=extmail;host=localhost;mysql_socket=/var/lib/mysql/mysql.sock’,'extmail’,…)failed: Access denied for user ‘extmail’@'localhost’ (using password: YES) at/opt/test/htdocs/extsuite/extmail/libs/Ext/Auth/MySQL.pm line 45
檢查webmail.cf中於數據庫連接的設置是否正確,以及authmysqlrc的數據庫設置是否正確即可