[Dovecot] “用户+IP 连接数超过最大值”解决方案 [错误对策]

大家好,
我是Naka,系统解决方案部门的一名员工。我经常不吃午饭,这样晚上就可以出去吃饭了。

使用电子邮件客户端工具(Thunderbird)连接到邮件服务器时,发生错误,连接断开(即连接变得不稳定)。

查看服务器端日志时,您可能会看到 Dovecot 的错误日志输出来自用户+IP 的最大连接数已超出

我们将介绍如何解决Dovecot 错误“用户+IP 连接数超过最大值

假定错误环境

■邮件服务器:操作系统
AlmaLinux 9.x

■邮件服务器:中间件
postfix.x86_64 2:3.5.9-24.el9 @appstream
dovecot.x86_64 1:2.3.16-10.el9 @appstream

■客户端连接方式:
IMAP

■ 电子邮件客户端工具
Thunderbird(Windows 环境)

可能出现的错误情况

由于连接错误,电子邮件客户端工具(Thunderbird)与邮件服务器(Postfix/Dovecot)的连接已终止。

这种情况正在产生直接影响,电子邮件服务器用户正在失去连接,因此我们需要迅速采取行动。

■作者已确认 Thunderbard 错误

连接错误:
连接超时:无其他信息

如何查看邮件服务器日志

$ less /var/log/maillog 10月1日 19:00:00 example-host dovecot[xxxx]: imap-login: 已断开连接:用户+IP 连接数超过最大值 (mail_max_userip_connections=10): user=<电子邮件地址>, method=PLAIN, rip=xxx.xxx.xxx.xxx, lip=xxx.xxx.xxx.xxx, TLS, session=<xxxxx>

错误原因

我已将日志内容拆分并添加了说明。

日志文本 评论
10月1日 19:00:00 example-host dovecot[xxxx]: 发生日期和时间、主机名、错误来源(Dovecot)
imap-login:已断开连接: 症状:IMAP登录已终止。
用户+IP 连接数超过最大值 错误翻译:用户 IP 的连接数已超过最大值
(mail_max_userip_connections=10):  (当前配置参数及其与错误相关的值)
允许同一用户从同一 IP 地址同时建立的最大连接数
user=<电子邮件地址>,method=PLAIN,rip=xxx.xxx.xxx.xxx,lip=xxx.xxx.xxx.xxx,TLS,session=<xxxxx> 已断开连接的用户信息(电子邮件地址)和连接信息(IP 地址等)

关于此错误,服务器端(Dovecot)的日志文本提供了有关情况的详细信息,包括参数。

日志内容为“由于用户 IP 地址到目标电子邮件地址的连接数已超过最大值,登录已终止。”

列出了
相关参数“ (mail_max_userip_connections=10): 这是“允许同一用户从同一 IP 地址建立的最大并发连接数”的设置,表示当前最大值为 10

似乎从同一 IP 地址到同一用户的连接数超过了此值 (10) ,导致出现错误并断开现有连接。

解决方案

在这种情况下,我们使用的是 IMAP 连接,因此我们将编辑 20-imap.conf,这是 Dovecot 的 IMAP 配置。

更正或增加参数“mail_max_userip_connections”的值,使其超过预期的连接数。

之后,我重新加载了 Dovecot 配置,更新后的参数也生效了,解决了我的问题。

■1.备份20-imap.conf

在进行任何更改之前,请先制作一个带有日期信息的备份。

您有可能不小心删除了所有内容并保存了文件,所以最好还是保留一份以防万一。
(如果您只是工作需要,可以将其放在 /tmp 目录下。)

$ sudo cp -p /etc/dovecot/conf.d/20-imap.conf /etc/dovecot/conf.d/20-imap.conf.`date +%Y%m%d` $ ls -l /etc/dovecot/conf.d/20-imap.conf* *检查输出

提示:CentOS-Base.repo.`date +%Y%m%d`

命令结果被视为使用
反引号 (`)其中,可以使用指定格式(年、月、日)的 data 命令来显示日期和时间。

这样很方便,因为无需查看日历即可进行备份,文件名以执行命令时的日期和年份结尾。

旁白:“备份能加载吗?”→“不能加载。”

在 Dovecot 的默认配置中,“!include conf.d/*.conf”设置被写入“/etc/dovecot/dovecot.conf”。

$ less /etc/dovecot/dovecot.conf ~接近末尾~ !include conf.d/*.conf

此设置会加载 conf.d 下每个拆分项的配置文件。

只会读取符合“*.conf”条件的文件,因此不会读取以日期结尾的备份文件。

■2. 修改 dovecot.conf 文件中参数的步骤

在我的环境中,默认值 (10) 是以注释状态输入和应用的。
因此,我通过修改或添加的方式设置了一个新值。

这次,我们增加了一个“50”的设置,以便可以看到与默认值的区别。

$ sudo vi /etc/dovecot/conf.d/20-imap.conf ~省略~ protocol imap { ~省略~ #mail_max_userip_connections = 10 mail_max_userip_connections = 50 *附加说明}

■3. 检查差异

检查编辑后的 ​​20-imap.conf 与备份之间的差异,以确保添加和修改符合预期

$ diff /etc/dovecot/conf.d/20-imap.conf //etc/dovecot/conf.d/20-imap.conf.`date +%Y%m%d`

■4. 向 Dovecot 反射的步骤(重新加载设置)

运行 systemctl reload 命令以使更改生效。
执行前后使用 status 命令检查是否存在任何问题。

systemctl status dovecot systemctl reload dovecot systemctl status dovecot

■5. 检查连接

请使用您的邮件客户端工具(Thunderbard)连接。
如果经过一段时间后连接稳定且无任何错误,则问题可能已解决。

■完成

至此,Dovecot 的“来自用户+IP 的最大连接数已超出”错误已解决。

提前采取预防措施

此外,即使目前没有发生任何错误,如果您预计
“每个 IP 地址每个用户的并发连接数”提前设置一个更大的值来采取措施防止错误发生

采取预防措施时无需调整任何其他参数;与解决方案方法中的设置相同即可。

如果您还使用其他电子邮件地址接收系统通知,则并发连接数可能会增加。
在构建服务器时,最好从一开始就将此值设置得稍大一些。

最后

这是一个基本要点——“查看日志,检查参数,并采取行动”——但写这篇文章让我再次意识到它的重要性。

错误本身可能很简单,但由于会影响邮件服务器的用户,这种情况很容易引发恐慌。
如果您检查并调查相关信息,就能在短时间内解决问题,因此,当出现异常情况时,保持冷静至关重要。

我希望这篇文章能为读者提供一些有用的知识和信息。
感谢您读到这里。

参考信息

身份验证 | Dovecot 官方文档
https://doc.dovecot.org/2.3/configuration_manual/authentication/

如果您觉得这篇文章有用,请点击【点赞】!
4
加载中...
4票,平均分:1.00/14
1,253
X Facebook Hatena书签 口袋

这篇文章的作者

关于作者

里面

我中途加入 Beyond 公司,
在系统解决方案部门
。我拥有 LPIC-3 304 和 AWS SAA 认证。