我是通州北大青鳥的學(xué)生,今天我將我這段時(shí)間學(xué)習(xí)的postfix 郵件系統(tǒng)寫成文檔分享給大家。感謝通州北大青鳥的老師對(duì)我的莫大幫助!
一、準(zhǔn)備
1.從www.extmail.org 中下載extman-1.1.tar.gz
2.從http://sourceforge.net/projects/courier/files/ 下載courier-authlib
使用Courier-authlib軟件的目的是因?yàn)閟aslauthd程序不支持?jǐn)?shù)據(jù)庫(kù)認(rèn)證,而Courier-authlib支持多種數(shù)據(jù)庫(kù)認(rèn)證
3.檢查postfix是否支持虛擬用戶 postconf – m | grep msyql 如果出現(xiàn)mysql表示支持
二、建立虛擬用戶數(shù)據(jù)庫(kù)
1啟動(dòng)mysql
service mysqld restart
(要想使用此方法啟動(dòng),必須將mysqld添加為系統(tǒng)服務(wù),見構(gòu)建postfix郵件服務(wù)器(一))
2.解壓 extman(通州北大青鳥)
tar zxvf extman-1.1.tar.gz
3.導(dǎo)入extman軟件包中的數(shù)據(jù)庫(kù)腳本
cd extman-1.1/docs
mysql -u root -p123456 < extmail.sql
mysql -u root -p123456 < init.sql
-p后面接的是mysql的密碼
(要想直接使用mysql就要輸入export PATH=$PATH:/usr/local/mysql/bin)
extmail.sql 腳本進(jìn)行的操作:主要針對(duì)郵件域localhost進(jìn)行初始化
創(chuàng)建 extmail 庫(kù),及該庫(kù)中的一些表
創(chuàng)建用戶 extmail@localhost,密碼為 extmail 對(duì)數(shù)據(jù)庫(kù)extmail中的表?yè)碛小癝ELECT”、“UPDATE”的權(quán)限
創(chuàng)建用戶 webman@localhost,密碼為 extman 對(duì)數(shù)據(jù)庫(kù)extmail中的表?yè)碛小癝ELECT”、“INSERT”、“DELETE”、“UPDATE”權(quán)限
init.sql腳本進(jìn)行的操作:主要是建立了一個(gè)新的測(cè)試郵件域
添加虛擬郵件域 extmail.org 的記錄,作為該郵件域的管理帳戶
創(chuàng)建用戶 root@extmail.org,密碼為 extmail*123*
創(chuàng)建用戶 postmaster@extmail.org,密碼為 extmail
作為該郵件域內(nèi)的基本郵件用戶
三、配置虛擬用戶支持postfix
1、修改main.cf文件
Vi /etc/ostfix/main.cf
#mydestination = $mydomain, $myhostname //注釋這一行
添加下面的內(nèi)容
virtual_mailbox_base = /mailbox
\\指定虛擬郵箱存儲(chǔ)目錄的路徑起點(diǎn)
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
\\指定虛擬郵件用戶對(duì)應(yīng)的別名文件位置
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
\\指定記錄虛擬郵件地址與存儲(chǔ)位置對(duì)應(yīng)關(guān)系的映射文件的位置
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
\\設(shè)置postfix服務(wù)器可以接收的虛擬郵件域的域名,作用類似于配置參數(shù)“mydestination”
virtual_uid_maps = static:1000 \\設(shè)置所有虛擬用戶映射的本地用戶的UID
virtual_gid_maps = static:1000 \\設(shè)置所有虛擬用戶映射的本地用戶的GID
2. 建立虛擬用戶映射表文件
方法:復(fù)制 extman 軟件包中docs子目錄下的樣例文件
mysql_virtual_alias_maps.cf mysql_virtual_mailbox_maps.cf mysql_virtual_domains_maps.cf
cd extman-0.2.5/docs
cp mysql_virtual_* /etc/postfix/
四、為虛擬用戶設(shè)置SMTP發(fā)信認(rèn)證(通州北大青鳥)
1.解壓coutier-authlib-0.63.0
tar jxvf courier-authlib-0.63.0.tar.bz2
2.預(yù)配置
./configure
–prefix=/usr/local/courier-authlib \ \\安裝的位置
>–without-stdheaderdir \ \\將頭文件安裝到一個(gè)不是默認(rèn)的頭文件搜索路徑的目錄中
>–with-authmysql \ \\配置支持MYSQ數(shù)據(jù)庫(kù)查詢
>–with-redhat \
>–with-mysql-libs=/usr/local/mysql/lib/mysql \ \\mysql的庫(kù)文件路徑
>–with-mysql-includes=/usr/local/mysql/include/mysql \\msyql 的頭文件路徑
3.編譯,安裝
make ; make install
4.生成authmysqlrc和 authdaemonrc兩個(gè)文件
命令 make install-configure
authdaemonrc:主配置,設(shè)置使用的認(rèn)證方式
authmysqlrc:數(shù)據(jù)庫(kù)配置,設(shè)置連接地址、查詢方式等
5.將courier-authlib的庫(kù)文件路徑添加到系統(tǒng)的搜索路徑中去
1) vi /etc/ld.so.conf
/usr/local/courier-authlib/lib/courier-authlib
2)更新
Ldconfig
6.修改authdaemonrc主配置文件,僅保留authmysql認(rèn)證方式,去掉其他
1)進(jìn)入目錄
cd /usr/local/courier-authlib/etc/authlib/
2)備份
cp authdaemonrc authdaemonrc.bak
3)保留authmysql認(rèn)證方式
①vi authdaemonrc
②刪掉所有內(nèi)容 1000dd
③添加如下兩行
authmodulelist=”authmysql”
authmodulelistorig=”authmysql”
7.修改authmysqlrc文件,用于描述如何向mysql數(shù)據(jù)庫(kù)查詢信息(通州北大青鳥)
1)cd /usr/local/courier-authlib/etc/authlib/
2)備份
cp authmysqlrc authmysqlrc.bak
3)vi authmysqlrc
修改
MYSQL_SERVER localhost \\msyql數(shù)據(jù)庫(kù)服務(wù)器位置
MYSQL_USERNAME extmail \\數(shù)據(jù)庫(kù)管理員賬號(hào)
MYSQL_PASSWORD extmail \\數(shù)據(jù)庫(kù)管理員賬戶密碼
MYSQL_SOCKET /tmp/mysql.sock \\mysql.sock文件位置
MYSQL_DATABASE extmail \\虛擬用戶數(shù)據(jù)庫(kù)
MYSQL_USER_TABLE mailbox \\重mailbox表中獲得賬戶的信息
MYSQL_CRYPT_PWFIELD password \\從pssword字段獲得帳戶密碼
MYSQL_UID_FIELD uidnumber \\從uidnumber字段獲得映射的本地用戶UID
MYSQL_GID_FIELD gidnumber \\從gidnumber字段獲得映射的本地組GID
MYSQL_LOGIN_FIELD username \\從username字段獲得帳戶名稱(帶@后綴)
MYSQL_HOME_FIELD concat(‘/mailbox/’,homedir) \\合并出用戶的宿主目錄完整路徑
MYSQL_NAME_FIELD name \\從name字段獲得帳戶名稱(不帶@后綴)
MYSQL_MAILDIR_FIELD concat(‘/mailbox/’,maildir) \\合并出用戶的完整郵件存儲(chǔ)路徑
8.回到源碼目錄,復(fù)制腳本,并啟動(dòng)courier-authlib服務(wù)
cd /postfix-an/courier-authlib-0.63.0 \\回到源碼目錄
cp courier-authlib.sysvinit /etc/init.d/courier-authlib \\復(fù)制腳本到
chmod 755 /etc/init.d/courier-authlib \\給權(quán)限
chkconfig –level 35 courier-authlib on \\在35基本,開機(jī)啟動(dòng)
service courier-authlib start \\啟動(dòng)courier-authlib
9.修改cyrus sasl設(shè)置
vi /usr/lib/sasl2/smtpd.conf
pwcheck_method: authdaemond
authdaemond_path: /usr/local/courier-authlib/var/spool/authdaemon/socket
10.修改目錄的權(quán)限,否則postfix無(wú)法獲得用戶名和密碼
chmod –R 755 /usr/local/courier-authlib/var/spool/authdaemon/
五、修改Dovecot的配置
Vi /etc/dovecot.conf
1.查找mail_location 把它修改為
mail_location = maildir:/mailbox/%d/%n/Maildir
2.查找 mechanisms = plain 在下面添加以下內(nèi)容
passdb sql {
args = /etc/dovecot-mysql.conf
}
userdb sql {
args = /etc/dovecot-mysql.conf
}
4.建立數(shù)據(jù)查詢配置文件
Vi /etc/dovecot-mysql.conf \\建立文件,添加如下內(nèi)容
driver = mysql
connect = host=localhost dbname=extmail user=extmail password=extmail
default_pass_scheme = CRYPT \\msyql數(shù)據(jù)庫(kù)中存儲(chǔ)的密碼串的加密算法
password_query = SELECT username AS user,password AS password FROM mailbox WHERE username = ‘%u’ \\用于查詢用戶密碼的SQL語(yǔ)句
user_query = SELECT maildir, uidnumber AS uid, gidnumber AS gid FROM mailbox WHERE username = ‘%u’ \\用于查詢用戶的SQL語(yǔ)句
上述配置可參考樣例文件”etc/ dovecot-sql.conf”
5.建立虛擬用戶的郵箱根目錄“/mailbox”
1)mkdir -p /mailbox/extmail.org/postmaster/Maildir/
-p 表示連接新建目錄
/mailbox 是郵箱存儲(chǔ)空間的頂層目錄,必須創(chuàng)建
/mailbox/extmail.org 目錄對(duì)應(yīng)虛擬郵件域 extmail.org
/mailbox/extmail.org/postmaster 目錄對(duì)應(yīng)郵件用戶 postmaster@extmail.org
/mailbox/extmail.org/postmaster/Maildir 目錄對(duì)應(yīng)該用戶的郵箱存儲(chǔ)空間
2)chown -R postfix:postfix /mailbox
6.重啟dovecot
/usr/local/sbin/dovecot -c /etc/dovecot.conf
六、測(cè)試虛擬用戶
1. 使用 authtest 驗(yàn)證數(shù)據(jù)庫(kù)查詢,用于測(cè)試的郵箱賬號(hào)用戶:postmaster@extmail.org ,密碼:extmail
1)命令 /usr/local/courier-authlib/sbin/authtest -s login postmaster@extmail.org extmail
2)如果出現(xiàn)“Authentication succeeded”表示成功
2.測(cè)試對(duì)虛擬用戶的smtp發(fā)信認(rèn)證
出現(xiàn)235 Authentication Successful 表示成功
1)首先獲得虛擬用戶postmaster@extmail.org的用戶名和密碼的BASE64編碼字符串
①#perl -e ‘use MIME::Base64; print encode_base64(“postmaster\@extmail.org”)’
得到cG9zdG1hc3RlckBleHRtYWlsLm9yZw==
②perl -e ‘use MIME::Base64; print encode_base64(“extmail”)’得到 ZXh0bWFpbA==
或者用命令printf “用戶名或密碼” | openssl base64
(通州北大青鳥)