Сегодня я опишу процесс установки и настройки почтового сервера на базе iRedmail.
Мне требовался немного необычный почтовый сервер, который бы умел:
- пересылать почту внутри компании
- отправлять почту через аккаунты на мэйле и яндексе
- дублировать исходящие письма на почту директора
Выбор свой остановил на iredmail потому что он легко ставится, все конфиги после установки настроены и готовы к работе, в пакет входит веб интерфейс админа, веб интерфейс для почты, проверка почты на вирусы, ну и конечно он умеет делать то что мне нужно, плюс бесплатен.
Процесс разобью на несколько частей:
Установка.
Подготовка к установке
Я устанавливал iRedmail на ubuntu 14.04 TLS. Первым делом нам необходимо скачать дистрибутив, для этого мы идём на сайт iredmail.org и в разделе download берём ссылку на архив с почтовиком.
Затем загружаем его, я буду загружать в каталог /home/alexey/
1 2 |
cd /home/alexey wget https://bitbucket.org/zhb/iredmail/downloads/iRedMail-0.9.2.tar.bz2 |
Распаковываем
1 |
tar xjf iRedMail-0.9.2.tar.bz2 |
Перед установкой мы должны привести запись с адресом нашего сервера в файле /etc/hosts к виду
1 |
127.0.0.1 mail.cmp.local mail localhost |
т.е. обязательно должен быть FQDN адрес что-нибудь.домен.зона иначе установщик не запустится. На работу сервер, поскольку он у нас внутренний, этот адрес никакого значения не оказывает. Для редактирования набираем
1 |
sudo nano /etc/hosts |
осле внесение изменений сохраняем -> Ctrl+O и выходим Ctrl+X
Затем нам необходимо дать права на запуск установочного скрипта, и собственно запустить его из под рута.
1 2 3 |
cd iRedMail-0.9.2/ chmod +xX iRedMail.sh sudo ./iRedMail.sh |
Мастер установки
После чего начнётся процесс установки, для установки на машине должен быть интернет. Процесс установки будут сопровождать разные вопросы, например первый вопрос устанавливать ли iRedmail? Конечно отвечаем Yes.
Задаём пароль для root записи к серверу MySql.
На следующем шаге у нас узнают директорию для хранения писем, я оставил всё как есть, жмём Next.
После этого установщик интересуется какой сервер устанавливать, поскольку в дальнейшем нам понадобится phpmyadmin я выбрал Apache
Какую базу будем использовать? Мне ближе и понятней MySql.
Указываем имя почтового домена (то что будет идти после @). У меня это будет cmp.local
Назначаем пароль для учётной записи администратора почтового сервера. С помощью это учётной записи позже мы сможешь создавать новые почтовые ящики.
Проверяем какие компоненты будут установлены. Поскольку я не планирую давать доступ к почтовому серверу из вне я уберу компонент Fail2ban, остальное оставлю по умолчанию.
Проверяем какие компоненты будут установлены. Поскольку я не планирую давать доступ к почтовому серверу из вне я уберу компонент Fail2ban, остальное оставлю по умолчанию.
Нас предупреждают что в файле /home/alexey/iRedMail-0.9.2/config хранятся важные сведения, такие как логины и пароли дающие различные привилегии и напоминают что не мешало бы этот файл удалить. Хотя для особо забывчивых может лучше и оставить, но точно переместить в безопасное место. Соглашаемся вводим y и жмём enter.
Начнётся процесс установки по окончании которого будет ещё вопрос использовать ли правила фаервола предоставленные iRedMail, не вижу смысла отказываться, соглашаемся.
А так же перезагрузить ли фаервол, снова отвечаем да. И получаем окошко с поздравлением об успешной установке iRedMail и напоминанием что не мешало бы перезагрузить систему.
Ok, перезагружаем.
1 |
sudo reboot |
Дополнительные компоненты
На этом установка iRedMail завершена, но не завершён раздел статьи установка, нам осталось установить phpmyadmin, потому что часть настроек хранится в MySql и недоступна для настройки через web интерфейс iRedMail’a. Устанавливаем phpmyadmin.
1 |
sudo apt-get install phpmyadmin |
Соглашаемся с тем что будут установлены дополнительные пакеты и будет использовано дисковое пространство. И выбираем веб сервер, у нас напоминаю apache2
На это шаге нас предупреждают о том что phpmyadmin для работы требуется установленная и настроенная база, соглашаемся
Вводим пароль от учётной записи root для mysql (указывали при установке iredmail)
Здесь нам предлагают ввести пароль для учетной записи phpmyadmin для доступа к базе, или оставить поле пустым что бы пароль был сгенерирован, оставляем пустым
На этом я считаю раздел установки закончен. Переходим к добавлению пользователей.
Настройка отправки через различные аккаунты.
Итак, в моём примере есть учётная запись через которую отправляется вся почта по умолчанию — testo.testovitch@yandex.ru и аккаунт на gmail ( testo.testovitch@gmail.com) для отправки писем от учётной записи secretar@cmp.local. Всего же учётных записей в примере нам хватит трёх. user — обычный пользователь, отправка почту через аккаунт по умолчанию, secretar обычный пользователь отправка почты через gmail, director отправка почты через аккаунт по умолчанию.
Для создания учётной записи переходим по адресу https://ip-нашего-iredmail/iredadmin и вводим логин postmaster@cmp.local, напоминаю что cmp.local это домен в моём примере, у вас может быть что-то другое, и пароль который мы указывали для учетной записи postmaster во время установки.
Жмём +add и выбираем user
В этом окне заполняем поля mail address, password жмём кнопку add, аналогично создаём оставшихся пользователей. Для вашего удобства есть поле в котором уже сгенерирован пароль, можно его скопировать и вставить для пользователя, не забыть правда потом записать 😉
Проверим как проходит внутренняя почта, на этом этапе уже должно всё работать, зайти в почтовый ящик можно по адресу https://ip-нашего-iredmail/
Чтобы посмотреть лог набираем в терминале
1 |
tail -n 100 /var/log/mail.log |
как видим всё в порядке
Настройка пересылки
Для пересылки почты через аккаунты других почтовых серверов надо использовать параметр relayhost = в main.cf. Информацию о том как это сделать я нашёл здесь и здесь.
Итак, снова терминал, нам необходим для начала отредактировать main.cf
1 |
sudo nano /etc/postfix/main.cf |
начиная со строки relayhost = добавляем следующее содержимое
1 2 3 4 5 6 7 |
relayhost = [smtp.yandex.ru]:587 smtp_use_tls = yes smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/saslpass smtp_sasl_security_options = noanonymous smtp_sender_dependent_authentication = yes sender_dependent_relayhost_maps = hash:/etc/postfix/relayhost_map |
Выглядит это примерно так
[smtp.yandex.ru]:587 это адрес smtp сервера по умолчанию и порт, как вы наверное уже сами догадались, остальные параметры отвечают за подключение с помощью starttls
теперь нам необходим создать и отредактировать ещё пару файлов это/etc/postfix/saslpass и /etc/postfix/relayhost_map в первом хранятся логины и пароли к аккаунтам, а во втором карта пересылки.
1 |
sudo nano /etc/postfix/saslpass |
добавляем примерно следующее (для сохранения файла используем сочетание Ctrl+O, для закрытия Ctrl+X)
1 2 3 |
secretar@cmp.local testo.testovitch@gmail.com:passW0!rd [smtp.yandex.ru]:587 testo.testovitch:passW08rd |
[smtp.yandex.ru]:587 testo.testovitch:passW08rd — здесь мы указываем дефолтную учётную запись для отправки, опять-таки указывается сервер, порт, логин и пароль.
secretar@cmp.local testo.testovitch@gmail.com:passW0!rd — здесь мы указываем что для отправки почты с адреса secretrar@cmp.local надо использовать другие логин и пароль (те что используются для gmail)
После того как мы внесли изменения в /etc/postfix/saslpass из него надо сделать файл db который понимает postfix
1 |
sudo postmap hash:/etc/postfix/saslpass |
Переходим к редактированию /etc/postfix/relayhost_map
1 |
sudo nano /etc/postfix/relayhost_map |
Содержимое следующее
1 |
secretar@cmp.local [smtp.gmail.com]:587 |
как вы наверное уже поняли, в этом файле указывается что для юзера secretar@cmp.local необходимо использовать smtp сервер smtp.gmail.com и порт 587.
повторяем процедуру postmap
1 |
sudo postmap hash:/etc/postfix/relayhost_map |
делаем reload для postfix
1 |
sudo service postfix reload |
Нюансы и отладка
Пробуем отправить письмо наружу, из веб интерфейса письмо уходит, но до адресата не доходит смотрим лог
1 |
tail -n 100 /var/log/mail.log |
и видим ошибку
Эта ошибка связана с тем что при отправке письма postfix использует логин и пароль который мы ему указали, но поле mail from оставляет от локального юзера, естественно что другой почтовый сервер отказывается такое письмо отправлять. Чтобы исправить это надо использовать параметр smtp_generic_maps снова в main.cf
1 |
sudo nano /etc/postfix/main.cf |
добавляем следующую строчку (я добавлял сразу после sender_dependent_relayhost_maps = hash:/etc/postfix/relayhost_map)
1 |
smtp_generic_maps = hash:/etc/postfix/generic |
создаём сам файл
1 |
sudo nano /etc/postfix/generic |
и вписываем в него
1 2 3 4 |
@cmp.local testo.testovitch@yandex.ru secretar@cmp.local testo.testovitch@gmail.com |
сторочка @cmp.local testo.testovitch@yandex.ru говорит что все адреса @cmp.local поле from будет подменяться на testo.testovitch@yandex.ru
а secretar@cmp.local testo.testovitch@gmail.com означает что письма отправленные от secretar@cmp.local будут отправляться от testo.testovitch@gmail.com
Не забываем postmap и reload
1 2 |
sudo postmap hash:/etc/postfix/generic sudo service postfix reload |
Пробуем отправить письмо. Всё отправляется видим что адреса меняются.
Amavis
Пробуем отправить письмо на внутренний ящик и … оно не доходит, смотрим лог.
и понимаем что при использовании в postfix параметра smtp_generic_maps подмена поля from происходит и для локальных (внутренних) адресов, более того postfix после этого пытается письмо отправить непонятно куда. Это очень странно потому что в документации к postfix явно указано что этот параметр применяется только для писем отправляемых за пределы почтового сервера.
Поиск в интернете даёт подсказку что проблема связана с amavis, но решение которое при этом предлагается мне не очень понравилось. Дальнейший поиск подсказывает что можно изменять адрес после контентной фильтрации, подсказку нашёл здесь.
Итак для того что бы письма внутри домена нормально ходили, а у исходящих за пределы домена подменялось поле From и при этом работала проверка на вирусы по всем письмам надо добавить в секцию amavis в файле master.cf строчку -o smtp_generic_maps=, делаем
1 |
sudo nano /etc/postfix/master.cf |
выглядит файл после изменений примерно так
Сохраняем файл, делаем обновление параметров.
1 |
sudo service postfix reload |
Проверяем, всё работает. Переходим к последнему пункту.
Так же есть нюанс при работе с gmail
Надо вот здесь, предварительно авторизировавшись выставить в положение включить — подробнее здесь.
Настройка дублирования исходящих писем.
Итак, теперь мы делаем так что бы письма отправленные со всех ящиков кроме директора дублировались в почту директору. Для этого нам и потребуется phpmyadmin
Для входа в phpmyadmin используем адрес http://ip-нашего-iredmail/phpmyadmin логин root пароль от учётной записи root для mysql
Слева раскрываем базу vmail и таблицу sender_bcc_user
Жмём «вставить» и заполняем поля username — почтовый ящик с которого будут дублироваться исходящие письма. bcc_address — почтовый ящик на который будут дублироваться исходящие письма, domain — наш почтовый домен. Жмём ок.
Проверяем. Всё должно работать. Для каждого пользователя у которого вы хотите дублировать почту необходимо будет сделать запись.
Как и прежде если возникли вопросы или замечания можно воспользоваться формой для комментариев ниже. Отвечаю по возможности, но почти всегда 😉