检查邮件队列

有时邮件队列被消息填满。
发生这种情况的原因有很多,例如网络故障或者任何可能延迟邮件传递的原因。

要检查 Linux 邮件服务器上的邮件队列,请使用以下命令:

$ mailq

此命令显示 Postfix 邮件队列。

如果队列已满并且消息需要几个小时来处理,那么我们应该刷新邮件队列。

$ postfix flush

现在,如果我们检查邮件队列,我们应该会发现它是空的。

配置 Linux 邮件服务器

安装 Postfix 邮件服务器后,我们需要对其进行配置;你可以在 /etc/postfix/ 目录下找到它的大部分配置文件。

我们可以在 /etc/postfix/main.cf 文件中找到 Postfix 邮件服务器的主要配置。

该文件包含许多选项,例如:

myhostname

我们可以使用此选项来指定邮件服务器的主机名。
这是 Internet 主机名,Postfix 将在其上接收电子邮件。

主机名可能类似于 mail.example.com、smtp.example.com。

myhostname = mail.example.com

mydomain

此选项是我们将要提供服务的邮件域,例如 example.com

语法是这样的:

mydomain = example.com

myoroirn

从此邮件服务器发送的所有电子邮件看起来都好像来自此选项。
我们可以将其设置为 $mydomain 值。

myoroirn = $mydomain

我们可以使用任何选项值,只需在它前面加上一个像 $mydomain 的 $。

mydestination

此选项列出 Postfix 服务器用于传入电子邮件的域。

它可以采用如下值:

mydestination = $myhostname, localhost.$mydomain, $mydomain, mail.$mydomain, www.$mydomain

mail_spool_directory

Postfix 邮件服务器可以使用两种投递方式:

  • 直接发送到用户的邮箱。
  • 到中央假脱机目录,这样,邮件将在 /var/spool/mail 中,每个用户都有一个文件。
mail_spool_directory = /var/spool/mail

mynetworks

此选项允许我们配置哪些服务器可以通过 Postfix 服务器进行中继。

此选项应仅采用本地地址,如服务器上的本地邮件脚本。

否则,垃圾邮件发送者可以利用邮件服务器来转发他们的邮件,并将邮件服务器列入黑名单,因此我们将无法收到很多电子邮件。

此选项具有以下语法:

mynetworks = 127.0.0.0/8, 192.168.1.0/24

smtpd_banner

此变量设置客户端连接成功后服务器将发送的消息。

最好将横幅更改为不知道我们正在使用的服务器的内容。

inet_protocols

此选项指定用于服务器连接的 IP 协议版本。

inet_protocols = ipv4

如果更改了 Postfix 邮件服务器的配置文件,则需要重新加载服务:

$ systemctl reload postfix

当我们键入任何配置时,我们可能会出错,我们可以使用以下命令检查错误:

$ postfix check

此工具将准确找到线路和错误,以便我们可以修复它。

安装 Dovecot

大多数 Linux 发行版都预装了 Dovecot。
但是,我们可以在基于 Red Hat 的发行版中安装 Dovecot,如下所示:

$ dnf -y install dovecot

基于 Debian 的发行版在两个独立的软件包中提供 IMAP 和 POP3 功能,我们可以像这样安装它们:

$ apt-get -y install dovecot-imapd dovecot-pop3d

它将要求我们创建自签名证书以通过 SSL/TLS 使用 IMAP 和 POP3.
选择 yes 并在出现提示时输入系统的主机名。

然后我们可以运行该服务并在启动时启用它,如下所示:

$ systemctl start dovecot
$ systemctl enable dovecot

POP3 和 IMAP 协议基础

到目前为止,我们已经看到了 SMTP 邮件服务器如何毫无问题地发送和接收电子邮件,但请考虑以下情况:

  • 用户需要电子邮件的本地副本以供离线查看。
  • 不支持 mbox 文件格式。 mbox 格式被许多邮件用户代理使用,例如 mailx 和 mutt。
  • 用户无法保持与快速网络的连接以获取本地副本以供离线阅读。
  • 出于安全原因,某些邮件服务器不授予对共享邮件假脱机目录的访问权限。

要处理这些情况,我们应该使用邮件访问协议。

最常见的两种流行的邮件访问协议是邮局协议 (POP) 和 Internet 消息访问协议 (IMAP)。

POP 背后的想法非常简单:一个中央 Linux 邮件服务器始终保持在线状态,并为所有用户接收和存储电子邮件。
所有收到的电子邮件都在服务器上排队,直到用户抓取它们。

当用户想要发送电子邮件时,电子邮件客户端通常通过 SMTP 通过中央 Linux 邮件服务器中继它。

请注意,SMTP 服务器和 POP 服务器可以在同一系统上,没有任何问题。
今天大多数服务器都这样做。

缺少在服务器上保存用户电子邮件的主副本等功能,这导致了 IMAP 的发展。

通过使用 IMAP, Linux 邮件服务器将支持三种访问模式:

  • 在线模式类似于直接访问 Linux 邮件服务器的文件系统。
  • 离线模式类似于 POP 的工作方式,客户端与网络断开连接,除非抓取电子邮件。在这种模式下,服务器通常不会保留电子邮件的副本。
  • 断开连接模式的工作原理是允许用户保留其电子邮件的缓存副本,并且服务器保留电子邮件的副本。

IMAP 和 POP 有几种实现方式;最受欢迎的是 Dovecot 服务器,它提供两种协议。

POP3、POP3S、IMAP 和 IMAPS 分别侦听端口 110、995、143 和 993.

邮件服务组件

任何邮件服务器上的邮件服务都包含三个组件:

邮件用户代理 (MUA):用户看到并与之交互的组件,如 Thunderbird 和 Microsoft Outlook,这些用户代理负责阅读邮件并允许我们撰写邮件。

邮件传输代理 (MTA):该组件负责将邮件从一个站点发送到另一个站点,例如 Sendmail 和 Postfix。

邮件传递代理(MDA):该组件负责将本地机器上收到的消息分发到适当的用户邮箱,如 postfix-maildrop 和 Procmail。

配置 Dovecot

Dovecot 的主要配置文件是

/etc/dovecot/dovecot.conf

文件。

一些 Linux 发行版将配置放在

/etc/dovecot/conf.d/

目录并使用 include 指令将设置包含在文件中。

我们可以使用以下参数列表来配置 Dovecot:

协议:我们要支持的协议。

protocols = imap pop3 lmtp

lmtp 表示本地邮件传输协议。

listen :要监听的 IP 地址。

listen = *, ::

星号表示所有 ipv4 接口,:: 表示所有 ipv6 接口

userdb :用于验证用户的用户数据库。

userdb {
driver = pam
}

passdb :用于验证用户的密码数据库。

passdb {
driver = passwd
}

mail_location : /etc/dovecot/conf.d/10-mail.conf 文件中的此项:

mail_location = mbox:~/mail:INBOX=/var/mail/%u

对Dovecot进行安全设置

Dovecot 带有通用 SSL 证书和密钥文件。
看看这个文件:

/etc/dovecot/conf.d/10-ssl.conf
ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
ssl_key = </etc/pki/dovecot/private/dovecot.pem

当用户尝试连接到 dovecot 服务器时,它会显示警告,因为证书未签名,如果需要,我们可以从证书颁发机构购买证书。

或者,如果我们使用 Let's Encrypt 证书,则可以改为指向它们:

ssl_cert = </etc/letsencrypt/live/yourdomain.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/yourdomain.com/privkey.pem

不要忘记通过为端口 110、995、143、993、25 添加 iptables 规则来打开 iptables 防火墙中的 dovecot 服务器端口。

然后保存规则。

或者,如果我们使用的是 firewalld,则可以执行以下操作:

$ firewall-cmd --permanent --add-port=110/tcp --add-port=995/tcp
$ firewall-cmd --permanent --add-port=143/tcp --add-port=993/tcp
$ firewall-cmd --reload

再次,为了故障排除,我们可以检查日志文件 /var/log/messages 、 /var/log/maillog 和 /var/log/mail.log 文件。

Linux SMTP 服务器

SMTP 定义了如何从一台主机向另一台主机发送邮件;它也是独立于系统的,这意味着发送方和接收方可以有不同的操作系统。

SMTP 只要求服务器可以将直接的 ASCII 文本发送到另一台服务器,我们可以通过在端口 25 上连接到服务器来实现,这是标准的 SMTP 端口。

今天的大多数 Linux 发行版都带有两种最常见的 SMTP 实现,它们是 sendmail 和 Postfix。

Sendmail 是著名的免费邮件服务器,但它的设计有点复杂且安全性较低。

Postfix 使邮件服务器的实现更进了一步;他们在开发它时考虑到了安全性。

保护 SMTP 连接

最好通过 TLS 传输 SMTP 流量,以保护它免受中间人 (MITM) 攻击。

首先,我们需要使用 openssl 命令生成证书和密钥:

$ openssl genrsa -des3 -out mail.key
$ openssl req -new -key mail.key -out mail.csr
$ cp mail.key mail.key.oroirnal
$ openssl rsa -in mail.key.oroirnal -out mail_secure.key
$ openssl x509 -req -days 365 -in mail_secure.csr -signkey mail_secure.key -out mail_secure.crt
$ cp mail_secure.crt /etc/postfix/
$ cp mail_secure.key /etc/postfix/

然后将以下选项添加到 Postfix 配置文件 /etc/postfix/main.cf 中:

smtpd_use_tls = yes
smtpd_tls_cert_file = /etc/postfix/mail_secure.crt
smtpd_tls_key_file = /etc/postfix/mail_secure.key
smtp_tls_security_level = may

最后,重启你的 postfix 服务:

$ systemctl restart postfix

现在,我们必须在连接到服务器时在客户端上选择 TLS。

更改设置后第一次发送邮件时,我们将收到警告,因为证书未签名。

使用 Let's Encrypt 证书

Let's Encrypt 是一个免费的 SSL 证书提供商,可Let’s Encrypt 流量。

我们可以使用这个很好的解决方案,而不是使用自签名证书来惹恼用户信任他们。

首先,安装letsencrypt:

$ yum install letsencrypt

或者,如果我们使用的是基于 Debian 的发行版,则可以使用以下命令:

$ apt-get install letsencrypt

然后像这样运行letsencrypt:

$ letsencrypt certonly --standalone -d yourdomain.com

我们应该将 yourdomain.com 替换为实际域。

在回答了关于联系电子邮件、电子邮件服务器域和许可证的提示问题后,现在应该一切正常了。

证书将在:

/etc/letsencrypt/live/yourdomain.com/

我们必须做的最后一件事是让 postfix 使用这些证书,我们可以使用以下命令:

sudo postconf -e 'smtpd_tls_cert_file = /etc/letsencrypt/live/yourdomain.com/fullchain.pem'
sudo postconf -e 'smtpd_tls_key_file = /etc/letsencrypt/live/yourdomain.com/privkey.pem'

不要忘记将 yourdomain.com 替换为实际域。

最后,重启你的 postfix 服务器:

$ systemctl restart postfix

使用 SpamAssassin 从垃圾邮件中保护邮箱

对抗垃圾邮件的方法之一是通过某种工具扫描邮箱,搜索与垃圾邮件相关的某些模式。

最好的解决方案之一是 SpamAssassin,它是开源的。

我们可以像这样安装它:

$ dnf -y install spamassassin

然后启动服务并在启动时启用它:

$ systemctl start spamassassin
$ systemctl enable spamassassin

安装完成后,我们可以检查配置

/etc/mail/spamassassin/local.cf

文件。

SpamAssassin 根据不同脚本分数的结果确定电子邮件是否为垃圾邮件。

如果该邮件的分数较高,则意味着该邮件是垃圾邮件的可能性较高。

在配置文件中,参数required_hits 5 表示SpamAssassin 会将分数为5 或者更高的电子邮件标记为垃圾邮件。

report_safe 选项采用值 0、1 或者 2.
如果设置为 0,则表示标记为垃圾邮件的电子邮件按原样发送,仅修改标题以显示它是垃圾邮件。

如果取值为 1 或者 2,SpamAssassin 将生成新的报告消息,并将消息发送给收件人。

值 1 表示垃圾邮件被编码为内容消息/rfc822,而如果值为 2,则表示邮件被编码为文本/纯内容。

text/plain 更安全,因为一些邮件客户端执行 message/rfc822 并可能感染客户端计算机。

现在我们需要将它集成到 Postfix 中。
最简单的方法可能是使用 procmail。

我们必须创建一个文件,命名为

/etc/procmailrc

,并添加以下内容:

:0 hbfw
| /usr/bin/spamc

然后我们编辑 Postfix 配置文件 /etc/postfix/main.cf 并更改

mailbox_command

像这样:

mailbox_command = /usr/bin/procmail

最后,重启 Postfix 和 SpamAssassin 服务:

$ systemctl restart postfix
$ systemctl restart spamassassin

但是,SpamAssassin 有时无法识别导致邮箱充满垃圾邮件的垃圾邮件。

幸运的是,我们可以使用实时黑洞列表 (RBL) 在消息进入 Postfix 服务器之前对其进行过滤。
这将减少邮件服务器上的负载并保持邮件服务器干净。

打开 Postfix 服务器的配置文件 /etc/postfix/main.cf 并更改 smtpd_recipient_restrictions 选项并添加以下选项,如下所示:

strict_rfc821_envelopes = yes
relay_domains_reject_code = 554
unknown_address_reject_code = 554
unknown_client_reject_code = 554
unknown_hostname_reject_code = 554
unknown_local_recipient_reject_code = 554
unknown_relay_recipient_reject_code = 554
unverified_recipient_reject_code = 554
smtpd_recipient_restrictions =
reject_invalid_hostname,
reject_unknown_recipient_domain,
reject_unauth_pipelining,
permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination,
reject_rbl_client dsn.rfc-ignorant.org,
reject_rbl_client dul.dnsbl.sorbs.net,
reject_rbl_client list.dsbl.org,
reject_rbl_client sbl-xbl.spamhaus.org,
reject_rbl_client bl.spamcop.net,
reject_rbl_client dnsbl.sorbs.net,
permit

然后重启你的 postfix 服务器:

$ systemctl restart postfix

以上RBL为常见的;我们可以在网络上找到更多列表并尝试使用。

测试 Linux 邮件服务器

正确配置 Postfix 邮件服务器后,我们应该测试邮件服务器。

第一步是使用本地邮件用户代理,如mailx 或者mail,它是mailx 的符号链接。

尝试向同一服务器上的其他人发送邮件,如果可行,则发送到远程站点。

$ echo "This is message body" | mailx -s "This is Subject" -r "onitroad<jack@onitroad>" -a /path/to/attachment jack@onitroad

然后尝试从远程站点接收邮件。

如果我们有任何问题,请检查日志。
/var/log/maillog 文件中基于 Red Hat 的发行版上的日志文件和 /var/log/mail.log 文件中或者在 rsyslogd 配置中定义的基于 Debian 的发行版上的日志文件。

我建议我们查看 Linux Syslog Server 以获取有关日志以及如何配置 rsyslogd 的详细说明。

如果仍有问题,请尝试检查 DNS 设置并使用 Linux 网络命令检查 MX 记录。

安装、保护、访问和配置 Linux 邮件服务器 (Postfix)

如果我们想发送或者接收电子邮件,我们应该有一个邮件服务器。
在这篇文章中,我们将讨论 Linux 邮件服务器以及 SMTP(简单邮件传输协议)以及其他与邮件相关的协议(如邮局协议 (POP) 和 Internet 消息访问协议 (IMAP))如何工作,以及它们之间的关系他们。

安装电子邮件服务器

我们选择了 Postfix 邮件服务器,它在当今系统管理员中非常流行和普遍。

Postfix 是大多数现代 Linux 发行版上的默认邮件服务器。

首先,检查它是否安装在系统上:

$ rpm -qa | grep postfix

如果未安装,我们可以在基于 Red Hat 的发行版上安装 Postfix 邮件服务器,如下所示:

$ dnf -y install postfix

然后启动 postfix 服务并在系统启动时启用它:

$ systemctl start postfix
$ systemctl enable postfix

在像 Ubuntu 这样的基于 Debian 的发行版上,你可以像这样安装它:

$ apt-get -y install postfix

它会要求我们在安装过程中选择 Postfix 邮件服务器的配置类型。

在No configuration、Internet site、Internet with smarthost、Satellite system和Local only四个选项中,我们选择No configuration选项。

日期:2020-07-15 11:16:46 来源:oir作者:oir