主持人批准后,什么可能导致邮递员放弃邮件?

我运行了一个中等规模的Mailman系统,最近开发了一个问题,任何通过审核的消息都会消失,而不是传递到邮件列表。 这影响了我们的一个邮件列表。

在独立的networking服务器上执行审核失败

Mailman环境分为两个服务器,前端和后端。 后端服务器处理Postfix和Mailman qrunner,而前端服务器托pipeApache和Mailman CGI脚本以pipe理列表。 两台服务器共享一个包含所有共享Mailman数据的NFS挂载。

所有正常的邮件stream程都正常工作,但是当列表pipe理员login到Web前端并批准消息时,消息不会有任何痕迹。

  1. Postfix smtpd然后通过SMTP接收传入消息
  2. Postfix smtpd将消息传递给/usr/lib/mailman/mail/mailman
  3. vette标记写入vette日志文件(后端服务器)该消息被批准。
  4. 列表pipe理员使用CGI Web界面将消息标记为已批准。
  5. 邮递员写入一个条目来vette日志文件(在前端服务器上),表示持有的邮件被批准。

此时,与所保留消息相关的.pck文件消失,但没有任何内容被传送,并且不会创build更多的日志条目。

主邮件服务器上使用Web界面进行审核

尽pipe我们通常不在后端服务器上运行Mailman Web界面(为了减less攻击面),但为了testing的目的,我运行了它。 当我们在后端服务器上使用Mailman Web界面时,邮件正常传递,我们看到这些日志条目。

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

背景

将Mailman环境迁移到新服务器后,问题就开始了。 它本身并没有出现,这很可能是由于一些configuration错误导致的,我们还没有发现。 我们正在使用:

  • 两台服务器上的科学Linux 6.3
  • Python 2.6.6在这两个服务器上
  • Mailman 2.1.12从两个服务器上的OS软件包安装
  • 在后台服务器上的许可模式selinux
  • 在前端(web)服务器上执行强制模式中的selinux,但没有loggingtype=AVC日志条目。 此外,使用setenforce 0不能解决问题。

我在Mailman用户列表中find了一个相关的post ,但没有提供任何解决scheme。

当为Mailman使用多个服务器时,每个服务器都需要访问共享存储上的队列目录。 而已。

了解主持人信息的去向

  1. 如果消息被保存,将被移入$ DATA_DIR,消息ID被追加到$ LIST_DATA_DIR / listname / pending.pck。
  2. Mailman Web界面在pending.pck中查找为审核而保留的消息。 当主持人批准保留的消息时,它将被移动到$ INQUEUE_DIR文件夹中。

哪些数据需要共享?

这是我build议,如果你有一个单独的服务器处理邮件的Web前端。

必须在共享存储上

  • queue_dirinqueue_diroutqueue_dircmdqueue_dirbouncequeue_dirnewsqueue_dirarchqueue_dirshuntqueue_dirvirginqueue_dirbadqueue_dirretryqueue_dirmaildir_dir任何运行Mailman任务的服务器(包括前端Web服务器)都需要您的队列文件。

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

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

应该在共享存储上

  • LOCK_DIRPID_DIRPIDFILE我不完全确定,但似乎锁和pidfiles应该位于共享存储上,这样如果qrunner服务器发生问题,显然这些进程exception结束。

  • SITE_PW_FILELISTCREATOR_PW_FILE您可能希望您的密码文件位于共享存储中,以便您可以确保无论您使用的是哪个服务器,主列表密码都能正常工作。

  • CONFIG_DIR如果你使用MTA=Postfix ,Mailman会自动在CONFIG_DIR中创build别名文件。 由于任何带有Mailman的机器都可以用来创build或删除列表,所以每台机器也应该能够正确地更新一个共享的别名文件。 (警告Emptor:有时候你想在每台机器上稍微不同地configurationMailman,这对于一个共享的CONFIG_DIR来说可能很困难。)

可以在共享存储上

  • LOG_DIR根据您的喜好,您可以将这些目录保留在本地,也可以将它们放在共享存储上。 我喜欢将所有日志都放在一个正在备份的中心位置,以便在将进程迁移到新的服务器之后,仍然可以使用旧日志。

  • TEMPLATE_DIR如果你已经定制了你的邮件模板(例如退回邮件),那么你可能也希望在共享存储上有这些模板。

  • SPAM_DIR我不知道SPAM_DIR实际使用了什么,但是build议所有的variables文件都在共享存储上,所以我在这里包括了这个。

仅限本地存储

  • WRAPPER_DIRBIN_DIRSCRIPTS_DIRMESSAGES_DIR本地保存二进制文件和脚本是一个非常好的主意,这样您就可以利用操作系统提供的软件包进行升级,而不用担心保持共享二进制文件的同步。 邮件似乎是非常特别的,有关共享存储所涉及的任何服务器上运行完全相同的版本。

(编辑于2013-09-04)Mark Sapiro在Mailman-Users列表中提供了以下指导。

我的build议是标准的GNU Mailman共享所有var_prefix中的所有可变数据,这些数据是归档/,data /,lists /,locks /,logs /,qfiles /和spam /的所有目录,但是你有科学Linux(红帽衍生)软件包,所以请参阅http://wiki.list.org/x/KYCB上的常见问题解答,了解如何映射到您的安装。

http://wiki.list.org/x/wgB0上有一个常见问题解答。 它可能需要一些补充。 看看所有的链接。

(编辑在2013年9月4日)其实configuration目录应共享不是本地的。

马克·萨普罗(Mark Sapiro)在邮递员用户张贴2013年12月3日:

http://www.mail-archive.com/[email protected]/msg63365.html

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

这个特定的问题是通过这个补丁修复的:

(我在这里不包括补丁,因为格式化会被损坏。)