Debian教程

Debian邮件系统

Debian邮件系统提供了用户和服务器之间通信的基础,现代的邮件服务限制了用户可以发送和接收的信息量,同时也对服务器的性能提出了更高的要求。常用的邮件传输代理有exim4和postfix。本篇教程主要介绍消费者级互联网连接的典型的移动工作站。

一、电子邮件基础

电子邮件由三个部分组成,消息的信封,邮件头及邮件正文。

  • SMTP 用电子邮件信封上的 "To" 和 "From" 信息来投递邮件;(信封上的 "From" 信息也被叫做退回地址, 例如 From_ 等等)
  • 电子邮件头的"To" 和 "From" 信息,显示在 电子邮件客户端上;(在大部分情况下,这些信息是跟电子邮件信封一致,但并不全是这样。)
  • 覆盖邮件头和正文数据的电子邮件消息格式被 多用途互联网邮件扩展 (MIME) 扩展,从纯文本的 ASCII 到其它字符编码,包括作为附件的音频、视频、图像和应用程序。

功能全面的基于 电子邮件客户端的 GUI 程序使用基于 GUI 的直观的配置,提供下列所有功能。

  • 为了处理正文数据类型及其编码,它创建和使用多用途互联网邮件扩展 (MIME)来解释邮件标头和邮件正文;
  • 它使用旧的 基础访问认证 或现代的 OAuth 2.0向 ISP(互联网服务提供商)的 SMTP 和 IMAP 服务器认证它自己; (对于 OAuth 2.0,通过桌面环境设置来设置它,例如,"Settings" -> "Online Accounts".)
  • 它发送消息到 ISP 的智能主机的 SMTP 服务监听的消息递交端口(587);
  • 从 TLS/IMAP4 端口(993)接收存储在 ISP 的服务器上的消息;
  • 它能够通过他们的属性过滤邮件;
  • 它能够提供额外的功能:联系人、日历、任务、备忘录。

邮件用户代理列表 (MUA):

软件包 流行度 大小 类型
evolution V:30, I:236 484 X GUI 程序 (GNOME3, groupware 套件)
thunderbird V:52, I:121 224527 X GUI 程序 (GTK, Mozilla Thunderbird)
kmail V:37, I:95 23871 X GUI 程序 (KDE)
mutt V:17, I:157 7104 很有可能与 vim 一起使用的字符终端程序
mew V:0, I:0 2319 (x)emacs 下的字符终端程序

二、现代邮件服务限制

现代邮件服务器有一些限制来最小化暴露滥用(不希望和未被要求的电子邮件)问题。

1、在消费者级的网络上运行 SMTP 服务器来直接可靠的发送邮件到远端主机是不现实的;

2、一个邮件能够被任何主机静悄悄的拒绝,即使路由到了目的地,除非它尽可能看起来是经过认证的;

3、期望单个智能主机可靠的发送不相关的源邮件地址到远程主机,这是不现实的。

这是因为:

  • 从消费者级网络提供的主机连接到互联网的 SMTP 端口(25)已经被封锁了;
  • 从互联网的 SMTP 端口(25)连接到消费者级网络提供的主机已经被封锁了;
  • 从消费者级网络提供的主机发出到互联网的消息,只能够通过消息递交端口(587)发送;
  • 像域名密钥识别邮件 (DKIM)、发信者策略框架 (SPF) 和 基于域名的消息认证、报告和反应(DMARC) 这样的反垃圾邮件技术广泛用于电子邮件过滤;
  • 域名密钥识别邮件服务可能会用于通过 smarthost 的电子邮件发送;
  • 智能主机可以在邮件头重写源电子邮件地址为邮件账户,来阻止电子邮件欺诈。

三、历史邮件服务端

一些在 Debian 上的程序,它们默认期望访问 /usr/sbin/sendmail 命令来发送邮件,或者从一个个性化设置的 UNIX 系统邮件服务器来发送邮件,实现历史的功能:

  • 邮件是由纯文本文件创建;
  • 邮件是由 /usr/sbin/sendmail 命令处理;
  • 对于目的地址为同一主机,/usr/sbin/sendmail 命令进行邮件的本地分发,将邮件附在 /var/mail/$username 文件后;期望这个特征的命令: apt-listchanges, cron, at, ...
  • 对于目的地址在远程主机,/usr/sbin/sendmail 命令远程传输邮件到目的主机,使用 SMTP 发现 DNS MX 记录。期望这个特征的命令:popcon, reportbug, bts, ...

四、邮件传输代理 (MTA)

在 Debian 12 Bookworm 后,在没有 mail transfer agent (MTA) 程序的情况下,Debian 移动工作站可以基于 电子邮件客户端,配置为全功能的 GUI (图像用户界面)。

以往的 Debian 会安装某个 MTA 程序来支持期望 /usr/sbin/sendmail 命令的程序。对于移动工作站,典型的 MTA 选择是 exim4-daemon-light 或 postfix,并选择类似这样的安装选项:“Mail sent by smarthost; received via SMTP or fetchmail”。这些是轻量 MTA 和 "/etc/aliases" 匹配。

配置 exim4 来发送互联网邮件,多个源电子邮件地址使用多个相应的智能主机,这是不寻常的。如果一些程序需要这样的能力,使用 msmtp 来设置他们,它比较容易来设置多个源电子邮件地址。然后给主 MTA 仅仅保留单个电子邮件地址。

基础的邮件传输代理相关的软件包列表:

软件包 流行度 大小 说明
exim4-daemon-light V:222, I:234 1574 Exim4 邮件传输代理 (MTA : Debian 默认的)
exim4-daemon-heavy V:6, I:6 1742 Exim4 邮件传输代理 (MTA : 灵活的替代品)
exim4-base V:228, I:242 1701 Exim4 文档 (文本) 和通用文件
exim4-doc-html I:1 3746 Exim4 文档 (html)
exim4-doc-info I:0 637 Exim4 文档 (info)
postfix V:128, I:136 4031 Postfix 邮件传输代理 (MTA : 安全的替代品)
postfix-doc I:7 4634 Postfix 文档 (html+text)
sasl2-bin V:5, I:14 371 Cyrus SASL API 实现 (实现 postfix SMTP 认证)
cyrus-sasl2-doc I:1 2154 Cyrus SASL - 文档
msmtp V:6, I:11 667 轻量 MTA
msmtp-mta V:5, I:6 125 轻量 MTA (sendmail 兼容扩展到msmtp)
esmtp V:0, I:0 129 轻量 MTA
esmtp-run V:0, I:0 32 轻量 MTA(sendmail 兼容扩展到esmtp)
nullmailer V:8, I:9 474 部分功能 MTA,没有本地邮件
ssmtp V:5, I:8 2 部分功能 MTA,没有本地邮件
sendmail-bin V:13, I:14 1877 全功能 MTA(如果你已经对它熟悉)
courier-mta V:0, I:0 2408 全功能 MTA(web 接口等.)

1、exim4的配置

对于那些通过 smarthost 的网络邮件,应该按如下所示的 (重新) 配置 exim4-* 软件包。

$ sudo systemctl stop exim4
$ sudo dpkg-reconfigure exim4-config
  • 配置 "General type of mail configuration" 时,选择 "mail sent by smarthost; received via SMTP or fetchmail";
  • 设置 "System mail name:" 为默认的 FQDN;
  • 设置 "IP-addresses to listen on for incoming SMTP connections:" 为默认的 "127.0.0.1; ::1";
  • "Other destinations for which mail is accepted:" 选项留空;
  • "Machines to relay mail for:" 选项留空;
  • 设置 "IP address or host name of the outgoing smarthost:" 为 "smtp.hostname.dom:587";
  • 设置 "Hide local mail name in outgoing mail?" 选项为 "NO"。

选择如下所示的其中一个来回答 "Keep number of DNS-queries minimal (Dial-on-Demand)?"。

  • "No" 如果启动的时候,系统就连上了互联网;
  • "Yes" 如果启动的时候,系统没有连上互联网。

设置 "Delivery method for local mail:" 选项为 "mbox format in /var/mail/"。"Split configuration into small files?:" 选项设为 "Yes"。

通过修改 "/etc/exim4/passwd.client" 文件,来创建用于 smarthost 的密码条目。

$ sudo vim /etc/exim4/passwd.client
...
$ cat /etc/exim4/passwd.client
^smtp.*\.hostname\.dom:username@hostname.dom:password

配置 exim4(8),在 "/etc/default/exim4" 文件中写入 "QUEUERUNNER='queueonly'","QUEUERUNNER='nodaemon'" 等等,来最小化系统资源使用。

通过如下所示的启动 exim4。

$ sudo systemctl start exim4

"/etc/exim4/passwd.client" 文件中的主机名不应该是别名,应该按如下所示的检查真正的主机名。

$ host smtp.hostname.dom
smtp.hostname.dom is an alias for smtp99.hostname.dom.
smtp99.hostname.dom has address 123.234.123.89

我在 "/etc/exim4/passwd.client" 文件中使用正则表达式来绕过别名问题。即使 ISP 更改了别名所指向的主机名,SMTP AUTH 还是可能工作的。能够通过如下所示的手动更新 exim4 配置:

更新 "/etc/exim4/" 目录下的 exim4 配置文件:

  • 创建 "/etc/exim4/exim4.conf.localmacros" 来设置宏命令和修改 "/etc/exim4/exim4.conf.template" 文件;
  • 在 ”/etc/exim4/exim4.conf.d" 子目录中创建新文件或编辑已存在的文件。(分割的配置)

运行 "systemctl reload exim4":

如果 debconf 询问 "Keep number of DNS-queries minimal (Dial-on-Demand)?" 这个问题时,选择 了 "No" (默认值),那么启动 exim4 会花很长时间并且系统在启动的时候不会连接到互联网。

注意:从所有的实践考虑,使用带 STARTTLS 的 SMTP 端口 587,或者 SMTPS (SSL 之上的 SMTP ) 端口 465, 代替纯 SMTP 端口 25。

2、带有 SASL 的 postfix 配置

重要的 postfix 手册页列表:

命令 功能
postfix(1) Postfix 控制程序
postconf(1) Postfix 配置工具
postconf(5) Postfix 配置参数
postmap(1) Postfix 查找表维护
postalias(1) Postfix 别名数据库维护

应该按如下所示的 (重新) 配置 postfix 和 sasl2-bin 软件包。

$ sudo systemctl stop postfix
$ sudo dpkg-reconfigure postfix

选择 "Internet with smarthost"。

设置 "SMTP relay host (blank for none):" 为 "[smtp.hostname.dom]:587" 并按如下所示配置。

$ sudo postconf -e 'smtp_sender_dependent_authentication = yes'
$ sudo postconf -e 'smtp_sasl_auth_enable = yes'
$ sudo postconf -e 'smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd'
$ sudo postconf -e 'smtp_sasl_type = cyrus'
$ sudo vim /etc/postfix/sasl_passwd

为 smarthost 创建密码条目。

$ cat /etc/postfix/sasl_passwd
[smtp.hostname.dom]:587 username:password
$ sudo postmap hush:/etc/postfix/sasl_passwd

通过如下所示的启动 postfix。

$ sudo systemctl start postfix

3、邮件地址配置

这里有一些用于邮件传输、投递和用户代理的邮件地址配置文件。

与邮件地址相关的配置文件列表:

文件 功能 应用
/etc/mailname 用于 (外发) 邮件的默认主机名 Debian 专用的,mailname(5)
/etc/email-addresses 用于外发邮件的主机名伪装 exim(8) 专用的,exim4-config_files(5)
/etc/postfix/generic 用于外发邮件的主机名伪装 postfix(1) 专用的,postmap(1) 命令执行后激活。
/etc/aliases 用于接收邮件的账户别名 通用的,newaliases(1) 命令执行后激活。

"/etc/mailname" 文件中的 mailname 通常是全称域名 (FQDN),这个全程域名将会被解析成主机的 IP 地址。对于没有可解析成 IP 地址的主机名的移动工作站,设置 mailname 为 "hostname -f" 的值。(这对于 exim4-* 和 postfix 都是安全有效的选择。)

"/etc/mailname" 中的内容被许多非 MTA 程序用作它们的默认行为。对于 mutt, 在~/muttrc 文件中设置 "hostname" 和 "from" 变量来覆盖 mailname 值。对于 devscripts 软件包的程序,例如 bts(1) 和 dch(1),导出环境变量 "$DEBFULLNAME" 和 "$DEBEMAIL" 的值来覆盖它。

popularity-contest 软件包一般以 FQDN 形式的 root 账户发送邮件。需要像 /usr/share/popularity-contest/default.conf 文件中描述的那样去设置 /etc/popularity-contest.conf 文件中的 MAILFROM 值。否则,邮件会被 smarthost SMTP 服务器拒绝。尽管这些过程很乏味,这种方法比为所有通过 MTA 并且是以 root 用户发送的邮件重写源地址更安全。这也可以被其他守护进程或者是 cron 脚本使用。

当设置 mailname 为 "hostname -f" 的值时,通过 MTA 的源邮件地址的伪装可以通过如下所示的来实现。

对于 postfix,接下来的额外步骤需要执行:

# postmap hash:/etc/postfix/generic
# postconf -e 'smtp_generic_maps = hash:/etc/postfix/generic'
# postfix reload

能够通过如下所示的来测试邮件地址配置。

  • exim(8) 用 -brw, -bf, -bF, -bV, ... 选项
  • postmap(1) 用 -q 选项。

4、基础 MTA 操作

这里有一些基础的 MTA 操作,其中可能会通过 sendmail(1) 的兼容性接口来实现。

基础 MTA 操作列表:

exim 命令 postfix 命令 说明
sendmail sendmail 从标准输入读取邮件并且安排投递 (-bm)
mailq mailq 列出带有状态和队列 ID 的邮件队列 (-bq)
newaliases newaliases 初始化别名数据库 (-I)
exim4 -q postqueue -f 刷新等待邮件 (-q)
exim4 -qf postsuper -r ALL deferred; postqueue -f 刷新所有邮件
exim4 -qff postsuper -r ALL; postqueue -f 刷新甚至已经冻结的邮件
exim4 -Mg queue_id postsuper -h queue_id 通过邮件的队列 ID 来冻结它
exim4 -Mrm queue_id postsuper -d queue_id 通过邮件的队列 ID 来移除它
N/A postsuper -d ALL 移除所有邮件
广告合作
QQ群号:707632017

温馨提示:

1、本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。邮箱:2942802716#qq.com。(#改为@)

2、本站原创内容未经允许不得转裁,转载请注明出处“站长百科”和原文地址。

目录