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

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

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

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

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

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

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

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

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

  1. smtp Обновлен лог-файл с указанием количества получателей и времени завершения.
  2. post В лог-файл добавлено имя списка, идентификатор сообщения и "успех".

Фон

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

  • Scientific Linux 6.3 на обоих серверах
  • Python 2.6.6 на обоих серверах
  • Mailman 2.1.12 установлен из пакетов ОС на обоих серверах
  • selinux в разрешающем режиме на бэкэнд-сервере
  • selinux в принудительном режиме на веб-сервере, но нет записей журнала с type=AVC записываются. Кроме того, используя setenforce 0 не решает проблему.

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

2 ответа

Решение

При использовании более одного сервера для 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=PostfixMailman автоматически создаст файл псевдонимов в CONFIG_DIR. Поскольку любой компьютер с Mailman можно использовать для создания или удаления списков, каждый компьютер также должен иметь возможность корректно обновлять файл общих псевдонимов. (Предостережение Emptor: Иногда вы хотите настроить Mailman немного по-разному на каждой машине, что может быть сложно с общим CONFIG_DIR.)

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

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

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

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

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

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

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

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

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

(Отредактировано 2013-09-04) На самом деле config dir должен быть общим, а не локальным.

Марк Сапиро, опубликованный на Mailman-пользователи 03 декабря 2013:

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

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

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

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

Другие вопросы по тегам