amarao (amarao_san) wrote,
amarao
amarao_san

Category:

HOWTO mailman+postfix /debian

Итак, улучшенный метод настройки, не связанный с алиасами - скрипт postfix-to-mailman.py.

Краткая теория: postfix - почтовый клиент
mailman - менеджер почтовых листов (или рассылок - как сконфигурируешь).
debian lenny - новая, улучшенная и бесплатная версия Microsoft Windows Server.

Идея конфигурации - выделение адресов для рассылок в отдельный домен. Если наш домен domain.ru, то для рассылок мы будем использовать list.domain.ru. Это позволит нам безболезненно использовать "красивые" имена, вроде info, или даже фамилии сотрудника, ведущего рассылку, не боясь пересечься с обычными пользовательскими емейлами.

Обычно настройка мейлмена выглядит следующим, весьма неприглядным образом:

Мы настраиваем передачу сообщений в /etc/aliases через pipe. Если у нас при этом несколько доменов, то картинка выглядит так:
Прописать в таблице принимаемых адресов емейлы с переадресацией на алиас, прописать алиас. С учётом, что каждая рассылка - это пачка адресов (subscribe, unsubscribe, join, leave, request, bounce и т.д.), то 2-3-5-10 рассылок превращается в сложную и скучную работу.

Существуют версии конфигурации, при которых алиасы генерируются автоматически, но это тоже не очень хорошо, потому что алиасы надо ещё обновить карту.

Есть более красивое решение - регистрация mailman как _ТРАНСПОРТА_ postfix'a. Это неким образом хак, но хак очень красивый и стильный: мы объявляем, что за "доставку" почты домена (например, list.domain.ru) отвечает особый тип транспорта - mailman. Это позволяет нам работать с доменом рассылок, как с любым другим доменом _релеинга_. Нам не надо объяснять postfix'у, что нужно делать с почтой для этого домена, нам надо просто сказать "передай mailman'у, а он уже сам разберётся куда это "передать".

Важные места настройки:
0) Установка софта
1) Сам мейлмен, точнее, его серверные настройки. Он должен быть в курсе того, что он обслуживает.
2) Апач, который обеспечивает веб-интерфейс mailman'а. На самом деле, веб-интерфейс важнее, чем кажется, потому что он используется не только как страницы с информацией или для администрирования, но и для выполнения таких вещей, как принятие кодов подтверждения для подписки/отписки.
3) postfix (в конце-концов, именно он принимает почту)
4) DNS - нам нужно прописать адреса для приёма почты и веб-интерфейса.
5) Настройки рассылок (уровень администратора рассылок).


0. Установка

Я полагаю, что апач, postfix и bind (или их аналоги) уже установлены. Установка mailman: aptitude install mailman.

Обратите внимание на то., что после установки mailman, он не работоспособен - нужно создать служебный список рассылки с названием 'mailman'. С этим лучше не торопиться, т.к. есть нюанс с именем домена по-умолчанию.

1. Настройка mailman

Вся серверная конфигурация mailman - файл /etc/mailman/mm_cfg.py, да это обычный питон файл. Что очень удобно, если нужно что-то "посчитать в процессе.

Основные важные моменты:

DEFAULT_URL_PATTERN = 'http://%s/mailman/'
PRIVATE_ARCHIVE_URL = '/mailman/private'

Мы поменяем стиль адресов, спрятав большинстве случаев 'cgi-bin' из адреса веб-интерфейса.

Далее более важное. Дефолтная конфигурация maiman'а рассчитана на _ОДИН_ обслуживаемый домен. Если у нас он один, то пишем:
DEFAULT_EMAIL_HOST = 'list.domain.ru'
DEFAULT_URL_HOST = 'list.domain.ru'

(обратите внимание, установка mailman по-умолчанию прописывает тут myhostname из /etc/postfix/main.cf, что в большинстве среднего размера почтовых систем совершенно неприемлимо.

Если же у нас несколько доменов рассылки, то мы должны обратить внимание на строчку 'add_virtualhost'. Мы можем добавить несколько доменов рассылки (с некоторыми ограничениями).

Я обычно делаю это так:
maillist_hosts=("list.example.ru","list.site.ru","list.shopping.ru","list.gov.ru")

for host in maillist_hosts:
        add_virtualhost(host,host)


Далее, очевидный DEFAUL_SERVER_LANGUAGE (я предпочитаю 'ru'). Это не всегда срабатывает, часть сообщений всё равно будут по-английски.

Далее:

MTA=None.

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

После этого mailman'у нужен список рассылки mailman. Он создаётся командой

newlist mailman.

После ответа на вопрос, можно запустить mailman: /etc/init.d/mailman start. Он должен успешно запуститься, а указанному при создании листа рассылки емейлу должно прийти оповещение. Если нет - следует разобраться почему: /var/log/mail.log, /var/log/mailman/*

2. Настройка апача

В этой конфигурации я полагаю, что virtual hosts в апаче уже настроены.

Создаём файл конфигурации для сайта 'lists': /etc/apache2/sites-avaible/lists (эта конфигурация будет применяться для нескольких списков рассылки, так что используется 'generic' имя, если речь идёт о единственном сайте, то следует использовать его полное имя, например, 'list.domain.ru'):

<VirtualHost *:80>
    ServerName list.domain.ru
    ServerAlias www.list.domain.ru list.gov.ru www.gov.ru list.example.com www.example.ru 
    DocumentRoot /var/www/lists
    ErrorLog /var/log/apache2/lists-error.log
    CustomLog /var/log/apache2/lists-access.log combined

        # We can find mailman here:
        ScriptAlias /cgi-bin/mailman/ /usr/lib/cgi-bin/mailman/
        # And the public archives:
        Alias /pipermail/ /var/lib/mailman/archives/public/
        # Logos:
        Alias /images/mailman/ /usr/share/images/mailman/

        <Directory /usr/lib/cgi-bin/mailman/>
            AllowOverride None
            Options ExecCGI
            AddHandler cgi-script .cgi
            Order allow,deny
            Allow from all
        </Directory> 
        <Directory /var/lib/mailman/archives/public/> 
            Options Indexes FollowSymlinks
            AllowOverride None
            Order allow,deny
            Allow from all
        </Directory>
        <Directory /usr/share/images/mailman/>
            AllowOverride None
            Order allow,deny
            Allow from all
        </Directory>
    

    
<Directory /var/lib/mailman/archives/>
    Options Indexes FollowSymLinks
    AllowOverride None
</Directory> 
ScriptAlias /admin /usr/lib/cgi-bin/mailman/admin
ScriptAlias /admindb /usr/lib/cgi-bin/mailman/admindb
ScriptAlias /confirm /usr/lib/cgi-bin/mailman/confirm
ScriptAlias /create /usr/lib/cgi-bin/mailman/create
ScriptAlias /edithtml /usr/lib/cgi-bin/mailman/edithtml
ScriptAlias /listinfo /usr/lib/cgi-bin/mailman/listinfo
ScriptAlias /options /usr/lib/cgi-bin/mailman/options
ScriptAlias /private /usr/lib/cgi-bin/mailman/private
ScriptAlias /rmlist /usr/lib/cgi-bin/mailman/rmlist
ScriptAlias /roster /usr/lib/cgi-bin/mailman/roster
ScriptAlias /subscribe /usr/lib/cgi-bin/mailman/subscribe
ScriptAlias /mailman/ /usr/lib/cgi-bin/mailman/
</VirtualHost>


Создаём каталог /var/www/lists (или другое имя, если вы его решили поменять и поменяли в конфиге апача).
Создаём там index.html с приветствием и ссылкой на "/listinfo". Обратите внимание, если у вас несколько доменов, то следует использовать только относительные пути, а Redirect в .htaccess использовать нельзя.

3. postfix

Тут самое интересное. Конфигураций постфикса неисчислимое количество, так что укажу на места, которые надо настроить:

1) Прописать или добавить list.* домены в relay_domains.
2) Создать или добавить в transport_maps наши домены:
/etc/posftfix/transport:
list.domain:ru          mailman:
list.gov.ru                 mailman:
list.example.com    mailman:

3) Если у нас есть relay_recipient_maps, то следует прописать туда наши списки. Можно добросовестно выписат туда все адреса для всех рассылок (утомляет), а можно схалтурить и написать
@list.domain.ru       OK
@list.gov.ru             OK
@list.example.com OK


(напоминаю, что все карты нужно скомпилировать с помощью poftmap имя_карты, например, postmap transport).

4) Настоящая магия тут:

в каталоге /etc/postfix/master.cf должно появиться после установки mailman:
mailman   unix  -       n       n       -       -       pipe
  flags=FR user=list argv=/usr/lib/mailman/bin/postfix-to-mailman.py ${nexthop} ${user}


4. DNS

Прописываем для каждого из доменов (делать отдельно делегированные поддомены обычно нецелесообразно):

list IN A ip_of_server.
www.lsit CNAME list
list IN MX 10, list

5. Настройка списков рассылки
Если что-то не так с паролем создания списков, то есть скрипт (запускать от рута) /usr/lib/mailman/bin/mmsitepass, который позволяет сбросить основной пароль.

Для создания списка рассылки надо зайти на http://list.domain.ru/mailman и через навигацию попасть в интерфейс создания рассылки. Далее тут всё понятно и можно следовать мануалам с list.org. Обратите внимание, что если у вас НЕСКОЛЬКО list.*, то

1) С какого домена рассылку создаёте, в таком домене она и появляется. Зайдёте на list.domain.ru и создадите news, будет news@list.domain.ru, зайдёте на list.gov.ru и создадите elect, будет elect@list.gov.ru.

2) В пределах mailman'а имена рассылок (без учёта домена) должны быть уникальными. Другими словами, невозможно создать news@domain.ru и news@gov.ru на одном сервере. Следует использовать различающиеся имена.
Tags: debian, howto, linux, mailman, postfix, администрирование
Subscribe

  • А вот вам пост об исторической нелогичности

    Вот есть у меня файл /etc/default/grub.d/unified.cfg для включения unified cgroups для systemd. А вот вопрос (ответ на который я хорошо знаю, но…

  • апгрейдовое

    А вот шифрованный home я переносил вообще ленивым образом - тупо сделал dd для раздела и поправил путь к устройству для кастомного pam_exec-скрипта.…

  • VM VS baremetal

    Наконец-таки у меня появились цифры для обсуждения этого вопроса в отрыве от IO. Известно, что IO на виртуалках всегда медленее, чем на bare-metal, и…

  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 4 comments