Transcript Mail 架設
Mail Server Outline 基本概念 Mail Server原理 Mail 相關通訊協定 Postfix簡介 Postfix的安裝、設定及測試 用戶端如何收信 OpenWebMail簡介與安裝設定 收發信件的基本概念 電子郵件與傳統郵件一樣,如同地址般,需要有一 個發信端與收信端 發信流程:信→郵局與郵局間的傳遞→收件人 郵務士的功能由轉送郵件的程式所取代 Mail Server 原理 E-mail 系統的服務程式 E-mail 系統包括 MUA (Mail User Agent) 與 MTA (Mail Transport Agent) 兩個部份。 MUA 指使用者可用來讀寫信件的程式。 Ex: Outlook。 MTA 指系統中負責處理信件收發工作 的程式。 Ex: sendmail 與 postfix。 MUA( Mail User Agent ) 使用者所使用的閱讀、撰寫、回覆信件的程式。 Linux 的 pine、elm、mutt、kmail 等,及 Windows 中 的 outlook等,都是用戶端用來讀寫收發信件的程式。 用戶端是透過 MUA 軟體來跟郵件主機搭上線,但 MUA並不負責實際傳遞信件的工作,而是交由MTA 處理。 6 MTA ( Mail Transport Agent ) 用戶端使用 MUA 將信件寄出時,這封信是透過一台 安裝有 MTA 軟體的主機代為處理。 Linux 的 postfix 、 qmail 及 Windows 的 Exchange 等,都是屬於 MTA(一 台 Mail Server)。 當 MTA 收到 MUA 所寄來的 mail 時,會先判斷這封 信是否為本地端的 mail,若否,則繼續將此 mail 傳送 給另一部這個信件的 MTA 來處理 ; 而當 MTA 將信件 轉寄給另一台 MTA 的行為,就叫做 Relay 。 MDA ( Mail Deliver Agent ) 即郵件投遞代理程式之意。 MTA 收到 MUA 所寄來的信件時,如判 斷這封信是屬於本地端的信件,會交給 Local MDA 處理,然後 Local MDA 就把 它放置在使用者個人信箱之中 ; 那如果此 mail 是屬於外部的信件,則會透過 smtp MDA 來將 mail 轉寄給另一台 MTA 處理。 佇列管理員 (Queue Manager) 9 Mail 相關通訊協定 SMTP ( Simple Mail Transport Protocol ) 這是在寄信時所使用的協定,像 MUA 將信件傳送給 MTA,或者 MTA 再把信 件轉寄給另一台 MTA 時,就是使用 SMTP 協定。 SMTP 協定所要使用的 port 為 25,當 MTA 發覺此 mail 非本地端信件時,即 會把信件 Relay 給另一台 MTA 的 25 port,當然這過程是使用 SMTP 協定。 11 POP ( Post Office Protocol ) 這是收信時所使用的協定,也就是 MUA 把信 件從 MTA 中取回時所使用的協定。 POP 有所謂的 POP2 及 POP3,數字代表的是 POP 協定的版本,目前以 POP3 為主。 POP3 協定是使用 110 port,因此當使用者要 收信時,MUA 是連接 POP Server 的 110 port 來將信件收下。 IMAP ( Internet Mail Application Protocol ) 使用 POP3與IMAP 不同點是,POP3通常會把 郵件下載回自己主機內,這樣就會把伺服器 上的 Mail Box 清空,因此使用者可以離線閱 讀信件。 IMAP 則是把信件都保留在伺服器上,好處是 可以利用不同的電腦來存取伺服器上所有新 舊的信件 ﹔在做資料夾分類時,所建立的新 資料夾是存在於伺服器上,而非個人電腦中。 郵件系統與協定之間的關係 14 E-mail寄信/收信過程 寄信人將E-mail寫好上網寄出後,透過 SMTP(Simple Mail Transfer Protocol,簡易郵件 傳送協定),將E-Mail送到寄信人的郵件主機 (Mail Server)。 寄信人的郵件主機(Mail Server)再透過SMTP 穿過Internet,將信寄送至收信人的郵件主機 (Mail Server)的收信人帳號信箱上。 收信人上網連上郵件主機後,透過POP3(Post Office Protocol Version 3,郵局協定第3版), 從郵件主機下載郵件到電腦的E-mail軟體裏或 閱讀個人的郵件。 傳送 E-mail 的方式 利用網路來傳送 E-mail 可分為 2 種。 在單一網路中收發 E-mail,例如公司內 部。 將 E-mail 傳送到另一台郵件主機,發信 與收信分別在不同的郵件主機中進行。 在內部網路中傳送 E-mail 當同一郵件主機中的使用者 cassia 要寄 信給 ken 時,郵件伺服程式並不會將 信件傳出郵件主機。用這種方式時, 郵件主機並不需要有一個已登記的伺 服器名稱,因此 cassia 寄給 ken 可以隨 意使用下列幾種 E-mail 位址: 在內部網路中傳送 E-mail E-mail 位址的格式 每個 E-mail 位址的格式,皆是由郵件帳 號、主機名稱 (host name) 與網域名稱 (domain name) 組合而成。 傳送 E-mail 到其他郵件主機 當 E-mail 要傳送到另一台郵件主機時, 一定要指定收信者的完整 E-mail 位址。 例如 cassia 要寄一封信給 [email protected],則郵件伺服程 式發現此信是要寄到 ms1.whatever.net 網域,就會詢問名稱伺服器 (name server) 關於此網域的資訊,然後透過 SMTP 協定將信件傳送到遠端的郵件主 機: 傳送 E-mail 到其他郵件主機 傳送 E-mail 到其他郵件主機 架設郵件主機時,不可隨便取一個名 稱 ,因為上游沒有記錄此郵件主機的 位址,則當別人要寄信過來的時候,會 因為找不到這台郵件主機而無法順利寄 出。 傳送 E-mail 到其他郵件主機 檢查名稱伺服器是否設定正確 想要讓自行架設的郵件主機能正常運作, 除了要有正式的網址之外,還必須在名 稱伺服器中登記此主機是郵件伺服器, 如此其他的郵件主機才能寄信給我們自 行架設的郵件伺服器,否則信件可是會 被退回的! 因此,必須在名稱伺服器中登記主機為 郵件伺服器。 檢查名稱伺服器是否設定正確 查詢郵件伺服器是否有登記 sendmail與postfix CentOS 預設會提供sendmail (http://www.sendmail.org) 以及近期很熱門的 Postfix (http://www.postfix.org)。 sendmail 曾是最為廣泛使用的 mail server 軟體,由於 設定檔太過於難懂, 程式漏洞問題導致的主機安全性缺失等 問題,新版的 CentOS 已經將預設的 mail server 調整為 postfix 。 Sendmail 的特色: 允許各種不同的emial位址路徑 支援虛擬的domains及users 允許偽裝的使用者及機器 提供自動重試失敗傳送郵件的重傳及其 它一些情況 Postfix簡介 由Wietse Zweitze venema 博士於1998年在 IBM所開發 。 Postfix的優點: ◦ 速度更快 ◦ 相容性佳 ◦ 能調節系統 ◦ 更靈活 ◦ 安全性 28 Postfix相關套件 Postfix : SMTP Server 的主要套件。 dovecot : POP3 Server 的主要套件。 設定檔路徑(一) # rpm -ql postfix /etc/postfix/main.cf Postfix 的主要設定檔。 /etc/postfix/transport 擔任 Mail GW 的主機,可以 藉由設定這個檔案,來將信件轉給指定的 MTA。 /etc/init.d/postfix 管理 Postfix 服務的 script。 /sbin/rcpostfix 連結至 /etc/init.d/postfix 的符號連結 檔。 /usr/lib/postfix/master 提供 Postfix 服務的 daemon。 /usr/bin/mailq 查詢郵件佇列 (mail queue) 的指令。 /usr/bin/newaliases 建立或更新郵件別名資料庫。 設定檔路徑(二) /usr/sbin/postalias 維護 Postfix 別名資料庫。 /usr/sbin/postconf Postfix 的設定工具。可以用來列 出 Postfix 的預設參數及實際參數值,也可以直接在 命令列上 修改設定參數,並將設定結果寫入 main.cf 中。 /usr/sbin/postfix 控管 Postfix 的程式。 /usr/sbin/postmap 用來將指定的檔案內容轉換成資 料庫格式,並將轉換後的結果寫入資料庫檔案裡。 /usr/sbin/postsuper 管理佇列郵件的工具。 /var/spool/postfix 處理佇留信件的相關目錄,其所 存放的位置,如 hold、incoming、active 及 deferred 等目錄。 Postfix相關指令 # postfix check <=檢查 postfix 相關的檔案、權限等是否 正確。 # postfix start <=執行postfix # postfix stop <=關閉 postfix # postfix flush <=強制將正在郵件佇列的郵件寄出 # postfix reload <=重新讀入設定檔/etc/postfix/main.cf #postconf <= 列出目前的設定參數值。 #postconf -d <= 列出預設的設定參數值。 #postconf -e 'alias_maps = hash:/etc/postfix/aliases' 在命令列上編輯設定參數後,直接寫入 main.cf 中。 # chkconfig postfix 35 <=設定開機時啟動 Postfix 服務 設定Postfix # vi /etc/postfix/main.cf (75行)myhostname = mail.ccnet.com 指定 Mail Server 在 Internet 上的主機名稱 (83行) mydomain = ccnet.com myhostname 設定為 mail,那 mydomain 就是 ccnet.com。 (99行-註解拿掉) myorigin = $myhostname (113行,116行加註解 ) inet_interfaces = all 指定郵件主機上,允許接收信件的網路介面位址。all 就表示是所有網路介面都可以接收使用者所寄來的 信件,這也是預設值。 設定Postfix Server (二) mynetworks_style = subnet 指定 SMTP 所信任的來源端類型,有以下三種: #mynetworks_style = class #mynetworks_style = host mynetworks_style = subnet --- 只要與 MTA 位於同一個子 網段的主機,其所寄過來的信件都允許 Relay。 message_size_limit = 10240000 # 設定每封信件大小,不得超過 10 MB。 接著測試再重新啟動: # postfix check # postfix reload 或 #/etc/init.d/postfix restart 設定Postfix Server (三) 啟動之後的檢查 # netstat -anp | grep :25 tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 11348/master ↑ 這裡如果顯示 127.0.0.1 的話,那表示不能對外提供 smtp 的服務, 請特別注意。 #ps –aux |grep master Client端測試 Windows C:\>telnet 192.168.1.123 25 220 ccnet.com ESMTP Postfix <=ok Linux $telnet 192.168.1.123 25 quit <= 離開 設定可收信的 POP3 Server 確定是否已安裝dovecot #rpm –q qpopper 安裝dovecot #yum install dovecot 修改設定 # vim /etc/dovecot/dovecot.conf (新增在21行)protocols = imap pop3 # vim /etc/dovecot/conf.d/10-ssl.conf ssl = no <=將第 6 行改成no #/etc/init.d/dovecot start #chkconfig dovecot on #netstat -tlnp | grep dovecot <=檢查 port 110/143 Linux用戶端如何寄信 在文字介面上打mail即可收信 # mail user1 <= 寄信給user1 Subject: Say Hello <= 輸入信件標題 This is a test mail for Jack <= 從這裡是信的內容 . <= 輸入一點 . 結束 Cc: <= 若需要再輸入副本收件人的e-mail Linux用戶端如何收信 $ mail Heirloom Mail version 12.4 7/29/08. Type ? for help. "/var/spool/mail/wei": 1 message 1 new >N 1 root Sun May 27 22:43 18/530 "test 1" & <= mail 軟體的提示字元,可以輸入 ? 來察看可用指令 讀信:直接按 Enter 或輸入數字後 enter 顯示標題: h 或輸入 h 數字 回覆郵件: 輸入 R 刪除郵件: 輸入 d 或輸入 d10-50 刪除第 10-50 封郵 件 儲存郵件到檔案: 輸入 s 數字 檔名 離開 mail:輸入 q 或 x ) 請求協助:輸入 help Linux mutt #yum install mutt # mutt [-a 附加檔] [-i 內文檔] [-b 秘密副本] [-c 一般 副本] [-s 信件標題] email位址 要讓 mail 群組能夠使用 wei 的家目錄 $ chmod a+x ~ 非固定 IP位址 郵件伺服器 假設你是hinet 用戶,而 hinet 提供的郵 件主機為 ms1.hinet.net 可以這樣設定: # vim /etc/postfix/main.cf 加入這行 relayhost = [ms1.hinet.net] /etc/init.d/postfix restart OpenWebMail安裝簡介 42 webmail webmail 可當成是一種 MUA (郵件使用 者代理人 )來看待,也就是說可以將他 想成與 outlook express 同等級的應用軟 體。而我們可以透過 webmail 對 mail server進行電子郵件的存取。 安裝之前 需要www server(Apache)的環境。 DNS server也是必須的。 安裝其他必要的軟體套件,如Text-lconv、 postfix or sendmail。 特別注意檔案擺放的路徑位置。 安裝前置套件 首先啟動 smtp server: # service postfix restart //重新啟動postfix # chkconfig postfix on //設定成開機時自動啟動 檢查 smtp server 是否啟動 (smtp port 25) # telnet localhost 25 # vi /etc/postfix/main.cf soft_bounce = no -> yes inet_interfaces = all 安裝前置套件 下載 Text-Iconv http://openwebmail.org/openwebmail/download/package s/ 下載 Text-Iconv-1.2.tar.gz 套件 接著下載 Openwebmail http://openwebmail.org/openwebmail/download/current/ 下載 webmail-current.tar.gz (此為2.53版) 安裝前置套件 你也可以使用 wget 指令而不透過瀏 覽器下載 #wget http://openwebmail.org/openwebmail/download/release/openwebmail-2.53.tar.gz 及 # wget http://openwebmail.org/openwebmail/download/packages/Text-Iconv1.2.tar.gz 安裝前置套件 解壓縮Text-Iconv # tar xvf Text-Iconv-1.2.tar.gz 這邊請大家注意檔案的路徑,否則很容易搞混, 建議都放在 root 底下。 安裝前置套件 進到 Text-Iconv-1.2 的目錄下 # perl Makefile.PL (注意大小寫) 依序執行以下三個指令進行安裝 # make # make test # make install 安裝 Openwebmail 安裝 Openwebmail # tar xvfz openwebmail-2.53.tar.gz 將 Openwebmail 配合 apache 的位置擺放 # mv ./data/openwebmail /var/www/htdocs # mv ./cgi-bin/openwebmail /var/www/cgi-bin 安裝 Openwebmail 接著修改設定檔的路徑 /var/www/cgi-bin/openwebmail/etc/openwebmail.conf 把裡面 ow_cgidir 和 ow_htmldir 的內容改為: ow_cgidir /var/www/cgi-bin/openwebmail ow_htmldir /var/www/htdocs/openwebmail 安裝 Openwebmail 修改目錄權限,讓 Openwebmail 可用 root 的權 限執行或建立所需的目錄及檔案。 chown root.root /var/www/cgi-bin/openwebmail chown -R root.root /var/www/htdocs/openwebmail chown root.mail /var/www/cgi-bin/openwebmail/* chmod 4555 /var/www/cgibin/openwebmail/openwebmail*.pl chown root.mail /var/www/cgibin/openwebmail/openwebmail*.pl chmod 4555 /usr/bin/suidperl 安裝 Openwebmail 初始化 Openwebmail (重要!) 接著按照說明更改 dbm.conf 的內容,改完了要 再初始化 Openwebmail 一次。 以下是 dbm.conf 的存放位置 執行 # /var/www/cgi-bin/openwebmail/ openwebmail-tool.pl --init # /var/www/cgi-bin/openwebmail/etc/ defaults/dbm.conf 安裝 Openwebmail 修改 dbm.conf: dbm_ext dbmopen_ext 改為 dbm_ext dbmopen_ext .db none .pag none 如果沒有意外,那到這邊就已安裝完成。 使用 Openwebmail Openwebmail 是使用你的 Linux 系統中的使用者 帳號來登入,為了方便起見請大家統一新增一個 使用者 「mailuser」,密碼一樣為 mailuser # useradd mailuser –m //建立使用者 mailuser 並建立 家目錄 # passwd mailuser //修改 mailuser 的密碼 使用 Openwebmail 使用者設定好之後用 vi 修改以下檔案 # vi /var/www/cgi-bin/openwebmail/etc/defaults /auth_unix.conf 將以下這段 passwdfile_encrypted /etc/master.passwd 改為 passwdfile_encrypted /etc/shadow 如果不改這裡 ,Openwebmail 會抓不到使用者 的名稱及密碼。 使用 Openwebmail 在瀏覽器中輸入: http://你的主機/cgi-bin/openwebmail/openwebmail.pl 如出現登入畫面則表示成功,這時可用剛剛新設 的 mailuser 來登入。 登入畫面 使用 root 登入的方法 由於 Openwebmail 預設無法用 root 使用者來登 入,在這邊補充修改的方法。 # vi /var/www/cgi-bin/openwebmail/etc/ defaults/openwebmail.conf 將裡面的 allowed_rootloginip none 改為 allowed_rootloginip 你的IP 這樣就可以了! 檢視寄信狀況(一) 當我們寄出郵件時,要怎麼知道真的已 被郵件主機寄出去了呢?本節將會告訴 你查看郵件佇列的方法。 有時候可能會因為網路的問題而使得郵 件送不出去,我們可以用 mailq 指令來 查看郵件佇列 (mail queue) 的內容: 檢視寄信狀況(二) 如果是類似下面這樣的訊息,則表示有 信件尚未被送出: 檢視寄信狀況(三) 有封信件停留在郵件佇列中等待寄送, 如果一直都寄不出去,則會通知發信人 無法寄出。這些留在郵件佇列中的信件 都儲存在 /var/spool/mqueue 目錄中,其 存取權限預設為 "rw-------",擁有者是 root。 而我們在郵件主機上收發郵件的動作, 可查看記錄在 /var/log/maillog 檔,檢視 寄送的情況。 參考資料 http://kevingt.wordpress.com/2009/08/12/postfix-mail-server%E8%88%87-open-webmail/ http://linux.vbird.org/linux_server/0380mail.php http://linux.vbird.org/linux_server/0520openwebmail.php