13. Установка Mailman - Установка связки Postfix, MySQL, SpamAssassin, Maia в FreeBSD.

13. Установка Mailman - Установка связки Postfix, MySQL, SpamAssassin, Maia в FreeBSD.

назад Оглавление вперед

Mailman - отличное и хорошо поддерживаемое приложение для создания почтовых рассылок. Если вы хотите создать сервер рассылок, то эта программа - отличный выбор. Узнать больше можно посетив сайт http://www.gnu.org/software/mailman/index.html.
Данное руководство тестировалось с версией 2.1.10.

Установим Mailman из портов.

#cd /usr/ports/mail/mailman
#make all install clean

В меню установки не забудьте выбрать опцию “POSTFIX”.

Добавим mailman в автозапуск системы:

#echo 'mailman_enable="YES"' >> /etc/rc.conf

Получим скрипт Postfix-To-Mailman

#cd /usr/local/mailman
#fetch http://www.gurulabs.com/downloads/postfix-to-mailman-2.1.py
#mv postfix-to-mailman-2.1.py postfix-to-mailman.py
#chmod 750 postfix-to-mailman.py
#chown mailman:mailman postfix-to-mailman.py

Отредактируем файл /usr/local/mailman/postfix-to-mailman.py

#! /usr/local/bin/python
…
# Configuration variables – Change these for your site if necessary.
MailmanHome = “/usr/local/mailman“; # Mailman home directory.
MailmanOwner = “postmaster@domain.tld“; # Postmaster and abuse mail recipient.
…

Отредактируем файл /usr/local/etc/postfix/main.cf

...
relay_domains = proxy:mysql:/usr/local/etc/postfix/mysql_relay_domains_maps.cf lists.domain.tld
...
# TRANSPORT MAP
#
# See the discussion in the ADDRESS_REWRITING_README document.
transport_maps = hash:/usr/local/etc/postfix/transport
vacation_destination_recipient_limit = 1
mailman_destination_recipient_limit = 1
...

Добавим в список транспорта в файл /usr/local/etc/postfix/transport

#echo 'lists.domain.tld mailman:' >> /usr/local/etc/postfix/transport

Отредактируем файл /usr/local/etc/postfix/master.cf

Добавим в конец файла.

mailman unix - n n - - pipe
  flags=FR user=mailman:mailman
  argv=/usr/local/mailman/postfix-to-mailman.py ${nexthop} ${user}

Создадим базу данных транспорта Postfix

#postmap /usr/local/etc/postfix/transport

Перезагрузим конфигурацию Postfix.

#postfix reload

Отредактируем файл /usr/local/etc/apache22/extra/httpd-vhosts.conf

NameVirtualHost *:80

#
# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for all requests that do not
# match a ServerName or ServerAlias in any  block.
#


# Default domain on this server
#
<Virtualhost *:80>
    ServerAdmin webmaster@domain.tld
    DocumentRoot "/usr/local/www/apache22/data"
    ServerName www.domain.tld
    ServerAlias domain.tld www.domain.tld
    <Directory "/usr/local/www/apache22/data">
      AllowOverride None
      Options None
      Order allow,deny
      Allow from all
    </Directory>
    ErrorLog /var/log/httpd-error.log
    CustomLog /var/log/httpd-access.log combined
</Virtualhost>

# Mailman mailing list domain.
#
<Virtualhost *:80>
    ServerAdmin webmaster@domain.tld
    DocumentRoot "/usr/local/mailman"
    ServerName lists.domain.tld
    ServerAlias lists.domain.tld
    ScriptAlias /cgi-bin/ "/usr/local/mailman/cgi-bin/"
    ScriptAlias /mailman/ "/usr/local/mailman/cgi-bin/"
    Alias /pipermail "/usr/local/mailman/archives/public"
    Alias /icons "/usr/local/mailman/icons"
    <Directory "/usr/local/mailman">
       AllowOverride All
       Options FollowSymlinks
       Order allow,deny
       Allow from all
    </Directory>
    ErrorLog /var/log/httpd-error.log
    CustomLog /var/log/httpd-access.log combined
</Virtualhost>

Замечание

Дополнительно обратите внимание на директорию по умолчанию для HTTP сервера. Причиной для этого является то, что как только включается директива виртуального хостинга, директорией по умолчанию для Apache становится первый VirtualHost в списке из файла httpd-vhosts.conf. Так же подумайте, будете ли вы когда нибудь использовать сайт по умолчанию, идущий первым в списке виртуальных сайтов в файле httpd-vhosts.conf.
После того как вы добавили директиву VirtualHost, вы можете удалить или закомментировать следующие строки в файле httpd-vhosts.conf, они даны как пример по умолчанию.

Отредактируем файл /usr/local/etc/apache22/httpd.conf для включения директивы vhosts:

…
# Virtual hosts
Include etc/apache22/extra/httpd-vhosts.conf

Перегрузим Apache

#apachectl graceful

Тест

Откройте страницу “http://lists.domain.tld/mailman/listinfo” и вы увидите информационную страницу почтовой рассылки. Не увидели, переустановите MailMan. Установилось, хорошо, единственая проблема ошибка в отображении логотипа ‘Powered by FreeBSD’. “Да, да!”. Этого нельзя допустить, придется вернуться к началу и скопировать FBSD лого в нужный каталог…

Скопируем FBSD логотип, в директорию видимую программой Mailman:

#cd /usr/local/mailman/icons
#cp /usr/local/www/icons/powerlogo.gif ./

О, чертик! :)

Установим пароль для системы

#cd /usr/local/mailman
#bin/mmsitepass
New site password: mailman_password
Again to confirm password: mailman_password

Создадим список Mailman:

#bin/newlist
Enter the name of the list: mailman
Enter the email of the person running the list: you@domain.tld
Initial mailman password: list_password

Необходимо следовать инструкциям для добавления псевдонимов к почтовому списку. Не волнуйтесь все это виртуально. Так продолжаем… Введите enter для оповещения владельца mailman… ENTER

Добавим список в файл конфигурации Mailman:

# echo "add_virtualhost('lists.domain.tld','lists.domain.tld')" >> /usr/local/mailman/Mailman/mm_cfg.py

Запустим Mailman:

#/usr/local/etc/rc.d/mailman start

Тест

Снова посетите страницу “http://lists.domain.tld/. Когда страница загрузится, нажмите на ссылку “the list admin overview page”(страница быстрого администрирования). Далее выберите ссылку “create a new mailing list”(создать новый список адесов).
Заполните пробелы:
Имя списка: test
Адрес владельца рассылки: you@domain.tld
Введите пароль рассылки…
Пароль владельца Mailman: site_password
Нажммите кнопку “Create List”(создать рассылку).

Важно

Кое-что, было упущено мною напрочь и только недавно дошло до меня благодаря помощи моего друга Zbigniew (Спасибо!). А именно то, что Mailman обрабатывающий виртуальные списки адресатов, примет *ANY* (любую) почту, адресованную для lists.domain.tld (Или любого другого адреса вашего сервера). Это произведет огромное количество обратных писем, как если бы это была атака спамеров по словарю на Ваш список адресатов. Поэтому мы должны создать отдельную карту списка адресатов для каждого списка адресатов. Да, я знаю, что это сложно, но пока другого решения не найдено. Так что давайте сделаем это сейчас.

Найдем все доступные адреса списка адресатов:

#cd /usr/local/mailman
#bin/genaliases

Создадим и отредактируем файл /usr/local/etc/postfix/relay_recipients

Добавим в наш список все адреса, найденные предыдущей командой. Кроме того после каждого адреса нужно добавить "OK". Другими словами, если у вас есть список рассылки и он называется "users@lists.domain.tld, наш файл должен выглядеть следующим образом (по умолчанию):

users@lists.domain.tld OK
users-admin@lists.domain.tld OK
users-bounces@lists.domain.tld OK
users-confirm@lists.domain.tld OK
users-join@lists.domain.tld OK
users-leave@lists.domain.tld OK
users-owner@lists.domain.tld OK
users-request@lists.domain.tld OK
users-subscribe@lists.domain.tld OK
users-unsubscribe@lists.domain.tld OK

Создадим карту для Postfix.

#postmap /usr/local/etc/postfix/relay_recipients

Замечание

Вы должны сделать написанное выше для каждого списка рассылки, создаваемого в Mailman. В противном случае, Postfix будет отвергать почтовые адреса. Конечно, все адреса можно добавить в один файл. Кроме того, не забудьте повторно запустить команду 'postmap' и перезагрузите Postfix после каждого редактирования файла 'relay_recipients'.

Отредактируйте файл /usr/local/etc/postfix/main.cf

Это заставит Postfix принимать почту для наших виртуальных пользователей, а также для пользователей наших рассылок.

...
relay_recipient_maps = proxy:mysql:/usr/local/etc/postfix/mysql_virtual_mailbox_maps.cf, hash:/usr/local/etc/postfix/relay_recipients
...

Перегрузим конфигурацию Postfix

#postfix reload

Подпишемся на тестовую рассылку

Откройте ссылку в браузере “http://lists.domain.tld/mailman/listinfo"

Нажмите на название вновь созданного списка (Возможно, вам придется перезагрузить/обновить страницу, если ничего не появилось). Заполните недостающее в разделе "Subscribing to listname" и нажмите кнопку отправить.

Проверьте свою электронную почту и подтвердить подписку.

Отправьте письмо на адрес "listname@lists.domain.tld".

Если все настроено правильно, то почта будет отправлена. Проверьте /var/log/maillog на возможные ошибки, которые могут произойти.

Если ошибок нет, перейдите на "http://lists.domain.tld/pipermail/listname", чтобы просмотреть отправленную почты.

Замечание

Также не забудьте добавить псевдоним “mailman@domain.tld” к нормальному пользователю вашего почтового сервера. В противном случае получите ошибки в файле maillog.

Добавим больше рассылок в MailMan

Добавим новый список в Mailman:

#cd /usr/local/mailman
#bin/newlist -u lists.domain2.tld -e lists.domain2.tld listname

Добавим новый список в файл конфигурации Mailman:

#echo "add_virtualhost('lists.domain2.tld','lists.domain2.tld')" >> /usr/local/mailman/Mailman/mm_cfg.py

Отредактируем файл /usr/local/etc/postfix/main.cf file:

... 
relay_domains = proxy:mysql:/usr/local/etc/postfix/mysql_relay_domains_maps.cf lists.domain.tld lists.domain2.tld
...

Добавим транспорт в Postfix:

#echo 'lists.domain2.tld mailman:' >> /usr/local/etc/postfix/transport

Пересоздадим базу транспорта Postfix:

#postmap /usr/local/etc/postfix/transport

Перезагрузим конфигурацию Postfix:

#postfix reload

Отредактируем файл /usr/local/etc/apache22/extra/httpd-vhosts.conf


<VirtualHost *:80>
    ServerAdmin webmaster@domain2.tld
    DocumentRoot "/usr/local/mailman"
    ServerName lists.domain2.tld
    ServerAlias lists.domain2.tld
    ScriptAlias /cgi-bin/ "/usr/local/mailman/cgi-bin/"
    ScriptAlias /mailman/ "/usr/local/mailman/cgi-bin/"
    Alias /pipermail "/usr/local/mailman/archives/public"
    Alias /icons "/usr/local/mailman/icons"
    <Directory /usr/local/mailman>
       AllowOverride All
       Options FollowSymlinks
       Order allow,deny
       Allow from all
    </Directory>
    ErrorLog /var/log/httpd-error.log
    CustomLog /var/log/httpd-access.log combined
</VirtualHost>

Перегрузим конфигурацию Apache

#apachectl graceful

Вот и все. Теперь перейдите на “http://lists.domain2.tld/mailman/listinfo“. Отредактируйте, подпишитесь, и так далее… ну и все готово.

назад Оглавление вперед