歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux資訊 >> 更多Linux

通過vpopmail實現qmail郵件賬戶的數據庫管理

通過vpopmail實現qmail郵件賬戶的數據庫管理 摘要:本文在“qmail使用系統用戶作為郵件賬戶的安裝與配置”一文的基礎上討論如何通過vpopmail實現qmail郵件賬戶與系統賬戶分離,郵件賬戶存放在數據庫文件中的解決方案。 硬件環境:HP Netserver E60 128M內存 單網卡 軟件環境:redhat6.2 vpopmail4.9.4 qmail1.3 mysql-3.23.22-beta UCspi-tcp-0.88 前言 1、mysql安裝 2、vpopmail安裝過程 3、vpopmail的詳細配置選項 4、Qmail和虛擬域 5、筆者安裝過程 前言 在一台郵件服務器的上實現多個域的郵件系統是qmail用戶非常關心的問題之一,為了解決這個問題,Inter7開發了遵從GPL版權的vpopmail(vchkpw)來使用戶方便地在一台qmail郵件服務器上實現郵件虛擬域和非系統賬號。其具有一下特點: ●所有的qmail配置及數據文件都提供了具有詳細說明的修改的命令。 ●僅僅占用一個系統賬號,所有的相關進程運行在單個UID/GID之下。 ●支持基於named和IP的虛擬域。安全的使用NFS之上。 ●通過使用三級平衡樹填充技術實現動態的為十個到一千萬用戶創建郵件目錄。 ●根據真實世界的管理需求提供了可配置的記錄功能。 ●支持Oracle, Sybase, Mysql, LDAP, /etc/passwd, /etc/shadow和缺省的cdb用戶認證信息存儲方式。 ●直接傳遞數據到Maildir,來和qmail-pop3d, .qmail文件或其他任何Maildir程序。 ●不需要為虛擬域提供很多.qmail文件,每個域在vpopmail用戶主目錄下擁有自己的目錄,每個域有獨立的密碼文件。 ●詳細說明的命令程序能被用在腳本文件及遠程管理。 ●所有的vpopmail特性的C庫都有詳細的說明文檔。 而且提供了下面的軟件包來增強qmail+vpopmail的特性: ●QmailAdmin 基於web的vpopmail管理工具。 ●vqsignup一個基於vpopmail管理工具的cgi程序,其允許用戶自己申請email賬號。 ●Courier IMAP IMAP服務器。 ●SqWebMail 基於web的email客戶程序。 1、Mysql的安裝; 筆者使用的rpm包方式的源代碼,因此首先要解開rpm包: [root@radiusd ideal]# rpm -ivh MySQL-3.23.22-1.src.rpm MySQL ################################################## 然後: [root@radiusd ideal]# cd /usr/src/redhat/SOURCES/ [root@radiusd SOURCES]# ls -al total 6432 drwxr-xr-x 2 root root 4096 Oct 29 14:07 . drwxr-xr-x 7 root root 4096 Oct 30 2000 .. -rw-r--r-- 1 root root 6560696 Jul 30 11:23 mysql-3.23.22-beta.tar.gz -rw-rw-r-- 1 root root 3082 Jul 30 11:23 mysql.gif [root@radiusd SOURCES]# tar xvgz mysql-3.23.22-beta.tar.gz 解壓源代碼包,就會在當前目錄下生成mysql-3.23.22-beta的子目錄,其中包含了mysql的源代碼,然後使用下面的命令進行安裝: ./configure make make install scripts/mysql_install_db 就實現了Mysql數據庫服務器安裝,其中啟動mysql服務器的命令為: /usr/local/mysql/bin/safe_mysqld & 現在就實現了mysql數據庫服務器的安裝和運行,下面我們應當設立基本的用戶權限信息。缺省的,mysql擁有一個缺省的具有對數據庫完全訪問可控制的用戶,名字為root,所以首先應當為該用戶添加訪問密碼: [root@radiusd src]# mysql -u root mysql Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Welcome to the MySQL monitor. Commands end with ; or g. Your MySQL connection id is 183 to server version: 3.23.22-beta Type 'help' for help. mysql> 這樣就進入了mysql服務器的客戶程序,然後發出sql語句命令: UPDATE user SET PassWord = PASSWORD ('new_password') WHERE user = 'root'; FLUSH PRIVILEGES; 這裡的new_password是為mysql的root用戶設立的密碼。但是一般推薦再創建一個權限和root完全相同的用戶,命令如下: INSERT INTO user VALUES ('host','user','passwd', 'y','y','y','y','y','y','y','y','y','y','y','y','y','y'); 一般,mysql與icradius服務器都是運行在同一個服務器上,這時候,host為localhost,若你的icradius服務器運行在另外一台服務器上,則你需要在這裡設定host為你的icradius服務器的名字。用戶為你設定的用戶名,密碼為該用戶的密碼。 2、vpopmail的安裝過程 1、解壓軟件包: [root@www src]# tar xvfz vpopmail-4.9.4.tar.gz 2、添加必需的組和用戶: [root@www vpopmail-4.9.4]# /usr/sbin/groupadd vchkpw [root@www vpopmail-4.9.4]# /usr/sbin/useradd -g vchkpw vpopmail 若希望將vpopmail用戶的主目錄存放在其他目錄,則需要使用下面的命令: [root@www vpopmail-4.9.4]# /usr/sbin/useradd -g vchkpw -d /path/to/where/you/want vpopmail 3、創建~vpopmail/etc/tcp.smtp文件 若你具有192.168.0的一個c類地址,則在該文件中應該包含內容: 127.0.0.:allow,RELAYCLIENT="" 10.1.1.:allow,RELAYCLIENT="" :allow 若具有多個C地址,則需要在文件中分別包含對應各個C的地址的條目。 4、配置編譯vpopmail: [root@www vpopmail-4.9.4]# ./configure [root@www vpopmail-4.9.4]# make [root@www vpopmail-4.9.4]# make install-strip 5、支持漫游用戶 若希望支持漫游用戶通過郵件服務器的轉發郵件(mail relay),則需要使用如下配置選項: [root@www vpopmail-4.9.4]# ./configure --enable-roaming-users=y 設置crontab,運行: [root@www etc]# crontab -e 添加如下內容: 40 * * * * /home/vpopmail/bin/clearopensmtp 2>&1 > /dev/null 支持漫游用戶的原理是當某個漫游用戶使用pop3取信以後,則在某斷時間內允許該地址通過郵件服務器的轉發信件。 6、添加虛擬域 [root@www /]# cd /home/vpopmail/bin [root@www /]# ./vadddomain test.com 或: [root@www /]# ./vadddomain test.com password-for-postmaster 該命令將會修改一下幾個qmail的配置文件: /var/qmail/control/locals /var/qmail/control/rcpthosts /var/qmail/control/morercpthosts (if rcpthosts > than 50 lines) /var/qmail/control/virtualdomains /var/qmail/users/assign /var/qmail/users/cdb 同時,將創建以下目錄或文件: ~vpopmail/domains/test.com ~vpopmail/domains/test.com/postmaster/Maildir ... ~vpopmail/domains/test.com/vpasswd ~vpopmail/domains/test.com/vpasswd.cdb 然後需要重新啟動qmail進程來更新配置: /etc/rc.d/init.d/qmailstartup restart 6、添加新的郵件POP用戶 [root@www /]# cd /home/vpopmail/bin/ [root@www bin/]#./vadduser [email protected] or 注[root@www bin/]]#./vadduser [email protected] 在這種情況下,用戶郵件域需要被指定test.com,這個用戶被添加到 ~vpopmail/domains/test.com。 7、刪除郵件pop用戶 [root@www bin/]]# /home/vpopmail/bin/vdeluser [email protected] 8、修改一個POP用戶密碼: [root@www bin/]]# /home/vpopmail/bin/vpasswd [email protected] 9、結合vchkpw與qmail-pop3d 當使用vpopmail時,則需要將pop的運行腳本run修改為: #!/bin/sh exec /usr/local/bin/tcpserver -v -H -R 0 pop-3 -u vpopmail -g vchkpw /var/qmail/bin/qmail-popup domain1.com /home/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir 2 >&1 /var/qmail/bin/splogger pop3d 注:從exec到" "都是同一行的內容。 3、vpopmail的詳細配置選項 --enable-roaming-users=ny 當pop3認證通過以後,是否打開對該用戶的郵件轉發(mail relay),缺省是關閉的。若設置該方法為yes,則當某個用戶通過了pop3認證,則將其ip地址加入許通過該郵件服務器的進行郵件relay的列表中。一個名為clearopensmtp的cronjob程序可以用來實現在一段時間以後從允許轉發郵件地址列表中將該ip地址去除。這個選項要求以-x /etc/tcp.smtp.cdb選項來使用tcpserver運行smtp服務器。 --enable-hardquota=#n 設置或打開磁盤限額,NOQUOTA為沒有限制為沒有郵件賬號設置磁盤限額,缺省為50M,這裡=後面的數字單位為字節,也就是為了限制磁盤限額為10M就需要使用配置參數: --enable-hardquota=10000000。 若磁盤限額超出,則將拒絕接收該用戶的新郵件,並返回一封拒絕信息信件,其中的信息可以定制。 --enable-default-domain=name 設定缺省域名 推薦將所有的域都設置為虛擬域,並且挑選一個作為缺省域。對於缺省域的用戶,其通過接收郵件時,只需要在用戶名中設置其郵件用戶名即可,而對於其他非缺省用戶,則需要將用戶名設置為 % 的格式才能通過pop3收取信件。 --enable-ip-alias-domains=yn 允許通過反向解析來察看虛擬域.缺省情況下,每個域使用基於虛擬域的名字,也就是用戶必需在pop用戶名中提供相應的域信息,也就是 % 。 當然可以是用enable-default-domain配置選項來覆蓋該要求。Vpopmail同樣支持基於IP地址的虛擬域,若該選項打開則用戶不需要在pop用戶名中提供 % ,則vpopmai自動對用戶連接的服務器的IP地址進行反向解析,若解析得到一個域名,則vpopmail使用該名字作為域,例如: IP w.x.y.z 對應於域名test.com,用戶設置pop服務器的IP地址為w.x.y.z,然後連接pop服務器,vpopmail1得到連接請求,並察看連接的服務器端的IP,然後進行反向DNS查詢,得到test.com的域名,用戶使用joe作為pop用戶名,vpopmail使用test.com。 --enable-relay-clear-minutes=360 允許漫游用戶通過郵件服務器的轉發郵件的時間段。 若--enable-roamin-users=y,則該選項設置clearopensmtp應該保持該IP在允許列表中的時間,缺省是3小時。 Mysql options --enable-mysql=ny 使用mysql,缺省是no.允許通過將賬號存放在mysql數據庫中來認證用戶。   意:在配置和編譯以前需要修改文件vmysql.h,正確的設置mysql服務器的name/ip, mysql用戶和mysql用戶密碼。該用戶必需要擁有創建數據庫和在其中創建表格的權限。 --enable-sqlincdir= sql頭文件的目錄,缺省為/usr/local/mysql. --enable-sqllibdir=/usr/lib/mysql 庫文件libmysqlclient.a的目錄,缺省為/usr/lib/mysql --enable-sqllibs=mysqlclient mysql庫名,缺省為libmysqlclient.a. --enable-large-site=ny 缺省值為no,使用該選項是為了適應大量用戶的情況。 缺省的vpopmail將所有的域信息存放在同一個table-vpopmail中,這對於一般情況下具有很好的效率。但是對於大量用戶的系統,則需要將該選項設置為yes。這時候,vpoomail將為每個域創建一個table。最主要的區別是域名不存放在數據庫中,因為表格包含了域名。對於大於500,000+的用戶,這可以節省大量的磁盤空間。但是對於有大量虛擬域的系統可能會影響mysql的性能。 Vpasswd/cdb options --enable-ucspi-dir=dir 編譯好ucspi包的目錄位置 使用該目錄來設定ucspi-tcp軟件包的路徑,缺省為../ucspi-tcp-0.84。vpopmail需要使用該目錄中的頭文件和兩個.a文件。 Logging options --enable-logging=eyn 打開(y)或關閉(n)使用syslog進行log,或e僅僅log錯誤信息。 設置log級別,缺省僅僅記錄pop認證錯誤信息。 --enable-log-name=vpopmail 設置log名 User/group options --enable-vpopuser=vpopmail 若使用其他的用戶來安裝該軟件包,則在該選項中指定組名。 --enable-vpopgroup=vchkpw 若使用其他的組來安裝該軟件包,則在該選項中指定組名。 --enable-admin-email=email-address 系統管理員的電子郵件地址。 Directory and file location options --enable-tcpserver-file=/etc/tcp.smtp tcpserver -x使用的郵件轉發配置文件的存放目錄,缺省為/etc --enable-qmaildir=dir qmail的安裝目錄指定,缺省為/var/qmail。 --enable-tcprules-prog=/usr/local/bin/tcprules tcprules程序的安裝位置,缺省為/usr/local/bin --enable-apop-file=/etc/apop-secrets apop密鑰存放目錄 Other options --enable-apop=yn 允許或禁止apop認證,缺省是yes --enable-passwd=yn 允許或禁止/etc/passwd(或shadow)認證。 覆蓋自動配置,缺省的配置程序將自動檢測系統是使用passwd或shadow密碼,通過設置該選項為no,可以禁止所有的/etc/passwd賬號認證。 4、Qmail和虛擬域 Qmail對於郵件域有"local"和"virtual"的概念。local域是實現匹配/etc/passwd賬號;而虛擬域則匹配於羅列在qmail的控制文件"virtualdomains"的各個域。Vpopmail則利用qmail的users/assign和virtualdomains文件。users/assign文件(該文件的含義可以參考Life with qmail中的qmail-users 3.6的說明)被編譯為users/cdb的形式,它是一個哈希數據庫來加快查找速度。若任意一個模式得到匹配,則qmail使用文件中定義的uid和gid傳送該郵件到文件中定義的目錄。Vpopmail利用該方法來實現使qmail以單一的vpopmail/vchkpw身份來傳輸所有的虛擬域的郵件,從而實現將郵件傳輸到vpopmail/domains/ 目錄下的不同用戶。 對於qmail來說,qmail-local程序一旦從users/assign得到相關信息,則其進行標准的.qmail文件操作。一般來說,.qmail- 文件被用來完成郵件轉發、別名或調用其他程序如ezmlm等。若沒有找到匹配,則qmail-local查找.qmail-default文件,這是qmail-local郵件投遞機制中最後一步。 Vpopmail利用該文件來調激活vdelivermail 程序,該程序以兩個參數被調用,第一個當前沒有作用,主要是用作向後兼容的;第二個參數是用來在一個虛擬域用戶沒有被找到時的缺省投遞,一般來說,缺省投遞可以是將郵件投遞到某個目錄或某個郵件地址或返回無此用戶的返回信件。 5、筆者安裝過程 筆者是在安裝成功了真實用戶qmail系統的基礎上進一步實現將賬號存放在mysql數據庫中。這裡支持漫游用戶,用戶磁盤限額為10M,系統具有多個域:domain1.com和domain2.com,並且這兩個域是完全等同的,即:用戶一旦擁有了系統信箱,將擁同時有[email protected][email protected]兩個地址。筆者的mysql服務器按照缺省配置已經安裝成功,運行正常。並且將所有的郵件賬號都放進虛擬域中,不允許通過/etc/passwd進行認證。 第一步:修改文件/usr/src/vpopmail-4.9.4/vmysql.h,修改 /* Edit to match your set up */ #define MYSQL_SERVER "localhost" #define MYSQL_USER "root" #define MYSQL_PASSWD "passwoerd" /* End of setup section*/ 中mysql服務器的地址,若你的mysql服務器存放在其他機器上,則將localhost修改為你的mysql服務器的ip地址;若你希望使用其他具有對數據庫讀寫及創建庫和表格的用戶來訪問數據庫,則將root為你希望的用戶名;將passwoerd修改為你的mysql數據庫對應的訪問密碼。 拷貝//usr/local/lib/mysql下的所有內容到/lib/中 第二步:創建需要的用戶和組: /usr/sbin/groupadd vchkpw /usr/sbin/useradd -g vchkpw vpopmail 第三步:配置編輯vpopmail: ./configure --enable-roaming-users=y --enable-hardquota=10000000 --enable-default-domain=secfocus.com --enable-mysql=y --enable-sqlincdir=/usr/local/include/mysql/ --enable-sqllibdir=/usr/local/lib/mysql --enable-ucspi-dir=../ucspi-tcp-0.88 --enable-passwd=n (注:以上全為一行) make make install 第四步:添加虛擬域 /home/vpopmail/bin/vadddomain domain1.com /home/vpopmail/bin/vaddaliasdomain domain2.com 第五步:添加用戶 /home/vpopmail/bin/vadduser [email protected] 第六步:支持pop3 當使用vpopmail時,則需要將pop的運行腳本run修改為: #!/bin/sh exec /usr/local/bin/tcpserver -v -H -R 0 pop-3 -u vpopmail -g vchkpw /var/qmail/bin/qmail-popup domain1.com /home/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir 2 >&1 /var/qmail/bin/splogger pop3d 注:從exec到““為一行 注:在這裡筆者在dns的設置中,有如下的容: @ IN SOA ns.domain1.com. root.ns.domian1.com. ( 2000103001 ; serial 0 ; refresh 0 ; retry 0 ; eXPire 0 ; default_ttl ) @ IN NS ns.domian1.com. @ IN MX 10 mail.domian1.com. @ IN A 210.112.11.200 .. ... mail IN A 210.112.11.200 @ IN A 210.112.11.200表示當按照一般的域名查詢(非MX查詢,而是A查詢)domain1.com時,返回解析地址為210.112.11.200,而mail.doamin1.com也解析為210.112.11.200。






Copyright © Linux教程網 All Rights Reserved