Как отправить электронную почту через внешнюю службу SMTP с помощью Sendmail на FreeBSD 10.1

Вступление

Одной из наиболее распространенных потребностей при настройке нового веб-сервера является отправка электронной почты. Самый безопасный и простой способ сделать это - подключить ваш сервер к почтовой службе, такой как SendGrid или Amazon SES. Использование внешней службы поможет вам избежать ловушек, таких как IP-адрес вашего сервера, попадающий в черный список служб антиспама.

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

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

цели

В этом уроке мы будем:

  • Перекомпилируйте Sendmail с поддержкой SASL, чтобы сервер мог аутентифицироваться с помощью внешней службы

  • Настройте почтовый сервер Sendmail с соответствующими настройками

  • Проверьте исходящую почту, чтобы убедиться, что почта отправляется с вашего сервера

Предпосылки

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

  • Капля FreeBSD 10.1

  • Получите доступ к своей учетной записи * root * или учетной записи с привилегиями sudo, следуя этому tutorial

  • Знание того, как редактировать текстовые файлы из командной строки

  • Вы должны установить ваш любимый текстовый редактор, такой как + nano или` + vim`

  • Бесплатная учетная запись SendGrid для тестирования или другой почтовый провайдер, предоставляющий данные SMTP для службы. Вам понадобятся эти данные для вашего внешнего почтового провайдера:

  • Имя хоста SMTP

  • имя пользователя

  • пароль

  • Имя хоста вашего сервера, которое вы можете найти, запустив + hostname +

Этот урок легче всего следовать как * root *:

sudo su

Шаг 1 - Настройка управления пакетами

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

Все шаги включены здесь, но если хотите, вы можете следовать вместе с official Руководство FreeBSD.

Некоторое программное обеспечение будет скомпилировано из Ports Collection FreeBSD, поэтому сначала нужно убедиться, что оно актуально.

portsnap fetch && portsnap update

Утилита Portmaster позволит нам легко компилировать программное обеспечение из дерева портов, поэтому давайте установим его.

pkg install portmaster

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

echo 'WITH_PKGNG=yes' >> /etc/make.conf

Шаг 2 - Установите и настройте пакет SASL

Используя нашу недавно установленную утилиту Portmaster, скомпилируйте и установите пакет + cyrus-sasl2 + с помощью следующей команды. Это используется для аутентификации с помощью внешней почтовой службы.

portmaster security/cyrus-sasl2

При появлении запроса убедитесь, что установлен флажок * LOGIN *, что должно быть по умолчанию. Выберите * OK * и дважды нажмите + ENTER +, чтобы выбрать все значения по умолчанию. При появлении запроса ответьте + y +, чтобы обновить и установить ваши пакеты. Вы должны ожидать большого количества вывода, заканчивающегося:

Output===>>> Done displaying pkg-message files

===>>> The following actions were performed:
   Upgrade of pkg-1.4.12 to pkg-1.5.0
   Upgrade of perl5-5.18.4_11 to perl5-5.18.4_13
   Installation of security/cyrus-sasl2 (cyrus-sasl-2.1.26_9)

Отредактируйте файл (создав его, если он еще не существует) + / usr / local / lib / sasl2 / Sendmail.conf + и добавьте в него следующее:

vim /usr/local/lib/sasl2/Sendmail.conf

/usr/local/lib/sasl2/Sendmail.conf

pwcheck_method: saslauthd

Затем установите сервис + saslauthd + для аутентификации SASL. При появлении запроса примите значения по умолчанию и выберите * OK *.

portmaster security/cyrus-sasl2-saslauthd

Отредактируйте файл конфигурации системы + / etc / rc.conf + и добавьте следующие параметры конфигурации в конец файла. Замените ++ на имя хоста вашего сервера.

vim /etc/rc.conf

/etc/rc.conf

hostname = ""
sendmail_enable="YES"
saslauthd_enable="YES"

Теперь запустите сервис + saslauthd +.

service saslauthd start

Вы должны увидеть этот вывод:

Outputusage: hostname [-fs] [name-of-host]
usage: hostname [-fs] [name-of-host]
Starting saslauthd.

Отредактируйте файл + / etc / make.conf +, добавив следующие параметры, чтобы система знала, какие параметры SASL Sendmail использовать.

vim /etc/make.conf

/etc/make.conf

SENDMAIL_CFLAGS=-I/usr/local/include/sasl -DSASL
SENDMAIL_LDFLAGS=-L/usr/local/lib
SENDMAIL_LDADD=-lsasl2

Шаг 3 - Перекомпилируйте Sendmail с поддержкой SASL

В этом разделе мы перекомпилируем Sendmail для использования аутентификации SASL.

Теперь нам нужно синхронизировать последний исходный код для FreeBSD 10.1.

Во-первых, мы установим Subversion, чтобы мы могли легко получить необходимый исходный код.

pkg install subversion

Теперь мы можем проверить последний код для перекомпиляции непосредственно с веб-сайта проекта FreeBSD, чтобы обновить наши исходники в + / usr / src +.

svn co http://svn.freebsd.org/base/releng/10.1/ /usr/src

Следующие команды нужно запускать последовательно, по одной группе за раз. Здесь мы говорим системе перекомпилировать (или перестроить) встроенные пакеты Sendmail с нашими новыми требованиями безопасности и входа в систему, а затем переустановить Sendmail.

cd /usr/src/lib/libsmutil
make cleandir && make obj && make
cd /usr/src/lib/libsm
make cleandir && make obj && make
cd /usr/src/usr.sbin/sendmail/
make cleandir && make obj && make && make install

Шаг 4 - Настройте Sendmail

Вы сделали это так далеко, и мы сделали перекомпиляцию вещей. Давайте продолжим!

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

Сначала мы будем в безопасности и создадим резервную копию каталога + / etc / mail.

cp -a /etc/mail /etc/mail.bak

Введите каталог конфигурации почты.

cd /etc/mail

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

make

Создайте и отредактируйте файл + relay-domains +, добавив следующие параметры. Замените ` на ваше полное доменное имя, а ` на ваше доменное имя.

vim /etc/mail/relay-domains

/ и т.д. / почта / релейные-домены

Создайте и отредактируйте файл + local-host-names +, добавив следующие параметры. Замените переменные на ваши локальные имена хостов.

vim /etc/mail/local-host-names

/ И т.д. / почта / местные-хост-имена

Создайте и отредактируйте файл + access +, добавив следующие параметры. (Обратите внимание, что вам нужно изменить адрес + smtp.sendgrid.net +, если вы используете поставщика, отличного от SendGrid.)

vim /etc/mail/access

/ И т.д. / почта / доступ

smtp.sendgrid.net      OK
GreetPause:localhost    0

Создайте и отредактируйте файл + authinfo +, добавив следующие параметры. Замените ` и ` на вашу учетную запись SendGrid и пароль. Если вы решили использовать другого внешнего почтового провайдера, вам также нужно изменить значение + smtp.sendgrid.net + в обеих строках на адрес сервера вашего провайдера.

vim /etc/mail/authinfo

/ И т.д. / почта / authinfo

AuthInfo:smtp.sendgrid.net "U:root" "I:" "P:" "M:LOGIN"
AuthInfo:smtp.sendgrid.net:587 "U:root" "I:" "P:" "M:LOGIN"

Файлы + access + и + authinfo + действительно будут простыми базами данных, из которых Sendmail считывает параметры конфигурации. Это может показаться странным, особенно если вы новичок во FreeBSD и Sendmail, но вам просто нужно запустить эти две безболезненные команды из + / etc / mail / + для генерации баз данных.

makemap hash access < access
makemap hash authinfo < authinfo

Теперь мы отредактируем базовую конфигурацию, сгенерировав несколько команд. Отредактируйте файл + .mc +. (Вы можете + ls + каталог + / etc / mail / +, если вы не уверены в имени файла.)

vim /etc/mail/.mc

Вставьте следующие строки конфигурации между блоком + dnl define (+ SMART_HOST ', + your.isp.mail.server') + и комментарием `+ dnl Раскомментируйте первую строку, чтобы изменить расположение блока + по умолчанию как: показано ниже.

Вам нужно изменить адрес + smtp.sendgrid.net + на адрес сервера вашего провайдера, если вы не используете учетную запись SendGrid, как в примере. Вам также необходимо обновить два экземпляра ++ до домена, в котором вы хотите, чтобы почта была * от *. (Обратите внимание, что вам может потребоваться установить соответствующий TXT, DKIM, PTR и т. Д. записи, чтобы избежать сообщений о подмене.)

your_server.example.com.mc»> / и т.д. / почта / .mc

dnl define(`SMART_HOST', `your.isp.mail.server')

dnl SET OUTBOUND DOMAIN
MASQUERADE_AS(`')
MASQUERADE_DOMAIN()
FEATURE(masquerade_envelope)
FEATURE(masquerade_entire_domain)

dnl SMART HOST CONFIG
define(`SMART_HOST', `smtp.sendgrid.net')dnl
define(`RELAY_MAILER_ARGS', `TCP $h 587')dnl
define(`confAUTH_MECHANISMS', `GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
FEATURE(`authinfo',`hash /etc/mail/authinfo.db')dnl
TRUST_AUTH_MECH(`GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl

dnl Uncomment the first line to change the location of the default

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

Второй блок определяет, куда мы хотим смейзировать хост нашу почту, включая порт, методы аутентификации и нашу информацию аутентификации, которую мы настроили на предыдущем шаге. Обратите внимание, что мы ссылаемся на файл + / etc / mail / authinfo.db +.

Теперь давайте применим внесенные нами изменения. Убедитесь, что вы все еще находитесь в каталоге + / etc / mail / +. Убедитесь, что Sendmail запущен:

service sendmail start

Обновление нашей конфигурации:

make
make install restart

Перезапустите Sendmail:

service sendmail restart

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

Шаг 5 - Отправить тестовое письмо

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

Используйте команду + mailx +, чтобы отправить тестовое сообщение на реальную учетную запись электронной почты, которую вы используете каждый день.

mailx

При появлении запроса введите + test или что-либо еще для субъекта, а затем нажмите` + ENTER`.

Subject:

Затем вам будет представлен только курсор и возможность написать текст вашего тестового электронного письма. Просто снова напишите одно слово + test и снова нажмите` + ENTER`.

test

Вы должны сказать + mailx +, что вы закончили писать свое сообщение; чтобы сделать это, мы должны завершить сообщение одним +. + и нажать + ENTER + в последний раз. Вы сразу увидите + EOT + в качестве подтверждения этого.

.
EOT

Затем выполните следующую команду, чтобы убедиться, что почтовая очередь пуста и наше сообщение отправлено.

mailq

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

/var/spool/mqueue is empty
               Total requests: 0

Проверьте свою электронную почту сейчас, чтобы убедиться, что сообщение пришло. Это должно быть от * freebsd @ *.

Слепое доверие к тому факту, что почтовая очередь пуста, не является верным тестом успеха. Даже если вы уже получили сообщение, вам нужно знать основы просмотра журналов почты. Запустите следующую команду.

tail -f /var/log/maillog

Две клавиши, которые вы ищете в выводе журнала:

  • * + Отправлено (<идентификатор сообщения> Сообщение принято к доставке) + *

  • * `+ Реле = smtp.sendgrid.net. [208.43.76.147], dsn = 2.0.0, stat = Отправлено (незавершенная доставка) + `*

Убедитесь, что вы можете увидеть эти сообщения в журнале ниже.

Mail LogFeb 11 04:09:13 your_server sm-mta[49080]: t1B49CW0049080: from=<freebsd@your_server>, size=331, class=0, nrcpts=1, msgid=<201502110409.t1B49CZ4049079@your_server>, proto=ESMTP, daemon=Daemon0, relay=localhost [127.0.0.1]
Feb 11 04:09:13 your_server sendmail[49079]: t1B49CZ4049079: [email protected], ctladdr=freebsd (1001/1001), delay=00:00:01, xdelay=00:00:01, mailer=relay, pri=30040, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (t1B49CW0049080 Message accepted for delivery)
Feb 11 04:09:13 your_server sm-mta[49082]: STARTTLS=client, relay=smtp.sendgrid.net., version=TLSv1/SSLv3, verify=FAIL, cipher=AES128-GCM-SHA256, bits=128/128
Feb 11 04:09:13 your_server sm-mta[49082]: t1B49CW0049080: to=<[email protected]>, ctladdr=<freebsd@your_server> (1001/1001), delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=30331, relay=smtp.sendgrid.net. [208.43.76.147], dsn=2.0.0, stat=Sent (Delivery in progress)

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

Чтобы выполнить живое тестирование и устранить неполадки, вы можете открыть два сеанса терминала и оставить команду + tail -f / var / log / maillog в одном, а вы отправите тестовые сообщения в другом.

Заключение

Теперь вы готовы начать отправку исходящей электронной почты из вашей капли FreeBSD через SendGrid или любую другую почтовую службу, которая вам нравится. Любые веб-сайты или веб-приложения, которые вы развернете, теперь смогут воспользоваться этим с минимальной конфигурацией или без нее.

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

Related