Почтовый сервер своими руками

E-mailЭлектронная почта зародилась еще тогда, когда не было Интернета, и сразу же вошла в жизнь людей как неотъемлемый атрибут современности. Сейчас послать письмо по e-mail сможет любой школьник, однако далеко не любой сможет настроить всю сложную систему, которая лежит в основе процесса отправки/получения сообщений. Обычному человеку или начинающему системному администратору может показаться, что электронная почта - это некий нерушимый монолит, одна или две программы принимающие и отправляющие сообщения. В самых простейших случаях так и есть, однако та почта, с которой большинство из нас сталкивается каждый день, является чем-то большим.

Наружные работы

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

apt-get install ssh

После этого подключаемся любым ssh-клиентом на 22 порт нашего серера, вводим имя и пароль администратора. Также рекомендуем установить Midnight Commander для упрощения работы с файлами и редактирования конфигурационных файлов.

apt-get install mc

Добавим остальные установочные диски в список доступных источников пакетов командой.

apt-cdrom

Выполняем эту команду для каждого диска. При желании можно воспользоваться сетевыми источниками пакетов и security updates с сайта Debian.

Для этого снова открываем и добавляем в него следующие строки

mcedit /etc/apt/sources.list:

deb https://security.debian.org/ etch/updates main contrib

deb-src https://security.debian.org/ etch/updates main contrib

Далее обновим список пакетов и саму систему.

apt-get update

apt-get upgrade

На этом все подготовительные мероприятия считаем законченными.

Postfix

Установим нужные для работы почтового сервера пакеты.

apt-get install postfix libsasl2 libsasl2-modules sasl2-bin cyrus-imapd-2.2 cyrus-pop3d-2.2 cyrus-admin-2.2

Во время первоначальной настройки postfix укажите конфигурацию для Интернет-сайта (Internet Site). На вопрос об имени почтового сервера-оставьте вариант по-умолчанию или укажите свой. В нашем случае это было mailserver.test.ru

Настроим сервер авторизации saslauthd на использование базы данных паролей sasldb2. Для этого отредактируем файл /etc/default/saslauthd:

mcedit /etc/default/saslauthd:

START=yes
MECHANISMS="sasldb"

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

/etc/init.d/saslauthd start

Сейчас проверим правильно ли он работает, но для начала необходимо добавить хотя бы одного пользователя.

mailserver:~# saslpasswd2 test

Password:

Again (for verification):

mailserver:~# sasldblistusers2

test@mailserver: userPassword

mailserver:~# testsaslauthd -u test -p test

Если в результате этих манипуляций вы получили сообщение "0: OK "Success.", значит все в порядке и можно продолжать. Если же авторизация не прошла - смотрите файл /var/log/auth.log и повторяйте, повторяйте и ещё раз повторяйте все шаги, пока не получится нужный результат.

У почтового сервера postfix есть одна особенность - после запуска он работает в chroot окружении, которое находится в папке /var/spool/postfix/.

mailserver:~# ls -al /var/spool/postfix/

total 76

drwxr-xr-x 19 root    root     4096 Feb 12 16:27 .

drwxr-xr-x  8 root    root     4096 Feb 12 16:26 ..

drwx------  2 postfix root     4096 Feb 12 16:27 active

drwx------  2 postfix root     4096 Feb 12 16:27 bounce

drwx------  2 postfix root s    4096 Feb 12 16:27 corrupt

drwx------  2 postfix root     4096 Feb 12 16:27 defer

drwx------  2 postfix root     4096 Feb 12 16:27 deferred

drwxr-xr-x  2 root    root     4096 Feb 12 16:27 etc

drwx------  2 postfix root     4096 Feb 12 16:27 flush

drwx------  2 postfix root     4096 Feb 12 16:27 hold

drwx------  2 postfix root     4096 Feb 12 16:27 incoming

drwxr-xr-x  2 root    root     4096 Feb 12 16:27 lib

drwx-wx--T  2 postfix postdrop 4096 Feb 12 16:27 maildrop

drwxr-xr-x  2 postfix root     4096 Feb 12 16:27 pid

drwx------  2 postfix root     4096 Feb 12 16:27 private

drwx--s---  2 postfix postdrop 4096 Feb 12 16:27 public

drwx------  2 postfix root     4096 Feb 12 16:27 saved

drwx------  2 postfix root     4096 Feb 12 16:27 trace

drwxr-xr-x  3 root    root     4096 Feb 12 16:25 usr

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

Учитывая то, что для авторизации пользователей postfix будет использоваться демон saslauthd, нам нужно перенести его socket в рабочую директорию нашего сервера /var/spool/postfix/. Самый простой способ сделать это заключается в монтировании в нужную папку директории с уже созданным сокетом демона saslauthd.

Делается это редактированием файла /etc/fstab.

mcedit /etc/fstab:

/var/run/saslauthd    /var/spool/postfix/var/run/saslauthd    none      rw,bind    0 0

Не забудьте поставить [Enter] после последней строки. Также нужно не забыть создать папку, куда мы смонтируем сокет демона авторизации.

mkdir -p /var/spool/postfix/var/run/saslauthdmount /var/run/saslauthd

Сейчас сконфигурируем postfix для использования sasl авторизации.

mcedit /etc/postfix/main.cf:

smtpd_sasl_local_domain =

smtpd_sasl_auth_enable = yes

smtpd_sasl_security_options = noanonymous

broken_sasl_auth_clients = yes

smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination

smtpd_sasl_authenticated_header = yes

smtpd_sasl_application_name = smtpd

Существует и упрощенный вариант редактирования этого файла командой postconf –e "smtpd_sasl_auth_enable = yes" и т.д.Сейчас мы запретим отсылать почту через наш SMTP шлюз без авторизации. Для этого создадим файл /etc/postfix/sasl/smtpd.conf со следующим содержимым.

pwcheck_method: saslauthd
mech_list: PLAIN LOGIN

Перезапустим наш postfix сервер и внимательно просмотрим следующие файлы на предмет ошибок:

  • /var/log/mail.err
  • /var/log/mail.info
  • /var/log/mail.warn
  • /var/log/mail.log.

/etc/init.d/postfix restart

tail /var/log/mail.err

tail /var/log/mail.info

tail /var/log/mail.warn

tail /var/log/mail.log

Если все чисто, сухо и гладко - обратимся к утитиле telnet, для того, чтобы подключиться к нашему серверу.

mailserver:~# telnet localhost 25

Trying 127.0.0.1...

Connected to localhost.

Escape character is '^]'.

220 mailserver.test.ru ESMTP Postfix (Debian/GNU)

EHLO https://xdrv.ru/

250-mailserver.test.ru

250-PIPELINING

250-SIZE 10240000

250-VRFY250-ETRN

250-STARTTLS

250-AUTH LOGIN PLAIN

250-AUTH=LOGIN PLAIN

250-ENHANCEDSTATUSCODES

250-8BITMIME250 DSNQUIT

Connection closed by foreign host.

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

Для того, чтобы "подружить" saslauthd и postfix необходимо выполнить следующее:

adduser postfix sasl

Оговоримся, что мы не будем вытанцовывать с бубном для настройки шифрования. Если кому-то это будет интересно, то найти необходимую информацию не составит большого труда и экспериментировать на уже работающей базе будет проще. Сейчас же продолжим наше руководство и расскажем как предоставить IMAP4/POP3 доступ к почтовому ящику.

Cyrus-imapd

Cyrus - это мощный набор POP3/NNTP/IMAP и некоторых других демонов для создания полноценных сервисов работы с электронной почтой. Официальный сайт проекта находится здесь: https://cyrusimap.web.cmu.edu/. В нашем случае cyrus будет заниматься получением почты от postfix, раскладыванием ее по папкам и предоставлению к ней доступа пользователям. Отредактируем файл /etc/imapd.conf.

mcedit /etc/imapd.conf :

admins: cyrus

allowplaintext: yes

sasl_mech_list: PLAIN

sasl_pwcheck_method: saslauthd auxprop

sasl_auxprop_plugin: sasldb

Обратите внимание, что cyrus так же, как и saslauthd, придется взаимодействовать с postfix, поэтому их нужно сделать доступными друг другу. Воспользуемся уже известным механизмом:

mcedit /etc/fstab :

/var/run/cyrus  /var/spool/postfix/var/run/cyrus        none    rw,bind 0 0

Не забываем создать папки для cyrus.

mkdir -p /var/spool/postfix/var/run/saslauthd
mkdir -p /var/spool/postfix/var/run/cyrus
mount /var/spool/postfix/var/run/saslauthd
mount /var/spool/postfix/var/run/cyrus

И выполнить команду:

mount /var/run/cyrus

Сейчас предоставим возможность cyrus забирать почту у postfix. Отредактируем файл /etc/postfix/main.cf:

mailbox_transport = lmtp:unix:/var/run/cyrus/socket/lmtp

Добавим почтовый сервер в группу lmtp:

addgroup lmtp
adduser postfix lmtp

И выполним следующее:

dpkg-statoverride --remove /var/run/cyrus/socket

dpkg-statoverride --force --update --add cyrus lmtp 750 /var/run/cyrus/socket

Добавим еще одну опцию:

local_recipient_maps =

В случае с pam-авторизацией по логинам и паролям системных пользователей все бы работало без проблем. Но когда имена и пароли хранятся в формате, отличном от системного, необходимо указать данную опцию. Она означает "принимать письма для любого адресата". Это, конечно, не лучший выход, однако лучшего пока найти не удалось.Добавим пользователя cyrus в нашу базу учетных записей:

saslpasswd2 -c cyrus

Введите пароль, когда вас об этом попросят, и перезапустим наши демоны:

/etc/init.d/postfix start

/etc/init.d/cyrus2.2 restart

/etc/init.d/saslauthd restart

Если вы без ошибок сделаете все, что было описано выше, то теоретически к этому моменту уже можете принимать и отправлять письма, создавать и удалять папки на IMAP-сервере, устанавливать квоты и права доступа на папки средствами утилиты cyradm.К примеру, можно создать скрипт, который будет создавать пользователю папки Sent, Trash, Drafts, Spam средствами утилиты cyradm.Так как все дальнейшие действия по настройке в целях тестирования потребуют отсылать и принимать почту, приведем краткую инструкцию по созданию почтовых аккаунтов:

saslpasswd2 –c <имя пользователя>

cyradm –user cyrus localhost

localhost>cm user.<имя пользователя>

localhost>cm user.<имя пользователя>.INBOX

localhost>cm user.<имя пользователя>.Sent

localhost>cm user.<имя пользователя>.Draft

localhost>cm user.<имя пользователя>.Trash 

При желании, можно задать квоты на количество места в папках и другие параметры, с которыми можно познакомиться набрав "?" или "help" в утилите cyradm.В настоящий момент мы имеем следующую связку:

Содержание Далее
Одной страницей
Назад
Стр. 1. Установка
Стр. 2. Наружные работы, Postfix
Стр. 3. Защищайтесь, сударь; послесловие
Комментарии
Добавить комментарий

Введите имя:
Войти от:
или
Ваш комментарий:


Введите код:

E-mail (не обязательно)
Адрес электронной почты не предназначен к показу и будет использован только для уведомлений об ответах


Алекс#10 0
Классная статья, однако нашел ее поздно, купил VPS для почтовика одной конторыв с поддержкой админов
Ответить 
Vladimir#20 0
Привет, подскажите я настроил домашний хостинг но форма обратной связи не роботает Надо устанавлевать mail server?
Ответить 
дархан#30 0
Добрый день.

Будет ли это же руководство для windows server?

Ответить 
 
Александр#40 0
Есть вопросы? В windows server есть встроенный почтовый сервер. Вопрос под какие задачи необходим он. Из неплохих Exchange (Microsoft), MDaemon, IMail, Kerio Mail Server
Ответить 
 
Дархан#50 0
Да...

У нас windows server 2008.

Установили почтовый сервер hmailserver и вебпочту rouncubemail.

Нам почтовый сервер нужен для сайта, получать письма, делать рассылку (в PHP коде) и тд.



Сейчас не работает отправка писем на внешние адреса. А получение писем с разных почтовых систем работает.

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



Your message did not reach some or all of the intended recipients.



Sent: Thu, 14 Mar 2013 17:52:40 +0300

Subject: Re: SSALA:SD



The following recipient(s) could not be reached:



АДРЕСС@mail.ru

Error Type: SMTP

Remote server (2a00:1148:1:1322::a1) issued an error.

hMailServer sent:

Remote server replied: 535 Incorrect authentication data: domain not found for

hMailServer





В чем могут быть причины?

Ответить 
 
Александр#60 0
Проблема явная с авторизацией. Начиная с того может быть закрыт порт и заканчивая тем, то ошибки в конфигурации. Какие настройки в SMTP Relay?

Также прежде всего лог файлы надо смотреть (каталог Logs в папке установки hMailServer).

P.S. Лучше тему завести на форуме

Ответить 
 
Гость#70 0
В настройках SMTP:в поле localhost name: vegatunes.com

В полях server requires authen... указаны логин (email@vegatunes.com) и пароль.

а в поле "remote host name" был указан: smtp.mail.ru порт 25

Думаю из-за этого. Исправил "remote host name" на vegatunes.com



Теперь письмо о том что не отправлено не получаю. Пишет успешно отправлено, но письма на внеш. адрес не приходят все равно.

Вот отрывок с лог файла:

"SMTPD" 1696 356 "2013-04-07 20:58:56.772" "176.99.4.153" "SENT: 235 authenticated."

"SMTPD" 1644 356 "2013-04-07 20:58:56.772" "176.99.4.153" "RECEIVED: MAIL FROM:"

"SMTPD" 1644 356 "2013-04-07 20:58:56.772" "176.99.4.153" "SENT: 250 OK"

"SMTPD" 1664 356 "2013-04-07 20:58:56.788" "176.99.4.153" "RECEIVED: RCPT TO:"

"SMTPD" 1664 356 "2013-04-07 20:58:56.788" "176.99.4.153" "SENT: 250 OK"

"SMTPD" 1696 356 "2013-04-07 20:58:56.788" "176.99.4.153" "RECEIVED: DATA"

"SMTPD" 1696 356 "2013-04-07 20:58:56.788" "176.99.4.153" "SENT: 354 OK, send."

"DEBUG" 1508 "2013-04-07 20:58:56.788" "Saving message: C:inetpubhMailServerData {3E6D4B9B-ACFE-4D51-B6C4-91C1FB62BD97}.eml"

"DEBUG" 1508 "2013-04-07 20:58:56.803" "Requesting SMTPDeliveryManager to start message delivery"

"SMTPD" 1508 356 "2013-04-07 20:58:56.803" "176.99.4.153" "SENT: 250 Queued (0.000 seconds)"

"DEBUG" 1600 "2013-04-07 20:58:56.803" "Delivering message..."

"APPLICATION" 1600 "2013-04-07 20:58:56.803" "SMTPDeliverer - Message 74: Delivering message from БЛАБЛА@vegatunes.com to darrios@mail.ru. File: C:inetpubhMailServerData {3E6D4B9B-ACFE-4D51-B6C4-91C1FB62BD97}.eml"

"DEBUG" 1600 "2013-04-07 20:58:56.803" "Applying rules"

"DEBUG" 1600 "2013-04-07 20:58:56.803" "Performing local delivery"

"DEBUG" 1600 "2013-04-07 20:58:56.803" "Local delivery completed"

"DEBUG" 1664 "2013-04-07 20:58:56.819" "Creating session 357"

"DEBUG" 1680 "2013-04-07 20:58:56.819" "Saving message: C:inetpubhMailServerDatavegatunes.com 7777788 {88394134-1C23-43C0-A4E2-F6E418422A57}.eml"

"SMTPD" 1652 356 "2013-04-07 20:58:56.819" "176.99.4.153" "RECEIVED: QUIT"

"SMTPD" 1652 356 "2013-04-07 20:58:56.819" "176.99.4.153" "SENT: 221 goodbye"

"DEBUG" 1684 "2013-04-07 20:58:56.819" "Closing TCP/IP socket"

"DEBUG" 1684 "2013-04-07 20:58:56.819" "Ending session 356"

"DEBUG" 1696 "2013-04-07 20:58:56.819" "Closing TCP/IP socket"

"DEBUG" 1696 "2013-04-07 20:58:56.819" "Ending session 357"

"DEBUG" 1600 "2013-04-07 20:58:56.819" "Performing external delivery"

Ответить 
 
Гость#80 1
В hmailserver есть диагностика. Покажи. что показывает.
Ответить 
 
darkhan#90 0
все поля горят зеленым, то есть не выдает никакой ошибки.

Подробнее о проблеме я написал на форме

Буду рад помощи.

Спасибо!

Ответить 
 
Вася#100 1
А ваш провайдер не блокирует 25 порт на отправку данных? Это может быть причиной данной проблемы. Или что-то блокирует твой relay на стороне провайдера.
Ответить 
 
Darkhan#110 0
Думаю нет. Мы арендуем выделенный сервер. А как можно проверить блокируется или нет?
Ответить 

Смартфоны со съемными аккумуляторами 2018-2019 годов
14 смартфонов со съемным аккумулятором и один телефон
15 июля 2019 / 3
Смартфон с каплевидным вырезом - Samsung Galaxy A30
Недорогой современный смартфон без моноброви
22 апреля 2019 / 3
Android 10. Первый взгляд
Что будет в «юбилейной» ОС Google, которая выйдет в 2019 года
29 июля 2018 / 1
Смартфон Huawei с хорошей камерой - Huawei P20
Эффектный флагман со своим лицом
22 июля 2018 / 4
 
 
Анонс Windows 11 состоится 24 июня
Продажи iPhone 12 mini не оправдали ожидания
Будущий iPad Pro получит стеклянный корпус
Sun Valley может выйти уже осенью 2021 года
Samsung приступила к лицензированию Ultra Thin Glass (UTG)
Компания фокусируется на бытовой технике и электромобилях
 
 

Опрос

Какими картами вы пользуетесь?
или оставить собственный вариант в комментариях (14)





Статистика