小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

非常簡明的debian sarge postfix mysql AMaViS webmail web admin安裝配置指南(I)(翻譯)...

 zhuzhu 2006-03-12
<pre>非常簡明的debian sarge + postfix + mysql + webmail + web admin安裝配置指南 想在debian上安裝postfix郵件系統(tǒng)很多年了,參考了許多網(wǎng)上的資料,看得最多的是以下幾個: 王興宇的:http:///technology/Postfix_I.html 陳景峰的:http://www./internet/postfix/pis/book1.html 但一直不是很成功。原因有以下幾個: 1、所需軟件很多,全都要自行重頭編譯,對于我這些菜鳥非常困難,各個軟件之間的依賴關(guān)系一頭霧水。 2、配置過程復雜,讓人忘而生畏。有時候看著幾百行的配置文件頭皮發(fā)麻。 3、工作原理懵里懵懂,許多參數(shù)不知道干什么用的,只能依葫蘆畫瓢,錯了不知從哪里改。 前幾天看了http:///articles/ispmail-sarge/,突然明白了許多道理,居然一下子成功了!我還根據(jù)自己的了解改進了webmail部分,增加了郵件系統(tǒng)的web管理。不敢獨自享用,編譯出來,供與我有同樣的困惑的fans共享。 利用debian sarge和postfix 2.1構(gòu)建媲美ISP的郵件系統(tǒng) 作者:Dipl.-Inform. Christoph Haas 原文出處:http:///articles/ispmail-sarge/ 譯者:一致連續(xù) 翻譯時間:2005-07-18 版權(quán)所有:Copyright ? 2002-2005 Christoph Haas 翻譯和改動未經(jīng)作者同意。 最新版本請見:http://. 摘要: 你可能見過web主機所有者出租虛擬主機讓你建立自己域來收發(fā)郵件。你想知道他們怎樣處理數(shù)以千計的域名的?不可能所有域和別名都放在 “main.cf” 配置文件中來手工管理。Postfix 提兩個特性來簡化工作: 虛擬域 除你的本地域外(一般定義在/etc/defaultdomain中),所有收郵件的其它域都稱為虛擬域。虛擬域的數(shù)量沒有限制。 數(shù)據(jù)庫查詢 你不必將所有用戶名和郵件地址存在文本文件中。Postfix支持通常的關(guān)系型數(shù)據(jù)庫系統(tǒng)的查詢,如MySQL和PostgreSQL. 這個特性非常有用,尤其是你開發(fā)基于WEB的GUI管理程序時。你甚至可以允許用戶自己管理他們的郵件賬號。 注意!本指南重新作了修訂,雖然我仔細測試過,但仍可能存在bug。如果有疑問,請參考老一點的版本:http:///articles/ispmail-sarge/old/,如果你發(fā)現(xiàn)錯誤,請發(fā)郵件給:workaround-chitchat@.如果你想通過以前的指南來升級,請參考這一節(jié):http:///articles/ispmail-sarge/#migrating 注意!本指南適合于Debian Sarge。如果你運行的是Woody,建議你閱讀[http:///articles/ispmail/ 本指南介紹了一個郵件系統(tǒng)的基本配置。如果你認真做完本文中的所有步驟后,你將擁有一個可以處理數(shù)以千計的域名的和用戶的郵件系統(tǒng)。以下是郵件系統(tǒng)能提供的特性: POP3/IMAP訪問 WebMail訪問 病毒掃描 垃圾郵件預防 安全的郵件中繼 容易的域名管理 雖然我會給一個簡單說明,但以下知識你應(yīng)預先準備好: MySQL(創(chuàng)建數(shù)據(jù)庫,授權(quán)用戶訪問權(quán)限和SQL查詢語言) SMTP,POP3,IMAP(我假定你對這些協(xié)議有基本的了解) Postfix的基本配置(你應(yīng)熟悉“mail.cf”配置文件) Debian/Linux(你應(yīng)知道基本的系統(tǒng)管理如安裝軟件、編輯文本文件) 目錄 1、需要的軟件 2、什么是映射(mapping)? 3、虛擬域怎樣工作 4、第一步:安裝所需要的Debian 軟件包 5、第二步:創(chuàng)建數(shù)據(jù)庫 6、第三步:創(chuàng)建表 domains forwordings users 7、第四步:創(chuàng)建數(shù)據(jù)庫映射定義 mysql-virtual_domains.cf mysql-virtual_forwardings.cf mysql-virtual_mailboxes.cf mysql-virtual_email2email.cf 8、第五步:創(chuàng)建一個系統(tǒng)用戶 vmail 9、第六步:編輯 main.cf 一個快速測試 10、第七步:讓Postfix理解SMTP認證 告訴Postfix使用SASL/MySQL 使用TLS加密SMTP通信 一個快速測試 11、第八步:配置POP3/IMAP服務(wù) 一個快速測試 12、第九步:測試你的配置 域 用戶 13、第十步:增加你的數(shù)據(jù) 對于每個新域 對于每個新用戶 對于郵件轉(zhuǎn)發(fā) 14、掃描病毒和垃圾郵件(可選步驟) 簡介AMaViS 配置AMaVIS 告訴Postfix使用AMaViS 內(nèi)容過濾怎樣工作? 訓練 15、配置webmail(可選步驟) 16、用mailman建立郵件列表 17、問題解決 錯誤信息 MySQL 排錯 在線排錯 18、從以前版本的指南移植 19、感謝 20、即將實現(xiàn)的改進 21、興趣列表 1、需要的軟件 整修配置依靠不同的軟件組合在一起協(xié)調(diào)工作。讓我們看看都要用到哪些軟件: Postfix:你的MTA(郵件傳遞代理)。通過SMTP(簡單郵件傳輸協(xié)議)接收郵件并將它們存放在硬盤上的相關(guān)位置。 MySQL:用這個數(shù)據(jù)庫系統(tǒng)中存儲的信息來管理Postfix,通常包括用戶名、域名、郵件轉(zhuǎn)發(fā)地址和口令。 Courier:Courier象Postfixg一樣,是一個單獨的郵件服務(wù)器。我們只用它的POP3/IMAP部分讓用戶訪問郵箱。 SASL(Cyrus庫):如果你的用戶通過其它ISP上網(wǎng),那么他們的IP地址來自你的網(wǎng)絡(luò)之外,而郵件服務(wù)器只信任來自本地IP地址的訪問。SASL(簡單認證和安全層)在SMTP中加入認證讓郵件服務(wù)器能夠信任他們。 AMaViS:一個郵件病毒掃描軟件,可以在Postfix中當作內(nèi)容過濾器使用。它可以在收到的郵件中掃描病毒和垃圾郵件。 phpmyadmin:一個基于web界面的MySQL管理工具。它比命令行工具更適合初學者使用(譯者注:用webmin來管理MySQL也很不錯)。 整個郵件服務(wù)器的組成和工作流程如下圖所示: -------------------------- --------- ---------------- -------------- | 發(fā)郵件到其它郵件服務(wù)器 | | 收郵件 | | SMTP認證訪問 | | POP3或IMAP | -------------------------- --------- ---------------- -------------- ____ |\ | / /|| \ | / / | \ | / | \ | / | \ \ | / | / | \ \|/ |/___ | ---------------- ------------------ -------------- -------------------- | Cyrus:auprop | <---Socket--- | Postfix | |Courier:pop3| ---Socket---> |Courier:authdaemon| ---------------- ------------------ -------------- -------------------- | | | | | | | | | 發(fā)郵件給虛擬用戶 郵箱訪問 | | | | | | | | | | | ------------------ | | | ---> | 虛擬郵箱 | <--- | | ------------------ | | | | ------------------------------------ | ---------MySQL 3306-------> | MySQL | <-----MySQL 3306--------- ------------------------------------ 2、什么是映射(mappings)? 簡要的說,映射是將一個值指向另一個值。你可能知道文件:/etc/aliases,其中你可以定義本地域名轉(zhuǎn)發(fā),有一行類似如下: postmaster: root 這將使得給postmaster@your-domain的郵件全部轉(zhuǎn)給root@your-domain.左邊的(這里是"postmaster")稱為LHS(左側(cè)值),右邊的(這里是"root")稱為RHS(右側(cè)值)。在討論映射時一般這樣簡稱。 提示:通常映射文件左邊沒有冒號。這個特殊的別名表這所以這樣是為了兼容性。同樣,本地別名文件不是用postmap而用newalianse編譯的。這僅僅是一個(不好的)例子。 如果你正在以一種快速而不整潔的方式配置Postfix,你多半會從上面那樣的文本文件開始。你只需將映射寫在里面,然后運行 postmap filename 就可以將文本文件轉(zhuǎn)換成一個名為"filename.db"的哈希文件。在Postfix配置中可以用"hash:filename"來訪問你建立的映射。你可能注意到缺省的別名映射配置是這樣的: alias_maps=hash:/etc/aliases "hash:"是查詢方法。 在我的配置中,不用文本文件而是使用MySQL數(shù)據(jù)庫表。這使數(shù)據(jù)處理起來更靈活。但數(shù)據(jù)庫表一般包括兩列以上,你需要告訴Postfix哪一列是LHS,哪一列是RHS.這可以定義在一個文本文件中,如下所示: user = provider_admin password = DomAKg07 dbname = provider table = virtual_mailboxes select_field = mailbox where_field = email hosts = 127.0.0.1 如果上示文件保存為/etc/postfix/mysql_virtual_mailboxes.cf,你可以使用一個映射: virtual_mailbox_maps=mysql:/etc/postfix/mysql_virtual_mailboxes.cf 映射的LHS被定義為"where_field",RHS被定義為"select_field".在這個例子中,它們分別指向列`email`和列`mailbox`.本例中另一些被定義的元素是:"user"(連接MySQL數(shù)據(jù)庫的用戶名),"password"(用戶口令),"dbname"(數(shù)據(jù)庫名),"table"(數(shù)據(jù)庫中的表名),"hosts"(運行MySQL的主機名)。 3、虛擬域怎樣工作 我們先簡要介紹一下Postfix 2.x中虛擬域的處理(不贊成使用Postfix 1.x的處理方式),混亂的配置將使你精疲力竭。有兩種典型的域: 本地域: 所有列在"main.cf"文件中"mydestination"元素中的域都被處理成本地域。你的缺省域(/etc/defaultdomain)一般設(shè)定成本地域。給本地域的郵件被交給系統(tǒng)用戶(在/etc/passwd中設(shè)定)。郵件存放在/var/mail中。 虛擬域 郵件服務(wù)器可以接收不做聲傳送給虛擬域的郵件。虛擬域非常靈活。你郵件用戶不需要系統(tǒng)賬號(這意味著用戶名不需要在/etc/passwd中設(shè)定)。所以郵件服務(wù)器可以輕而易舉的處理數(shù)以千計的郵件用戶。一個映射?。ㄈ缟纤觯┯脕泶鎯τ脩舻男畔?。在我的實例中,我使用MySQL. 事情有點復雜的是,有兩種不同的虛擬域: 虛擬別名域(Virtual Alias Domains) 虛擬別名域可以用來把發(fā)給一個地址的郵件轉(zhuǎn)發(fā)給另一個地址。這樣一個域可轉(zhuǎn)為不接收郵件。我不會使用這種類型的虛擬域,因為我會用virtual_alias_maps映射的別名,即使這些域沒有列在虛擬別名域中(譯者注:這句話沒譯好,如果感到困惑,不如看原文,現(xiàn)在我同情那些有些譯者了:-/)。(virtual_alias_maps是一個多用途映射,對通過系統(tǒng)的所有東西有效,包括本地域。 虛擬郵箱域( Virtual Mailbox Domains) 虛擬郵箱域可以接收這些域用戶的郵件,放在硬盤中的郵箱目錄中。仍然可以用virtual_alias_maps來轉(zhuǎn)發(fā)郵件到別的郵箱或外部郵件地址,因些不是域中的每個用戶都有一個真實的郵箱,可以只有一個郵件轉(zhuǎn)發(fā)地址。這僅僅是一個參數(shù)用來告訴Postfix如何處理這些域。順便說一句,virtual_mailbox_maps映射一般用來確定硬盤上郵箱的位置。 理解一個域要么是虛擬別名域要么是虛擬郵箱域要么是本地域是非常重要的。如果將一個域設(shè)定為虛擬別名域,是不能使用這些域接收郵件的。正相反,可以用virtual_alias_maps為兩者轉(zhuǎn)發(fā)郵件。所以虛擬郵箱域通常更靈活。 注意!一個域要么是虛擬要么是本地的,不能兩者都是!所以如果想使本地域通過虛擬域管理,要將它從mydestination定義中刪除。將mydestination設(shè)定為空或者是:"mydestination=localhost"。給地址類似于root@localhost的郵件將交付給本地root用戶。 建議你及早關(guān)于虛擬域的原始文檔,他們在VIRTUAL_README文件中,這個文件在postfix-doc包中,可以在/usr/share/doc/postfix/VIRTUAL_README.gz中找到。 4、第一步:安裝需要的Debian軟件包 絕對需要的軟件包有: postfix (Choose: "No configuration",安裝時選擇:“不配置”) postfix-mysql postfix-doc mysql-client (for MySQL 3.x/4.0) or mysql-client-4.1 (for MySQL4.1) 如果你是在同一臺機器上安裝MySQL服務(wù)器,需要: mysql-server (for MySQL 3.x/4.0) or mysql-server-4.1 (for MySQL4.1) 如果想通過POP3/IMAP訪問,需要: courier-authdaemon courier-authmysql courier-pop (for unencrypted POP3 access) courier-pop-ssl (for SSL-encrypted POP3 access) courier-imap (for unencrypted IMAP access) courier-imap-ssl (for SSL-encrypted IMAP access) 如果想通過認證SMTP發(fā)郵件,需要: postfix-tls (加密認證SMTP) libsasl2 (the Cyrus SASL library) libsasl2-modules (the mechanisms for the SASL library) libsasl2-modules-sql openssl (創(chuàng)建證書) 如果要掃描病毒和垃圾郵件,需要: amavisd-new spamassassin clamav clamav-daemon zoo unzip unarj lha (非自由軟件!) 如果要提供Webmail需要: sqwebmail 譯者加:sqwebmail不太好用,推薦使用: squirrelmail 可選的軟件包: phpmyadmin(PHP寫的用于MySQL數(shù)據(jù)庫的管理) 5、第二步: 創(chuàng)建數(shù)據(jù)庫 需要創(chuàng)建一個數(shù)據(jù)庫用來存儲表。如果你是MySQL老手,當然可以用命令行的方式操作,我一般用phpmyadmin來管理MySQL。它能勝任這項任務(wù)。 提示:數(shù)據(jù)庫服務(wù)器在剛安裝好后,root用戶是沒有口令的,安全起見,要先加上口令: mysqladmin -u root password geheimes-passwort 首先創(chuàng)建一個數(shù)據(jù)庫。我命名為‘provider‘,因為除了電子郵件,我有別的用途(不在本文討論范圍之內(nèi))??梢栽趐hpmyadmin下做,也可在命令行下運行 mysqladmin -u root -p create provider 還需要一個用戶有足夠的權(quán)限訪問數(shù)據(jù)庫。在命令行下建立一個數(shù)據(jù)庫連接: mysql -u root -p 看到mysql>提示符后,輸入SQL命令: grant select on provider.* to provider_admin@localhost identified by ‘your-password‘; 這將創(chuàng)建一個名為 provider_admin 的數(shù)據(jù)庫用戶,對 provider 數(shù)據(jù)庫有 ‘SELECT‘ 權(quán)限。記得用你自己的口令替換 your-password 。我用 ‘pwgen -s 16‘命令自動產(chǎn)生口令。最后需要重載許可信息,在mysql>提示符下輸入: flush privileges; 6、第三步: 創(chuàng)建表 接著要在數(shù)據(jù)庫中創(chuàng)建一系列的表來存儲postfix的控制信息。 domains 第一個表只有一列用于存儲虛擬域名,一行一個虛擬域,用SQL語句來建立: CREATE TABLE domains ( domain varchar(50) NOT NULL, PRIMARY KEY (domain), UNIQUE KEY domain (domain) ) TYPE=MyISAM; forwardings 表‘forwardings‘用于建立電子郵件地址的別名。可以用這個表來重定向郵件地址。(提示:這個對本地域也有效)。建立表的SQL語句是: CREATE TABLE forwardings ( source varchar(80) NOT NULL, destination TEXT NOT NULL, PRIMARY KEY (source) ) TYPE=MyISAM; users 最后一個表 ‘users‘包含了用戶帳戶信息。通過POP3和IMAP訊問郵箱的用戶都得有一個用戶名和口令。由于用戶總是健忘的(瞧瞧你的老板,他的口令可能就放在鍵盤下),我決定用電子郵件地址作為登錄名。電子郵件地址還用于磁盤上郵件目錄命名。這個表只要兩列就夠了。建立表的SQL也很簡單: CREATE TABLE users ( email varchar(80) NOT NULL, password varchar(20) NOT NULL, UNIQUE KEY email (email) ) TYPE=MyISAM; 7、第四步:創(chuàng)建數(shù)據(jù)庫映射定義 為了告訴postfix控制信息存儲在數(shù)據(jù)庫的什么地方,需要在/etc/postfix目錄下建立三個文本文件。 postfix在chroot環(huán)境中運行(/var/spool/postfix),不能訪問除這個目錄以外的其它文件。我們通常通過套接字文件/var/run/mysqld/mysqld.sock與MySQL通訊。而這個文件postfix訪問不到。所以要么將這個套接字文件移個位置(這會帶來別的問題),要么使用TCP協(xié)議來通訊。后者意味著要通過網(wǎng)絡(luò)與MySQL通訊,這樣做的好處是不用關(guān)心chroot環(huán)境的限制。一個不太嚴重的壞處是:通過lo界面訪問MySQL服務(wù)器,理論上說有安全問題。為了激活MySQL的網(wǎng)絡(luò)連接,要在/etc/mysql/my.cnf文件中插入一行"bind-address = 127.0.0.1",然后重啟MySQL服務(wù)器(在本文的下一個版本中,我會介紹一種非常漂亮的“綁定裝載”方式,通過在 /etc/fstab中實現(xiàn)MySQL套接字)。 mysql-virtual_domains.cf 這是一個簡單的映射:從虛擬域名(LHS)到字符串‘virtual‘(RHS)。這個映射用于定義virtual_mailbox_domains(右邊的字符串可以是任何東西,如果你愿意可設(shè)定為"banana daiquiri")。 創(chuàng)建這個文件,并且用你的數(shù)據(jù)庫服務(wù)器名、數(shù)據(jù)庫用戶名和口令替換 ‘...‘ 。不要用"localhost"作為服務(wù)器名,否則Postfix會試圖使用套接字方式來與MySQL通訊。如果數(shù)據(jù)庫服務(wù)器在同一臺服務(wù)器運行,127.0.0.1意味著通過TCP/IP通訊。mysql-virtual_domains.cf文件內(nèi)容如下: user = provider_admin password = ... dbname = provider table = forwardings select_field = destination where_field = source hosts = 127.0.0.1 mysql-virtual_mailboxes.cf 這個映射讀取‘forwardings‘表,規(guī)定了郵件重定向。它僅僅映射了 ‘source‘ 列和‘destination‘列。用在virtual_alias_maps映射中。文件內(nèi)容如下: user = provider_admin password = ... dbname = provider table = forwardings select_field = destination where_field = source hosts = 127.0.0.1 mysql-virtual_mailboxes.cf 這個文件定義了用戶郵箱。告訴了Postfix特定的郵件存在什么地方。將用它來映射virtual_mailbox_maps。對于給定的‘email‘地址(LHS),Postfix通過‘mailbox‘列(RHS)來尋找。select_field行用來將‘user@domain.net‘形式的電子郵件地址轉(zhuǎn)換成目錄‘domain.net/user/‘--用戶郵箱的存儲位置。最后要包含一個斜線,這樣Postfix將創(chuàng)建一個郵箱目錄,而不是一個郵件文件。這在隨后的Courier POP3和IMAP服務(wù)中用得到。mysql-virtual_mailboxes.cf文件如下: user = provider_admin password = ... dbname = provider table = users select_field = CONCAT(SUBSTRING_INDEX(email,‘@‘,-1),‘/‘,SUBSTRING_INDEX(email,‘@‘,1),‘/‘) where_field = email hosts = 127.0.0.1 mysql-virtual_email2email.cf 虛擬域映射virtual_alias_maps是優(yōu)先的。當你想用一個地址包羅萬象時很有用。(“包羅萬象”指你想使用以下的轉(zhuǎn)發(fā)方式:"@domain.com"->"service@domain.com",將用一個地址接收所有給這個域的郵件。)如果在virtual_alias_maps中映射了域@domain.com,那么即使特定地址specific.user@domain.com在 virtual_mailbox_maps中也做過映射,也是不起作用的,所有郵件將仍會傳遞給 @domain.com在virtual_alias_maps中指定的地址。 這個文件可以通過將user表中的電子郵件地址映射給自己解決這個問題: user = provider_admin password = ... dbname = provider table = users select_field = email where_field = email hosts = 127.0.0.1 注意:確定除了root用戶外,其它人不能讀這些文件!否則你系統(tǒng)的其它用戶可以看到明碼方式的數(shù)據(jù)庫用戶和口令。運行"chmod o= /etc/postfix/mysql-virtual_*.cf"取消其它用戶的權(quán)限。也可以針這些文件的組屬性調(diào)為postfix,運行 "chgrp postfix /etc/postfix/mysql-virtual_*.cf" 即可。 8、第五步:創(chuàng)建一個vmail系統(tǒng)用戶 系統(tǒng)可能要處理數(shù)以千計的用戶。不可能給每個用戶一個唯一的UID。我建議創(chuàng)建一個假冒的用戶擁有所有郵箱。 用root身份在命令行下運行以下命令: groupadd -g 5000 vmail useradd -g vmail -u 5000 vmail -d /home/vmail -m 9、第六步: 編輯main.cf文件 /etc/postfix/main.cf 是Postfix主要配置文件。我這里只給出虛擬域需要的基本配置。不要將main.cf全清除了,因為里面可能還有你的其它配置信息。 設(shè)置 含義 myhostnames = ... 確保這里是全限定的域名。 mydestination = ... 列出本地域名,用分號隔開,不要將虛擬域名列在這里。 mynetworks = ... 列出可以通過郵件服務(wù)器發(fā)送郵件的IP地址范圍,很可能就是本地網(wǎng)絡(luò)。 virtual_alias_domains = 不要設(shè)置這個參數(shù),我們不會使用虛擬別名域。為了與老版本兼容, 可將值設(shè)置為virtual_alias_maps virtual_alias_maps = 這個參數(shù)用于重定向表??蓪⒁粋€郵件地址重定向到其它地址, mysql:/etc/postfix/mysql-virtual_forwardings.cf 甚至將一個域的所有郵件地址重定向到一個指定的郵件地址。 mysql:/etc/postfix/mysql-virtual_email2email.cf 信息存于‘forwardings‘表中。每一個LHS郵件地址被重寫為RHS中顯示的 地址。如果有多個目標地址,可以在一條記錄中用逗號分隔。我也用 mysql-virtual_email2email.cf映射將郵件地址指向自己。這看上去有點 愚蠢,但的確需要,當你想使用一個包羅萬象的地址時。 參見前面對mysql-virtual_email2email.cf的說明。 virtual_mailbox_domains = 這個參數(shù)從`domains`中列出了虛擬郵箱域 mysql:/etc/postfix/mysql-virtual_domains.cf virtual_mailbox_maps = 這是另一個重要的虛擬郵箱映射。它將電子郵件地址(LHS)映射到本地硬 盤中。 mysql:/etc/postfix/mysql-virtual_mailboxes.cf 郵箱目錄相對于virtual_mailbox_base。 virtual_mailbox_base = /home/vmail 這是用戶郵箱在硬盤上的基目錄。 virtual_uid_maps = static:5000 要告訴郵箱所有者的UID,就是前面創(chuàng)建的vmail。 virtual_gid_maps = static:5000 同上,vmail的GID smtpd_sasl_auth_enable = yes 使SMTP需要認證。 broken_sasl_auth_clients = yes 一些做得不太好的郵件客戶端,如M$ OutLook,使用一種不贊成的方式來搜 索需要認證SMTP的郵件服務(wù)器,這個參數(shù)是為了滿足他們。嗯?誰在說 OutLook的壞話:) smtpd_recipient_restrictions = 這個參數(shù)限制了誰可以用你的郵件服務(wù)器中繼和轉(zhuǎn)發(fā)郵件。 permit_mynetworks, permit_mynetworks允許本地網(wǎng)絡(luò)的所有用戶都可以使用。 permit_sasl_authenticated, permit_sasl_authenticated允許那些通過認證SMTP登錄的用戶可以使用。 reject_unauth_destination 最后一個值reject_unauth_destination指出除relay_domains中列出的域外 都不允許。 smtpd_use_tls = yes 用ssl加密認證SMTP會話 smtpd_tls_cert_file = /etc/postfix/smtpd.cert TLS需要的ssl證書位置(我們稍后會創(chuàng)建的) smtpd_tls_key_file = /etc/postfix/smtpd.key TLS需要的ssl私鑰位置 最后做一個快速測試: 運行postfix reload 和 postfix check。如果沒有警告和錯誤,這一部分就做完了。 10、第七步: 讓Postfix理解認證的SMTP(Auth-SMTP) 設(shè)想用戶通過POP3來取郵件,然后需要通過郵件服務(wù)器回信。由于安全原因,Postfix只允許用戶在mynetworks中定義的位置發(fā)郵件。通常郵件服務(wù)器只用于接收自己域的郵件。如果允許每個人通過郵件服務(wù)器發(fā)郵件給任何域,這稱為open relay,垃圾郵件制造者就可以通過你的郵件服務(wù)器發(fā)送大量數(shù)字垃圾。所以要求遠程用戶提供用戶名和口令。如果認證通過,遠程用戶也可以象本地網(wǎng)絡(luò)用戶一樣被信任。大多數(shù)郵件客戶端都有這個功能。 設(shè)置認證SMTP非常簡單。唯一的問題是Debian是在chroot環(huán)境中運行Postfix的,缺省的是在 /var/spool/postfix中。 告訴Postfix使用SASL/MySQL Postfix采用Cyrus SASL庫來實現(xiàn)認證SMTP。需要告訴Postfix怎樣訪問到存儲了用戶名和口令的數(shù)據(jù)。很簡單,創(chuàng)建一個/etc/postfix/sasl目錄,將SASL配置文件放在這就可以了: mkdir /etc/postfix/sasl 在這個目錄下創(chuàng)建一個smtpd.conf文件,內(nèi)容如下所示: pwcheck_method: auxprop auxprop_plugin: sql mech_list: plain login cram-md5 digest-md5 sql_engine: mysql sql_hostnames: 127.0.0.1 sql_user: provider_admin sql_passwd: ... sql_database: provider sql_select: select password from users where email=‘%u@%r‘ 如果在配置SASL 時有麻煩,可以在此處加入一行"log_level: 7",使得日志文件中提供便詳細的信息,幫助查找問題所在。 使用TLS加密SMTP通信 加密SMTP會話也很重要。如果郵件客戶端不加密的認證方法,用戶名和口令會用很不安全的方式傳輸。所以建議用TLS加密通信。TLS是Transport Layer Security (RFC2246)的縮寫,在郵件服務(wù)器與外界的連接中,使用SSL(Secure Socket Layer)來加密。 首先需要一個SSL證書。如果不想從認證中心購買,可以自己簽署一個。(個人意見:我想知道購買的怎樣會更安全。)唯一的不足是:郵件客戶端不知道你的CA(認證授權(quán))哪里來,會彈出一個警告。告訴用戶要么不理睬這個警告,要么在計算機中安裝這個證書。(Outlook不允許不理睬他不知道的CA。需要安裝證書才能繼續(xù)工作。) 要針對主機smtp.domain.tld制作一個一年期的證書,可以執(zhí)行以下命令: openssl req -new -outform PEM -out smtpd.cert -newkey rsa:2048 -nodes -keyout smtpd.key -keyform PEM -days 365 -x509 運行過程中會問幾個問題,填幾個空,不必在意,隨便輸入一點什么即可。唯一的例外是,當問你"Common Name" (主機名)時,必須填寫郵件服務(wù)器的主機名。下面是會話示例: Country Name (2 letter code) [AU]:DE State or Province Name (full name) [Some-State]:Hamburg Locality Name (eg, city) []:Hamburg Organization Name (eg, company) [Internet Widgits Pty Ltd]: email services Organizational Unit Name (eg, section) []:Master of Disaster Common Name (eg, YOUR name) []:smtp.domain.tld Email Address []:postmaster@domain.tld 等一會兒,當前目錄下會產(chǎn)生兩個文件:"smtpd.key"(私鑰文件),"smtpd.cert"(證書)。將兩個文件移到目錄/etc/postfix中。 注意!私鑰文件任何人不能讀!用以下命令取消其它用戶的權(quán)限: chmod o= /etc/postfix/smtpd.key 再次快速測試一下 運行postfix reload重啟Postfix。運行telnet localhost 25,輸入EHLO anywhere.org,應(yīng)該可以看到一行:250-STARTTLS。干杯!TLS運行起來了!。 11、第八步:配置POP3/IMAP服務(wù) 現(xiàn)在設(shè)置過程的大部分完成了,再接再厲!當然,到現(xiàn)在為止,用戶還不能訪問他們的郵箱,這得先配置POP3或者IMAP服務(wù)。首先需要編輯/etc/courier/authdaemonrc,將認證模塊變?yōu)?authmysql": authmodulelist="authmysql" 然后在/etc/courier/authmysqlrc文件中定義MySQL數(shù)據(jù)庫表中的一個字段: MYSQL_SERVER localhost MYSQL_USERNAME provider_admin MYSQL_PASSWORD ... MYSQL_PORT 0 MYSQL_DATABASE provider MYSQL_USER_TABLE users #MYSQL_CRYPT_PWFIELD (comment this out) MYSQL_CLEAR_PWFIELD password MYSQL_UID_FIELD 5000 MYSQL_GID_FIELD 5000 MYSQL_LOGIN_FIELD email MYSQL_HOME_FIELD "/home/vmail" MYSQL_MAILDIR_FIELD CONCAT(SUBSTRING_INDEX(email,‘@‘,-1),‘/‘,SUBSTRING_INDEX(email,‘@‘,1),‘/‘) #MYSQL_NAME_FIELD (comment this out) 仔細點,authmysqlrc模塊非常挑剔。確保不是用TAB代替空格分隔,并且每行沒有尾部空格。最后記得重啟認證進程:/etc/init.d/courier-authdaemon restart。 第三次快速測試 試試通過運行telnet localhost pop3訪問一下POP3服務(wù)。應(yīng)該可以看到"+OK Hello there."。瞧,這下你的用戶差不多可以使用你的郵件服務(wù)器了。 注意!郵箱里至少有一封信才能收郵件,否則用戶會得到一個含糊不清的錯誤信息。所以建議對每一個新用戶發(fā)一封歡迎信。 12、第九步:測試整個設(shè)置 祝賀你!整個設(shè)置完成了?,F(xiàn)在整個來試試。現(xiàn)在在數(shù)據(jù)庫中創(chuàng)建第一個虛擬域記錄,試試虛擬域。在相應(yīng)的數(shù)據(jù)庫表中創(chuàng)建以下行: domains: Column Value domain virtual.test users: Column Value email [email]user@virtual.test[/email] password secret 這意味著有一個虛擬域名為"virtual.test",一個用戶的郵件地址為 "user@virtual.test"(也是他的用戶名)。用戶的口令為:"secret"。如果沒有MX記錄(郵件交換-DNS區(qū)域的一部分),就需要手工遞送郵件。與郵件服務(wù)器建立一個SMTP連接(telnet servername 25),輸入SMTP命令。如下表,左邊是SMTP服務(wù)器的提示,右邊是輸入的命令: 服務(wù)器提示 你的輸入 220 myserver ESMTP Postfix (Debian/GNU) ehlo 250-mailtest 250-PIPELINING 250-SIZE 10240000 250-VRFY 250-ETRN 250-STARTTLS 250-AUTH LOGIN PLAIN DIGEST-MD5 CRAM-MD5 250-AUTH=LOGIN PLAIN DIGEST-MD5 CRAM-MD5 250 8BITMIME mail from:<test@> 250 Ok rcpt to:<user@virtual.test> 250 Ok data 354 End data with <CR><LF>.<CR><LF></LF></CR></LF></CR> This is a test email. . 250 Ok: queued as ABC1D1C123 quit 221 BYE 如果服務(wù)器的反應(yīng)和上面一樣,那么郵件就被接收了。在日志文件/var/log/mail.log中,可以看到這么一段: Jul 24 21:48:28 myserver postfix/smtpd[9119]: connect from myserver[127.0.0.1] Jul 24 21:48:48 myserver postfix/smtpd[9119]: F2C1B47BD: client=myserver[127.0.0.1] Jul 24 21:48:52 myserver postfix/cleanup[9144]: F2C1B47BD: message-id=<20040724194842.F2C1B47BD@myserver> Jul 24 21:48:52 myserver postfix/qmgr[9117]: F2C1B47BD: from=<test@>, size=313, nrcpt=1 (queue active) Jul 24 21:48:52 myserver postfix/virtual[9148]: F2C1B47BD: to=<user@virtual.test>, relay=virtual, delay=10, status=sent (delivered to maildir) 如果能讀到 "status=sent (delivered to maildir)",說明郵件成功遞送了。運行命令find /home/vmail,看看所有子目錄和文件,應(yīng)該如下所示: /home/vmail/virtual.test /home/vmail/virtual.test/user /home/vmail/virtual.test/user/tmp /home/vmail/virtual.test/user/cur /home/vmail/virtual.test/user/new /home/vmail/virtual.test/user/new/1114511715.V801I7400b.my.server 所有的東西是不是如我描述的一樣工作?如果沒問題,要試試用郵件客戶端通過POP3或IMAP(取決于安裝了哪個服務(wù))收一下郵件。接收郵件的用戶名就是他的郵件地址"user@virtual.test",口令是"secret"。 13、第十步:添加數(shù)據(jù)庫記錄 現(xiàn)在測試通過了,可以配置自己的域和用戶了。先解釋一下在數(shù)據(jù)庫中要添加一些什么。 對每一個新的域: 在‘domains‘表中增加域名。 對每一個新用戶: 在‘users‘表中增加一行,包括郵件地址和口令(用純文本)。 對每一個新郵件重定向: 在forwardings‘中新增一行,包括源地址和目的地址。如果有多個目的地址(如簡單郵件列表),需要在這一行的相應(yīng)字段中列出所有地址,用逗號隔開。提示:這個表用來過濾途經(jīng)系統(tǒng)的所有郵件,所以本地郵件也可在這里重定向。 舉例: 源 目的 效果 postmaster@my.domain philip@my.domain 將給postmaster的郵件重定向到philip。 @my.domain john@my.domain 將給域my.domain的所有郵件重定向到j(luò)ohn。這個對`email`表中的用戶無效, 例如tina@my.domain,因為一個域中的特定用戶總是比一個“包羅萬象”的帳 號有更高的優(yōu)先權(quán)。 @my.domain @another.domain 這是整個域的重定向。域my.domain中的每一個地址被重定向到 域another.domain的相應(yīng)地址中。例如:julie@my.domain被重定向到 julie@another.domain。 jesper@my.domain dilbert@my.domain 將遞送給esper@my.domain的郵件重定向到兩個地址,每個地址都有一個拷貝。 ,dilbert@gmail.com </pre>

此帖于 05-08-19 12:05 被 secondgui 編

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多