Назад | Перейти на главную страницу

Что могло заставить Mailman сбрасывать сообщения после утверждения модератором?

Я использую систему Mailman среднего размера, в которой недавно возникла проблема, когда любые сообщения, прошедшие модерацию, исчезают, а не доставляются в список рассылки. Это влияет каждый один из наших списков рассылки.

Модерация не выполняется при выполнении на отдельном веб-сервере

Среда Mailman разделена на два сервера: интерфейсный и внутренний. Внутренний сервер обрабатывает Postfix и qrunners Mailman, в то время как внешний сервер размещает сценарии Apache и Mailman CGI для модерирования списков. Два сервера используют монтирование NFS, которое включает в себя все общие данные Mailman.

Весь нормальный почтовый поток работает правильно, но когда модератор списка входит в веб-интерфейс и утверждает сообщение, оно исчезает без следа.

  1. Postfix smtpd получает входящее сообщение по SMTP, затем
  2. Postfix smtpd доставляет сообщение /usr/lib/mailman/mail/mailman.
  3. Почтальон отмечает vette файл журнала (внутренний сервер), сообщение хранится для утверждения.
  4. Модератор списка использует веб-интерфейс CGI, чтобы пометить сообщение как одобренное.
  5. Почтальон пишет запись в vette файл журнала (на внешнем сервере), в котором говорится, что сообщение одобрено.

На этом этапе файл .pck, связанный с задержанным сообщением, исчезает, но ничего не доставляется, и дальнейшие записи журнала не создаются.

Модерация прошла успешно с веб-интерфейсом на главном сервере Mailman

Хотя мы обычно не запускаем веб-интерфейс Mailman на внутреннем сервере (чтобы уменьшить поверхность для атак), я запустил его в целях тестирования. Когда мы используем веб-интерфейс Mailman на внутреннем сервере, сообщение доставляется нормально, и мы видим эти записи журнала.

  1. smtp файл журнала обновлен с указанием количества получателей и времени для завершения
  2. post файл журнала обновлен с указанием имени списка, идентификатора сообщения и «успеха».

Задний план

Проблема началась после переноса среды Mailman на новые серверы. Это не произошло само по себе, скорее всего, это результат какой-то ошибки конфигурации, которую мы еще не обнаружили. Мы используем:

Я нашел один связанная запись в списке пользователей Mailman, но решения не было.

При использовании более одного сервера для Mailman каждый сервер должен иметь доступ к каталогам очередей в общем хранилище. Вот и все.

Понимание того, куда отправляются модерируемые сообщения

  1. Если сообщение удерживается для модерации, оно перемещается в $ DATA_DIR, а идентификатор сообщения добавляется в $ LIST_DATA_DIR / listname / pending.pck.
  2. Веб-интерфейс Mailman просматривает pending.pck, чтобы найти сообщения, предназначенные для модерации. Когда модератор утверждает задержанное сообщение, оно перемещается в папку $ INQUEUE_DIR.

Какими данными нужно поделиться?

Это то, что я рекомендую, если у вас есть отдельный сервер, обслуживающий веб-интерфейс Mailman.

ДОЛЖЕН находиться в общем хранилище

  • queue_dir, inqueue_dir, outqueue_dir, cmdqueue_dir, bouncequeue_dir, newsqueue_dir, archqueue_dir, shuntqueue_dir, virginqueue_dir, badqueue_dir, retryqueue_dir, maildir_dir Ваши файлы очереди должны быть доступны любому серверу, на котором выполняются задачи Mailman, включая интерфейсный веб-сервер.

  • DATA_DIR, LIST_DATA_DIR Помимо почтовых очередей, вам также необходимо предоставить общий доступ ко всем файлам конфигурации списка и файлам сообщений.

  • PUBLIC_ARCHIVE_FILE_DIR, PRIVATE_ARCHIVE_FILE_DIR Если вы используете списки архивов, вам также необходимо предоставить общий доступ к каталогам архивов.

ДОЛЖЕН находиться в общем хранилище

  • LOCK_DIR, PID_DIR, PIDFILE Я не совсем уверен, но похоже, что блокировки и pid-файлы должны быть расположены в общем хранилище, чтобы в случае чего-то плохого с сервером qrunner было очевидно, что процессы завершились ненормально.

  • SITE_PW_FILE, LISTCREATOR_PW_FILE Вероятно, вы хотите, чтобы ваши файлы паролей находились в общем хранилище, чтобы вы могли быть уверены, что ваш пароль главного списка работает независимо от того, на каком сервере вы находитесь.

  • CONFIG_DIR Если вы используете MTA=Postfix, Mailman автоматически создаст файл псевдонимов в CONFIG_DIR. Поскольку любую машину с Mailman можно использовать для создания или удаления списков, каждая машина также должна иметь возможность правильно обновлять файл общих псевдонимов. (Caveat Emptor: иногда вы хотите настроить Mailman немного по-разному на каждой машине, что может быть сложно с общим CONFIG_DIR.)

МОЖЕТ находиться в общем хранилище

  • LOG_DIR В зависимости от ваших предпочтений вы можете оставить эти каталоги локальными или разместить их в общем хранилище. Мне нравится, когда все мои журналы хранятся в одном центральном месте, для которого выполняется резервное копирование, так что у меня все еще есть старые журналы, доступные после миграции процессов на новый сервер.

  • TEMPLATE_DIR Если вы вообще настроили свои шаблоны Mailman (например, рикошеты), вы, вероятно, захотите также разместить их в общем хранилище.

  • SPAM_DIR Я не знаю, для чего на самом деле используется SPAM_DIR, но рекомендуется, чтобы все файлы переменных находились в общем хранилище, поэтому я включаю это здесь.

Только локальное хранилище

  • WRAPPER_DIR, BIN_DIR, SCRIPTS_DIR, MESSAGES_DIR Очень хорошая идея - хранить двоичные файлы и сценарии локально, чтобы вы могли использовать пакеты, предоставляемые вашей операционной системой, для обновлений, не беспокоясь о синхронизации общих двоичных файлов. Mailman, похоже, очень внимательно относится к тому, чтобы одна и та же версия работала на любом сервере, который связан с общим хранилищем.

(Отредактировано 4 сентября 2013 г.) Следующее руководство было предоставлено Марком Сапиро в рассылке Mailman-Users.

Я бы посоветовал стандартному GNU Mailman поделиться всеми изменяемыми данными, которые есть в var_prefix, который представляет собой все каталоги archives /, data /, lists /, locks /, logs /, qfiles / и spam /, однако у вас есть Пакет Scientific Linux (производная от Red Hat), см. FAQ по адресу http://wiki.list.org/x/KYCB чтобы узнать, как они соотносятся с вашей установкой.

На сайте есть FAQ http://wiki.list.org/x/wgB0 это в некоторой степени решает эту проблему. Возможно, потребуются некоторые дополнения. Смотрите все ссылки.

(Отредактировано 4 сентября 2013 г.) На самом деле каталог config должен быть общим, а не локальным.

Марк Сапиро написал на Mailman-users 03 декабря 2013 г .:

http://www.mail-archive.com/mailman-users@python.org/msg63365.html

«Mailman 2.1.12 несовместим с Python 2.6+. Это было исправлено в версии 2.1.13».

Эта конкретная проблема была исправлена ​​этим патчем:

(Я не включаю патч сюда, так как форматирование может быть повреждено.)