Qmail 在向某些服务器发送邮件时提示“PRNG 未播种”

Qmail 在向某些服务器发送邮件时提示“PRNG 未播种”

我们最近将运行 Fedora 2 和 Plesk 8.2.1 的 Web 服务器移至虚拟机。从那时起,qmail 一直拒绝向某些服务器发送消息,并在邮件日志中抱怨“TLS_connect_failed:_error:24064064:random_number_generator:SSLEAY_RAND_BYTES:PRNG_not_seeded”。显然,这是与从实际硬件切换到虚拟硬件相关的 OpenSSL 问题。有没有办法更改 OpenSSL 获取随机数据的位置,或者至少告诉 qmail 回退到 SSL/TLS 不起作用的非安全协议?

答案1

您是否已检查以确保 /dev/random 和 /dev/urandom 存在于系统中?我找到了这个网站,其中提供了如果不存在则重新创建它们的说明。

http://eitwebguru.com/fix-prng-is-not-seeded/

答案2

除了确保相关设备存在(根据 David Smith 的回答)之外,您还需要确保池中确实存在一些熵。

cat /proc/sys/kernel/random/entropy_avail会告诉您其当前级别。如果没有足够的邮件,则通过 TLS 流(即加密)发送邮件将被阻止(等待邮件足够)或失败,除非您的邮件传输代理乐于使用非阻止随机设备(顾名思义,它不会阻止,但理论上不太安全)。

熵池会随着时间的推移由内核使用由 I/O 操作引起的中断计时数据进行补充,但如果机器(或 VM)没有看到太多活动,则池需要很长时间才能增长,因为只有很少的 I/O 操作可用于收集计时。

我们公司有一台小型机器,它的作用仅仅是互联网网关和 SMTP 中继,我们遇到了这个问题。为了解决这个问题,我简单地设置了一个通过 init 运行的小脚本,这个脚本什么也不做,只是通过循环运行然后休眠 30 秒来exim缓慢地从磁盘读取数据。pv --rate-limit 2m /home/4GigFile > /dev/null你的虚拟机提供商不太可能喜欢这个解决方案,因为它会给主机带来不必要的额外 I/O 负载- 不过,您可能要使用一个不那么激进的脚本,该脚本检查循环的内容,/proc/sys/kernel/random/entropy_avail并且仅当发现的值小于 1000 时才运行循环的任意 I/O 操作。

有一些脚本/工具允许您从其他来源提取“随机”值来填充熵池。如果您愿意为 MTA 提供不那么随机(因此不太安全)的熵源,您可以尝试使用以下方法从“/dev/urandom”填充熵池 随机数生成器甚至只是建立/dev/random一个同步链接到/dev/urandom,尽管一些软件会非常彻底地检查这一点,但如果它们默认配置为对其熵源的质量过于挑剔,就会失败。

编辑:

您只会由于以下一个或两个原因而间歇性地遇到此问题:首先,池可能在大多数情况下都已足够填充;其次,qmail可能通过纯文本(未加密)流与某些服务器进行通信作为后备(一些(可能很多)接收服务器将拒绝非加密连接,因此在协商 TLS 连接失败时不能总是使用此后备)。

相关内容