哪些原因会导致 Mailman 在版主批准后丢弃消息?

哪些原因会导致 Mailman 在版主批准后丢弃消息?

我运行一个中型 Mailman 系统,最近出现了一个问题,即通过审核的所有消息都会消失,而不是被发送到邮件列表。这影响了每一个我们的一个邮件列表。

在单独的网络服务器上执行审核时失败

Mailman 环境分为前端和后端两台服务器。后端服务器处理 Postfix 和 Mailman qrunners,而前端服务器托管 Apache 和 Mailman CGI 脚本以管理列表。两台服务器共享一个 NFS 安装,其中包含所有共享的 Mailman 数据。

所有正常的邮件流都正常工作,但是当列表管理员登录到 Web 前端并批准消息时,该消息就会消失得无影无踪。

  1. Postfix smtpd 通过 SMTP 接收传入消息,然后
  2. Postfix smtpd 将消息发送到/usr/lib/mailman/mail/mailman
  3. Mailman 将写入vette日志文件(后端服务器)的标记标记为已保留待批准的消息。
  4. 列表管理员使用 CGI 网络界面将消息标记为已批准。
  5. Mailman 将一个条目写入vette日志文件(在前端服务器上)以表明保留的消息已获批准。

此时,与保留消息相关的 .pck 文件消失,但不会传送任何内容,也不会创建进一步的日志条目。

通过主 Mailman 服务器上的 Web 界面成功审核

虽然我们通常不会在后端服务器上运行 Mailman Web 界面(以减少攻击面),但我还是出于测试目的运行了它。当我们在后端服务器上使用 Mailman Web 界面时,消息会正常传递,我们会看到这些日志条目。

  1. smtp日志文件已更新收件人数量和完成时间
  2. post日志文件已更新列表名称、消息 ID 和“成功”。

背景

问题始于将 Mailman 环境迁移到新服务器之后。它不是自己出现的,很可能是我们尚未发现的某些配置错误导致的。我们正在使用:

  • 两台服务器上均安装 Scientific Linux 6.3
  • 两台服务器上均安装有 Python 2.6.6
  • 从两台服务器上的 OS 包中安装 Mailman 2.1.12
  • 后端服务器上的 selinux 处于 Permissive 模式
  • type=AVC前端 (Web) 服务器上的 selinux 处于强制模式,但没有记录任何日志条目。此外,使用setenforce 0也无法解决问题。

我找到了一个Mailman 用户列表上的相关帖子,但没有提供解决方案。

答案1

当使用多台 Mailman 服务器时,每台服务器都需要能够访问共享存储上的队列目录。就是这样。

了解审核消息的去向

  1. 如果某条消息需要等待审核,则会将其移至 $DATA_DIR,并且消息 ID 会附加到 $LIST_DATA_DIR/listname/pending.pck。
  2. Mailman 网络界面在pending.pck中查找等待审核的消息。当审核员批准了被审核的消息后,该消息将被移至$INQUEUE_DIR文件夹。

哪些数据需要共享?

如果您有一个单独的服务器来处理 Mailman Web 前端,我建议您这样做。

必须位于共享存储中

  • queue_dir,,,,,,,,,,,,,您的队列文件需要被运行Mailman任务inqueue_dir的任何服务器访问,包括前端outqueue_dirWeb服务器。cmdqueue_dirbouncequeue_dirnewsqueue_dirarchqueue_dirshuntqueue_dirvirginqueue_dirbadqueue_dirretryqueue_dirmaildir_dir

  • DATA_DIRLIST_DATA_DIR除了邮件队列之外,还需要共享所有的列表配置文件和持有的消息文件。

  • PUBLIC_ARCHIVE_FILE_DIR,PRIVATE_ARCHIVE_FILE_DIR如果您使用列表档案,那么您还需要共享档案目录。

应位于共享存储中

  • LOCK_DIR,,PID_DIRPIDFILE不完全确定,但似乎锁和 pidfile 应该位于共享存储上,这样如果 qrunner 服务器出现问题,就会很明显地发现进程异常结束。

  • SITE_PW_FILE,LISTCREATOR_PW_FILE您可能希望将您的密码文件放在共享存储中,这样您就可以确保无论您在哪个服务器上,主列表密码都能起作用。

  • CONFIG_DIR如果您正在使用MTA=Postfix,Mailman 将自动在 CONFIG_DIR 中创建别名文件。由于任何装有 Mailman 的机器都可用于创建或删除列表,因此每台机器也应该能够正确更新共享别名文件。(注意:有时您想在每台机器上稍微不同地配置 Mailman,这对于共享的 CONFIG_DIR 来说可能很困难。)

可能位于共享存储中

  • LOG_DIR根据您的偏好,您可以将这些目录保留在本地或放在共享存储中。我喜欢将所有日志放在一个正在备份的中心位置,这样在将流程迁移到新服务器后,我仍然可以查看旧日志。

  • TEMPLATE_DIR如果您已经自定义了 Mailman 模板(例如,退回邮件),那么您可能也希望将它们放在共享存储中。

  • SPAM_DIR我不知道 SPAM_DIR 实际上有什么用途,但建议所有变量文件都在共享存储上,所以我将其包括在这里。

仅限本地存储

  • WRAPPER_DIR, BIN_DIR, SCRIPTS_DIR,MESSAGES_DIR将二进制文件和脚本保存在本地是一个非常好的主意,这样您就可以利用操作系统提供的软件包进行升级,而不必担心保持共享二进制文件同步。Mailman 似乎非常注重在涉及共享存储的任何服务器上运行完全相同的版本。

(2013 年 9 月 4 日编辑)以下指导由 Mark Sapiro 在 Mailman-Users 列表服务器上提供。

我的建议是,让标准 GNU Mailman 共享所有可变数据,即 var_prefix 中的所有内容,即所有目录 archives/、data/、lists/、locks/、logs/、qfiles/ 和 spam/,但是您有一个 Scientific Linux(Red Hat 衍生产品)软件包,因此请参阅常见问题解答http://wiki.list.org/x/KYCB了解这些如何映射到您的安装。

常见问题解答请访问http://wiki.list.org/x/wgB0解决了这个问题。可能需要添加一些内容。请查看所有链接。

(2013-09-04 编辑)实际上,配置目录应该共享而不是本地。

答案2

Mark Sapiro 在 2013 年 12 月 3 日于 Mailman-users 上发帖:

http://www.mail-archive.com/[电子邮件保护]/msg63365.html

“Mailman 2.1.12 与 Python 2.6+ 不兼容。这个问题已在 2.1.13 中修复。”

此补丁已修复此特定问题:

(我没有在这里包含补丁,因为格式会被破坏。)

相关内容