Настройка sendmail


Как настроить TLS и SSL

Начиная с версии 8.11, sendmail поддерживает защиту ESMTP соединения с помощью расширения STARTTLS (RFC 2487). Для настройки TLS прежде всего нужно создать SSL сертификат и секретный DSA-ключ для шифрования:

# mkdir -m 700 /etc/mail/certs

# openssl dsaparam 1024 -out dsa1024.pem

# openssl req -x509 -nodes -days 365 -newkey dsa:dsa1024.pem

-out /etc/mail/certs/mycert.pem -keyout /etc/mail/certs/mykey.pem

# rm -f dsa1024.pem

Если у вас уже есть ключ шифрования, то для создания сертификата следует подать команду:

# openssl req -x509 -new -days 365 -key /etc/mail/certs/mykey.pem

-out /etc/mail/certs/mycert.pem

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

# openssl x509 -in /etc/mail/certs/mycert.pem -text

Если вы не планируете использовать TLS для авторизации (не путать с SMTP авторизацией) или используете сертификат, подписанный самим собой, следует создать symlink:

# ln -s /etc/mail/certs/mycert.pem /etc/mail/certs/CAcert.pem

В противном случае следует поместить сертификат авторизации в файл /etc/mail/certs/CAcert.pem. Не забудьте установить права, запрещающие чтение/запись файлов сертификатов и ключей простым пользователям:

# chmod 600 /etc/mail/certs/*

Теперь следует настроить sendmail. В .mc файле конфигурации нужно добавить следующие строки:

define(`CERT_DIR', `MAIL_SETTINGS_DIR`'certs')dnl

define(`confCACERT_PATH', `CERT_DIR')dnl

define(`confCACERT', `CERT_DIR/CAcert.pem')dnl

define(`confSERVER_CERT', `CERT_DIR/mycert.pem')dnl

define(`confSERVER_KEY', `CERT_DIR/mykey.pem')dnl

define(`confCLIENT_CERT', `CERT_DIR/mycert.pem')dnl

define(`confCLIENT_KEY', `CERT_DIR/mykey.pem')dnl

После добавления вышеуказанных строк в файл конфигурации следует пересобрать его с помощью m4 (см. файл /usr/share/sendmail/README) и рестартовать уже запущенный sendmail:

# kill -HUP `head -1 /var/run/sendmail.pid`

Для проверки настроек TLS можно воспользоваться командой telnet:

# telnet localhost smtp

Trying 127.0.0.1...

Connected to localhost.

Escape character is '^]'.

220 form.home.lan ESMTP Sendmail 8.13.1/8.13.1; Wed, 17 Nov 2004 13:42:08 +0600

(NOVT)

EHLO localhost

250-form.home.lan Hello root@localhost.home.lan [127.0.0.1], pleased to meet you

250-ENHANCEDSTATUSCODES

250-PIPELINING

250-8BITMIME

250-SIZE

250-DSN

250-ETRN

250-AUTH PLAIN

250-STARTTLS

250-DELIVERBY

250 HELP

При правильной настройке в ответе сервера на команду "EHLO" должна присутствовать строка "250-STARTTLS". Смотрите также по данной теме starttls(8), ssl(8), http://www.sendmail.org/~ca/email/starttls.html, /usr/share/sendmail/README, а также пошаговое руководство.

Для того чтобы научить sendmail работать по SSL (без использования STARTTLS), нужно создать и добавить в .mc файл сертификат и ключ для шифрования как описано выше, а также добавить следующие строки:

DAEMON_OPTIONS(`Name=MTA')dnl

DAEMON_OPTIONS(`Port=465, Name=MTA-SSL, M=s')dnl

Не забудьте перезапустить sendmail:

# kill -HUP `head -1 /var/run/sendmail.pid`


Для проверки можно воспользоваться командой openssl:

# openssl s_client -connect localhost:465

CONNECTED(00000004)

[skip some output...]

---

SSL handshake has read 1409 bytes and written 288 bytes

---

New, TLSv1/SSLv3, Cipher is DHE-DSS-AES256-SHA

Server public key is 1024 bit

SSL-Session:

Protocol : TLSv1

Cipher : DHE-DSS-AES256-SHA

Session-ID:

28CAD859854BC30F61B0013DF835E69CDB0037D82FD741F9C7A56DD1E25B655

Session-ID-ctx:

Master-Key:

F5BA53F5C0659E3E12D1057FE8D4AEA8177A868169B35949793ABECED7870A29FF4B3AFB9D479EA86618185D5192B837

Key-Arg : None

Start Time: 1119252698

Timeout : 300 (sec)

Verify return code: 18 (self signed certificate)

---

220 cvs.openbsd.ru ESMTP Sendmail 8.12.11/8.12.11; Mon, 20 Jun 2005 11:37:06 +0400 (MSD)

Как настроить SMTP авторизацию

Начиная с версии 8.10, sendmail поддерживает SMTP авторизацию (RFC 2554). Для настройки авторизации следует пересобрать sendmail с поддержкой SASL. Для этого следует установить package cyrus-sasl2 или порт security/cyrus-sasl2. Для включения поддержки SASL нам потребуется установить набор site.tar.gz:

# cd /etc

# tar xfz ...путь.../site.tar.gz

# ln -sf site/mk.conf .

После установки набора site.tar.gz следует отредактировать файл /etc/mk.conf для включения поддержки SASL в sendmail:

SENDMAIL_SASL?= Yes # Включить поддержку SASL2

Теперь нужно пересобрать sendmail:

# cd /usr/src/gnu/usr.sbin/sendmail

# make obj && make cleandir && make depend && make && make install

Далее следует создать файл конфигурации SASL для sendmail (/usr/lib/sasl2/Sendmail.conf):

pwcheck_method: saslauthd

Добавляем в /etc/rc.local строки для запуска saslauthd:

if [ -x /usr/local/sbin/saslauthd ]; then

echo -n ' saslauthd'; /usr/local/sbin/saslauthd -a getpwent

fi

Теперь остается только включить поддержку авторизации в .mc файле конфигурации sendmail:

dnl

dnl Эту опцию следует включить чтобы запретить авторизацию с помощью

dnl механизмов PLAIN и LOGIN по незащищенному соединению

dnl (без использования TLS).

dnl

define(`confAUTH_OPTIONS', `p')dnl

dnl

dnl Список допустимых механизмов авторизации. Для всех механизмов

dnl кроме PLAIN и LOGIN, невозможна авторизация по системному файлу

dnl паролей. Для них следует использовать sasldb или другие способы

dnl авторизации (см. документацию sasl2).

dnl

define(`confAUTH_MECHANISMS', `DIGEST-MD5 CRAM-MD5 PLAIN LOGIN')dnl

dnl

dnl Список механизмов, авторизация по которым разрешает использовать

dnl сервер для пересылки почты (relaying).

dnl

TRUST_AUTH_MECH(`DIGEST-MD5 CRAM-MD5 PLAIN LOGIN')dnl

Не забудьте перезапустить sendmail:

# kill -HUP `head -1 /var/run/sendmail.pid`


Для проверки настройки авторизации можно воспользоваться командой telnet:


# telnet localhost smtp

Trying 127.0.0.1...

Connected to localhost.

Escape character is '^]'.

220 form.home.lan ESMTP Sendmail 8.13.1/8.13.1; Wed, 17 Nov 2004 13:42:08 +0600

(NOVT)

EHLO localhost

250-form.home.lan Hello root@localhost.home.lan [127.0.0.1], pleased to meet you

250-ENHANCEDSTATUSCODES

250-PIPELINING

250-8BITMIME

250-SIZE

250-DSN

250-ETRN

250-AUTH DIGEST-MD5 CRAM-MD5

250-STARTTLS

250-DELIVERBY

250 HELP


При правильной настройке в ответе сервера на команду "EHLO" должна присутствовать строка "250-AUTH". В случае если в файле конфигурации запрещено использование PLAIN авторизации по незащищенному соединению, вместо команды telnet следует использовать команду openssl:

# openssl s_client -starttls smtp -connect localhost:smtp

Смотрите также /usr/share/sendmail/README, Как настроить TLS и SSL.

Как заставить sendmail использовать /etc/hosts

По умолчанию sendmail использует в первую очередь DNS. Чтобы заставить его сначала смотреть /etc/hosts, нужно создать файл /etc/mail/service.switch и прописать в нем следующую строку:

hosts files dns

После этого достаточно перезапустить sendmail:

# kill -HUP `head -1 /var/run/sendmail.pid`

Как научить sendmail использовать Maildir

По умолчанию sendmail использует mail.local в качестве локального агента доставки почты. При этом почта доставляется в формате стандартного BSD mailbox. Чтобы доставлять почту в Maildir, нам потребуется установить альтернативный агент доставки mail.buhal, который можно скачать отсюда.

Сначала нужно собрать и установить mail.buhal:

# make depend && make && make install

Далее следует указать mail.buhal в файле конфигурации sendmail в качестве локального агента доставки:

define(`LOCAL_MAILER_PATH', `/usr/libexec/mail.buhal')dnl

MODIFY_MAILER_FLAGS(`LOCAL', `-m')dnl

Теперь достаточно перекомпилировать файл конфигурации и перезапустить sendmail:

# kill -HUP `head -1 /var/run/sendmail.pid`

В портах OpenBSD в категории mail есть программы procmail и maildrop, которые также поддерживают формат Maildir и дополнительные расширения данного формата. Смотрите также мини-руководства по настройке procmail и maildrop.

Обновлено: 13.03.2015