[Dovecot] 如何解决“用户+IP超过最大连接数”[错误对策]
目录
大家好。
我是 Naka,是系统解决方案部门的一名成员,为了享受晚上外出就餐的乐趣,我倾向于不吃午餐。
使用电子邮件客户端工具(Thunderbird)连接到邮件服务器时,发生错误并且连接被断开(=连接变得不稳定)。
如果您查看服务器端日志,您可能会看到与 Dovecot 相关的错误日志中输出超出用户+IP 的最大连接数”
这次,超出用户+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环境)
预期的错误情况
由于连接错误,与邮件服务器(Postfix/Dovecot)连接的电子邮件客户端工具(Thunderbird)断开连接。
这种情况直接影响到邮件服务器用户被断线,所以我们需要立即采取行动。
■作者确认的Thunderbard端错误
连接错误
连接超时:没有进一步的信息
如何在邮件服务器端查看日志
$ less /var/log/maillog Oct 01 19:00:00 example-host dovecot[xxxx]: imap-login: 已断开连接: 超出用户+IP 的最大连接数 (mail_max_userip_connections=10): user=<电子邮件地址> 、方法=PLAIN、rip=xxx.xxx.xxx.xxx、lip=xxx.xxx.xxx.xxx、TLS、会话=<xxxxx>
错误原因
我对日志内容进行了划分并添加了解释。
日志文本 | 解释 |
10 月 1 日 19:00:00 示例主机 dovecot[xxxx]: | 发生日期和时间、主机名、错误源(dovecot) |
imap 登录:已断开连接: | 事件描述:IMAP登录已断开。 |
用户+IP 超过最大连接数 | 错误文本翻译:超过用户 IP 的最大连接数 |
(mail_max_userip_connections=10): | (当前配置参数及其与错误相关的值) 来自同一IP地址的同一用户允许的最大同时连接数 |
用户=<电子邮件地址>、方法=PLAIN、rip=xxx.xxx.xxx.xxx、lip=xxx.xxx.xxx.xxx、TLS、会话=<xxxxx> | 断开连接对象的用户信息(电子邮件地址)和连接信息(IP等) |
关于此错误,服务器端(Dovecot)的日志文本提供了有关参数情况的详细信息。
日志内容为``登录被断开,因为超出了用户IP到目标电子邮件地址的最大连接数。''
接下来
是相关参数“ (mail_max_userip_connections=10): 这“同一用户从同一IP地址允许的最大同时连接数”,目前最大值设置为“ 10
“使用相同 IP 与同一用户的连接”超过此值 (10) 会导致错误,并且现有连接会断开。
解决方案
在本例中,对于 IMAP 连接,编辑 20-imap.conf,它是 Dovecot 的 IMAP conf。
更正参数“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.`日期 +%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。
读取的目标是符合条件的“*.conf”,因此如果是当前备份且末尾有日期,则不会读取。
■2.修改dovecot.conf中参数的步骤
在作者的环境中,默认值(10)被写入并应用,并注释掉。
因此,通过修改或添加来设置新的值。
这次,我添加了设置“50”,以便您可以看到与默认值的差异。
$ sudo vi /etc/dovecot/conf.d/20-imap.conf ~省略~ 协议 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.`日期 +%Y%m%d`
■4.在Dovecot中反映的步骤(重新加载设置)
运行systemctl reload即可生效。
我使用执行前后的状态来检查是否有任何问题。
systemctl status dovecot systemctl reload dovecot systemctl status dovecot
■5. 连接确认
请使用电子邮件客户端工具(Thunderbard)进行连接。
如果一段时间后连接稳定且没有出现错误,则视为问题已解决。
■完整
这样就完成了处理Dovecot的“超出用户+IP的最大连接数”的工作。
提前采取预防措施时
另外,即使当前没有发生错误,“每个IP的每个用户的同时连接数”预计会大于设置值。
最好提前将其设置为较大的值,以采取措施防止错误
采取预防措施时无需单独调整其他参数,与求解方法中相同的设置没有问题。
如果您处于一个电子邮件地址用于系统通知等的环境中,同时连接的数量可能会增加。
搭建服务器时,最好一开始就把该值改成稍大的值。
最后
内容很基本:“查看日志,检查参数,然后采取行动”,但写这篇文章让我意识到它是多么重要。
我认为错误本身很简单,但由于它影响邮件服务器用户,所以很容易恐慌。
如果您检查并调查有关情况的信息,您可以迅速做出反应,因此在异常时期保持冷静很重要。
我希望这篇文章能为阅读它的人提供一些有用的知识和信息。
感谢您阅读本文。
参考信息
认证 | Dovecot 官方文档
https://doc.dovecot.org/2.3/configuration_manual/authentication/