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