Как настроить почтовый сервер
Перейти к содержимому

Как настроить почтовый сервер

  • автор:

Почтовый сервер на Linux

Как наладить работу почтового сервера, умеющего принимать и отправлять электронную корреспонденцию, бороться со спамом, взаимодействовать с клиентами? На самом деле, всё довольно просто.

Сегодня поговорим о почтовых серверах на Linux. Мы расскажем о том, как настроить сервер, о широко распространённом в интернете протоколе SMTP, а также о других протоколах, таких, как POP и IMAP. В итоге вы окажетесь обладателем полноценной системы для работы с электронной почтой.

Начнём с SMTP-сервера на Linux

SMTP-сервер

Протокол SMTP (Simple Mail Transfer Protocol) определяет правила пересылки почты между компьютерами, при этом, он не регламентирует правила хранения или визуализации сообщений. Это системно-независимый протокол, то есть, отправитель и получатель почты могут иметь различные ОС.

SMTP требует лишь чтобы сервер был способен отправлять обычный ASCII-текст другому серверу, используя порт 25, который является стандартным портом SMTP.

Сегодня в большинство дистрибутивов Linux встроены две наиболее распространённых реализации SMTP: sendmail и postfix.

Sendmail — это популярный почтовый сервер с открытым кодом, используемый во многих дистрибутивах Linux. К его минусам можно отнести несколько усложнённую архитектуру и недостаточно высокий уровень защиты.

Postfix — система немного более продвинутая, при разработке этого почтового сервера особое внимание было уделено вопросам безопасности.

Компоненты почтовой службы

Типичная почтовая служба состоит из трёх основных компонентов:

Почтовый клиент, который ещё называют почтовым агентом (Mail User Agent, MUA). Именно с ним взаимодействует пользователь, например — это почтовые клиенты Thunderbird или Microsoft Outlook. Они позволяют пользователю читать почту и писать электронные письма.

Почтовый сервер, или агент пересылки сообщений (Mail Transport Agent, MTA). Этот компонент ответственен за перемещение электронной почты между системами, этим занимаются, например, Sendmail и Postfix.

Агент доставки электронной почты (Mail Delivery Agent, MDA). Этот компонент ответственен за распределение полученных сообщений по почтовым ящикам пользователей. Например, это Postfix-maildrop и Procmail.

Установка почтового сервера

Для настройки нашего сервера был выбран пакет Postfix. Это — популярный среди системных администраторов выбор, стандартный почтовый сервер в большинстве современных дистрибутивов Linux.

Начнём, проверив, установлен ли Postfix в системе:

$ rpm -qa | grep postfix

Если обнаружить Postfix не удалось, установить его, например, в дистрибутивах, основанных на Red Hat, можно с помощью такой команды:

$ dnf -y install postfix

Затем запустим службу postfix и организуем её автозапуск при загрузке системы:

$ systemctl start postfix $ systemctl enable postfix

В дистрибутивах, основанных на Debian, вроде Ubuntu, установить Postfix можно так:

$ apt-get -y install postfix

В ходе установки будет предложено выбрать конфигурацию сервера. Среди доступных четырёх вариантов (No configuration, Internet site, Internet with smarthost, Satellite system and Local only), мы выберем No configuration, что приведёт к созданию необходимых Postfix учётных записей пользователя и группы.

Настройка сервера

После установки почтового сервера Postfix, его нужно настроить. Большинство конфигурационных файлов находятся в директории /etc/postfix/.

Главный конфигурационный файл Postfix можно найти по адресу /etc/postfix/main.cf. Здесь имеется множество параметров, рассмотрим самые важные.

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

Типичные примеры имён хостов почтовых серверов — mail.example.com и smtp.example.com.

Настраивают этот параметр так:

myhostname = mail.example.com

Эта настройка позволяет указать почтовый домен, обслуживанием которого занимается сервер, например — example.com:

mydomain = example.com

Этот параметр позволяет указать доменное имя, используемое в почте, отправленной с сервера. Присвоим ему значение $mydomain:

myorigin = $mydomain

В настройках можно ссылаться на параметры, добавляя знак $ перед именем переменной.

mydestination

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

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

mydestination = $myhostname, localhost.$mydomain, $mydomain, mail.$mydomain, www.$mydomain

mail_spool_directory

Почтовый сервер Postfix может использовать два режима доставки почты:

  • Непосредственно в почтовый ящик пользователя.
  • В центральную директорию очередей, при этом почта попадает в папку /var/spool/mail, где имеется файл для каждого пользователя.
mail_spool_directory = /var/spool/mail

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

Обычно разрешают передачу почты только от локальных клиентских компьютеров. В противном случае вашим сервером могут заинтересоваться спамеры.

Если неправильно настроить параметр mynetworks, спамеры вполне смогут воспользоваться сервером как ретранслятором почты. Это очень быстро приведёт к тому, что какая-нибудь система борьбы со спамом поместит его в один из чёрных списков, вроде DNS Blacklist (DNSBL), или Realtime Blackhole List (RBL). Как только сервер попадёт в подобный список, очень немногие смогут получить письма, отправленные с его помощью.

Вот как может выглядеть настройка этого параметра:

mynetworks = 127.0.0.0/8, 192.168.1.0/24

smtpd_banner

Эта переменная позволяет задать ответ, который возвращает сервер при подключении клиентов.

Лучше всего поменять это значение так, чтобы оно не указывало на то, какой именно используется почтовый сервер.

inet_protocols

Эта переменная позволяет задавать версию IP, которую будет использовать Postfix при установлении соединений.

inet_protocols = ipv4

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

$ systemctl reload postfix

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

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

$ postfix check

С помощью этого средства можно найти строку, в которой допущена ошибка, и исправить её.

Проверка очереди сообщений

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

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

$ mailq

Она выведет сообщения, находящиеся в очереди. Если очередь переполнена и на отправку сообщения уходит по несколько часов, можно инициировать процесс отправки сообщений такой командой:

$ postfix flush

Если теперь проверить очередь, она должна оказаться пустой.

Тестирование почтового сервера

После настройки сервера на Postfix, его надо протестировать. Первый шаг в тестировании — использование локального почтового клиента, вроде mailx или mail (это — символьная ссылка на mailx).

Попробуйте отправить письмо кому-нибудь, чей адрес обслуживается на том же сервере, а если это сработает — отправьте письмо на адрес, который находится где-нибудь ещё.

$ echo "This is message body" | mailx -s "This is Subject" -r "likegeeks" -a /path/to/attachment someone@example.com

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

Если вы столкнётесь с проблемами — проверьте логи. В дистрибутивах, основанных на Red Hat, то, что вам надо, можно найти по адресу /var/log/maillog. В Debian-дистрибутивах нужный файл можно найти здесь: /var/log/mail.log, или же по пути, заданному в настройках rsyslogd. Вот, если нужно, материал о логировании в Linux, и о том, как настраивать rsyslogd.

Если проблемы всё ещё не решены, попытайтесь проверить настройки DNS, взгляните на MX-записи, используя сетевые команды Linux.

Борьба со спамом

Существует немало решений для выявления среди почтовых сообщений нежелательных писем — спама. Одно из лучших — проект с открытым исходным кодом SpamAssassin.
Установить его можно так:

$ dnf -y install spamassassin

Затем надо запустить соответствующую службу и добавить её в автозагрузку:

$ systemctl start spamassassin $ systemctl enable spamassassin

После установки SpamAssassin, взгляните на его настройки в файле /etc/mail/spamassassin/local.cf.

SpamAssassin умеет отличать обычные письма от спама, основываясь на результатах исследования корреспонденции с помощью различных скриптов. Результаты проверок оцениваются в баллах.

Чем выше итоговая оценка письма — тем выше и вероятность того, что оно является спамом.

В конфигурационном файле параметр required_hits 5 указывает на то, что SpamAssassin пометит сообщение как спам, если его рейтинг составляет 5 или выше.

Параметр report_safe принимает значения 0, 1, или 2. Установка его в 0 означает, что письма, помеченные как спам, пересылаются в исходном виде, но их заголовок модифицируется с указанием на то, что они являются спамом.

Если этот параметр установлен в значение 1 или 2, SpamAssassin сгенерирует отчёт и отправит его получателю.

Разница между значениями 1 и 2 заключается в том, что в первом случае спам-сообщение будет закодировано в формате message/rfc822, а во втором — в формате text/plain.

Кодирование text/plain безопаснее, так как некоторые почтовые клиенты исполняют сообщения формата message/rfc822, что при определённых условиях может привести к заражению клиентского компьютера вирусом.

После установки и настройки SpamAssassin, нужно интегрировать его с Postfix. Пожалуй, легче всего это сделать с помощью использования procmail.

Создадим файл /etc/procmailrc и добавим в него следующее:

:0 hbfw | /usr/bin/spamc 

Затем отредактируем файл настроек Postfix — /etc/postfix/main.cf, задав параметр mailbox_command следующим образом:

mailbox_command = /usr/bin/procmail

И, наконец, перезапустим службы Postfix и SpamAssassin:

$ systemctl restart postfix $ systemctl restart spamassassin

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

К счастью, сообщения, прежде чем они достигнут почтового сервера на Postfix, можно фильтровать, используя Realtime Blackhole Lists (RBLs). Это снизит нагрузку на почтовый сервер и поможет сохранить его в чистоте.

Откройте конфигурационный файл Postfix /etc/postfix/main.cf, измените параметр smtpd_recipient_restrictions и настройте другие параметры следующим образом:

strict_rfc821_envelopes = yes relay_domains_reject_code = 554 unknown_address_reject_code = 554 unknown_client_reject_code = 554 unknown_hostname_reject_code = 554 unknown_local_recipient_reject_code = 554 unknown_relay_recipient_reject_code = 554 unverified_recipient_reject_code = 554 smtpd_recipient_restrictions = reject_invalid_hostname, reject_unknown_recipient_domain, reject_unauth_pipelining, permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, reject_rbl_client dsn.rfc-ignorant.org, reject_rbl_client dul.dnsbl.sorbs.net, reject_rbl_client list.dsbl.org, reject_rbl_client sbl-xbl.spamhaus.org, reject_rbl_client bl.spamcop.net, reject_rbl_client dnsbl.sorbs.net, permit 

Затем перезагрузите сервер Postfix:

$ systemctl restart postfix

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

Защита SMTP-соединения

Лучше всего передавать SMTP-трафик по TLS для защиты его от атаки через посредника.
Для начала нужно сгенерировать сертификат и ключ с использованием команды openssl:

$ openssl genrsa -des3 -out mail.key $ openssl req -new -key mail.key -out mail.csr $ cp mail.key mail.key.original $ openssl rsa -in mail.key.original -out mail_secure.key $ openssl x509 -req -days 365 -in mail.csr -signkey mail_secure.key -out mail_secure.crt $ cp mail_secure.crt /etc/postfix/ $ cp mail_secure.key /etc/postfix/

Затем надо добавить в файл настроек Postfix /etc/postfix/main.cf следующее:

smtpd_use_tls = yes smtpd_tls_cert_file = /etc/postfix/mail_secure.crt smtpd_tls_key_file = /etc/postfix/mail_secure.key smtp_tls_security_level = may

И, наконец, нужно перезагрузить службу Postfix:

$ systemctl restart postfix

Теперь, при подключении клиента к серверу, нужно выбрать TLS. Тут вы, при первой отправке почты после изменении настроек, увидите предупреждение, так как сертификат не подписан.

Основы протоколов POP3 и IMAP

Итак, мы наладили процесс отправки и получения электронных писем по SMTP, но на этом организация полноценной почтовой службы не заканчивается. Рассмотрим следующие ситуации:

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

Сильнее всего распространены два популярных протокола доступа к почте — POP (Post Office Protocol), и IMAP (Internet Message Access Protocol).

В основе POP лежит очень простая идея. Центральный почтовый сервер на Linux всё время подключён к интернету, он получает и сохраняет письма для всех пользователей. Все полученные письма остаются в очереди на сервере до тех пор, пока пользователь не подключится к нему по протоколу POP и не загрузит письма.

Когда пользователь хочет отправить письмо, почтовый клиент обычно передаёт его через центральный сервер по SMTP.

Обратите внимание на то, что SMTP-сервер и POP-сервер могут без проблем работать на одной и той же машине. В наши дни это — обычная практика.

Возможности, вроде хранения исходных экземпляров писем пользователей на сервере с хранением на клиенте лишь кэшированных копий, в POP отсутствуют. Это привело к разработке протокола IMAP.

Используя IMAP, сервер будет поддерживать три режима доступа к почте:

  • Онлайн-режим похож на прямой доступ к файловой системе на почтовом сервере.
  • Оффлайн-режим похож на то, как работает POP, когда клиент отключается от сети после получения своих писем. В этом режиме сервер обычно не хранит копии писем.
  • Автономный режим позволяет пользователям хранить кэшированные копии своих писем, а сервер так же хранит копии этих писем.

Сервера POP3, POP3S, IMAP, и IMAPS слушают, соответственно, порты 110, 995, 143, и 993.

Установка Dovecot

Большинство дистрибутивов Linux содержат предустановленный Dovecot, однако, его можно установить и самостоятельно. В системах, основанных на Red Hat, это делается так:

$ dnf -y install dovecot

В системах, основанных на Debian, функционал IMAP и POP3 предоставляются в двух разных пакетах:

$ apt-get -y install dovecot-imapd dovecot-pop3d

Тут вам предложат создать самозаверенный сертификат для работы с IMAP и POP3 по SSL/TLS. Ответьте на вопрос yes и, при появлении соответствующего запроса, введите имя хоста вашей системы.

Затем можно запустить соответствующую службу и добавить её в автозагрузку:

$ systemctl start dovecot $ systemctl enable dovecot

Настройка Dovecot

Главный файл настроек Dovecot расположен по адресу /etc/dovecot/dovecot.conf. В некоторых дистрибутивах Linux этот файл размещается в папке /etc/dovecot/conf.d/ и, для подключения файлов настроек, используется директива include.

Вот некоторые из параметров, используемых для настройки Dovecot.

protocols: протоколы, которые надо поддерживать.

protocols = imap pop3 lmtp

Здесь lmtp означает Local Mail Transfer Protocol. listen: IP-адрес, который будет слушать сервер.

listen = *, ::

Здесь звёздочка означает все интерфейсы IPv4, двойное двоеточие означает все интерфейсы IPv6.

userdb: база данных пользователей для аутентификации.

userdb

mail_location: это запись в файле /etc/dovecot/conf.d/10-mail.conf. Выглядит она так:

mail_location = mbox:~/mail:INBOX=/var/mail/%u

Dovecot поставляется со стандартными SSL-сертификатами и файлами ключей, которые используются в файле /etc/dovecot/conf.d/10-ssl.conf.

ssl_cert = 

Когда пользователь пытается подключиться к Dovecot, сервер покажет предупреждение, так как сертификаты не подписаны. Если нужно, подписанные сертификаты можно приобрести в подходящем центре сертификации.

Не забудьте открыть порты сервера Dovecot на файрволе.

$ iptables -A INPUT -p tcp --dport 110 -j ACCEPT $ iptables -A INPUT -p tcp --dport 995 -j ACCEPT $ iptables -A INPUT -p tcp --dport 143 -j ACCEPT $ iptables -A INPUT -p tcp --dport 993 -j ACCEPT

И про SMTP-порт не забудьте.

$ iptables -A INPUT -p tcp --dport 25 -j ACCEPT

Затем сохраните правила. Если хотите освежить в памяти особенности работы с iptables в Linux, взгляните на этот материал.
Или, если вы используете firewalld, можете поступить так:

$ firewall-cmd --permanent --add-port=110/tcp --add-port=995 $ firewall-cmd --permanent --add-port=143/tcp --add-port=993 $ firewall-cmd --reload

А, если что-то пошло не так, посмотрите лог-файлы /var/log/messages, /var/log/maillog, и /var/log/mail.log.

Итоги

Теперь вы можете настроить почтовую службу на своём Linux-сервере. Как видите, много времени это не займёт. Конечно, у рассмотренных здесь пакетов, вроде Postfix, уйма настроек, но если вы освоили описанную здесь последовательность действий и разобрались с основами, то всё, что вам понадобится, несложно будет выяснить из документации.

Уважаемые читатели! А как вы настраиваете почтовые сервера на Linux?

  • Блог компании RUVDS.com
  • Настройка Linux
  • Серверное администрирование

Установка и настройка почтового сервера

Почтовый сервер – это устройство, при помощи которого происходит доставка электронных сообщений от отправителя к получателю. Собственно, это и следует из его названия. В данной статье рассмотрим, как происходит установка и базовая настройка почтового сервера на VPS с операционной системой семейства Windows Server, а также на виртуальном сервере, работающем на Ubuntu 20.04.

Установка сервера SMTP на Windows Server

На серверах, работающих под управлением операционных систем Windows, для передачи почтовых сообщений часто используется протокол SMTP. В Windows Server служба SMTP является одним из компонентов операционной системы.

Для корректной отправки почтового сообщения от имени домена, к которому будет привязан сервер SMTP, нам необходимо иметь доменное имя. При этом в настройках домена должна быть указана A-запись, содержащая IP-адрес VPS. В нашем примере мы будем использовать имя домена my-domain.host .

Установку почтового сервера нужно будет начать именно с добавления необходимых компонентов. Для этого запустите Server Manager , перейдите Manage → Add Roles and Features .

Добавление ролей и компонентов - Установка и настройка почтового сервера

В открывшемся окне нажмите Next .

Мастер добавления ролей и компонентов - Установка и настройка почтового сервера

Далее выберите опцию Role-based or feature-based installation , после чего нажмите Next .

Выбор установки ролей и компонентов

В следующем окне укажите сервер, на который будет производиться установка новых компонентов, либо просто нажмите Next , если в вашем пуле серверов одна-единственная запись.

Выбор сервера

На следующем шаге активируйте строку Web Server (IIS) , после чего нажмите Add Features .

Добавление компонент веб-сервера (IIS)

Далее нажмите Next .

Выбор установки веб-сервера (IIS)

После чего отметьте строку SMTP Server и нажмите Add Features .

Добавление компонентов сервера SMTP

Выбор установки сервера SMTP

Далее ещё раз нажмите Next .

Роли веб-сервера (IIS)

В следующем окне снова нажмите Next .

Роли веб-сервера (IIS)

Для запуска установки выбранных компонентов нажмите Install .

Установка выбранных ролей и компонентов - Установка и настройка почтового сервера

Настройка сервера SMTP

На следующем этапе необходимо будет настроить сервер SMTP. Для чего в Server Manager перейдите Tools → Internet Information Services (IIS) 6.0 Manager .

Запуск диспетчера IIS - Установка и настройка почтового сервера

В открывшемся окне менеджера IIS раскройте ветку вашего сервера и на строке SMTP Virtual Server нажмите правую кнопку мыши, после чего перейдите в Properties .

Свойства сервера SMTP

Далее в строке IP address: необходимо выбрать IP-адрес вашего сервера и активировать опцию Enable logging .

Указание IP-адреса включение ведения журналов

Во вкладке Access нажмите кнопку Authentication.

Вкладка Доступ

В открывшемся окне активируйте опцию Anonymous access . Активация данной опции нужна, чтобы пользователи и приложения смогли бы использовать сервер SMTP анонимно. Позже можно будет настроить более безопасную аутентификацию, пока же нажмите OK .

Включение анонимного доступа

Далее в разделе Connection control нажмите кнопку Connection.

Настройка управления подключением

В окне Connection установите переключатель на Only the list below и при помощи кнопки Add. добавьте IP-адрес вашего VPS. После чего нажмите OK .

Разрешение доступа для IP-адреса вашего VPS

Точно такую же настройку необходимо проделать в разделе Relay restrictions . Для чего нажмите кнопку Relay. и добавьте IP-адрес вашего сервера установив переключатель в Only the list below .

Настройка ограничений ретрансляции

После чего перейдите во вкладку Delivery и нажмите Advanced.

Настройка доставки

Здесь в строку Fully-qualified domain name: необходимо внести имя вашего домена, в нашем примере это – my-domain.host .

Дополнительная настройка доставки

Для того, чтобы проверить корректность данной настройки, нажмите кнопку Check DNS .

Проверка корректности имени домена - Установка и настройка почтового сервера

Далее сохраните все внесённые в настройки изменения при помощи кнопки OK .

Также необходимо указать корректное имя домена в ветке Domains .

Редактирование имени домена - Установка и настройка почтового сервера

На следующем шаге нужно активировать функцию автоматического запуска сервера SMTP. Для этого запустите командную строку PowerShell и выполните следующие команды для запуска службы:

set-service smtpsvc -StartupType Automatic start-service smtpsvc

Чтобы убедиться, что служба запущена, необходимо выполнить ещё одну команду:

get-service smtpsvc

Вывод данной команды должен выглядеть примерно следующим образом:

Вывод команды get-service smtpsvc - Установка и настройка почтового сервера

Теперь там же, в командной строке PowerShell, при помощи следующей команды отправьте сообщение на свою электронную почту:

Send-MailMessage -SmtpServer my-domain.host -To your@email.address -From mail@my-domain.host -Subject "Message Subject" -Body "Message Body"
  • my-domain.host – имя домена, с которого будет производиться отправка сообщения;
  • your@email.address – адрес электронной почты, на который будет отправлено сообщение;
  • mail@my-domain.host – этот электронный адрес будет указан в сообщении как адрес отправителя;
  • Message Subject – тема письма;
  • Message Body – тело письма.

После чего проверьте свою почту, на которую должно прийти сообщение от вашего почтового сервера.

Установка и настройка Postfix на Ubuntu 20.04

Для операционной системы Ubuntu существует довольно популярный почтовый сервер – Postfix. Для установки Postfix мы будем использовать виртуальный сервер, работающий на Ubuntu 20.04. При этом на VPS должны быть произведены работы по первоначальной настройке, описанные в соответствующей статье нашего справочника.

Также, для работы Postfix нужен домен с привязанной A-записью, которой является IP-адрес вашего виртуального сервера.

Плюс ко всему, необходимо соотнести имя домена с именем сервера и его IP-адресом. Для этого запустите следующую команду:

$ sudo hostnamectl set-hostname ubuntu-server

Здесь, ubuntu-server – имя нашего сервера, вместо которого вы можете использовать своё.

Теперь при помощи текстового редактора откройте файл /etc/hosts :

$ sudo nano /etc/hosts

В данный файл добавьте строку:

XXX.XXX.XXX.XXX my-domain.host ubuntu-server

В данном случае:

  • XXX.XXX.XXX.XXX – IP-адрес вашего сервера;
  • my-domain.host – имя вашего домена;
  • ubuntu-server – имя вашего сервера.

Теперь запустите установку Postfix и почтового пакета mailutils :

$ sudo apt install postfix mailutils

В процессе установки система попросит вас выбрать тип конфигурации. Необходимо указать Internet Site :

Выбор типа конфигурации - Установка и настройка почтового сервера

Также установщик попросит согласиться с именем домена, в отношении которого производится настройка почтового сервера. В нашем случае это будет my-domain.host .

Подтверждение имени домена при установке Postfix

По окончании установки можно попробовать с нашего почтового сервера отправить тестовое сообщение. Команда для отправки сообщения выглядит следующим образом:

$ echo "Message Body" | mail -s "Message Subject" your@email.address

В данной команде:

  • Message Body – тело письма;
  • Message Subject – тема письма;
  • your@email.address – адрес электронной почты, на который будет отправлено сообщение.

Проверьте свой почтовый ящик (в нашем примере это – your@email.address ), на который должно прийти отправленное из Postfix сообщение.

Как настроить почтовый сервер на VPS с Linux

Есть много причин, чтобы настроить собственный почтовый сервер на VPS.

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

В этой инструкции вы найдете пошаговую инструкцию по установке почтового сервера на Ubuntu 20.04 с использованием распространенного MTA (агента доставки почты) – Postfix.

Postfix состоит из небольших, совместно работающих программ. Каждая осуществляет свои узкоспециализированные функции:

  • отправка сообщений
  • прием сообщений
  • локальная доставка
  • и осуществляют обмен с другими программами с помощью сокетов unix.

Настройка DNS

Для корректной работы почтового сервера, в DNS-зоне сервера должна быть настроена запись типа MX (Mail Exchange).

Кроме того, понадобится A (Anchor)-запись связывающая доменое имя сервера и его ip-адрес.

Эти настройки задаются в панели управления регистратора доменного имени (за исключением тех случаев, когда DNS-записями управляют ваши NS-сервера).

Вот пример настройки DNS-записей на примере регистратора reg.ru:

  • Перейдите reg.ru и войдите в личный кабинет
  • Перейдите в раздел “Мои домены и услуги”
  • Выберите домен, на котором нужно настроить A-запись и МХ-запись
  • В разделе “DNS-серверы и управление зоной” просмотрите настроенные записи
  • Если есть ранее настроенные MX-записи, удалите их нажав на крестик напротив записи
  • Добавьте запись A, которая будет указывать на ip-адрес вашего почтового сервера (например, A mail → )
  • Добавьте запись MX, которая будет указывать на имя вашего сервера (например, MX @ → mail.testdomain.ru. 10)

Здесь нужно обратить внимание, что

  • @ – указывает на ту доменную зону, для которой эта запись создается
  • Приоритет 10 – используется для приоритезации доставки, если почтовых серверов несколько.
    Для одного сервера, 10 – подходящее число для старта.

После сохранения изменений потребуется время, прежде чем обновленная информация о доменных записях распространится между другими DNS-серверами. Это может занять до 72 часов, хотя, как правило, изменения применяются за час-два.

Проверить правильно ли настроены и готовы ли записи можно командой:
dig -t a mail.testdomain.ru
dig -t mx mail.testdomain.ru

В ответ вы должны получить ответ с настроенными dns-записями от настроенного сервера DNS.

Так же потребуется добавить соответствующие записи в /etc/hosts
sudo nano /etc/hosts:

xxx.xxx.xxx.xxx mail.testdomain.ru mail

Установка Postfix

Зададим hostname и установим

  • postfix
  • dovecot и nginx (для получения сертификатов let’s encrypt)
  • wget (для установки certbot-auto,
  • nano (текстовый редактор)

Зададим hostname сервера соответственно указывающей на него в DNS A-записи:
sudo hostnamectl set-hostname mail.testdomain.ru

Запустим установку Postfix, и укажем DEBIAN_PRIORITY=low, что бы ответить на дополнительные запросы при установке:
sudo DEBIAN_PRIORITY=low apt install postfix

Программа задаст ряд вопросов, что бы сконфигурировать установку:

Установка Postfix — как настроить почтовый сервер на Linux

  • General type of mail configuration: Internet site (Указываем режим, когда почта будет отправлятся и приниматься через SMTP)
  • System mail name: testdomain.ru (указываем базовый домен почты, который идет после знака @)
  • Root and Postmaster recipient: postmaster@testdomain.ru (учетная запись системы, которая будет получать почту на почтовые адреса root@ и postmaster@)
  • Other destinations to accept mail for: $myhostname, mail.testdomain.ru, localhost.testdomain.ru, localhost (Список доменов, которые сервер будет считать точкой финального назначения. Здесь можно указать другие домены, если почтовый сервер будет обслуживать больше чем один домен или указать доменное имя более высокого уровня, если сервер будет работать как почтовый релей)
  • Force synchronymous updates on mail queue: No (Для журнальных файловых систем, не используем синхронные обновления на очередь почты)
  • Local networks: (список сетей с которых будет почта будет ретранслироваться, в большинстве случаев достаточно оставить значение по умолчанию)
  • Mailbox size limit: 0 (Ограничивает размер почтового ящика, 0 – без ограничений)
  • Local address extension character: + (Символ для разделения расширения адреса)
  • Internet protocol to use: All (Позволяет ограничить использование версий IP протокола, включим All – ipv4 и ipv6)

Чтобы провести повторную настройку параметров можно использовать следующую команду:
sudo dpkg-reconfigure postfix

Настройка Postfix

Чтобы настроить почтовый сервер, сначала надо настроить Postfix.

Сделать это можно, редактируя файл конфигурации /etc/postfix/main.cf или используя утилиту postconf.

Настроим Postfix на использование структуры хранения почты Maildir:
sudo postconf -e 'home_mailbox= Maildir/'

Зададим расположение файла алиасов, который связывает псевдонимы почтовых ящиков с системными учетными записями:
sudo postconf -e 'virtual_alias_maps= hash:/etc/postfix/virtual'

Настроим сопоставление алиасов и учетных записей в файле /etc/postfix/virtual:
sudo nano /etc/postfix/virtual

Например, для того, что бы почта с почтового адреса contact@testdomain.ru поступала в почтовый ящик системной учетной записи root, необходимо добавить строку:
contact@testdomain.ru root

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

Чтобы применить новые настройки выполните команды:
sudo postmap /etc/postfix/virtual
sudo systemctl restart postfix

Настройка файрволла

Чтобы разрешить внешним серверам передавать почту на наш сервер, необходимо разрешить это в UFW, используя готовый профиль Postfix:
sudo ufw allow Postfix

Установка клиента и тестирование

Для отправки почтовых писем мы будем использовать s-nail – форк почтового клиента xmail, понимающий формат Maildir.

S-nail использует переменную среды MAIL, для определения расположения структуры каталогов Maildir. Для этого добавим эту переменную в файлы /etc/bash.bashrc и /etc/profile.d:
echo 'export MAIL=~/Maildir' | sudo tee -a /etc/bash.bashrc | sudo tee -a /etc/profile.d/mail.sh

Установим s-nail:
sudo apt install s-nail

Настроим конфигурацию почтового клиента s-nail. Добавим в конец файла /etc/s-nail.rc строки:
sudo nano /etc/s-nail.rc

.
set emptystart
set folder=Maildir
set record=+sent

  • set emptystart – разрешает клиенту открываться даже при пустом почтовом ящике
  • set folder=Maildir – указывает название каталога с структурой почтовых папок
  • set record=+sent создает файл sent для хранения отправленной почты

echo 'Hello' | s-nail -s 'Hello' -Snorecord username

Здесь вместо username, укажите имя своей системной учетной записи.

После этого проверим структуру каталогов текущей системной учетной записи:
ls -R ~/Maildir

Установка клиента – как настроить почтовый сервер на Linux

Если настройки верные, мы увидим доставленное письмо в виде текстового файла в папке ~/Maildir/new

Теперь мы можем прочитать наше отправленное письмо, открыв s-nail:
s-nail

Нажмите ENTER, чтобы вывести текст письма:

Проверка отправленного письма для настройки почтового сервер на Linux

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

Заключение

Эта статья — все лишь базовая инструкция, как настроить почтовый сервер на VPS.

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

Но если вы освоили описанную здесь последовательность действий и разобрались с основами, то всё, что вам понадобится, несложно будет выяснить из документации.

Настраиваем домашний почтовый сервер и уходим с «бесплатной» почты

С каждым годом рекламы в интернете становится все больше, а подают ее с каждым разом все навязчивее. Дошло уже до почты: реклама в интерфейсе почтового ящика выглядит как первое непрочитанное письмо, которое машинально хочется открыть. Я не против рекламы, особенно когда она в тему и не сбивает с толку. Но маскировать её под непрочитанное письмо ‒ это перебор. Чувствуется, что следующим шагом рекламу начнут вставлять прямо в тело письма.

Мы уже привыкли, что наша активность в интернете анализируется для подсовывания релевантной рекламы. Но там нет персональных данных в чистом виде: есть пользователь-1 с такими-то привычками, есть пользователь-2 с другими привычками, пользователь-3, 4, 5 и т.д.

Совсем другое дело почта. Обработка почты ‒ это зачастую обработка персональных данных. Все что вы покупаете ‒ квитанции приходят к вам на почту, какими сервисами вы пользуетесь ‒ регистрационные данные и отчеты приходят к вам на почту, купили билеты в отпуск ‒ все данные о вашей поездке у вас в почте. А почта у вас где?

Проблема в том, что вся почта обрабатывается, плюс нет гарантий, что не будет случаев злоупотребления. А реклама в почте ‒ это просто вишенка на торте. Так что если вы неугомонный параноик, то вам давно пора отказаться от «бесплатной» почты.

Но отказаться не так то просто:

  • Можно завести ящик на другом почтовом сервисе, но там тоже не будет никаких гарантий отсутствия обработки писем.
  • Можно арендовать виртуальный сервер в интернете и настроить его как почтовый сервер, но без физического доступа ваши письма никогда не станут только вашими.
  • Можно сделать почту на каком-нибудь зашифрованном protonmail’e, но по этой же причине он стал так популярен у мошенников, что был заблокирован в этой стране.

В голове остается один вариант ‒ делать почтовый сервер прямо дома. Идея на первый взгляд смешная, но если разобраться, то можно получить довольно интересный результат с некоторыми дополнительными бонусами для всей домашней сети. Что у меня из этого вышло ‒ читайте далее.

Домашний сервер

Очевидно, что для почтового сервера нам нужен комп или его аналог, который будет доступен извне 24/7. Можно было бы посмотреть в сторону чего-нибудь компактного и маломощного типа Raspberry Pi, но т.к. мне нужен задел на будущее для других домашних систем, то я отдал предпочтение полноценному компу. На комп устанавливается гипервизор VMWare ESXi, а на нем уже живут виртуальные машины с необходимыми функциями и в том числе почтовый сервер. Такой подход дает дополнительную гибкость при проведении экспериментов и распределении ресурсов, а в случае чего виртуальные машины можно легко перенести на другое железо. Если нет особых требований к скорости работы, то для компа можно взять обычный HDD, т.к. от разделов подкачки виртуальных машин б/ушный SSD может быстро деградировать. Либо делать виртуальные машины без swap. Либо ставить два диска: основной диск виртуальной машины живет на SSD, а раздел подкачки на HDD. Компьютер я выбрал HP ProDesk 600 G2 SFF с процессором i5-6500: компактный корпус, достаточно низкое энергопотребление и ESXi на него устанавливается как родной. Все это хозяйство в режиме простоя потребляет 25 Вт, под нагрузкой 40-45 Вт. В частных объявлениях такой комп вполне реально найти за вменяемые деньги.

ESXi устанавливается со всеми настройками по умолчанию, затем сетевому интерфейсу присваивается статический IP. Более подробно и с картинками см. здесь.

Связь, электричество, бэкапы

Дома, в отличие от датацентра возможны перебои электричества, поэтому нужен ИБП с батареей на несколько часов работы сервера и роутера. От этого же электричества зависит работа оборудования внутридомового провайдера, поэтому ИБП для домашнего сервера не решает проблему отключения провайдерского оборудования и интернета вместе с электричеством. Получается, что на домашний роутер должно быть заведено два провайдера: основной (например, по витой паре или оптике) и резервный (через LTE модем). В разных роутерах процесс настройки выглядит по разному, но суть не меняется. Для резервного интернет-канала я взял LTE модем Huawei E3372-320. Свисток хорош тем, что есть в свободной продаже в разлоченном виде и он оснащен разъемами для внешних антенн, что в некоторых ситуациях может сильно улучшить качество связи.

Однако, с двумя провайдерами у вас будет два разных серых IP адреса, а почтовому серверу нужно нормальное доменное имя и по хорошему белый IP. Выход из ситуации у меня такой: арендуется виртуальный сервер (VPS) за границей, на нем настраивается VPN-сервер, а на почтовом сервере настраивается туннель до VPS. Кроме того, туннель можно поднять прямо с домашнего роутера (если он умеет) и таким образом ликвидируется сразу два зайца: мы получаем статический белый IP не зависящий от локальных провайдеров, а после тюнинга маршрутизации на роутере ‒ централизованный обход блокировок Роскомпозора для всех устройств домашней сети. Схема получается примерно такая:

Будет не очень весело, если жесткий диск домашнего сервера неожиданно накроется вместе со всей почтой. Поэтому необходимость бэкапов сервера даже не обсуждается. О настройке бэкапов поговорим в конце статьи.

Условные обозначения

В статье будут содержаться примеры конфигурации, в которых вам потребуется заменить некоторые значения на свои:

  • Hostname (имя компьютера) почтового сервера ‒ mail
  • Домен ‒ example.com
  • IP адрес VPS сервера ‒ 1.2.3.4
  • Локальная домашняя сеть 192.168.1.0 с маской /24 (255.255.255.0) и шлюзом 192.168.1.1
  • IP адрес почтового сервера в локальной сети ‒ 192.168.1.3
  • Внутри VPN тунеля IP адрес VPN сервера 192.168.77.1, IP адрес VPN клиента 192.168.77.3

Арендуем VPS, настраиваем VPN сервер

Есть куча разных VPS провайдеров, я выбрал vps2day.com, потому что они не просят персональные данные при регистрации, платить можно криптой, можно выбрать страну, где разместить сервер. Для целей VPN будет достаточно VPS в базовой конфигурации, который обойдется в 5 €/месяц. Сперва я зарегистрировал почтовый ящик на protonmail’e, а затем на него оформил аккаунт в vps2day, закинул крипту и арендовал VPS. В качестве ОС я выбрал Debian 10, через несколько минут после оформления аренды на почту приходит отбойник с IP адресом сервера и учетными данными для SSH подключения.

apt update && apt upgrade

В качестве решения для VPN я выбрал Wireguard, но для установки на Debian 10 надо добавить его репозиторий в apt:

echo 'deb http://deb.debian.org/debian buster-backports main contrib non-free' > /etc/apt/sources.list.d/buster-backports.list apt update apt install wireguard

Создаем каталог для файлов конфигурации (если его вдруг нет), назначаем права доступа туда, переходим в него и генерируем закрытый и открытый ключи:

mkdir /etc/wireguard chmod 700 /etc/wireguard cd /etc/wireguard wg genkey | tee privatekey | wg pubkey > publickey

На выходе получим два файла: privatekey с закрытым ключом и publickey с открытым ключом. Создаем файл конфигурации /etc/wireguard/wg0.conf вида:

[Interface] PrivateKey = сюда вставляем значение ключа из файла privatekey Address = 192.168.77.1/24 ListenPort = 51820 MTU = 1380

Чуть позже мы дополним этот файл, а пока едем дальше.

Регистрация домена, настройка DNS

При регистрации домена в зоне .RU нужно предоставлять паспортные данные, а делать этого не очень хочется. В международной зоне список необходимых для регистрации данных скромнее. Для регистрации можно указать все тот же ящик с protonmail'a. В качестве примера представим, что мы зарегистрировали домен example.com.

В редакторе DNS зоны нужно добавить "А" запись с именем mail и с указанием на внешний IP нашего почтового сервера, коим будет являться арендованный VPS:

Запись "MX" с приоритетом 10 и указанием на mail.example.com:

Запись "TXT" с SPF v=spf1 ip4:1.2.3.4 mx ~all :

Запись "TXT" DMARC v=DMARC1; p=reject; adkim=s; aspf=s; pct=100; :

Создание виртуальной машины

На ESXi создаем виртуальную машину (ВМ). Диск почтового сервера будем шифровать, поэтому нужно учесть один нюанс. По умолчанию гипервизор создает swap файл, равный размеру оперативной памяти виртуальной машины в каталоге ВМ. Таким образом есть вероятность, что ключ шифрования диска, хранимый в памяти ВМ во время работы окажется в swap файле на гипервизоре, что совсем не здорово. Чтобы этого не случилось, в настройках виртуальной машины нужно зарезервировать всю отведенную под ВМ оперативную память, тогда swap файл будет нулевой длины.

Установка системы и начальная конфигурация

В гостевой ОС вполне можно отказаться от раздела подкачки, особенно если назначить ВМ достаточное количество оперативки, а datastore гипервизора находится на SSD. Я взял Debian 10, процесс установки полностью стандартный за исключением разметки диска. Имя сервера задаем mail, домен example.com. Система ставится в минимальной конфигурации. В разметке дисков я сделал первый раздел под /boot и второй раздел с шифрованием:

После установки системы я делаю несколько базовых вещей. Удаляю созданного при установке пользователя командой deluser --remove-home .

Задаю статический адрес, если это не было сделано во время установки. Для этого правим файл /etc/network/interfaces . Обратите внимание, что сетевой адаптер вашего сервера может называться по другому, в моем примере ens192 . Секция файла с настройкой сетевого адаптера должна получиться такой:

allow-hotplug ens192 iface ens192 inet static address 192.168.1.3/24 gateway 192.168.1.1

Для применения изменений выполняем команду (не забываем здесь заменить название сетевого интерфейса на свое):

ifdown ens192 && ifup ens192

Чтобы не углубляться в настройку домашних роутеров, VPN туннель мы будем делать сразу с почтового сервера до VPS и завернем туда весь трафик. Поэтому имеет смысл поменять DNS сервера на публичные. Для этого правим файл /etc/resolv.conf , конечный вид которого примет вид:

nameserver 1.1.1.1 nameserver 1.0.0.1

IPv6 я тоже отключаю, для этого в конец файла /etc/sysctl.conf добавляю строку:

net.ipv6.conf.all.disable_ipv6 = 1

Чтобы параметр применился выполняем команду:

sysctl -p

Проверить, отключился ли IPv6 довольно легко. Для этого нужно просмотреть вывод нижеследующей команды на наличие ipv6 адресов:

ip a

Устанавливаем ssh и wget:

apt install ssh wget

Включаю логин по паролю для root по SSH, для этого в файле /etc/ssh/sshd_config добавляем строку PermitRootLogin yes . Применяем изменения:

service ssh restart

Коннектимся к серверу по ssh и едем дальше.

Настройка VPN подключения

Устанавливаем wireguard на почтовом сервере так же как это делали на VPS несколькими шагами выше:

echo 'deb http://deb.debian.org/debian buster-backports main contrib non-free' > /etc/apt/sources.list.d/buster-backports.list apt update apt install wireguard mkdir /etc/wireguard chmod 700 /etc/wireguard cd /etc/wireguard wg genkey | tee privatekey | wg pubkey > publickey

Создаем файл конфигурации /etc/wireguard/wg0.conf следующего содержания:

[Interface] PrivateKey = значение ключа из файла privatekey Address = 192.168.77.3/32 MTU = 1380 [Peer] PublicKey = значение ключа из файла publickey с VPS сервера AllowedIPs = 0.0.0.0/0 Endpoint = 1.2.3.4:51820 PersistentKeepalive = 20

Теперь идем по SSH на VPS сервер и в файл конфигурации /etc/wireguard/wg0.conf добавляем:

# mail server [Peer] PublicKey = значение ключа из файла publickey с почтового сервера AllowedIPs = 192.168.77.3/32

На VPS сервере в файл /etc/sysctl.conf добавляем строку net.ipv4.ip_forward = 1 , чтобы разрешить форвардинг трафика, а чтобы применить эту настройку без перезагрузки, даем команду sysctl -w net.ipv4.ip_forward = 1 .

На VPS создаем небольшой скрипт фаерволла, который будет срабатывать при каждом включении сетевого адаптера. Создаем файл /etc/network/if-up.d/firewall , содержимое файла спрятал под спойлер.

#! /bin/sh EXT_IP="1.2.3.4" iptables -F iptables -X iptables -t nat -F iptables -t nat -X iptables -t mangle -F iptables -t mangle -X iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT iptables -A INPUT -i lo -j ACCEPT # Разрешаем пинги в разумных пределах iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT --match limit --limit 5/second iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT --match limit --limit 5/second # Разрешаем SSH iptables -A INPUT -d $EXT_IP -p tcp --dport 22 -j ACCEPT iptables -A INPUT -d 192.168.77.1 -p tcp --dport 22 -j ACCEPT # Established connections iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT # DNS iptables -A INPUT -i eth0 -p udp -d $EXT_IP --sport 53 -j ACCEPT # Wireguard iptables -A INPUT -i eth0 -d $EXT_IP -p udp --dport 51820 -j ACCEPT iptables -A FORWARD -i wg0 -j ACCEPT iptables -A FORWARD -o wg0 -j ACCEPT iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu # Выход в интернет для почтового сервера через VPS iptables -t nat -A POSTROUTING -s 192.168.77.3 -j SNAT --to-source $EXT_IP # Проброс портов к почтовому серверу через туннель iptables -t nat -A PREROUTING -d $EXT_IP -p tcp --dport 80 -j DNAT --to-destination 192.168.77.3 iptables -t nat -A PREROUTING -d $EXT_IP -p tcp --dport 443 -j DNAT --to-destination 192.168.77.3 iptables -t nat -A PREROUTING -d $EXT_IP -p tcp --dport 25 -j DNAT --to-destination 192.168.77.3 iptables -t nat -A PREROUTING -d $EXT_IP -p tcp --dport 587 -j DNAT --to-destination 192.168.77.3 iptables -t nat -A PREROUTING -d $EXT_IP -p tcp --dport 143 -j DNAT --to-destination 192.168.77.3 iptables -t nat -A PREROUTING -d $EXT_IP -p tcp --dport 993 -j DNAT --to-destination 192.168.77.3

Не забываем сделать файл исполняемым командой chmod +x /etc/network/if-up.d/firewall

На VPS сервере запускаем wireguard:

systemctl enable wg-quick@wg0 systemctl start wg-quick@wg0

Возвращаемся на почтовый сервер и запускаем wireguard там:

systemctl enable wg-quick@wg0 systemctl start wg-quick@wg0

Состояние подключения можно посмотреть командой wg show . Если хоть какие-то данные в обоих направления пошли, значит все ОК и можно двигаться дальше:

Настройка почтового сервера

В интернете есть пара отличных гайдов по развертыванию почтового сервера на Debian: e-mail caramel и ispmail. Основная сложность настройки заключается в том, что нужно правильным образом сконфигурировать довольно много файлов и нигде не накосячить. Нужно настроить Apache, PostgreSQL, Postfix, Dovecot, rspamd, sieve, сгенерировать SSL сертификаты и DKIM, выставить права. Со знанием дела весь процесс занимает несколько часов, а у новичков может легко занять пару дней и не факт что все получится с первого раза.

По гайду "e-mail caramel" на выходе получается почтовый сервер с IMAP протоколом для клиентов с обязательным шифрованием STARTTLS и Nextcloud'ом в качестве webmail. Сервер убирает из писем мета-теги User-Agent и Received. Учет почтовых пользователей ведется в БД.

Чтобы не заниматься курением конфигов, а результат был предсказуем ‒ я сделал скрипт, который автоматизирует 90% всего процесса из вышеупомянутого гайда с некоторыми отличиями:

  • Я не хочу ставить на почтовый сервер ресурсоемкий Nextcloud, вместо него я буду использовать Rainloop
  • Подрежем еще несколько мета-тегов: X-Mailer, X-Originating-IP, X-PHP-Originating-Script, Mime-Version. При этом в оригинальном гайде фильтрация конфигурируется в master.cf, а у меня в main.cf

Скрипт устанавливает необходимые пакеты, конфигурирует apache, БД, конфигурирует почтовые службы и на выходе получается практически готовый к употреблению почтовый сервер. При этом я пока не стал включать в скрипт генерирование SSL и DKIM, сделаем это руками чуть ниже.

Скрипт пока не тестировался на корректность работы при многократном запуске. Если почтовый сервер у вас развернут как виртуальная машина, то перед выполнением лучше сделать снапшот ВМ.

Скачиваем и распаковываем скрипт:

wget https://github.com/alexmdv/mailserver-autosetup/archive/main.zip unzip main.zip chmod +x -R ./mailserver-autosetup-main cd ./mailserver-autosetup-main

Всего в каталоге 3 файла:

  • mailserver-setup.sh - основной скрипт конфигурирования сервера
  • mailuser-addnew.sh - скрипт создания почтового юзера
  • mailuser-setpass.sh - скрипт смены пароля для существующего почтового юзера

Запускаем mailserver-setup.sh . Скрипт попросит ввести следующие данные: имя хоста почтового сервера (в этом гайде это просто mail), имя домена, который был ранее зарегистрирован (например, example.com), IP адрес почтового сервера в локальной сети. Имя хоста + домен как раз образуют полное имя mail.example.com. По завершению работы скрипта почтовые сервисы остаются в выключенном состоянии, т.к. перед запуском надо сгенерировать SSL сертификаты и DKIM. Так же по завершению будет отображен админский пароль от БД. Этот пароль нужно вставить в скрипты mailuser-addnew.sh и mailuser-setpass.sh вместо слова PASSWORD, см в файлах вторую строку:

#!/bin/bash pgadmpass="PASSWORD"

Генерирование сертификатов, завершение настройки

Генерируем SSL сертификат командой. Не забываем заменить example.com на свой домен:

certbot certonly --apache --agree-tos --email admin@example.com --no-eff-email --domain mail.example.com

Генерируем DKIM. В команде ниже вместе example.com ‒ ваш домен, а вместо 20210121 можно взять текущую дату (ггггммдд):

rspamadm dkim_keygen -b 2048 -d example.com -s 20210121 -k /var/lib/rspamd/dkim/example.com.20210121.key

Результатом выполнения команды будет такой текст:

20210121._domainkey IN TXT ( "v=DKIM1; k=rsa; " "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAumOhUcY3anZV4tGF1+VsYDD9bTZ0rqiFCm8FPdDHVB0U+ZPfZ2Cxf+x+jIFYXfO/jWEoAw2uYFz3Mt1ImvRQzU9oMx0t/0HtMKS4m3AhOBM5SkkhvoAaJkoIt3gTQ4KQyiBsZemihAw6V/gsex8K6M76m4WkbT92+tg192EGXBUDo0k7kk1rDOld0G9X2P0IxkVfqKqfwg+fI+0Im" "AOFC1gBCIm18XPEGZA2oOoNbkWO95bD8Rj20yv8639bMA27+B08v4/aPXQb9HZLEwpsz8Qa/WgEZFGJzd6kUaYWHTfMmbgBXnET5N+tjXGvkjtnLbx25ru/PZTeckGjE/komQIDAQAB" ) ;

В файл /etc/rspamd/dkim_selectors.map нужно добавить дату, чтобы получилось примерно так:

example.com 20210121

Идем в редактор DNS зоны у регистратора, добавляем запись "TXT" с именем 20210121._domainkey и значением v=DKIM1; k=rsa; p=. Дата в имени у вас будет своя, параметры перечисляются без двойных кавычек. Примерно так:

Тут есть нюанс. По умолчанию длина ТХТ записи может быть до 255 символов, а т.к. мы сгенерировали 2048 битный DKIM ключ, то его длина выходит за это ограничение и если вы внимательно посмотрите на результат генерации ключа, параметр p разбит на два, каждый из которых в своих двойных кавычках. Если регистратор поддерживает ТХТ записи большей длины, то две части можно просто схлопнуть, убрав кавычки. У GoDaddy, например, максимальная длина TXT записи 1024 символа. А если регистратор не поддерживает больше 255 символов, то ключ записывается в две ТХТ записи. Или можно сгенерировать более короткий ключ на 1024 бита.

Последнее что нужно сделать ‒ поправить файл /etc/postfix/master.cf . Необходимо раскомментировать строку:

#submission inet n - - - - smtpd

И 4 вложенных параметра, начинающихся на "-o". Двойной пробел перед ними нужно сохранить. Последний параметр, возможно нужно будет просто дописать. На всякий случай в архиве со скриптом приложен готовый к употреблению файл master.cf. Должно получиться так:

submission inet n - - - - smtpd -o syslog_name=postfix/submission -o smtpd_tls_security_level=encrypt -o smtpd_client_restrictions=permit_sasl_authenticated,reject -o cleanup_service_name=header_cleanup

Теперь заведем первый почтовый ящик. Для этого нужно воспользоваться скриптом mailuser-addnew.sh. Нужно будет ввести короткое имя (слово до @example.com), доменное имя (сам example.com) и пароль два раза. После этого можно попробовать настроить любой почтовый клиент используя созданную учетную запись.

В качестве примера пусть будет oleg@example.com. Для настройки почтового клиента набор параметров будет таким: почтовый адрес oleg@example.com, имя пользователя для IMAP и для SMTP так же oleg@example.com, сервер входящей почты IMAP mail.example.com, исходящей почты тоже mail.example.com, способ подключения везде STARTTLS.

Для проверки корректности настройки DKIM и SPF, можно воспользоваться ресурсом https://dkimvalidator.com, отправив туда тестовое письмо и посмотрев отчет. Все проверки должны быть в статусе pass (пройдено).

Устанавливаем Rainloop webmail

Все необходимые php модули для Rainloop уже были установлены скриптом. Скачиваем актуальную версию проекта, распаковываем, задаем права, включаем vhost на веб-сервере:

wget http://www.rainloop.net/repository/webmail/rainloop-community-latest.zip unzip rainloop-community-latest.zip -d /var/www/webmail cd /var/www/webmail chmod 644 . find . -type d -exec chmod 755 <> \; find . -type f -exec chmod 644 <> \; chown -R www-data:www-data . a2ensite webmail service apache2 reload

Логинимся в админку rainloop по адресу https://mail.example.com/?admin с логином admin и паролем 12345 . Пароль естественно надо будет сменить, это делается в разделе Security.

Далее добавляем наш почтовый сервер. Идем в раздел Domains, отключаем все прочие почтовые сервера и жмем по кнопке Add Domain:

Вводим параметры нашего домена и жмем Add:

Дополнительно в закладке Login можно так же указать домен:

Теперь можно пробовать заходить в webmail https://mail.example.com используя короткое имя пользователя (без @example.com):

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

В качестве небольшого тюнинга безопасности Apache добавим пару строк в файл /etc/apache2/apache2.conf . Это скроет данные о версии веб-сервера:

ServerSignature Off ServerTokens Prod

Для применения изменений перезагрузим Apache командой service apache2 reload .

phpPgAdmin

В БД mail_server есть три основные таблицы: alias, sharedmail_boxes, users. Все пользователи с хешами паролей хранятся в users. С помощью таблицы alias можно сделать псевдонимы к уже существующим почтовым ящикам, а с помощью таблицы shared_mailboxes можно сделать доступ к определенным ящикам для нескольких людей. Вход в phpPgAdmin по адресу http://локальный-ip-адрес-сервера/phppgadmin с логином postgres и паролем, который был сгенерирован скриптом.

Если нет нужды ковырять таблицы, то можно отключить сайт с phpPgAdmin вообще:

a2dissite lanhost service apache2 reload

Бэкапы

Так как почтовый сервер я делал для себя и очень ограниченного круга людей, то много пространства серверу не нужно, емкость всего диска 20 Гб. Схема резервного копирования такая: один раз бэкапится виртуальная машина почтового сервера целиком, чтобы случае чего не настраивать сервер заново. А во вне делается бэкап почтового каталога. Естественно все бэкапы шифруем. Для копий каталога отлично подойдет VPS, у которого целых 25 Гб пространства, бэкапить буду с помощью restic. Но прежде надо настроить ssh подключение до VPS по сертификату.

На почтовом сервере генерируем RSA ключ, на все вопросы мастера просто жмем Enter:

ssh-keygen -t rsa -b 4096

Копируем открытый ключ на VPS:

cat ~/.ssh/id_rsa.pub | ssh root@192.168.77.1 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
apt install restic

Создаем репозиторий (копии будут храниться на VPS в каталоге /mnt/mserv-bkp ):

restic -r sftp:192.168.77.1:/mnt/mserv-bkp init

Выполнение команды может занять несколько минут, в конце попросят придумать пароль для шифрования репозитория. Чтобы автоматизировать процесс создания резервных копий, создадим файл с переменными /root/.restic следующего содержания:

export RESTIC_REPOSITORY="sftp:192.168.77.1:/mnt/mserv-bkp" export RESTIC_PASSWORD="Пароль придуманный на прошлом шаге"
source /root/.restic

Попробуем выполнить резервное копирование почтового каталога:

restic backup /var/vmail

Проверяем, что в репозитории что-то появилось:

restic snapshots

Если есть наш только что созданный снапшот, то двигаемся дальше. Создаем файл /etc/root/restic с содержимым:

#!/bin/bash source /root/.restic restic backup /var/vmail

Делаем его исполняемым:

chmod +x /root/restic

И добавляем в /etc/crontab на запуск раз в сутки:

0 1 * * * root /root/restic

Заключение

Теперь настройку почтового сервера можно считать полностью завершенной.

Как видно, владение своим почтовым сервером стоит некоторых денег. Цена складывается из оплаты регистрации домена, аренды VPS, оплаты второго провайдера дома и в конце концов электричества. В моем случае получается в районе 950 ₽ в месяц за всё. С другой стороны резервный интернет канал и VPN будут полезны для всей домашней сети, но об этом мы поговорим в следующий раз.

Спасибо, что дочитали. Комментарии, вопросы, замечания и пожелания приветствуются!

Оригинал статьи в моем блоге.

  • электронная почта
  • сервер
  • домашняя сеть
  • Настройка Linux
  • Системное администрирование

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *