Sendmail - Arch Linux 中文维基

跳至內容

# Sendmail

出自 Arch Linux 中文维基

本文或本節內容已經過時。

原因： 本文檔已經長期沒有同步，上一次同步工作尚未完成，請參閱英文Wiki相關內容以取得最新信息 (在Talk:Sendmail討論)
翻譯狀態：

- 本文（或部分內容）譯自 Sendmail，最近一次同步於 2016-08-26，若英文版本有所更改，則您可以幫助同步與翻譯更改的內容。
- 您可以在 ArchWiki 的對應頁面找到本文翻譯的原始修訂歷史。
- 本文可能與英文原文存在出入。

這篇文章或章節的翻譯質量不佳。

原因：Last updated in 2016, out of sync with English page（在 Talk:Sendmail# 中討論）

Sendmail 是來自 UNIX 世界的經典 SMTP 伺服器。本篇是基於郵件伺服器構建的。

本文的目的是為本地用戶帳戶設置 Sendmail，不使用 mysql 或者其它資料庫，同時允許建立所謂 mail-only 帳戶。

## 安裝

本文或本章節的事實準確性存在爭議。

原因： sendmail 可以與其他郵件投遞代理（MDA）配合使用，而不只是 procmail。 英文Wiki中存在：Talk:Sendmail#MDA_compatibility（在 Talk:Sendmail 中討論）

安裝軟體包 sendmailAUR, procmail包 和 m4包

## 添加用戶

為每個需要接收郵件的用戶創建 Linux 用戶，每個用戶會擁有類似 username@your-domain.com 的電子郵件地址。但是如果你想要添加 mail-only 帳戶，即僅能處理電子郵件，但不能使用 shell 或 X 進行登錄的帳戶，您可以按如下步驟添加該類帳戶：

    # useradd -m -s /usr/bin/nologin username

註：在此之後，您可以隨時通過修改 `/etc/passwd` 等方式更改帳戶類型與屬性。

## 配置

### 創建 SSL 證書

警告：如果你部署了 TLS，請務必遵循 weakdh.org 的指南，並禁用 SSLv3，以防止安全漏洞。更多信息請參閱服務端SSL（英文Wiki）

創建證書的過程，請閱讀 OpenSSL 以了解更多信息，Let's Encrypt 提供了免費認證。

警告：使用經過口令加密（具有 passphrase）的伺服器的密鑰文件可能導致 Sendmail 啟用 TLS 失敗。如果出現問題，請參考 這裡 移除已有密鑰文件的口令。
注意：建議將伺服器密鑰與證書統一放在 `/etc/mail/certs/` 目錄下，並移除伺服器密鑰文件的組可讀與其它可讀權限。之後 `sendmailconfig` 工具可能會自動更改該文件夾下文件的屬主、屬組與權限。

### sendmail.cf

創建文件 `/etc/mail/sendmail.mc`，並以此為基礎使用 m4 工具生成 `sendmail.cf` 文件。

您可以由 `/usr/share/sendmail-cf/README` 文件了解配置 sendmail 的全部選項。

警告：無論是從頭創建自己的 `sendmail.mc` 文件，還是在已有的 `sendmail.mc` 文件基礎上進行修改，請時刻牢記，在非 TLS 情況下使用明文驗證是十分危險的行為。除非您明確了解自己行為的意義，請使用以下示例中的方法強制進行 TLS 驗證以確保安全性。

下面是在 TLS 之上進行身份驗證的配置文件示例。例子包含了解釋工作原理的注釋，這些注釋以 `dnl` 這個單詞起始。

    /etc/mail/sendmail.mc

    include(`/usr/share/sendmail-cf/m4/cf.m4')
    define(`confDOMAIN_NAME', `your-domain.com')dnl
    FEATURE(use_cw_file)
    dnl  The following allows relaying if the user authenticates,
    dnl  and disallows plaintext authentication (PLAIN/LOGIN) on
    dnl  non-TLS links:
    define(`confAUTH_OPTIONS', `A p y')dnl
    dnl
    dnl  Accept PLAIN and LOGIN authentications:
    TRUST_AUTH_MECH(`LOGIN PLAIN')dnl
    define(`confAUTH_MECHANISMS', `LOGIN PLAIN')dnl
    dnl
    dnl Make sure this paths correctly point to your SSL cert files:
    define(`confCACERT_PATH',`/etc/ssl/certs')
    define(`confCACERT',`/etc/ssl/cacert.pem')
    define(`confSERVER_CERT',`/etc/ssl/certs/server.crt')
    define(`confSERVER_KEY',`/etc/ssl/private/server.key')
    dnl
    FEATURE(`virtusertable', `hash /etc/mail/virtusertable.db')dnl
    OSTYPE(linux)dnl
    MAILER(local)dnl
    MAILER(smtp)dnl

然後使用使用

    # m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf

命令生成 `sendmail.cf` 文件。

注意：如果您對 `sendmail.cf` 語法感興趣，請參閱 這篇文章 了解詳情。

### sendmail.conf

`sendmail.conf` 文件，如果存在，則也是配置 Sendmail 並最終生成 `sendmail.cf` 的一個配置文件。請閱讀文件內含的注釋了解詳細信息。

### local-host-names

請將您的域名寫入 `local-host-names` 文件:

    /etc/mail/local-host-names

    localhost
    your-domain.com
    mail.your-domain.com
    localhost.localdomain

請確保您的域名可以被 `/etc/hosts` 文件解析。

### access.db

創建文件 `/etc/mail/access` 然後寫入規則以配置郵件轉發、允許收信與拒信。假設你在 `10.5.0.0/24` 有一個 VPN，而且你希望轉發來自該 IP 段的所有郵件：

    /etc/mail/access

    10.5.0 RELAY
    127.0.0 RELAY

然後使用

    # makemap hash /etc/mail/access.db < /etc/mail/access

命令處理生成 sendmail 可以使用的配置資料庫。

### aliases.db

編輯文件 `/etc/mail/aliases` ，反注釋這一行： `#root: human being here` 並將其修改如下：

    root:         your-username

你可以在此添加用戶的別名。例如：

    coolguy:      your-username
    somedude:     your-username

然後使用

    # newaliases

命令進行處理。

### virtusertable.db

創建 `virtusertable` 文件並在其中寫入含有域名的別名：（這項功能在您的伺服器綁定多域名時十分有用）

    /etc/mail/virtusertable

    your-username@your-domain.com         your-username
    joe@my-other.tk                       joenobody

然後使用

    # makemap hash /etc/mail/virtusertable.db < /etc/mail/virtusertable

命令進行處理。

### 開機自動啟動

啟用並啟動下列服務。請閱讀守護進程了解詳情。

- `saslauthd.service`
- `sendmail.service`
- `sm-client.service`

### SASL 驗證

將用戶添加至 SASL 資料庫並設置用於 SMTP 身份驗證的密碼。

    # saslpasswd2 -c your-username

註：您可以設置使用異於 SASL 的身份驗證途徑。這需要進一步修改配置文件，這裡不贅述。

## 小竅門

### 將某個域名的全部郵件轉發至特定郵箱

若需將 my-other.tk 域名下所有用戶的電子郵件轉發到 your-username@your-domain.com，請在 `/etc/mail/virtusertable` 文件中添加以下一行：

    @my-other.tk        your-username@your-domain.com

不要忘記再次使用如下命令更新配置資料庫：

    # makemap hash /etc/mail/virtusertable.db < /etc/mail/virtusertable

分類：​

- 使用「模板:過時」標記的頁面或章節
- 郵件伺服器

隱藏分類：​

- 使用「模板:糟糕的翻譯」標記的頁面或章節
- 使用「模板:準確性」標記的頁面或章節

Sendmail
新增話題