[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