Автор выбрал фонд Free and Open Source Fund для получения пожертвования в рамках программы Write for DOnations.
Postfix — это агент передачи почты (MTA), т. е. приложение для отправки и приема электронной почты. Его можно настроить так, чтобы только локальные приложения могли использовать его для отправки электронной почты. Это может быть полезно, если вам нужно регулярно рассылать по электронной почте уведомления от ваших приложений или у вас много исходящего трафика, а сторонний поставщик услуг электронной почты не разрешает такие объемы. Это облегченная альтернатива развертыванию полноценного сервера SMTP, позволяющая сохранить требуемые функции.
В этом обучающем модуле мы установим и настроим Postfix как сервер SMTP, доступный только для отправки. Также мы запросим бесплатные сертификаты TLS от Let’s Encrypt для вашего домена и настроим их использование для шифрования исходящей электронной почты.
your_domain
. Вы можете купить доменное имя на Namecheap, получить его бесплатно на Freenom или воспользоваться услугами любого предпочитаемого регистратора доменных имен.your_domain
, указывающая на публичный IP-адрес вашего сервера. В руководстве Введение в DigitalOcean DNS содержится подробная информация по их добавлению.Примечание. Имя хоста вашего сервера и имя вашего дроплета должны соответствовать your_domain
, т. к. DigitalOcean автоматически задает записи PTR для IP-адреса дроплета по его имени.
Для проверки имени хоста сервера можно ввести hostname
в командной строке. Вывод должен соответствовать имени, которое вы присвоили дроплету при его создании.
На этом шаге мы выполним установку Postfix. Быстрее всего будет установить пакет mailutils
, включающий Postfix и несколько дополнительных программ, которые можно использовать для тестирования отправки электронной почты.
Вначале обновите базу данных пакетов:
- sudo apt update
Затем выполните установку Postfix, запустив следующую команду:
- sudo apt install mailutils
Перед окончанием установки вы увидите окно настройки конфигурации Postfix:
По умолчанию используется опция Internet Site
(Сайт). Это наиболее подходящая опция для нашего случая, поэтому нажмите TAB
, а затем нажмите ENTER
. Если вы увидите только текст описания, нажмите TAB
для выбора пункта OK
, а затем нажмите ENTER
.
Если опция не отображается автоматически, запустите следующую команду:
- sudo dpkg-reconfigure postfix
После этого откроется еще один диалог настройки конфигурации System mail name (имя системной почты):
Имя системной почты System mail name должно совпадать с именем, которое вы присвоили своему серверу при его создании. После завершения настройки нажмите TAB
, а затем нажмите ENTER
.
Мы установили Postfix и готовы приступить к настройке.
На этом шаге мы настроим Postfix для отправки и приема электронных писем только с сервера, на котором он запущен, т. е. с localhost
.
Для этого нужно настроить Postfix для прослушивания только интерфейса виртуальной сети loopback, который сервер использует для внутренней связи. Для внесения изменений потребуется отредактировать главный файл конфигурации Postfix с именем main.cf
, хранящийся в каталоге etc/postfix
.
Откройте его для редактирования в предпочитаемом текстовом редакторе:
- sudo nano /etc/postfix/main.cf
Найдите следующие строки:
. . .
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
. . .
Задайте для параметра inet_interfaces
значение loopback-only
:
. . .
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = loopback-only
. . .
Также необходимо изменить директиву mydestination
, которая указывает список доменов, почта с которых доставляется через транспорт local_transport
. По умолчанию значения выглядят примерно так:
. . .
mydestination = $myhostname, your_domain, localhost.com, , localhost
. . .
Измените строку, чтобы она выглядела следующим образом:
. . .
mydestination = localhost.$mydomain, localhost, $myhostname
. . .
Если ваш домен фактически является субдоменом, и вы хотите, чтобы сообщения электронной почты выглядели отправленными с главного домена, вы можете добавить следующую строку в конец файла main.cf
:
...
masquerade_domains = your_main_domain
Необязательный параметр masquerade_domains
указывает, для каких доменов в адресе электронной почты будут урезаться субдомены.
После внесения изменений сохраните и закройте файл.
Примечание. В случае хостинга нескольких доменов на одном сервере другие домены также можно передать Postfix с помощью директивы mydestination
.
Затем перезапустите Postfix, выполнив следующую команду:
- sudo systemctl restart postfix
Вы настроили Postfix только для отправки почты с вашего сервера. Теперь протестируем настройку, отправив тестовое сообщение на адрес электронной почты.
На этом шаге мы проверим, может ли Postfix отправлять электронные сообщения на внешний адрес электронной почты, используя команду mail
, которая входит в пакет mailutils
, установленный на первом шаге.
Выполните следующую команду для отправки тестового письма:
- echo "This is the body of the email" | mail -s "This is the subject line" your_email_address
Вы можете изменить тело и тему письма по своему желанию. Обязательно замените your_email_address
действующим адресом электронной почты, к которому у вас есть доступ.
Проверьте почтовый ящик, на адрес которого вы отправили сообщение. Вы должны увидеть это сообщение в папке «Входящие». Если его там нет, проверьте папку «Нежелательная почта». Сейчас все электронные письма отправляются без шифрования, и поэтому провайдеры могут посчитать их спамом. Шифрование мы настроим немного позднее, на шаге 5.
Если при выполнении команды mail
появится сообщение об ошибке, или вы не получите письмо в течение длительного времени, проверьте правильность измененной вами конфигурации Postfix и соответствие имени сервера и имени хоста вашему домену.
С этой конфигурацией адрес в поле «От
» в отправляемых тестовых письмах будет иметь вид your_user_name@your_domain
, где your_user_name
— имя пользователя сервера, от лица которого вы запустили команду.
Вы отправили с сервера электронное письмо и убедились, что оно успешно получено. На следующем шаге мы настроим переадресацию электронной почты для пользователя root
.
На этом шаге мы настроим переадресацию электронной почты для пользователя root
, чтобы сгенерированные системой сообщения, отправляемые на этот адрес, пересылались на внешний адрес электронной почты.
Файл /etc/aliases
содержит список альтернативных имен получателей электронных писем. Откройте его для редактирования:
- sudo nano /etc/aliases
По умолчанию он выглядит так:
# See man 5 aliases for format
postmaster: root
Единственная содержащаяся в нем директива предписывает пересылать сгенерированные системой электронные сообщения пользователю root
.
Добавьте в конец файла следующую строку:
...
root: your_email_address
Эта строка предписывает пересылать электронные письма, отправленные пользователю root
, на указанный адрес электронной почты. Обязательно замените your_email_address
своим личным адресом электронной почты. После внесения изменений сохраните и закройте файл.
Для вступления изменений в силу выполните следующую команду:
- sudo newaliases
При запуске команды newaliases
будет построена база данных псевдонимов, используемых командой mail
. Эти псевдонимы берутся из файла конфигурации, который вы только что отредактировали.
Протестируйте отправку электронных писем пользователю root
с помощью следующей команды:
- echo "This is the body of the email" | mail -s "This is the subject line" root
Письмо должно прийти на указанный вами почтовый ящик. Если его там нет, проверьте папку «Нежелательная почта».
На этом шаге мы настроили переадресацию сгенерированных системой сообщений на ваш адрес электронной почты. Теперь мы можем включить шифрование сообщений, чтобы все отправляемые вашим сервером электронные письма были защищены от модификации во время пересылки и считались легитимными.
Теперь вы можете включить шифрование SMTP, запросив бесплатный сертификат TLS от Let’s Encrypt для вашего домена (с помощью Certbot) и настроив Postfix для использования этого сертификата при отправке сообщений.
Certbot содержится в репозиториях пакетов Ubuntu по умолчанию, и вы можете установить его с помощью следующей команды:
- sudo apt install certbot
В диалоге подтверждения введите Y
и нажмите ENTER
.
При начальной настройке сервера вы установили простой брандмауэр ufw
. Вам нужно настроить его, чтобы разрешить трафик через порт HTTP 80
, и тем самым завершить подтверждение вашего домена. Запустите следующую команду для его активации:
- sudo ufw allow 80
Итоговый результат будет выглядеть следующим образом:
OutputRule added
Rule added (v6)
Теперь порт открыт, и мы можем запустить Certbot для получения сертификата:
- sudo certbot certonly --standalone --rsa-key-size 4096 --agree-tos --preferred-challenges http -d your_domain
Эта команда предписывает Certbot выдавать сертификаты с размером ключа RSA 4096 бит, запустить временный отдельный веб-сервер (--standalone
) для проверки и выполнить проверку через порт 80
(--preferred-challenges http
). Перед запуском команды обязательно замените your_domain
именем вашего домена и введите свой адрес электронной почты, когда система его запросит.
Результат будет выглядеть примерно следующим образом:
OutputSaving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator standalone, Installer None
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for `your_domain`
Waiting for verification...
Cleaning up challenges
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/your_domain/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/your_domain/privkey.pem
Your cert will expire on 2020-07-11. To obtain a new or tweaked
version of this certificate in the future, simply run certbot
again. To non-interactively renew *all* of your certificates, run
"certbot renew"
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
Как указано в примечаниях, ваши сертификат и файл закрытого ключа сохранены в каталоге /etc/letsencrypt/live/your_domain
.
Получив сертификат, откройте файл main.cf
для редактирования:
- sudo nano /etc/postfix/main.cf
Найдите следующий раздел:
# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_tls_security_level=may
smtp_tls_CApath=/etc/ssl/certs
smtp_tls_security_level=may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
Замените your_domain
именем вашего домена, где это необходимо. Ваши настройки TLS для Postfix будут обновлены:
# TLS parameters
smtpd_tls_cert_file=/etc/letsencrypt/live/your_domain/fullchain.pem
smtpd_tls_key_file=/etc/letsencrypt/live/your_domain/privkey.pem
smtpd_tls_security_level=may
smtp_tls_CApath=/etc/ssl/certs
smtp_tls_security_level=may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
Закончив, сохраните и закройте файл.
Перезапустите Postfix, чтобы применить изменения:
- sudo systemctl restart postfix
Попробуйте отправить электронное письмо еще раз:
- echo "This is the body of an encrypted email" | mail -s "This is the subject line" your_email_address
Проверьте указанный вами адрес электронной почты. Возможно вы сразу же увидите сообщение в папке «Входящие», поскольку провайдеры с меньшей вероятностью помечают шифрованные сообщения как спам.
Вы можете использовать клиент для проверки технической информации об электронном сообщении, чтобы убедиться, что сообщение действительно шифруется.
Теперь у вас имеется сервер электронной почты, предназначенный только для отправки и работающий на базе Postfix. Благодаря шифрованию всех исходящих сообщений мы снизили вероятность того, что провайдеры сразу же пометят ваши сообщения как спам. Если вы делаете это при разработке, данной меры должно быть достаточно.
Если вы намереваетесь отправлять электронные письма потенциальным пользователям сайта (например, письма для подтверждения регистрации на форуме), попробуйте настроить записи SPF, чтобы электронные письма с вашего сервера выглядели еще более легитимными.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!
Sign up for Infrastructure as a Newsletter.
Working on improving health and education, reducing inequality, and spurring economic growth? We'd like to help.
Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.