Linux中Postfix虛擬使用者及虛擬域(六)
上圖是一個幾乎完整的郵件系統架構圖,這裡基於Mysql資料庫進行使用者認證,不管是Postfix、Dovecot、webmail都需要去Mysql資料庫中進行使用者認證。
1、使用者可以基於outlook連線postfix然後通過Courier-authlib連線到Mysql進行認證,認證成功就可以傳送郵件。前面我們也是用Cyrus-sasl進行shadow使用者認證,其實Cyrus-sasl也同樣支援Mysql認證。但是由於驅動比較底層配置起來比較繁瑣,所以選用Courier-authlib進行認證,但是從上圖可以看出我們是postfix還是借用Cyrus-sasl函式庫與Courier-authlib進行連線。同樣的道理Postfix也可以直接連線到Courier-authlib但是比較麻煩。
2、使用者可以基於outlook連線Dovecot然後直接到mysql進行認證,認證成功就可以接收Mailbox中的郵件。這裡比較簡單,因為Dovecot自身支援到Mysql的認證。
3、使用者可以基於webmail進行收發郵件,同樣通過Extmail/Extman到Mysql中認證,認證成功。就可以基於postfix發郵件,基於Dovecot收郵件。但是Extmail/Extman自身就可以到Mailbox中收取郵件。
Courier 是一個優秀的電子信件系統,擁有一個完整的郵件系統:其提供MTA(Courier-MTA),MDA(Maildrop),MUA,MRA(Courier-IMAP),SASL(Courier-authlib)WebMail(sqwebmail)等這些元件。
Courier-authlib是Courier元件中的認證庫,它是courier元件中一個獨立的子專案,用於為Courier的其它元件提供認證服務。其認證功能通常包括驗正登入時的帳號和密碼、獲取一個帳號相關的家目錄或郵件目錄等資訊、改變帳號的密碼等。而其認證的實現方式也包括基於PAM通過/etc/passwd和/etc/shadow進行認證,基於GDBM或DB進行認證,基於LDAP/MySQL/PostgreSQL進行認證等。因此,courier-authlib也常用來與courier之外的其它郵件元件(如postfix)整合為其提供認證服務。
[root@localhost ~]# yum install libtool-ltdl libtool-ltdl-devel
[root@localhost ~]# yum install expect
[root@localhost ~]# groupadd -g 1001 vmail [root@localhost ~]# useradd vmail -u 1001 -g 1001
[root@localhost ~]# tar xvf courier-authlib-0.66.1.tar.bz2 -C /usr/src/ [root@localhost ~]# cd /usr/src/courier-authlib-0.66.1 [root@localhost courier-authlib-0.66.1]# ./configure \ --prefix=/usr/local/courier-authlib \ --sysconfdir=/etc \ --without-authpam \ --without-authshadow \ --without-authvchkpw \ --without-authpgsql \ #以上without是不支援此類認證免得需要安裝依賴的資料包 --with-authmysql \ #基於mysql認證 --with-mysql-libs=/usr/lib64/mysql \ --with-mysql-includes=/usr/include/mysql \ #需要mysql的標頭檔案和庫檔案路徑一定要正確 --with-redhat \ #如果是redhat系統會實現自我優化;如果不是就不要加了 --with-authmysqlrc=/etc/authmysqlrc \ #提供給mysql的配置檔案,記錄認證怎樣跟資料進行互動 --with-authdaemonrc=/etc/authdaemonrc \ #courier-authlib自身是一個服務程式所以也需要一個配置檔案 --with-mailuser=vmail \ --with-mailgroup=vmail \ #使用者郵件收發管理的使用者和組
[root@smtp ~]# make && make install
[root@localhost ~]# chmod 755 /usr/local/courier-authlib/var/spool/authdaemon #調整一下authdaemon的許可權(存放程式套接字) [root@localhost ~]# cp -p /etc/authdaemonrc.dist /etc/authdaemonrc #調整courier檔名,因--with-authdaemonrc=/etc/authdaemonrc指定了檔名 [root@localhost ~]# cp -p /etc/authmysqlrc.dist /etc/authmysqlrc #調整跟mysql互動檔名,因--with-authmysqlrc=/etc/authmysqlrc指定了檔名
[root@localhost ~]# vim /etc/authdaemonrc authmodulelist="authmysql" #指定認證模組為authmysql authmodulelistorig="authmysql" #認證的原始模組只保留authmysql daemons=10 #修改預設開啟程式 #DEBUT-LOGIN=2 #如果使用虛擬使用者登入有問題就開啟除錯功能看看日誌;不然不要開啟
[root@localhost ~]# vim /etc/authmysqlrc MYSQL_SERVER localhost #指定Mysql伺服器地址 MYSQL_USERNAME extmail #連線資料庫的使用者名稱(如果不使用extmail,那麼在extman中需要重新指定賬號) MYSQL_PASSWORD extmail #使用者密碼 MYSQL_PORT 3306 #指定你的mysql的埠(使用socket通訊就不用埠) MYSQL_SOCKET /var/lib/mysql/mysql.sock #Mysql的套接字檔案 MYSQL_DATABASE extmail #儲存使用者的庫(如果不使用extmail,那麼在extman中都要更改) MYSQL_USER_TABLE mailbox #儲存使用者的表(mailbox是extman幫我們自動生成的不能改) MYSQL_CRYPT_PWFIELD password #認證密碼欄位 MYSQL_UID_FIELD '1001' #vmail使用者的UID MYSQL_GID_FIELD '1001' #vmail使用者的GID MYSQL_LOGIN_FIELD username #認證賬號欄位 MYSQL_HOME_FIELD concat('/var/mailbox/',homedir) #concat是mysql的一個函式用來把/var/mailbox/跟homedir連線成一個路徑(homedir是mysql的一個變數值為每一個使用者名稱) MYSQL_NAME_FIELD name #使用者全名欄位,預設 MYSQL_MAILDIR_FIELD concat('/var/mailbox/',maildir) #虛擬使用者的郵件目錄
[root@localhost ~]# cd /usr/src/courier-authlib-0.66.1/ [root@localhost courier-authlib-0.66.1]# cp courier-authlib.sysvinit /etc/rc.d/init.d/courier-authlib [root@localhost ~]# chmod 755 /etc/init.d/courier-authlib [root@localhost ~]# chkconfig --add courier-authlib [root@localhost ~]# chkconfig courier-authlib on [root@localhost ~]# service courier-authlib start Starting Courier authentication services: authdaemond
PS:可以使用pstree -a可以看到authdaemond已經生成了11個程式,我們開啟了10個,但是有一個主程式負責生成其他程式。
[root@localhost ~]# mkdir -pv /var/mailbox [root@localhost ~]# chown -R vmail /var/mailbox
PS:郵箱目錄屬主為vmail
Postfix的SMTP認證需要透過Cyrus-SASL連線到authdaemon獲取認證資訊
[root@localhost ~]# vim /usr/lib64/sasl2/smtpd.conf #pwcheck_method: saslauthd #mech_list: PLAIN LOGIN #註釋前面實驗使用SASL認證的引數 pwcheck_method: authdaemond log_level: 3 mech_list:PLAIN LOGIN authdaemond_path:/usr/local/courier-authlib/var/spool/authdaemon/socket
[root@localhost ~]# vim /etc/postfix/main.cf #################Virtual Mailbox Settings################### virtual_mailbox_base = /var/mailbox #使用者郵箱目錄(跟這個引數MYSQL_HOME_FIELD定義的要一致) virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf #用來查詢使用者賬號資訊(這個配置檔案中定義了SQL語句,使用extmail使用者) 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:1001 virtual_gid_maps = static:1001 #每一個虛擬使用者都對映為系統使用者vmail virtual_transport = virtual #指定MDA專門為虛擬使用者投遞代理 virtual_mailbox_limit = 20971520 #磁碟配額
[root@localhost ~]# yum install httpd
需要使用原始碼extman目錄下docs目錄中的extmail.sql和init.sql建立資料庫extmail
[root@localhost ~]# tar zxvf extman-1.1.tar.gz -C /usr/src/ [root@localhost ~]# cd /usr/src/extman-1.1/docs [root@localhost docs]# service mysqld restart [root@localhost docs]# mysql -u root < extmail.sql [root@localhost docs]# mysql -u root < init.sql [root@localhost docs]# mysql -u root -B -e "show databases;" Database information_schema extmail mysql test
#對於MySQL-5.1以後版本,其中的服務指令碼extmail.sql執行會有語法錯誤,因為MySQL-5.1使用的預設儲存引擎是MyISAM,而在MySQL-5.1之後使用的是InnoDB儲存引擎。可先使用如下命令修改extmail.sql配置檔案而後再執行修改方法如下:
sed -i ‘s@TYPE=MyISAM@ENGINE=InnoDB@g’ extmail.sql
#這裡我使用的是PRM包,所以MySQL是5.1版本的,不用修改SQL指令碼。
這兩個SQL指令碼會建立extmail資料庫和表,以及extmail、webman使用者。所以需要授予使用者extmail訪問extmail資料庫的許可權(生產環境中extmail給select許可權,因為它只需要檢索使用者即可)。同時這裡的密碼設定為extmail同上面的配置檔案一樣,不然都要改。
mysql> GRANT all privileges on extmail.* TO extmail@localhost IDENTIFIED BY 'extmail'; mysql> GRANT all privileges on extmail.* TO extmail@127.0.0.1 IDENTIFIED BY 'extmail'; mysql> flush privileges;
[root@localhost ~]# cd /usr/src/extman-1.1/docs [root@localhost docs]# cp mysql_virtual_mailbox_maps.cf /etc/postfix/ [root@localhost docs]# cp mysql_virtual_domains_maps.cf /etc/postfix/ [root@localhost docs]# cp mysql_virtual_alias_maps.cf /etc/postfix/ [root@localhost docs]# cp mysql_virtual_limit_maps.cf /etc/postfix/
開啟一個檔案看看
[root@localhost ~]# cat /etc/postfix/mysql_virtual_domains_maps.cf user = extmail password = extmail hosts = localhost dbname = extmail table = domain select_field = domain where_field = domain additional_conditions = AND active = ‘1’
PS:所以在通過mysql認證配置檔案/etc/authmysqlrc中的賬號密碼很多地方都要用到,生產環境中全部都要統一修改。
使用虛擬域的時候,就需要取消中心域的使用,myhostname、mydomain、myorigin、mydestination,所以現在main.cf配置檔案需要新增的引數如下所示:
[root@localhost ~]# vim /etc/postfix/main.cf #################Center Domain Settings########### mynetworks = 127.0.0.0/8 #mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain #myhostname = smtp.ywnds.com #mydomain = ywnds.com #myorigin = $mydomain #home_mailbox = Maildir/
[root@localhost ~]# vim /etc/dovecot/dovecot.conf #Ssl = no #disable_plaintext_auth = no #mail_location = maildir:~/Maildir #把dovecot主配置檔案/etc/dovecot/dovecot.conf中剛開始新增的幾行資料註釋掉 [root@localhost ~]# vim /etc/dovecot/conf.d/10-mail.conf mail_location = maildir:/var/mailbox/%d/%n/Maildir #新增此行指定郵件的提取位置 [root@localhost ~]# vim /etc/dovecot/conf.d/10-auth.conf disable_plaintext_auth = no #開啟明文驗證(可以選擇把dovecot.conf配置檔案中的此引數關閉) auth_mechanisms = plain login #支援驗證方法 #!include auth-system.conf.ext #取消預設系統驗證 !include auth-sql.conf.ext #開啟mysql驗證 #auth_verbose = yes #認證詳細日誌,除錯可以開啟 [root@localhost ~]# vim /etc/dovecot/conf.d/auth-sql.conf.ext passdb { driver = sql #args = /etc/dovecot/dovecot-sql.conf.ext args = /etc/dovecot/dovecot-sql.conf } userdb { driver = sql #args = /etc/dovecot/dovecot-sql.conf.ext args = /etc/dovecot/dovecot-sql.conf }
PS:在這個MySQL驗證檔案中指定了使用者的賬號和密碼需要通過/etc/dovecot/dovecot-sql.conf這個檔案去資料庫中取。
[root@localhost ~]# vim /etc/dovecot/dovecot-sql.conf driver = mysql connect = host=localhost dbname=extmail user=extmail password=extmail default_pass_scheme = CRYPT password_query = SELECT username AS user,password AS password FROM mailbox WHERE username = '%u' user_query = SELECT maildir,uidnumber AS uid,gidnumber AS gid FROM mailbox WHERE username = '%u' 解釋: Driver #Dovecot使用自帶的驅動連線MySQL Connect #連線本地mysql;資料庫extmail;使用者extmail;密碼extmail。 #說明:如果mysql伺服器是本地主機,即host=localhost時,如果mysql.sock檔案不是預設的/var/lib/mysql/mysql.sock,可以使用host=“sock檔案的路徑”來指定新位置; #例如,使用通用二進位制格式安裝的MySQL,其sock檔案位置為/tmp/mysql.sock,相應地,connect應按如下方式定義connect = host=/tmp/mysql.sock dbname=extmail user=extmail password=extmail。 Default_pass_scheme #表明我們的密碼為加密存放 Password_query #找密碼查詢哪個欄位 User_query #找賬號查詢哪個欄位 PS:dovecot其實也提供了這麼一個配置檔案模板,在/usr/share/doc/dovecot-2.0.9/example-config/dovecot-sql.conf.ext
[root@localhost ~]# service dovecot restart [root@localhost ~]# service postfix restart [root@localhost ~]# service courier-authlib restart [root@localhost ~]# service mysqld restart
[root@localhost ~]# /usr/local/courier-authlib/sbin/authtest -s login postmaster@extmail.org extmail Authentication succeeded.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559985/viewspace-2374944/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【原創】Linux虛擬化KVM-Qemu分析(六)之中斷虛擬化Linux
- 網路虛擬化之linux虛擬網路基礎Linux
- Linux 配置虛擬IPLinux
- Linux 中的虛擬網路介面Linux
- Linux 虛擬記憶體Linux記憶體
- vsftp vuser虛擬使用者FTP
- 虛擬函式,虛擬函式表函式
- 虛擬函式 純虛擬函式函式
- Dalvik虛擬機器、Java虛擬機器與ART虛擬機器虛擬機Java
- Linux虛擬網路技術Linux
- 在Linux使用虛擬環境Linux
- 【原創】Linux虛擬化KVM-Qemu分析(七)之timer虛擬化Linux
- 在Linux中,什麼是虛擬化?並且列出常見的虛擬化技術。Linux
- 虛擬化四、KVM虛擬化技術
- 虛擬機器arm虛擬環境搭建虛擬機
- Java 虛擬機器經典六問Java虛擬機
- Java 虛擬機器之六:javap工具Java虛擬機
- 虛擬辦公、虛擬展會、虛擬偶像,RTE+XR 還能做什麼?
- 虛擬DOM
- 【原創】Linux虛擬化KVM-Qemu分析(四)之CPU虛擬化(2)Linux
- Linux vsftp vuer虛擬使用者的建立批次指令碼LinuxFTPVue指令碼
- xshell怎麼連線linux虛擬機器 xshell連結linux虛擬機器ssh命令Linux虛擬機
- java虛擬機器和Dalvik虛擬機器Java虛擬機
- Android 虛擬機器 Vs Java 虛擬機器Android虛擬機Java
- 詳解 Linux 中的虛擬檔案系統Linux
- Linux 虛擬網路卡技術:MacvlanLinuxMac
- Linux虛擬化平臺檢測Linux
- Linux虛擬機器網路配置Linux虛擬機
- Linux虛擬網路卡TUN和TAPLinux
- Linux 安裝 KVM 虛擬機器Linux虛擬機
- Python 版本及虛擬環境管理Python
- Linux虛擬主機與Windows虛擬主機之間有什麼區別LinuxWindows
- 【原創】Linux虛擬化KVM-Qemu分析(二)之ARMv8虛擬化Linux
- 【原創】Linux虛擬化KVM-Qemu分析(五)之記憶體虛擬化Linux記憶體
- Hadoop叢集--linux虛擬機器Hadoop安裝與配置、克隆虛擬機器HadoopLinux虛擬機
- VMware 虛擬機器一鍵去虛擬化工具虛擬機
- 介面、虛擬函式、純虛擬函式、抽象類函式抽象
- 虛擬蜜罐:從資訊模擬到實現虛擬蜜罐技術