久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Linux中Postfix虛擬用戶及虛擬域的示例分析

199次閱讀
沒有評論

共計 9335 個字符,預計需要花費 24 分鐘才能閱讀完成。

自動寫代碼機器人,免費開通

這篇文章主要為大家展示了“Linux 中 Postfix 虛擬用戶及虛擬域的示例分析”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓丸趣 TV 小編帶領大家一起研究并學習一下“Linux 中 Postfix 虛擬用戶及虛擬域的示例分析”這篇文章吧。

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-authlib

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) 整合為其提供認證服務。

虛擬用戶虛擬域配置

安裝 ltdl 動態模塊加載器

[root@localhost ~]# yum install libtool-ltdl libtool-ltdl-devel

安裝 expect 主機間通信

[root@localhost ~]# yum install expect

創建用戶

[root@localhost ~]# groupadd -g 1001 vmail
[root@localhost ~]# useradd vmail -u 1001 -g 1001

安裝 Courier-authlib

[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 指定了文件名

調整 courier-authlib 配置文件

[root@localhost ~]# vim /etc/authdaemonrc
authmodulelist= authmysql 
 # 指定認證模塊為 authmysql
authmodulelistorig= authmysql 
 # 認證的原始模塊只保留 authmysql
daemons=10
 # 修改默認開啟進程
#DEBUT-LOGIN=2
 # 如果使用虛擬用戶登錄有問題就打開調試功能看看日志;不然不要打開

調整通過 MYSQL 進行郵件賬號認證文件

[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)
 # 虛擬用戶的郵件目錄

Courier-authlib 提供 SysV 服務腳本

[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

更改 SASL 認證模式為 authdaemond

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

讓 Postfix 支持虛擬用戶及虛擬域

[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
 # 磁盤配額

安裝 Httpd

[root@localhost ~]# yum install httpd

安裝 extman

需要使用源碼 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;

從 Extman 中復制 Postfix 支持虛擬用戶和虛擬域及連接 mysql 的文件

[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/

配置 Dovecot 基于 MySQL 認證

[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.

以上是“Linux 中 Postfix 虛擬用戶及虛擬域的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注丸趣 TV 行業資訊頻道!

向 AI 問一下細節

丸趣 TV 網 – 提供最優質的資源集合!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2024-02-04發表,共計9335字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 清苑县| 平潭县| 张北县| 长岛县| 五寨县| 涟水县| 永和县| 平利县| 宣恩县| 霍山县| 扎鲁特旗| 惠来县| 深州市| 贡觉县| 瑞金市| 印江| 瑞安市| 望都县| 醴陵市| 格尔木市| 佛山市| 双江| 富阳市| 太康县| 子洲县| 长白| 宁国市| 桦甸市| 赤壁市| 县级市| 长海县| 霍林郭勒市| 五原县| 依兰县| 包头市| 乐山市| 琼海市| 长汀县| 海兴县| 定陶县| 盖州市|