[TOC] # Samba # Mail server ## 一、為什麼需要 Mail Server? - 什麼是 mail server ? - 負責「收」、「發」、「儲存」、「轉送」電子郵件的伺服器 - 如果你擁有自己的網域(例如 `@kaiwha.com`, `@BlueT.org`),你就需要一個 Mail Server 讓郵件能正常寄送與接收 - 你說幹嘛不用 Gmail?因為有自己的企業信箱超帥 - Email 的位址寫法 - account@server.name - 例如:kaiwha@gmail.com, i@kaiwha.com - 仔細看看 @mail1.ncnu.edu.tw,學會這章你就知道怎麼幫一家企業建一個 Mail server 了 ## 二、從 0 架設 Mail Server! ### 概念:組成 mail server 重要的 component 要寄出一封信件時是需要很多介面的幫忙 #### 1. Message user agent (MUA) 顧名思義 MUA 就是『郵件使用者代理人』的意思,你不會用 telnet 或 ssh 登入郵件主機來主動發出信件,所以會透過 MUA 來幫你送信到郵件主機上頭去 - 功能: - 是使用者實際接觸的界面 - 負責讓使用者**撰寫、寄送、讀取、刪除郵件** - 當使用者點「傳送」,MUA 會將信交給下一個 Agent(通常是 MSA) - 常見的 MUA 範例: - Gmail, Outlook, Mozilla Thunderbird, Kmail #### 2. Message submission agent (MSA) - 郵件提交代理 - 功能: - 位於寄件人端,專門負責接收使用者送出的郵件(來自 MUA) - 檢查信件格式、寄件人驗證、加簽 DKIM、補加標頭(如 Received:) - 若無問題,將信件交給 MTA - MSA 常常與下一個 MTA 合併在同一軟體 #### 3. Message transfer agent (MTA) - 郵件傳輸代理 - 功能: - 根據收件人地址查詢 DNS 的 MX 記錄,將郵件轉送到目標伺服器。 - 如果信的目的地是本機上的使用者,那信就直接送到該使用者的 mailbox 下 - 如果信的目的地不是本機上的使用者,那就需要將信轉送給下一台 MTA - 特色: - MTA 是整個郵件系統的「郵差」核心 - 一封信可能經過多個 MTA 才抵達收件人網域 #### 4. Message delivery agent (MDA) - 郵件遞送代理 - 功能 - 負責將 MTA 收到的郵件投遞到本地信箱(例如 `/var/mail/`) - 第一個把信件真正「寫入磁碟」的角色 - 過濾垃圾信件 - 根據這封信件的 header,或是特定的信件內容來分析過濾 - 例如:AV 情色 - 分析 MTA 收到這封信的 header 或內容等資料,決定這封郵件的去向 #### 5. Mail retrieval agent (MRA) - 非正式 IETF document 裡的名稱 - 功能 - 把信件下載回本機。 - 在 IETF 標準裡,這類功能仍被視作 MUA 的一部分,但實務上常分開命名。 --- ### 流程圖 #### 最基礎的流程 ```mermaid graph LR A((MUA))-->B[MTA]-.->C((Internet))-.->D[MTA]-->E((MUA)) ``` #### 完整的流程 ```mermaid graph LR A((MUA))-->B[/MSA/]-->C[MTA]-.->D((Internet))-.->E[MTA]-->F[\MDA\]-->G{{MRA}}-->H((MUA)) ``` 舉例流程: 1. 使用者在 Thunderbird 寫信 → MUA 2. Thunderbird 寄出信件 → MSA(Postfix submission) 3. MSA 將信件交給 → MTA(Postfix 轉遞) 4. MTA 查詢 MX,送至收件網域的 MTA 5. 收件端 MTA 將信交給 MDA 6. 收件人使用 Gmail App(MUA)透過 MRA 讀取 MDA 信件 --- ### Component 之間怎麼溝通呢?什麼 Protocol? #### Simple Mail Transfer Protocol (SMTP) - port: - 25:預設的 SMTP port 號 - 465:透過 SSL 加密 - 587:透過 TLS 加密 - 用途:寄送電子郵件,MUA to MSA,MSA to MTA #### Internet Message Access Protocal (IMAP) - port - 不安全:143 - 安全:993,透過 TLS/SSL 加密 - 從 mail server 上讀取信件 - 讓你在任何地方、使用任何裝置,都能夠存取電子郵件 - 除非你點下載的按鈕,要不然不會自動下載信件 - MRA #### Post Office Protocol v3.0 (POP3) - port - 不安全:110 - 安全:995,透過 TLS/SSL 加密 - 從 mail server 下載所有郵件 - 郵件下載到電腦上後,mail server 就會將使用者 mailbox 內的資料刪除 - 已傳送的郵件不會存在 mail server 中,而是存在你的本機上 - MUA to MRA --- ### 加上 Portocal 的完整流程 ![image](https://hackmd.io/_uploads/ByMubGrpex.png) #### 1. MUA 交給 MTA - 寄件人透過 MUA 寫信,然後傳送至自己的 MTA 上 - 途中請 MSA 檢查信件 Header,或是加上簽章 #### 2. MTA 去問 DNS server 找 MX 紀錄 #### 3. MTA 傳給收件人的 MTA - 如果這封信的目的地是本機 MTA 使用者的帳號,MDA 會接手直接將這封信送到該使用者地 Mailbox - 如果這封信目的地為其他 MTA ,則開始 Relay - MTA 開始分析該封信是否具有合法的使用權限 - 有權限:MTA 將信寄給下一部 MTA 的 SMTP (port 25) #### 4,5. MDA 接手 MTA 的郵件並放在本機電腦 - 收件方的 MTA 接收寄件方發出的信,並將信透過 MDA 放到正確的使用者信箱中 - 可能是 `/var/mail/`, `/var/spool/mail/username`, `/home/username/Maildir` #### 6,7. MUA 向 MRA 請求處理存在本機的郵件 - MUA 透過 POP3(port 110)/IMAP(port 143) 協定連接到 MRA, 並且輸入帳號與密碼來取得正確的認證與授權 - MRA 確認使用者帳號、密碼沒有問題後,會前往該使用者的 Mailbox 取得使用者的信件並傳送到使用者的 MUA 軟體上 # LDAP # Ref. ## Samba ## Mail server https://hackmd.io/@ncnu-opensource/SJ0jF4dOo https://linux.vbird.org/linux_server/centos4/0380mail-centos4.php https://linux.vbird.org/linux_server/redhat9/0380sendmail.php https://hackmd.io/M-1cCABLS8Cx-00LVS2XkA?view ## LDAP