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

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

7 декабря 2022 г.

Позвольте мне объяснить, как использовать Amazon Web Services (AWS) Simple Email Services (SES) для поддержки сервера электронной почты SMTP IMAP, работающего на виртуальном сервере AWS Lightsail с использованием Ubuntu 22 с Postfix/Dovecot вместе с AWS. DNS-сервисы Route53. Базовый сервер электронной почты настроен для поддержки только пользователей системы, тех лиц, у которых есть учетная запись пользователя системы, он не является общедоступным сервером.

Зачем вообще использовать SES? В презентации Amazon говорится, что Amazon SES — это платформа электронной почты, которая предоставляет простой и экономичный способ отправки и получения электронной почты. используя свои собственные адреса электронной почты и домены. Мой простой и простой ответ несколько резче; потому что это единственный способ сделать это на инстансах AWS Lightsail. AWS определила, что в их интересах блокировать исходящий трафик через порт 25, традиционный порт SMTP, используемый для электронной почты в Интернете. Тщательный контроль трафика электронной почты позволяет им, например, побеждать спамеров. Все остальные исходящие порты открыты для использования. SES — это назначенный обходной путь AWS. При этом все входящие порты блокируются брандмауэром правил исключений.

Начальные настройки

В консоли AWS Lightsail в разделе «Сеть» продублируйте показанные здесь настройки исключения (за исключением порта 443, который не нужен для электронной почты). В частности, вы хотите добавить эти три параметра, помеченные как «Пользовательские» в столбце «Приложение». Для своей настройки я продублировал правила брандмауэра для IPv6, а также решил использовать статический IP-адрес.

Обратите внимание, что в статье предполагается, что у вас есть работающая базовая установка Ubuntu 22 Server на вашем экземпляре виртуального сервера AWS с именем хоста, для которого задано значение, подобное этому шаблону: mail.yourdomain.tld. Для использования только в качестве сервера электронной почты экземпляру не требуются другие обычно присутствующие компоненты стека LAMP, поэтому Apache, MySQL и PHP не требуются.

Некоторые ссылки на документы AWS SES

Amazon предоставляет обширную документацию о том, как использовать предлагаемые ими услуги, и я не буду повторять ее без необходимости. вводная целевая страница SES содержит меню со ссылками на подробные разделы, приведенные ниже. Вот «краткий список» некоторых конкретных ссылок в документации AWS по SES, которые я считаю полезными:

"Интеграция Amazon SES с Postfix — Amazon Simple Email Service"

"Управление удостоверениями в Amazon SES — Amazon Простая служба электронной почты

"Проверка подключения к Интерфейс Amazon SES SMTP с использованием командной строки — Amazon Simple Email Service"

"Ошибки отправки электронной почты Amazon SES — Amazon Simple Email Service< /а>"

"Использование SMTP-интерфейса Amazon SES для отправки электронной почты – Amazon Простая служба электронной почты

"Что такое Amazon SES? — Amazon Simple Email Service"

Интеграция Amazon SES с Postfix — Amazon Simple Email Service Classic"

"Получение электронной почты с помощью Amazon SES — Amazon Simple Email Service Classic"

"Отправка электронной почты с помощью интерфейса SMTP Amazon SES — Amazon Simple Email Service Classic"

"Настройка и подключение к SMTP с помощью Amazon SES"

Записи зоны DNS

Помимо службы SES, еще одной областью, требующей некоторой настройки, являются записи зоны DNS для вашего домена, чтобы включить некоторые дополнения для вашего почтового сервера. Вам потребуется добавить две записи A, одну IPv4 и одну IPv6, а также запись MX для mail.yourdomain.tld. Вам также потребуется добавить несколько записей DKIM, используемых для идентификации вашего отправителя как законного.

Amazon утверждает, что Domain Keys Identified Mail (DKIM) — это стандарт безопасности электронной почты, разработанный для проверки того, что электронное письмо, якобы отправленное из определенного домена, действительно авторизовано владельцем этого домена. . Он использует криптографию с открытым ключом для подписи электронной почты с помощью закрытого ключа. Затем серверы-получатели могут использовать открытый ключ, опубликованный в DNS домена, чтобы убедиться, что части электронной почты не были изменены во время передачи.

Существует также запись, используемая службой SES для идентификации нашего домена. Чтобы добавить эти различные записи, мы рассмотрим документы Amazon. для настройки DKIM и на EasyDMARC для настройки DMARC, вместе со ссылкой на базовую настройку SES на целевой странице AWS SES, упомянутой ранее. Используя эту информацию, мы можем смоделировать наши записи зон DNS на примере ниже.

Установить Postfix

Предполагая, что вы добились успеха, вам нужно будет установить почтовый сервер Postfix. Как оказалось, сервер Ubuntu 22 GNU/Linux использует как Postfix, так и Dovecot для своих служб обработки почты по умолчанию. Установите Postfix с помощью команды консоли терминала sudo apt install Postfix. Это приведет к появлению ряда диалоговых экранов ниже, в которых вы предоставите необходимую информацию для конфигурации Postfix, как показано. Этот первый экран настраивает нас на использование нашей службы SES для исходящей почты.

Обратите внимание на второй экран выше, на котором показана конечная точка SMTP и номер порта для службы AWS SES в качестве нашего узла ретрансляции.

Возможно, вы захотите ввести какое-то разумное ограничение размера на последнем экране над указанием размера почтового ящика.

Если все эти настройки введены правильно, вы должны увидеть примерно такой экран консоли:

setting synchronous mail queue updates: false
setting myorigin
setting destinations: mail.isoblock.com, mail.isoblock.com, localhost, isoblock.com
setting relayhost: email-smtp.us-east-1.amazonaws.com:587
setting mynetworks: 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
setting mailbox_command
setting mailbox_size_limit: 0
setting recipient_delimiter: +
setting inet_interfaces: all
setting inet_protocols: all
Postfix (main.cf) is now set up with the changes above.  If you need to make
changes, edit /etc/postfix/main.cf (and others) as needed.  To view Postfix
configuration values, see postconf(1).
After modifying main.cf, be sure to run 'systemctl reload postfix'.

Настройка AWS SES

Amazon предлагает сводку следующих действий для настройки SES, которую я немного изменил, как показано ниже.

Выполните следующие действия, чтобы настроить SMTP с Amazon SES, а затем подключиться к конечной точке SMTP Amazon SES для отправки электронной почты:

  1. Откройте консоль Amazon SES.
  2. На панели навигации выберите Панель управления учетной записью.
  3. В настройках простого протокола передачи почты (SMTP) обратите внимание на значения конечных точек SMTP и портов. Используйте конечную точку и порты SMTP для подключения к SMTP. Например, если вы находитесь в регионе AWS eu-west-1, обратите внимание на следующее:

Конечная точка SMTP: email-smtp.eu-west-1.amazonaws.com Порт: 25 587

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

В текстовом редакторе откройте файл /etc/postfix/sasl_passwd. Если файл еще не существует, создайте его.

Добавьте следующую строку, заменив SMTPUSERNAME и SMTPPASSWORD вашим именем пользователя и паролем SMTP, и отредактируйте URL-адрес зоны AWS конечной точки SMTP соответственно.

[email-smtp.us-west-2.amazonaws.com]:587 SMTPUSERNAME:SMTPPASSWORD Сохраните и закройте sasl_passwd. Дополнительные сведения об учетных данных см. в разделе Получение учетных данных Amazon SES SMTP.

В командной строке введите следующую команду, чтобы создать файл базы данных хэш-карты, содержащий ваши учетные данные SMTP:

хэш sudo postmap:/etc/postfix/sasl_passwd Файлы /etc/postfix/sasl_passwd и /etc/postfix/sasl_passwd.db, созданные на предыдущих шагах, не зашифрованы. Поскольку эти файлы содержат ваши учетные данные SMTP, измените владельца файлов и разрешения, чтобы ограничить доступ к ним. Чтобы ограничить доступ к этим файлам:

В командной строке введите следующую команду, чтобы изменить владельца файлов:

sudo chown root:root /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db В командной строке введите следующую команду, чтобы изменить права доступа к файлам, чтобы только пользователь root мог их читать или записывать:

sudo chmod 0600 /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db 5. Выберите порт SMTP Amazon SES, с которого вы будете отправлять электронную почту, на основе метода подключения. который вы хотите использовать (STARTTLS). В нашем случае это будет порт 587. Подключитесь к конечной точке SMTP Amazon SES, чтобы проверить соединение через порт, с которого вы хотите отправлять электронную почту. Например, вы можете запустить эту команду telnet (подставьте значение конечной точки), чтобы подтвердить подключение:

$ telnet email-smtp.eu-west-1.amazonaws.com 587

email-smtp.eu-west-1.amazonaws.com. сильный> 6. После подтверждения успешного подключения к порту вы можете запустить используя командную строку вашей операционной системы, чтобы начать отправку электронной почты с использованием интерфейса SMTP Amazon SES.

Настройка файлов конфигурации Postfix

Далее нужно внести некоторые изменения в файл конфигурации /etc/postfix/main.cf. Внимательно отредактируйте этот файл с помощью вашего любимого редактора, чтобы он дублировал содержимое, показанное здесь далее.

# See /usr/share/postfix/main.cf.dist for a commented, more complete version
myhostname = mail.isoblock.com
mydomain = isoblock.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases.db
myorigin = /etc/mailname
mydestination = $myhostname, mail.isoblock.com, localhost, isoblock.com
relayhost =  [email-smtp.us-east-1.amazonaws.com]:587
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +

smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no
# appending .domain is the MUA's job.
append_dot_mydomain = no
# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h
readme_directory = no
# default to 2 on fresh installs.
compatibility_level = 3.6

# TLS parameters
smtp_tls_cert_file=/etc/letsencrypt/live/isoblock.com/fullchain.pem
smtp_tls_key_file=/etc/letsencrypt/live/isoblock.com/privkey.pem
smtp_tls_CAfile=/etc/ssl/certs/ca-certificates.crt
smtpd_tls_cert_file=/etc/letsencrypt/live/isoblock.com/fullchain.pem
smtpd_tls_key_file=/etc/letsencrypt/live/isoblock.com/privkey.pem
smtpd_tls_CAfile=/etc/ssl/certs/ca-certificates.crt
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_use_tls=yes
smtpd_use_tls=yes

# SMTP
#smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
#smtpd_relay_restrictions = permit_mynetworks,permit_sasl_authenticated,reject
inet_interfaces = all
inet_protocols = all
#smtp_tls_security_level = may
smtp_tls_security_level = encrypt
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_auth_enable = yes
smtp_tls_note_starttls_offer = yes
virtual_alias_maps = hash:/etc/postfix/virtual
virtual_alias_maps_database = hash:/etc/postfix/virtual.db

#smtpd_tls_protocols = !SSLv2, !SSLv3
 smtp_sasl_type = dovecot
 smtpd_sasl_path = private/auth
queue_directory = /var/spool/postfix
mailbox_command = procmail -a "$EXTENSION"
smtpd_tls_loglevel = 1

Затем вам нужно будет отредактировать файл конфигурации /etc/postfix/master.cf, чтобы раздел submission дублировал это содержимое, показанное здесь далее.

#
# Postfix master process configuration file.  For details on the format
# of the file, see the master(5) manual page (command: "man 5 master" or
# on-line: http://www.postfix.org/master.5.html).
#
# Do not forget to execute "postfix reload" after editing this file.
#
# ==========================================================================
# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (no)    (never) (100)
# ==========================================================================
smtp      inet  n       -       y       -       -       smtpd
#smtp      inet  n       -       y       -       1       postscreen
#smtpd     pass  -       -       y       -       -       smtpd
#dnsblog   unix  -       -       y       -       0       dnsblog
#tlsproxy  unix  -       -       y       -       0       tlsproxy
# Choose one: enable submission for loopback clients only, or for any client.
#127.0.0.1:submission inet n -   y       -       -       smtpd
submission inet n       -       y       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_wrappermode=no
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_tls_auth_only=yes
#  -o smtpd_reject_unlisted_recipient=no
#  -o smtpd_client_restrictions=$mua_client_restrictions
#  -o smtpd_helo_restrictions=$mua_helo_restrictions
#  -o smtpd_sender_restrictions=$mua_sender_restrictions
  -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination
  -o smtpd_relay_restrictions=permit_mynetworks,permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING
 -o smtpd_sasl_type=dovecot
  -o smtpd_sasl_path=private/auth
# Choose one: enable smtps for loopback clients only, or for any client.
#127.0.0.1:smtps inet n  -       y       -       -       smtpd
#smtps     inet  n       -       y       -       -       smtpd
#  -o syslog_name=postfix/smtps
#  -o smtpd_tls_wrappermode=yes
#  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_reject_unlisted_recipient=no
#  -o smtpd_client_restrictions=$mua_client_restrictions
#  -o smtpd_helo_restrictions=$mua_helo_restrictions
#  -o smtpd_sender_restrictions=$mua_sender_restrictions
#  -o smtpd_recipient_restrictions=
#  -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
#  -o milter_macro_daemon_name=ORIGINATING
#628       inet  n       -       y       -       -       qmqpd
pickup    unix  n       -       y       60      1       pickup
cleanup   unix  n       -       y       -       0       cleanup
qmgr      unix  n       -       n       300     1       qmgr
#qmgr     unix  n       -       n       300     1       oqmgr
tlsmgr    unix  -       -       y       1000?   1       tlsmgr
rewrite   unix  -       -       y       -       -       trivial-rewrite
bounce    unix  -       -       y       -       0       bounce
defer     unix  -       -       y       -       0       bounce
trace     unix  -       -       y       -       0       bounce
verify    unix  -       -       y       -       1       verify
flush     unix  n       -       y       1000?   0       flush
proxymap  unix  -       -       n       -       -       proxymap
proxywrite unix -       -       n       -       1       proxymap
smtp      unix  -       -       y       -       -       smtp
relay     unix  -       -       y       -       -       smtp
        -o syslog_name=postfix/$service_name
#       -o smtp_helo_timeout=5 -o smtp_connect_timeout=5
showq     unix  n       -       y       -       -       showq
error     unix  -       -       y       -       -       error
retry     unix  -       -       y       -       -       error
discard   unix  -       -       y       -       -       discard
local     unix  -       n       n       -       -       local
virtual   unix  -       n       n       -       -       virtual
lmtp      unix  -       -       y       -       -       lmtp
anvil     unix  -       -       y       -       1       anvil
scache    unix  -       -       y       -       1       scache
postlog   unix-dgram n  -       n       -       1       postlogd
#
# ====================================================================

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

postmaster: ubuntu
nobody: ubuntu
hostmaster: ubuntu
usenet: ubuntu
news: ubuntu
webmaster: ubuntu
www: ubuntu
ftp: ubuntu
abuse: ubuntu
root: ubuntu
wright: wright
bobwright: wright
microsoftbob: wright
bob_wright: wright
bwright: wright
rwright: wright
wright@mail.isoblock.com wright
wright@isoblock.com wright
ubuntu@mail.isoblock.com ubuntu
ubuntu@isoblock.com ubuntu
@mail.isoblock.com wright
@isoblock.com wright

После того, как вы создали эти два файла, используйте команды консольного терминала sudo postmap aliases и sudo postmap virtual, чтобы создать aliases.db и Файлы virtual.db, используемые Postfix. Также скопируйте файл aliases.db в /etc/aliases.db. После внесения этих изменений вам потребуется перезапустить (перезагрузить) Postfix, чтобы отразить эти изменения. Это делается с помощью команды sudo systemctl reload postfix.

Postfix обладает собственными демонами, поэтому мы также можем запустить sudo postfix reload вместо использования systemctl. Если вы запустите эту команду, Postfix сообщит вам, что это работает в режиме совместимости для поддержки более ранних версий и дает вам быструю командную строку исправления, чтобы принудительно установить текущую версию. Далее приведен результат команды состояния с использованием встроенного демона Postfix. Запустите предложенные команды, чтобы отключить обратную совместимость.

:~$ sudo postfix status
postfix: Postfix is running with backwards-compatible default settings
postfix: See http://www.postfix.org/COMPATIBILITY_README.html for details
postfix: To disable backwards compatibility use "postconf compatibility_level=3.6" and "postfix reload"
postfix/postfix-script: the Postfix mail system is running: PID: 971

Фрагмент электронной почты для отправки PHP

Если у вас установлен PHP, как и во всех хороших стеках (я просто в шоке), вы можете запустить этот небольшой фрагмент кода, чтобы отправить быстрое тестовое электронное письмо.

<?php
/*
* This is mailtest.php
*/
// Start session
session_name("Storybook");
 @session_start();
//require("/var/www/session2DB/Zebra.php");
// Create the Verify Request Mail
$email = 'itzbobwright@gmail.com';
$from    = 'wright@isoblock.com';
$subject = 'Email Test';
$headers = 'From: ' . $from . "rn" . 'Reply-To: ' . $from . "rn" . 'X-Mailer: PHP/' . phpversion() . "rn" . 'MIME-Version: 1.0' . "rn" . 'Content-Type: text/html; charset=UTF-8' . "rn";
// Update the activation variable below
$message = '<p>Hello.<br>Please use the activation link.</p>';
mail($email, $subject, $message, $headers);
echo '<div class="alert alert-success">
  <h2>task complete.</h2></div>';
?>

Настройка голубятни

Используя такой агент, как MUTT или Alpine с агентом пересылки почты (MTA) Postfix, теперь вы можете легко отправлять и получать электронную почту. . Но эти консольные почтовые пользовательские агенты (MUA) ограничивают нас только текстовыми электронными письмами, которые не очень интересны. Или, по крайней мере, мои не очень захватывающие. В следующей части настройки почтового сервера мы добавим Dovecot в качестве агента доставки почты (MDA) в виде почтового сервера IMAP. Как мы уже отмечали ранее, Dovecot используется по умолчанию в Ubuntu 22 Server.

Установите Dovecot с помощью команды sudo apt install dovecot-core dovecot-imapd, чтобы включить основные компоненты, или используйте sudo apt install dovecot-common, чтобы установить весь пакет. , возможно, с большим количеством функций, чем будет использоваться.

После завершения установки перейдите в каталог /etc/dovecot и откройте файл dovecot.conf в своем любимом текстовом редакторе. Очистите весь файл и вместо этого вставьте следующее содержимое, заменив соответствующие значения для файлов сертификатов SSL.

disable_plaintext_auth = no
mail_privileged_group = mail
mail_location = mbox:~/mail:INBOX=/var/mail/%u
userdb {
  driver = passwd
}
passdb {
  args = %s
  driver = pam
}
protocols = " imap"
namespace inbox {
  inbox = yes

  mailbox Trash {
    auto = subscribe # autocreate and autosubscribe the Trash mailbox
    special_use = Trash
  }
  mailbox Sent {
    auto = subscribe # autocreate and autosubscribe the Sent mailbox
    special_use = Sent
  }
}
listen = *, ::
service auth {
  unix_listener /var/spool/postfix/private/auth {
    group = postfix
    mode = 0660
    user = postfix
  }
}
ssl = yes

# PEM encoded X.509 SSL/TLS certificate and private key.
ssl_cert = </etc/letsencrypt/live/isoblock.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/isoblock.com/privkey.pem

Теперь перезапустите службу Dovecot, чтобы применить эти изменения с помощью консольной команды sudo systemctl reload dovecot.

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

Наш почтовый сервер использует протокол IMAP, поэтому необходимо выбрать соответствующий почтовый клиент для подключения к нему. Клиент, который хорошо работает по нулевой цене, — это почтовый клиент Thunderbird. Thunderbird собирает пожертвования, это их единственный механизм поддержки. Аналогичным платным почтовым клиентом является почтовый ящик. Я использую оба из них.

Давайте воспользуемся почтовым ящиком в этом примере. Итак, на главной странице почтового ящика выберите пункт меню «Новая учетная запись почты», в результате чего появится второй экран из этой пары, показанный ниже.

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

Если вы жили правильно, на этом этапе вы должны быть вознаграждены работающим сервером электронной почты IMAP, к которому вы можете подключиться с помощью клиента, такого как Postbox или Thunderbird, через интерфейс, похожий на следующий ниже. из клиента Thunderbird.

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

Как Настройте сервер электронной почты Postfix с помощью Dovecot

В этом учебном пособии вы узнаете, как настроить базовый почтовый сервер, и немного узнаете об Postfix MTA (агенте пересылки почты)

Как установить и Настройте Postfix в Ubuntu 20.04

Postfix — это популярный агент передачи почты (MTA) с открытым исходным кодом, который можно использовать для маршрутизации и доставки электронной почты на сервер GNU/Linux.

Заключение

Одна из статей, которую я прочитал, когда делала это, говорила, что наличие почтового сервера, работающего на Linux с Postfix и Dovecot, ни в коем случае не делает вас профессионалом в области электронной почты. Теперь, хотя все это вполне может быть правдой, на данный момент у меня есть собственный почтовый сервер IMAP, который был моей непосредственной и основной целью. Моя второстепенная цель состояла в том, чтобы записать то, что я узнал, и поделиться этим в надежде, что это может быть полезно другим. Работаем над мокшей.

Спасибо моей семье, друзьям и Богу за отличную поддержку!

Комментарии, критика и исправления всегда приветствуются.

:::информация Более ранняя версия этой статьи находится здесь.

:::


Оригинал