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