Установка ПО · 7 min read · Sep 26, 2025
Установка iRedMail и Mailman на Debian Squeeze
Установка iRedMail и Mailman на Debian Squeeze
Версия: 1
Автор: Джейсон Норвуд-Янг
Последнее редактирование: 22 декабря 2011
Я большой поклонник iRedMail, который по сути является упакованной версией Postfix и других компонентов, которые делают Postfix крутым, таких как Spamassassin, серый список и бэкенд LDAP или MySql. Одно, что я хотел с iRedMail, это Mailman, мой любимый сервер рассылки. Интеграция двух может быть сложной задачей, поэтому вот некоторые инструкции, чтобы избавить вас от значительной боли.
Парни из iRedMail предлагают бесплатную консоль администратора для управления учетными записями пользователей. Я подписан на профессиональную версию консоли администратора iRedMail, которая очень полезна для клиентов, чтобы управлять собой. Я не имею никакого отношения к iRedMail, кроме как быть клиентом.
1. Настройка сервера
Я устанавливаю на чистую установку Debian Squeeze. Первое, что я всегда делаю на новом сервере, это:
apt-get update
apt-get upgrade
dpkg-reconfigure tzdataПоследняя строка позволяет вам установить ваш часовой пояс. Это не строго необходимо для наших целей, но я считаю, что это хорошая практика.
Теперь нам нужно настроить полное доменное имя (FQDN). Это означает, что нам нужно доменное имя, такое как mailserver.example.com, а не просто mailserver. Чтобы проверить, какое у вас имя хоста, введите:
hostname -fПРИМЕЧАНИЕ: Выбранное вами доменное имя должно отличаться от домена электронной почты, который вы хотите использовать. Если вы хотите, чтобы ваша электронная почта приходила с [email protected], не делайте имя вашего сервера example.com - дайте ему поддомен, такой как obiwan или captainkirk или (если вы скучны, как я) mailserver.
Если у вас уже есть FQDN, вы можете перейти к шагу 2.
Доменное имя устанавливается в двух местах: /etc/hostname и /etc/hosts.
Отредактируйте ваш /etc/hostname, чтобы он содержал ваше FQDN (для целей этого руководства я буду использовать mailserver.example.com).
Для вашего файла /etc/hosts ваша первая строка должна выглядеть так:
127.0.0.1 mailserver.example.com mailserver localhost localhost.localdomainТеперь нам просто нужно сказать системе зарегистрировать изменение:
/etc/init.d/hostname.sh
hostname -fТеперь вы должны увидеть FQDN. Если вы его не получили, паникуйте! Эм, я имею в виду перезагрузите и проверьте снова.
2. Установка iRedMail
На момент написания версия iRedMail составляет 0.7.3. Проверьте на www.iredmail.org последнюю версию и при необходимости скорректируйте.
cd ~
wget http://iredmail.googlecode.com/files/iRedMail-0.7.3.tar.bz2
apt-get install bzip2
tar xjf iRedMail-0.7.3.tar.bz2
cd iRedMail-0.7.3
bash iRedMail.shiRedMail установит все, что вам нужно. Примите все значения по умолчанию, кроме бэкенда - выберите MySql вместо LDAP. Когда вас спросят о вашем первом виртуальном почтовом домене, введите example.com, НИ В КОЕМ СЛУЧАЕ не mailserver.example.com. Отвечайте “Да” всякий раз, когда вас спросят.
Теперь у вас есть отличный почтовый сервер! Это было легко, да?
3. Установка Mailman
Сначала мы устанавливаем Mailman:
apt-get install mailmanВы заметите, что Mailman еще не запущен. Сначала нам нужно сказать Postfix отправлять почту в Mailman, когда он получает почту с определенных адресов.
4. Настройка транспортных и алиасных учетных записей
Мы собираемся создать виртуальный домен под названием lists.example.com, который мы будем использовать для всех наших Mailman вещей. Каждый раз, когда что-то отправляется на домен lists.example.com, мы будем перенаправлять это на программу Mailman вместо того, чтобы обрабатывать это как обычную почту.
Поскольку мы не хотим, чтобы наш список рассылки находился на домене lists.example.com, а просто на example.com, мы также настроим кучу алиасов, чтобы принимать письма, отправленные на адреса Mailman на example.com, и вместо этого перенаправлять их на lists.example.com.
Мы будем делать все это через базу данных MySql. Укажите браузер на https://example.com/phpmyadmin. Обратите внимание, что это https, а не просто http. Также обратите внимание, что если у вас еще нет DNS-сервера, указывающего на ваш IP-адрес, вам может потребоваться добавить example.com в ваш файл /etc/hosts на вашем локальном компьютере.
Войдите с пользователем root и паролем, который вы выбрали во время установки iRedMail. Если вы не можете вспомнить какие-либо данные, посмотрите в ~/iRedMail-0.7.3/iRedMail.tips - iRedMail удобно сохраняет местоположения, имена пользователей и пароли для всех служб iRedMail.
Нажмите на базу данных “vmail” в левой панели, а затем на вкладку “SQL”. Вставьте следующую команду в вкладку (после изменения домена на ваш собственный, конечно) и нажмите “Выполнить”:
INSERT INTO `vmail`.`domain` (`domain`, `description`, `disclaimer`, `aliases`, `mailboxes`, `maxquota`, `quota`, `transport`, `backupmx`, `defaultuserquota`, `defaultuseraliases`, `defaultpasswordscheme`, `minpasswordlength`, `maxpasswordlength`, `created`, `modified`, `expired`, `active`) VALUES ('lists.example.com', '', '', '0', '0', '0', '0', 'mailman:', '0', '1024', '', '', '0', '0', NOW(), '0000-00-00 00:00:00', '9999-12-31 00:00:00', '1');Это настроило наш транспорт, чтобы получить все с lists.example.com в приложение Mailman.
Теперь нам нужно добавить алиасы Mailman. Вам нужно будет делать это каждый раз, когда вы добавляете новый список в Mailman, просто замените “mailman” на имя вашего нового списка и снова выполните SQL.
INSERT INTO `alias` (`address`, `goto`, `name`, `moderators`, `accesspolicy`, `domain`, `created`, `modified`, `expired`, `active`) VALUES
('[email protected]', '[email protected]', '', '', 'public', 'example.com', NOW(), NOW(), '9999-12-31 00:00:00', 1),
('[email protected]', '[email protected]', '', '', 'public', 'example.com', NOW(), NOW(), '9999-12-31 00:00:00', 1),
('[email protected]', '[email protected]', '', '', 'public', 'example.com', NOW(), NOW(), '9999-12-31 00:00:00', 1),
('[email protected]', '[email protected]', '', '', 'public', 'example.com', NOW(), NOW(), '9999-12-31 00:00:00', 1),
('[email protected]', '[email protected]', '', '', 'public', 'example.com', NOW(), NOW(), '9999-12-31 00:00:00', 1),
('[email protected]', '[email protected]', '', '', 'public', 'example.com', NOW(), NOW(), '9999-12-31 00:00:00', 1),
('[email protected]', '[email protected]', '', '', 'public', 'example.com', NOW(), NOW(), '9999-12-31 00:00:00', 1),
('[email protected]', '[email protected]', '', '', 'public', 'example.com', NOW(), NOW(), '9999-12-31 00:00:00', 1),
('[email protected]', '[email protected]', '', '', 'public', 'example.com', NOW(), NOW(), '9999-12-31 00:00:00', 1),
('[email protected]', '[email protected]', '', '', 'public', 'example.com', NOW(), NOW(), '9999-12-31 00:00:00', 1);5. Настройка Postfix
Вернемся к командной строке. Нам нужно выполнить:
postconf -e 'relay_domains = lists.example.com'
postconf -e 'mailman_destination_recipient_limit = 1'
/etc/init.d/postfix reload6. Отключение серого списка
Теперь вы, вероятно, захотите отключить серый список. Серый список просто возвращает всю почту, которую он получает от нового отправителя. Если отправитель пытается отправить снова через некоторое время, это, вероятно, не спам-бот. Это очень эффективно для остановки спама, но часто означает задержки между тем, как кто-то отправляет вам почту, и тем, как вы ее получаете. В случае с Mailman, если сообщение в Mailman задерживается на час, это делает систему неотзывчивой - особенно для новых подписчиков. Это также делает тестирование хлопотным. Вам не нужно отключать это - следующий шаг является необязательным.
Отредактируйте /etc/postfix-policyd.conf:
[...]
GREYLISTING=0
[...]Теперь перезапустите политику Postfix:
/etc/init.d/postfix-policyd restart7. Настройка Mailman
Мы собираемся сказать Mailman отправлять почту с @example.com вместо @lists.example.com. Однако все ссылки, которые он отправляет, должны приходить с домена lists.example.com. Это потому, что мы собираемся настроить виртуальный домен только для Mailman.
pico /etc/mailman/mm_cfg.py[...]
DEFAULT_URL_PATTERN = 'http://%s/'
[...]
DEFAULT_EMAIL_HOST = 'example.com'
[...]
DEFAULT_URL_HOST = 'lists.example.com'8. Настройка Apache
Мы почти закончили. Нам просто нужно настроить сервер Apache, чтобы обслуживать веб-сайт Mailman, когда мы переходим на lists.example.com. Не забудьте настроить этот домен в /etc/hosts или вашем DNS-сервере.
pico /etc/apache2/sites-available/mailmanScriptAlias /cgi-bin/mailman/ /usr/lib/cgi-bin/mailman/
Alias /pipermail/ /var/lib/mailman/archives/public/
Alias /images/mailman/ /usr/share/images/mailman/
AllowOverride None
Options ExecCGI
AddHandler cgi-script .cgi
Order allow,deny
Allow from all
Satisfy Any
Options FollowSymlinks
AllowOverride None
Order allow,deny
Allow from all
AllowOverride None
Order allow,deny
Allow from all
ServerName lists.example.com
DocumentRoot /var/www/lists
ErrorLog /var/log/apache2/lists-error.log
CustomLog /var/log/apache2/lists-access.log combined
Options FollowSymLinks
AllowOverride None
Alias /pipermail/ /var/lib/mailman/archives/public/
Alias /images/mailman/ /usr/share/images/mailman/
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/
ScriptAlias / /usr/lib/cgi-bin/mailman/listinfo
Теперь нам просто нужно включить этот виртуальный хост.
a2ensite mailman
mkdir /var/www/lists
apache2ctl restart9. Создание вашего первого списка
Первый список Mailman всегда “mailman”. Чтобы создать этот список, выполните:
newlist mailmanЗаполните адрес электронной почты и пароль вашего администратора. Вам будет предложено нажать Enter, чтобы уведомить администратора. Когда вы это сделаете, вы не получите электронное письмо сразу. У нас есть еще один шаг:
/etc/init.d/mailman startКак только мы это сделаем, администратор списка должен получить электронное письмо со ссылкой на интерфейс администратора нового списка.
Если это сработает, вы также захотите протестировать подписки (просто отправьте пустое письмо на [email protected]). Если вы получите подтверждение подписки и сможете нажать на ссылку, то, скорее всего, все работает на 100%. Если нет, паникуйте! Я имею в виду, посмотрите в /var/log/mail.log, чтобы понять, что идет не так.
Подсказка: чтобы следить за журналом почты, используйте:
tail -f /var/log/mail.logЕсли вам нужно попробовать воссоздать список Mailman, сначала выполните:
rmlist mailman10. Создание дополнительных списков
Чтобы создать список под названием “listname”, сначала добавьте алиасы нового списка в таблицу алиасов в базе данных MySql vmail:
INSERT INTO `alias` (`address`, `goto`, `name`, `moderators`, `accesspolicy`, `domain`, `created`, `modified`, `expired`, `active`) VALUES
('[email protected]', '[email protected]', '', '', 'public', 'example.com', NOW(), NOW(), '9999-12-31 00:00:00', 1),
('[email protected]', '[email protected]', '', '', 'public', 'example.com', NOW(), NOW(), '9999-12-31 00:00:00', 1),
('[email protected]', '[email protected]', '', '', 'public', 'example.com', NOW(), NOW(), '9999-12-31 00:00:00', 1),
('[email protected]', '[email protected]', '', '', 'public', 'example.com', NOW(), NOW(), '9999-12-31 00:00:00', 1),
('[email protected]', '[email protected]', '', '', 'public', 'example.com', NOW(), NOW(), '9999-12-31 00:00:00', 1),
('[email protected]', '[email protected]', '', '', 'public', 'example.com', NOW(), NOW(), '9999-12-31 00:00:00', 1),
('[email protected]', '[email protected]', '', '', 'public', 'example.com', NOW(), NOW(), '9999-12-31 00:00:00', 1),
('[email protected]', '[email protected]', '', '', 'public', 'example.com', NOW(), NOW(), '9999-12-31 00:00:00', 1),
('[email protected]', '[email protected]', '', '', 'public', 'example.com', NOW(), NOW(), '9999-12-31 00:00:00', 1),
('[email protected]', '[email protected]', '', '', 'public', 'example.com', NOW(), NOW(), '9999-12-31 00:00:00', 1);Как только это будет сделано, выполните эту команду, чтобы создать новый список:
newlist listnameНаслаждайтесь вашим новым сервером Mailman! Я надеюсь, вы создадите отличные электронные сообщества.
Get new posts in your inbox
No spam. Unsubscribe anytime.