Re: [問答] 關於寄信的小問題

看板Network作者 (小州)時間9年前 (2016/06/26 19:43), 編輯推噓2(201)
留言3則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《danny8376 (釣到一隻猴子@_@)》之銘言: : 直接回好了 : 別把機器跟軟體混在一起好了 : 不大好w : MUA/MTA/MSA/MDA : MUA -> 使用者端 : 就是處理提供使用者收發信的client : 像是一些webmail/thunderbird/outlook : MTA -> 傳送信件的 工作就是把信丟來丟去w : MSA -> 負責幫忙把把信從MUA丟給MTA的 不過其實不少會直接給MTA : MDA -> 收件夾 就只是個收件夾 老實說其實討論不用到這麼複雜,原本樓主的問題不需要談這些名詞... 很多 dns, mail 服務的建置書籍都有說...不過都討論了就.... 繼續說 :) MUA 一般泛指用戶端的 Mail 軟體,比方 Outlook, Thunderbird 這類, 一般主要就是提供使用者能夠收發 email 的軟體。 MTA 本身提供 server 之間實際信件傳輸,目前一般都會使用 SMTP 協定方式 進行溝通,也就是兩台主機的 MTA 程式透過 SMTP 協定傳輸資料。 一般來說會比較少談到 MSA,這樣談下去會很複雜。傳統 MTA 工作在 port 25/tcp 提供讓 MUA 連結進行 SMTP 溝通之外,也提供 server 與 server 之間傳送信件的使用。 MSA 則是工作在 port 587/tcp 上,一般是給 MUA 連結使用,所以兩端還是走 SMTP 協定溝通不過連線傳輸一般會支援 STARTTLS 加密方式來進行溝通之外, 還會支援 SMTP AUTH 身份驗證等,一般就是透過驗證成功之後允許信件可以代為 收下,然後會把信件再透過 SMTP 協定方式交給另外一個 MTA 來處理最後信件 寄送的功能。 實際上這樣說吧,有人會在建置 mail server 服務時候,會另外提供 port 587 服務的連線,後續 server 接收到 MUA 連信進入的信件一般會跑 mail scan 的處理檢查信件是否有 spam 等這類處理,至於 port 25 要不要跑這類服務看 需求沒有標準答案。另外其實目前許多 mail server 都直接在 port 25 開啟支援 AUTH SMTP、STARTTLS 等支援,MSA 實際的用途比較不是很明顯了。最後一般 一般的 mail server 讓 MUA 所連線的主機,大多都是直接跑一套軟體直接能夠 listen port 25 與 port 587,比方 linux 常見 postfix 來說可以設定直接 聆聽 port 25,587 ,所以實際上 MTA or MSA 都是由 postfix 程式所處理的, 詳細運作的功能差異只是設定檔案的差別而已。 一般說 MDA 是說,若 MTA 接收到一封要寄送的信件是本地端的使用者帳號的話, 那會信件內容交給 MDA 程式來處理,而 MDA 最後會把信件內容放置到實際使用者 的 mailbox 內。早期 sendmail 這類 MTA 來說,對於本地端使用者信件處理就是 呼叫 mail.local 或者是 procmail 這類 MDA 程式, 目前的確許多 MTA 是直接納入 MDA 的功能,比方 postfix 這軟體本身要把信件 投遞到本機 mailbox 或是 MailDir 格式的信箱就不需要額外的 MDA 幫忙,所以 可以簡單說 postfix 本身就是 MTA 兼當 MDA 程式的功能。不過信件的儲存格式 不一定是 mailbox or MailDir 格式,若是使用 cyrus imap 等這類 mail 的系統 來說,postfix 還是要設定一下 LMTP 組態再透過 SMTP 協定把信件交給 cyrus imap 的程式來處理最後信件的存放。 直接用 MDA 就是收件夾這說法奇怪。 : 從寄信到收到信的過程是 : MUA -> MTA -> (MTA -> )*n -> MDA -> MUA : MUA如果不是在MDA/MTA上的話分別要設定POP3/IMAP跟SMTP Server(可選) : MUA寄信時有分幾種 : 1.MUA直接寄給對方的server : 這狀況是MUA -> MTA -> MDA : MUA會直接查domain的MX(本身是個MTA)或者沒MX直接用該domain的ip : 而這邊開始就是對方伺服器內部了 : MTA會去找這domain該給誰 : 而如果是postfix/sendmail的話因為會身兼MTA/MDA/MSA : 所以如果domain是設定內接收的domain的話 : postfix/sendmail會轉寄給內部的MDA然後就寫入到收件夾了 : 當然實際上也可能讓他把特定網域的轉寄給內部其他伺服器 : (可能專責MDA的Server) 前面一開始怪怪的... MUA 本身並不管什麼 MX 紀錄 寄信來說 MUA 主要功能就是連線到 mail server 上透過 SMTP 溝通說要給誰。 MUA 軟體本身要設定寄信與收信的 mail server 主機資訊,比方常見 hinet adsl 的用戶smtp 寄信主機會使用 msa.hinet.net 這台機器,所以 MUA 後續 要寄信出去就是直接查詢 msa.hinet.net 的 A/AAAA 紀錄 (IP) 紀錄,用 smtp 連線到目的主機溝通。 比方使用者用 outlook 這個 MUA 寫信說要寄信給 support@example.com, 其中 outlook 內外寄 smtp 主機指向 msa.hinet.net port 25,那 outlook 寄信時候查詢出 msa.hinet.net 的 IP 紀錄,最後連線到該 ip 的 port 25 與對方 MTA 程式使用 smtp 協定溝通,然後 MTA 說他要寄信給 support@example.com 這個收件人,MTA 會判斷就是: 1. 這個收件者 support@example.com 指自己 mail server 本身的使用者帳號嗎, 若是收下來最後放置到使用者的 mailbox 內 (過程是透過 MDA 投遞放置還是 MTA 自己放置都好,看設定)。 2. 若 MTA 發現這個 support@example.com 不是 mail server 本身的使用者帳號, 那這時候這 mail server 若有開放 mail relay 就會把信件收下來再處理, 否則會出現 relay denied 這類回應 3. MX 紀錄是給 MTA 查詢用的,比方 msa.hinet.net 後續要處理一封給 support@example.com 的信件,會先透過 DNS 解析 example.com 的 MX 紀錄, 這決定最後要透過 SMTP 連線到哪一台主機進行溝通把信件交給對方。 其中有 MX 記錄的話: 1) MX 紀錄內有優先權與主機項目,先不管優先權部分,查出來的主機名稱 部分,也只會解析該主機名稱應對的 IP 紀錄,最後用 smtp 連線到該 ip 主機進行寄信溝通。 沒有 MX 紀錄: 1) 若 example.com 可能沒有 MX 紀錄,那就直接以 example.com 這個 A/AAAA IP 紀錄查詢後連線到遠端的 smtp server,然後把信件交給對方 : 2.MUA經過一個額外的SMTP轉寄 : 這就是MUA -> MSA/MTA -> (MTA -> ) MDA : MUA會直接連到指定的SMTP送信 : 這SMTP可能會是MSA或是MTA : 而SMTP收到後會看domain決定如何處理 : 也許這SMTP會發現這domain會是自己負責的 : 然後就往MDA送了 : 如果不是的話則會跟上面一樣找MX或domain IP往下個MTA送 : 然後就跟後半一樣了 : 而MUA要收信的話... : 如果MUA跟MDA同一台 : MUA可能就會直接去讀mailbox了 MUA 與 MDA 同一台?若你是說像是 unix 系統或者是 linux 系統上直接登入到 存放 mail 信箱的主機上,然後執行 mail 或是 mutt 這類 MUA 程式的話, 那這些程式的確預設讀取本機 local 自己使用者的 mailbox 格式的信箱。 不過這討論這樣說似乎會容易被誤會.... : 如果不同台 : 有POP3/IMAP這兩種protocol去讀mailbox : 不過這邊其實已經跟MDA無關了XD : MDA的任務只有收到信然後寫進mailbox而已 : POP3/IMAP Server說起來是直接操作mailbox的 : 但現在的MDA大多會含POP3/IMAP的功能就是 MDA 一般主要還是指 SMTP 服務程式收到信件比方是要給本機上的使用者帳號, 那 SMTP 會呼叫 MDA 程式把信件內容就給他處理,最後放置到本機相關信件檔案內, 這與所謂 POP3/IMAP 比較沒有什麼關係。個人比較不會說 dovecot, cyrus-imap 等這類提供 pop3/imap 服務的程式定位是 MDA。 : 大致是這樣 : 如果論設定 : domain部分 : domain本身要有個MX record : 然後MX內的host要指向你那幾台能夠正確丟到你MDA去的有MTA server : 可能是一台postfix設定的同時是MDA/MTA/MSA的server : 也可能只是一台一律轉寄給另外一台MTA Server的MTA Server : 或者其他各種設定 : 當然沒有MX雖然不建議但也是可行 : 那就是你domain的IP要是上述的那些MTA Server 這段陳述有看但是不是很清楚... 我想原本樓主的問題是要釐清這兩點就好: 1. 用戶端用某個 smtp server 寄信,輸入連線的主機名稱,該主機名稱有無 dns mx 紀錄並不重要,因為 muta 只會查詢該主機名稱的 IP 紀錄然後進行 連線溝通。比方寄信主機用 mail.example.com 的話,可以查詢到 mail.example.com 的 ip 位址,然後可以連線到該主機的 port 25 等這類 smtp 服務溝通即可 2. 主機名稱的 MX 紀錄主要是影響外面的 mail server 要寄信到某個 email 帳號信箱時決定實際連線的 smtp 主機位址來進行傳遞溝通。 比方有申請 example.com 這個 domain name,然後指定使用的的信箱是 peter@mail.example.com,那要寄信給該帳號外面的 smtp 主機會查詢 mail.example.com 有無 mx 紀錄,有 mx 紀錄就依據 mx 記錄內的主機清單 資訊來連線 (其中 mx 內還區分相關優先權指定),若沒 mx 紀錄就直接查詢 mail.example.com 的 ip 資訊來連線。 3. MX 的設定在 mail 裡面基本上有很多不同應用的議題可以討論, 比方常見的 mx mail backup 功能,比方這類 dns 設定: @ IN MX 10 mail.example.com. IN MX 20 mail2.example.com. mail IN A 1.2.3.4 IN MX 10 mail.example.com. IN MX 20 mail2.example.com. 實際一般主要的服務就是 mail.example.com,實際外面要寄信給 peter@example.com.tw 或是 peter@mail.example.com 的信件,外面的 mail server 會連線到 mail.example.com 的主機進行 smtp 溝通,若失敗等 無法連線會改連到 mail2.example.com 來投遞。 mail2 主機大多為 mx backup 的主機,一般會設定允許 mail relay 給 xxxx@mail.example.com 與 xxx@example.com 信件,並且定期檢查 mail.example.com 是否 smtp 可以回應了,可以回應回再用 smtp 溝通把信件 丟回給 mail.example.com 主機 其他部分比方有 mail balance 功能,比方看看 hinet 的設定來說, $ host -t mx msa.hinet.net msa.hinet.net mail is handled by 0 msa-smtp-mx2.hinet.net. msa.hinet.net mail is handled by 0 msa-smtp-mx1.hinet.net. $ host -t a msa-smtp-mx1.hinet.net. msa-smtp-mx1.hinet.net has address 168.95.6.51 msa-smtp-mx1.hinet.net has address 168.95.6.60 msa-smtp-mx1.hinet.net has address 168.95.6.56 ... $ host -t a msa-smtp-mx2.hinet.net. msa-smtp-mx2.hinet.net has address 168.95.6.69 msa-smtp-mx2.hinet.net has address 168.95.6.63 msa-smtp-mx2.hinet.net has address 168.95.6.61 ... 所以 internet 上的 smtp server 要寄信給 userid@msa.hinet.net 的信件 實際上是連線到 msa-smtp-mx{1,2}.hinet.net 主機,而其中他們優先權相同, 且這兩個主機名稱都具備多個 ip 提供平衡負載功能,大多架構來說這些主機群 是 mail relay host,收到的信件會再依據其他設定放置到最後實際的 mail server 的 mailbox 上。 : 至於MUA上面的POP3/IMAP/SMTP就看需求訂 : 但這部分不完全跟架設mail有關 : SMTP部分 : 除非你要讓對方從你的domain寄信 : 那為了domain信用問題會建議統一由幾台SMTP送出 : 其他SMTP的一慮宣告為不合法的Server(有幾個規範可以做這件事) : 當然如果不在意domain信用問題 : 那讓隨便一個MTA寄都行 : 只是一旦遇到垃圾信問題這domain的信用很快就沒了 這個與原本樓主的問題似乎不大相同了,若要談 SPF 紀錄或是 DomainKey 這類部分好像離題更多。 : 不過也有另一個狀況 : 那就是對方可能會看這信不是從應該要來的MTA來的 : 所以直接當垃圾信處理掉(即使他不該是垃圾信) : 而SMTP Server沒什麼 : 有辦法讓MUA設定上去就好 : 看你要hostname/domain name/ip都行 : pop3/imap同理 : 但pop3/imap基本上是一定需要的 : 除非你只給webmail介面 : 而你的webmail可以直接讀到mailbox : (通常就是跟MDA在同一台機器上了) : 或者你的做法是要連到MDA上去讀mail 最後其實原本樓主的問題可以自己查一下網路文件,其實一般的 mail server 建置與 DNS 內與 MX 記錄都會有說明。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.236.157.200 ※ 文章網址: https://www.ptt.cc/bbs/Network/M.1466941426.A.061.html

06/28 17:02, , 1F
有用postfix+dovecot實作過了 也比較懂了
06/28 17:02, 1F

06/28 17:05, , 2F
感謝linux版大大回答
06/28 17:05, 2F

06/28 18:51, , 3F
受益了
06/28 18:51, 3F
文章代碼(AID): #1NRx_o1X (Network)
討論串 (同標題文章)
文章代碼(AID): #1NRx_o1X (Network)