检查邮件队列
有时邮件队列被消息填满。
发生这种情况的原因有很多,例如网络故障或者任何可能延迟邮件传递的原因。
要检查 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 邮件服务器以及 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选项。