Что может заставить Mailman удалять сообщения после одобрения модератором?
Я использую среднюю систему Mailman, в которой недавно возникла проблема, при которой любые сообщения, прошедшие модерацию, исчезают, а не доставляются в список рассылки. Это влияет на каждый из наших списков рассылки.
Сбой модерации при выполнении на отдельном веб-сервере
Среда Mailman разделена на два сервера: внешний и внутренний. Внутренний сервер обрабатывает qrunners Postfix и Mailman, а внешний сервер содержит скрипты Apache и CGI Mailman для модерирования списков. Два сервера совместно используют монтирование NFS, которое включает в себя все общие данные Mailman.
Весь нормальный почтовый поток работает правильно, но когда модератор списка входит в веб-интерфейс и утверждает сообщение, оно исчезает без следа.
- Postfix smtpd получает входящее сообщение через SMTP, затем
- Postfix smtpd доставляет сообщение
/usr/lib/mailman/mail/mailman
, - Почтальон отмечает, что пишет
vette
logfile (внутренний сервер) это сообщение хранится для утверждения. - Модератор списка использует веб-интерфейс CGI, чтобы пометить сообщение как одобренное.
- Почтальон пишет запись
vette
logfile (на внешнем сервере) говорит, что сообщение подтверждено.
На этом этапе файл.pck, относящийся к задержанному сообщению, исчезает, но ничего не доставляется, и дальнейшие записи журнала не создаются.
Модерация проходит успешно с помощью веб-интерфейса на главном сервере Mailman
Хотя мы обычно не запускаем веб-интерфейс Mailman на внутреннем сервере (чтобы уменьшить поверхность атаки), я запустил его для тестирования. Когда мы используем веб-интерфейс Mailman на внутреннем сервере, сообщение доставляется нормально, и мы видим эти записи журнала.
smtp
Обновлен лог-файл с указанием количества получателей и времени завершения.post
В лог-файл добавлено имя списка, идентификатор сообщения и "успех".
Фон
Проблема началась после миграции среды Mailman на новые серверы. Он не возник сам по себе, скорее всего, это результат какой-то ошибки конфигурации, которую мы еще не обнаружили. Мы используем:
- Scientific Linux 6.3 на обоих серверах
- Python 2.6.6 на обоих серверах
- Mailman 2.1.12 установлен из пакетов ОС на обоих серверах
- selinux в разрешающем режиме на бэкэнд-сервере
- selinux в принудительном режиме на веб-сервере, но нет записей журнала с
type=AVC
записываются. Кроме того, используяsetenforce 0
не решает проблему.
Я нашел одну похожую запись в списке пользователей Mailman, но решение не было предоставлено.
2 ответа
При использовании более одного сервера для Mailman каждый сервер должен иметь доступ к каталогам очередей в общем хранилище. Вот и все.
Понимание того, куда идут модерируемые сообщения
- Если сообщение удерживается для модерации, оно перемещается в $DATA_DIR, а идентификатор сообщения добавляется в $LIST_DATA_DIR/listname/pending.pck.
- Веб-интерфейс 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 можно использовать для создания или удаления списков, каждый компьютер также должен иметь возможность корректно обновлять файл общих псевдонимов. (Предостережение 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."
Эта конкретная проблема была исправлена этим патчем:
(Я не включаю патч здесь, поскольку форматирование будет повреждено.)