---
# System prepended metadata

title: 'Samba, LDAP, Mail server'

---

[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