Внутренний почтовый сервер на базе iRedmail

Сегодня я опишу процесс установки и настройки почтового сервера на базе iRedmail.

Мне требовался немного необычный почтовый сервер, который бы умел:

  • пересылать почту внутри компании
  • отправлять почту через аккаунты на мэйле и яндексе
  • дублировать исходящие письма на почту директора

Выбор свой остановил на iredmail потому что он легко ставится, все конфиги после установки настроены и готовы к работе, в пакет входит веб интерфейс админа, веб интерфейс для почты, проверка почты на вирусы, ну и конечно он умеет делать то что мне нужно, плюс бесплатен.

Процесс разобью на несколько частей:

1. Установка
2. Настройка отправки через различные аккаунты
3. Настройка дублирования исходящих писем.

Установка.

Я устанавливал iRedmail на ubuntu 14.04 TLS. Первым делом нам необходимо скачать дистрибутив, для этого мы идём на сайт iredmail.org и в разделе download берём ссылку на архив с почтовиком.

iRedMail download

Затем загружаем его, я буду загружать в каталог /home/alexey/

cd /home/alexey
wget https://bitbucket.org/zhb/iredmail/downloads/iRedMail-0.9.2.tar.bz2

 Распаковываем

tar xjf iRedMail-0.9.2.tar.bz2

Перед установкой мы должны привести запись с адресом нашего сервера в файле /etc/hosts к виду

127.0.0.1 mail.cmp.local mail localhost

т.е. обязательно должен быть FQDN адрес что-нибудь.домен.зона иначе установщик не запустится. На работу сервер, поскольку он у нас внутренний, этот адрес никакого значения не оказывает. Для редактирования набираем

sudo nano /etc/hosts

После внесение изменений сохраняем -> Ctrl+O и выходим Ctrl+X

Затем нам необходимо дать права на запуск установочного скрипта, и собственно запустить его из под рута.

cd iRedMail-0.9.2/
chmod +xX iRedMail.sh
sudo ./iRedMail.sh

После чего начнётся процесс установки, для установки на машине должен быть интернет. Процесс установки будут сопровождать разные вопросы, например первый вопрос устанавливать ли iRedmail? Конечно отвечаем Yes.

setup iredmail

На следующем шаге у нас узнают директорию для хранения писем, я оставил всё как есть, жмём Next.

 iredmail setup

После этого установщик интересуется какой сервер устанавливать, поскольку в дальнейшем нам понадобится phpmyadmin я выбрал Apache

 setup iredmail step3

Какую базу будем использовать? Мне ближе и понятней MySql.

 setup iredmail step4

Задаём пароль для root записи к серверу MySql.

 setup iredmail step5

Указываем имя почтового домена (то что будет идти после @). У меня это будет cmp.local

 setup iredmail step6

Назначаем пароль для учётной записи администратора почтового сервера. С помощью это учётной записи позже мы сможешь создавать новые почтовые ящики.

 setup iredmail step7

Проверяем какие компоненты будут установлены. Поскольку я не планирую давать доступ к почтовому серверу из вне я уберу компонент Fail2ban, остальное оставлю по умолчанию.

 setup iredmail step8

Нас предупреждают что в файле /home/alexey/iRedMail-0.9.2/config хранятся важные сведения, такие как логины и пароли дающие различные привилегии и напоминают что не мешало бы этот файл удалить. Хотя для особо забывчивых может лучше и оставить, но точно переместить в безопасное место. Соглашаемся вводим y и жмём enter.

setup iredmail step9

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

firewall rules provided by iRedMail

А так же перезагрузить ли фаервол, снова отвечаем да. И получаем окошко с поздравлением об успешной установке iRedMail и напоминанием что не мешало бы перезагрузить систему. 

iredmail setup complete

Ok, перезагружаем.

sudo reboot

 На этом установка iRedMail завершена, но не завершён раздел статьи установка, нам осталось установить phpmyadmin, потому что часть настроек хранится в MySql и недоступна для настройки через web интерфейс iRedMail'a. Устанавливаем phpmyadmin.

sudo apt-get install phpmyadmin

Соглашаемся с тем что будут установлены дополнительные пакеты и будет использовано дисковое пространство. И выбираем веб сервер, у нас напоминаю apache2

phpmyadmin setup step1

На это шаге нас предупреждают о том что phpmyadmin для работы требуется установленная и настроенная база, соглашаемся

phpmyadmin setup step2

Вводим пароль от учётной записи root для mysql (указывали при установке iredmail)

 install phpmyadmin ubuntu step 3

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

 setup phpmyadmin ubuntu step4

На этом я считаю раздел установки закончен. Переходим к добавлению пользователей.

Настройка отправки через различные аккаунты.

Итак, в моём примере есть учётная запись через которую отправляется вся почта по умолчанию -  Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. и аккаунт на gmail ( Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. ) для отправки писем от учётной записи secretar@cmp.local. Всего же учётных записей в примере нам хватит трёх. user - обычный пользователь, отправка почту через аккаунт по умолчанию, secretar обычный пользователь отправка почты через gmail, director отправка почты через аккаунт по умолчанию.

Для создания учётной записи переходим по адресу https://ip-нашего-iredmail/iredadmin и вводим логин postmaster@cmp.local, напоминаю что cmp.local это домен в моём примере, у вас может быть что-то другое, и пароль который мы указывали для учетной записи postmaster во время установки.

 iredadmin login

Жмём +add и выбираем user

 iredadmin add user

В этом окне заполняем поля mail address, password жмём кнопку add, аналогично создаём оставшихся пользователей. Для вашего удобства есть поле в котором уже сгенерирован пароль, можно его скопировать и вставить для пользователя, не забыть правда потом записать ;)

 iredadmin add user

Проверим как проходит внутренняя почта, на этом этапе уже должно всё работать, зайти в почтовый ящик можно по адресу https://ip-нашего-iredmail/

Чтобы посмотреть лог набираем в терминале

tail -n 100 /var/log/mail.log

как видим всё в порядке

 log-1

Для пересылки почты через аккаунты других почтовых серверов надо использовать параметр relayhost = в main.cf. Информацию о том как это сделать я нашёл здесь и здесь.

Итак, снова терминал, нам необходим для начала отредактировать main.cf

sudo nano /etc/postfix/main.cf

начиная со строки relayhost = добавляем следующее содержимое

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

Выглядит это примерно так

main.cf relay_host

[smtp.yandex.ru]:587 это адрес smtp сервера по умолчанию и порт, как вы наверное уже сами догадались, остальные параметры отвечают за подключение с помощью starttls

теперь нам необходим создать и отредактировать ещё пару файлов это/etc/postfix/saslpass и /etc/postfix/relayhost_map в первом хранятся логины и пароли к аккаунтам, а во втором карта пересылки.

sudo nano /etc/postfix/saslpass

добавляем примерно следующее (для сохранения файла используем сочетание Ctrl+O, для закрытия Ctrl+X)

secretar@cmp.local 
 Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
 :passW0!rd
[smtp.yandex.ru]:587 testo.testovitch:passW08rd

[smtp.yandex.ru]:587 testo.testovitch:passW08rd - здесь мы указываем дефолтную учётную запись для отправки, опять-таки указывается сервер, порт, логин и пароль.

secretar@cmp.local  Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. :passW0!rd - здесь мы указываем что для отправки почты с адреса secretrar@cmp.local надо использовать другие логин и пароль (те что используются для gmail)

После того как мы внесли изменения в /etc/postfix/saslpass из него надо сделать файл db который понимает postfix

sudo postmap hash:/etc/postfix/saslpass

Переходим к редактированию /etc/postfix/relayhost_map

sudo nano /etc/postfix/relayhost_map

Содержимое следующее

secretar@cmp.local [smtp.gmail.com]:587

как вы наверное уже поняли, в этом файле указывается что для юзера secretar@cmp.local необходимо использовать smtp сервер smtp.gmail.com и порт 587.

повторяем процедуру postmap

sudo postmap hash:/etc/postfix/relayhost_map

делаем reload для postfix

sudo service postfix reload

Пробуем отправить письмо наружу, из веб интерфейса письмо уходит, но до адресата не доходит смотрим лог

tail -n 100 /var/log/mail.log

и видим ошибку

log iredmail

553 5.7.1 Sender address rejected: not owned by auth user. (in reply to MAIL FROM command)

Эта ошибка связана с тем что при отправке письма postfix использует логин и пароль который мы ему указали, но поле mail from оставляет от локального юзера, естественно что другой почтовый сервер отказывается такое письмо отправлять. Чтобы исправить это надо использовать параметр smtp_generic_maps снова в main.cf

sudo nano /etc/postfix/main.cf

добавляем следующую строчку (я добавлял сразу после sender_dependent_relayhost_maps = hash:/etc/postfix/relayhost_map)

smtp_generic_maps = hash:/etc/postfix/generic

создаём сам файл 

sudo nano /etc/postfix/generic

и вписываем в него 

@cmp.local 
 Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
 
secretar@cmp.local Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.

сторочка @cmp.local Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. что все адреса @cmp.local поле from будет подменяться на  Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
а secretar@cmp.local Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. означает что письма отправленные от secretar@cmp.local будут отправляться от  Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра.
Не забываем postmap и reload

sudo postmap hash:/etc/postfix/generic
sudo service postfix reload

Пробуем отправить письмо. Всё отправляется видим что адреса меняются.

 log3

Пробуем отправить письмо на внутренний ящик и ... оно не доходит, смотрим лог.

 log4

и понимаем что при использовании в postfix параметра smtp_generic_maps подмена поля from происходит и для локальных (внутренних) адресов, более того postfix после этого пытается письмо отправить непонятно куда. Это очень странно потому что в документации к postfix явно указано что этот параметр применяется только для писем отправляемых за пределы почтового сервера.

Поиск в интернете даёт подсказку что проблема связана с amavis, но решение которое при этом предлагается мне не очень понравилось. Дальнейший поиск подсказывает что можно изменять адрес после контентной фильтрации, подсказку нашёл здесь

Итак для того что бы письма внутри домена нормально ходили, а у исходящих за пределы домена подменялось поле From и при этом работала проверка на вирусы по всем письмам надо добавить в секцию amavis в файле master.cf строчку -o smtp_generic_maps=, делеам

sudo nano /etc/postfix/master.cf

выглядит файл после изменений примерно так

 iredmail master.cf

Сохраняем файл, делаем обновление параметров.

sudo service postfix reload

Проверяем, всё работает. Переходим к последнему пункту.

Так же есть нюанс при работе с gmail

 5.5.1 Authentication Required 

Надо вот здесь, предварительно авторизировавшись выставить в положение включить - подробнее здесь.

Настройка дублирования исходящих писем.

Итак, теперь мы делаем так что бы письма отправленные со всех ящиков кроме директора дублировались в почту директору. Для этого нам и потребуется phpmyadmin

Для входа в phpmyadmin используем адрес http://ip-нашего-iredmail/phpmyadmin логин root пароль от учётной записи root для mysql

phpmyadmin web logon

Слева раскрываем базу vmail и таблицу sender_bcc_user

phpmyadmin web browse base

Жмём "вставить" и заполняем поля username - почтовый ящик с которого будут дублироваться исходящие письма, bcc_address - почтовый ящик на который будут дублироваться исходящие письма, domain - наш почтовый домен. Жмём ок.

phpmyadmin web insert

 

Проверяем. Всё должно работать. Для каждого пользователя у которого вы хотите дублировать почту необходимо будет сделать запись.

Как и прежде если возникли вопросы или замечания можно воспользоваться формой для комментариев ниже, отвечаю по возможности, но почти всегда ;)

Zo2 Framework Settings

Select one of sample color schemes

Google Font

Menu Font
Body Font
Heading Font

Body

Background Color
Text Color
Link Color
Background Image

Header Wrapper

Background Color
Modules Title
Text Color
Link Color
Background Image
Background Color
Modules Title
Text Color
Link Color
Background Image
 
Top of Page