歡迎您光臨本站 註冊首頁

請教:postfix虛擬域工作流程

←手機掃碼閱讀     火星人 @ 2014-03-04 , reply:0

請教:postfix虛擬域工作流程

[1]創建資料庫,用戶,許可權

$ mysql -u root -p
mysql> CREATE DATABASE postfix;
mysql> USE postfix;
mysql> GRANT SELECT ON postfix.* TO postfix@localhost IDENTIFIED BY 'postfixpassword';
mysql> GRANT SELECT, INSERT, DELETE, UPDATE ON postfix.* TO postfixadmin@localhost IDENTIFIED BY 'postfixadmin';

[2]創建表管理 這是一張為我們的虛擬郵件系統創建管理員的表。這個表中的管理員可以創建,修改和刪除虛擬域的管理員,郵箱和郵件系統中其他管理任務。
mysql>  CREATE TABLE admin (
username varchar(255) NOT NULL default '',
password varchar(255) NOT NULL default '',
created datetime NOT NULL default '0000-00-00 00:00:00',
modified datetime NOT NULL default '0000-00-00 00:00:00',
active tinyint(1) NOT NULL default '1',
PRIMARY KEY  (username),
KEY username (username)
) COMMENT='Postfix Admin - Virtual Admins';

[3] 創建別名表 Postfix 使用"address" 和"goto" 列,發信人不使用此表。
mysql>  CREATE TABLE alias (
address varchar(255) NOT NULL default '',
goto text NOT NULL,
domain varchar(255) NOT NULL default '',
created datetime NOT NULL default '0000-00-00 00:00:00',
modified datetime NOT NULL default '0000-00-00 00:00:00',
active tinyint(1) NOT NULL default '1',
PRIMARY KEY  (address),
KEY address (address)
) COMMENT='Postfix Admin - Virtual Aliases';

[4] 創建域表 Postfix使用 "domain" 和 "description" 列。 Courier 不使用此表。
mysql> CREATE TABLE domain (
domain varchar(255) NOT NULL default '',
description varchar(255) NOT NULL default '',
aliases int(10) NOT NULL default '0',
mailboxes int(10) NOT NULL default '0',
maxquota int(10) NOT NULL default '0',
transport varchar(255) default NULL,
backupmx tinyint(1) NOT NULL default '0',
created datetime NOT NULL default '0000-00-00 00:00:00',
modified datetime NOT NULL default '0000-00-00 00:00:00',
active tinyint(1) NOT NULL default '1',
PRIMARY KEY  (domain),
KEY domain (domain)
) COMMENT='Postfix Admin - Virtual Domains';

[5] 創建域管理表  這個表用來為每一個虛擬域創建獨立的管理員。Postfix 或 Courier 不使用這張表。
mysql> CREATE TABLE domain_admins (
username varchar(255) NOT NULL default '',
domain varchar(255) NOT NULL default '',
created datetime NOT NULL default '0000-00-00 00:00:00',
active tinyint(1) NOT NULL default '1',
KEY username (username)
) COMMENT='Postfix Admin - Domain Admins';

[6] 創建郵箱表  Postfix 使用"username" 和 "maildir" 列 , Courier 使用"username", "password", "name" 和 "maildir" 列。
mysql>  CREATE TABLE mailbox (
username varchar(255) NOT NULL default '',
password varchar(255) NOT NULL default '',
name varchar(255) NOT NULL default '',
maildir varchar(255) NOT NULL default '',
quota int(10) NOT NULL default '0',
domain varchar(255) NOT NULL default '',
created datetime NOT NULL default '0000-00-00 00:00:00',
modified datetime NOT NULL default '0000-00-00 00:00:00',
active tinyint(1) NOT NULL default '1',
PRIMARY KEY  (username),
KEY username (username)
) COMMENT='Postfix Admin - Virtual Mailboxes';

[7] 創建日誌表  Postfix 或Courier 不使用這張表。這張表是用來記錄域管理員和郵箱用戶的活動。

mysql> CREATE TABLE log (
timestamp datetime NOT NULL default '0000-00-00 00:00:00',
username varchar(255) NOT NULL default '',
domain varchar(255) NOT NULL default '',
action varchar(255) NOT NULL default '',
data varchar(255) NOT NULL default '',
KEY timestamp (timestamp)
) COMMENT='Postfix Admin - Log';

[8] 創建自動回復表  用一個可以接收郵件的本地系統用戶完成虛擬自動回復。這封email由一個Perl script控制自動回復到發信人。
mysql> CREATE TABLE vacation (
email varchar(255) NOT NULL default '',
subject varchar(255) NOT NULL default '',
body text NOT NULL,  cache text NOT NULL,
domain varchar(255) NOT NULL default '',
created datetime NOT NULL default '0000-00-00 00:00:00',
active tinyint(1) NOT NULL default '1',
PRIMARY KEY  (email),
KEY email (email)
) COMMENT='Postfix Admin - Virtual Vacation';

[9] 設置Postfix MySQL映射
在文檔中你需要儘早地告知Postfix控制信息被存放到資料庫的什麼位置。因此你需要在 /etc/postfix 目錄中創建下列4個為本文件。在下面的我們創建的文件中,我們明確使用 127.0.0.1 替代localhost作為hosts域。這是因為 Postfix 運行時改變了系統目錄結構。如果你指定localhost Postfix就會試圖使用在/var/run/mysql目錄中的unix socket 連接到MySQL的值守程序,這將是不能訪問的。使用127.0.0.1強制Postfix用 TCP/IP socket連接,將保證在改變系統目錄結構后仍能正常工作。

  在下面所有的文件中我們使用postfixpassword 作為password 的值。 你可能將會因為安全原因更換密碼,您也不會由於某種原因在論壇中提問時,沒有更改密碼就將配置文件貼出。  

[10] 創建虛擬別名映射
Postfix 為虛擬別名映射使用這個文件,映射的左手邊是where_field ,右手邊是select_field。在這個文件中會在 address 列和 goto 列產生映射。

$ sudo editor /etc/postfix/mysql_virtual_alias_maps.cf
在/etc/postfix/mysql_virtual_alias_maps.cf文件中添加下列代碼。

user = postfix
password = postfixpassword
hosts = 127.0.0.1
dbname = postfix
table = alias
select_field = goto
where_field = address

[11] 虛擬域映射
Posfix 僅僅使用這張表中的domain。對於這些域,我們不需要映射LHS 和 RHS

$ sudo editor /etc/postfix/mysql_virtual_domains_maps.cf

user = postfix
password = postfixpassword
hosts = 127.0.0.1
dbname = postfix
table = domain
select_field = domain
where_field = domain
#additional_conditions = and backupmx = '0' and active = '1'

[12] 虛擬郵箱映射
Postfix將在username 列和maildir查詢郵箱表之間建立映射。

$ sudo editor /etc/postfix/mysql_virtual_mailbox_maps.cf

user = postfix
password = postfixpassword
hosts = 127.0.0.1
dbname = postfix
table = mailbox
select_field = maildir
where_field = username
#additional_conditions = and active = '1'

[13] 虛擬郵箱引用映射
Postfix利用此映射為虛擬郵箱控制引用。在 mailbox表中Username 列和 quota列建立映射。

$ sudo editor /etc/postfix/mysql_virtual_mailbox_limit_maps.cf

user = postfix
password = postfixpassword
hosts = 127.0.0.1
dbname = postfix
table = mailbox
select_field = quota
where_field = username
#additional_conditions = and active = '1'

[14] 轉發域映射
如果您使用您的郵件系統僅僅為了主機對一些虛擬域備份MX,那麼您需要這個映射來告知Postfix為這些域轉發信件。

$ sudo editor /etc/postfix/mysql_relay_domains_maps.cf

user = postfix
password = postfixpassword
hosts = 127.0.0.1
dbname = postfix
table = domain
select_field = domain
where_field = domain
#additional_conditions = and backupmx = '1'

[15] 創建虛擬郵件用戶
我們的系統可以為數千用戶提供郵箱。這些用戶全部都是虛擬用戶(相對於Linux系統用戶而言)。所以這些用戶不能在我們的系統硬碟上存放他們的信件。您或許不打算為每一個用戶都分配一個惟一的系統UID (user ID)。因此我們創建一個Linux用戶,它是所有郵箱的擁有者。

$ sudo groupadd -g 5000 vmail$ sudo useradd -m -g vmail -u 5000 -d /home/vmail -s /bin/bash vmail

[16] 配置Postfix和MySQL映射
我們已將創建了MySQL映射配置文件。現在我們配置Postfix main.cf 文件以便Postfix能從MySQL資料庫中查詢虛擬郵箱和虛擬域。打開main.cf

$ sudo editor /etc/postfix/main.cf
然後將下列代碼寫入其中。

# Virtual Mailbox Domain Settings
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_mailbox_limit = 51200000
virtual_minimum_uid = 5000
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
virtual_mailbox_base = /home/vmail
virtual_transport = virtual
# Additional for quota support
virtual_create_maildirsize = yes
virtual_mailbox_extended = yes
virtual_mailbox_limit_maps = mysql:/etc/postfix/mysql_virtual_mailbox_limit_maps.cf
virtual_mailbox_limit_override = yes
virtual_maildir_limit_message = Sorry, the your maildir has overdrawn your diskspace quota, please free up some of spaces of your mailbox try again.
virtual_overquota_bounce = yes

[17] 設置Postfix
main.cf文件控制了Postfix數百個配置參數。這些參數都被配成了默認初始值。我們需要配置下列參數。

$ sudo editor /etc/postfix/main.cf
#The host name where your MX for virtual domains will point to
myhostname = mail.domain.com  
mydestination = #Remains blank since we are going to host virtual domains
relayhost = #Remains blank unless you are going to use your ISP's SMTP server mail sending out mails. In which case it would be set to the host name of the ISP's SMTP server
下列參數保持初始默認值。

alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mynetworks = all
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
《解決方案》

以上內容來自http://blogold.chinaunix.net/u/5948/showart_1111250.html
假如上面的工作現在都完成了,現在來接受一個由user2@163.com 發給 user1@domain.com的郵件,
請教:具體接受流程是怎樣的,請用上面1--2---3---4這樣的序號,並給出每一步的具體解釋,
比如在序號3,postfix會做SQL查詢:select goto where address = user1@domain.com
謝謝!

[火星人 ] 請教:postfix虛擬域工作流程已經有414次圍觀

http://coctec.com/docs/service/show-post-14567.html