Sendmail

出自 Arch Linux 中文维基

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

原因: 請提供模板的第一個位置參數以概括原因。 (在Talk:Sendmail討論)

這篇文章或章節的翻譯不反映原文。

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

Sendmail 是來自 UNIX 世界的經典 SMTP 伺服器。Arch Linux 還提供了 Postfix

本文的目的是為本地用户賬户設置 Sendmail,不使用 mysql 或者其它數據庫,同時允許建立所謂 mail-only 賬户

本文僅描述了配置 Sendmail 的必需步驟;要添加 IMAP 與 POP3 服務,您可以考慮閱讀 Dovecot 的內容。

安裝[編輯 | 編輯原始碼]

安裝 軟件包 sendmailAUR, procmailm4

DNS 記錄[編輯 | 編輯原始碼]

您應當擁有一個域名,並且編輯所擁有域名的 MX 記錄指向你的伺服器。請注意一些伺服器在處理指向 CNAMEs 的 MX 記錄時會出現問題,所以你應當考慮將 MX 記錄指向一個 A 記錄。

添加用户[編輯 | 編輯原始碼]

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

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

註:在此之後,您可以隨時通過修改 /etc/passwd 等方式更改賬户類型與屬性。

配置[編輯 | 編輯原始碼]

創建 SSL 證書[編輯 | 編輯原始碼]

警吿: If you plan on implementing SSL/TLS, know that some variations and implementations are still vulnerable to attack. For details on these current vulnerabilities within SSL/TLS and how to apply appropriate changes to Sendmail, visit https://disablessl3.com/ and https://weakdh.org/sysadmin.html

生成一個 key 並對其簽名,請閱讀 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