Использование SMTP-AUTH в FreeBSD на базе MTA=Sendmail-8.13.x.


Важное, в OS FreeBSD sendmail встроен в систему и является default'ным MTA.
Тем не менее в портах тоже есть sendmail, сборка sendmail из портов позволяет
включить много больше функциональных возможностей в отличие от системного:

# Options to define Features:
# SENDMAIL_WITHOUT_IPV6=yes
# SENDMAIL_WITHOUT_MILTER=yes
# SENDMAIL_WITHOUT_NIS=yes
# SENDMAIL_WITHOUT_SHMEM=yes
# SENDMAIL_WITH_TLS=yes
# SENDMAIL_WITH_SMTPS=yes
# SENDMAIL_WITH_SASL=yes
# SENDMAIL_WITH_SASL2=yes
# SENDMAIL_WITH_LDAP=yes
# SENDMAIL_WITH_BERKELEYDB_VER=2
# SENDMAIL_WITH_BERKELEYDB_VER=3
# SENDMAIL_WITH_BERKELEYDB_VER=4
# SENDMAIL_WITH_BERKELEYDB_VER=41
# SENDMAIL_WITH_BERKELEYDB_VER=42
# SENDMAIL_WITH_BERKELEYDB_VER=43
# SENDMAIL_WITH_SOCKETMAP=yes
# SENDMAIL_WITH_CYRUSLOOKUP=yes
# SENDMAIL_WITH_PICKY_HELO_CHECK=yes
# SENDMAIL_WITH_SHARED_MILTER=yes

Вопрос, если мы устанавливаем sendmail из портов в качестве PREFIX (куда
он будет установлен) будет использоваться /usr/local, а как быть с системным
sendmail, не будут ли они мешать друг другу?

Нет, не будут, в этом плане ВСЕ продумано, посмотрим на файл

/etc/mail/mailer.conf:
#
# Execute the "real" sendmail program, named /usr/libexec/sendmail/sendmail
#
sendmail /usr/libexec/sendmail/sendmail
send-mail /usr/libexec/sendmail/sendmail
mailq /usr/libexec/sendmail/sendmail
newaliases /usr/libexec/sendmail/sendmail
hoststat /usr/libexec/sendmail/sendmail
purgestat /usr/libexec/sendmail/sendmail

Этот файл использует mailwrapper для запуска настоящего sendmail, который
реально - /usr/libexec/sendmail/sendmail. А утилита:
/usr/sbin/sendmail - это всего лишь символьный линк на mailwrapper.
Соответственно, если мы установим sendmail из портов, нам нужно будет
изменить файл /etc/mail/mailer.conf, чтобы mailwrapper вместо системного
sendmail - /usr/libexec/sendmail/sendmail, стал использовать тот что
установили из портов - /usr/local/sbin/sendmail:

/etc/mail/mailer.conf:
sendmail /usr/local/sbin/sendmail
send-mail /usr/local/sbin/sendmail
mailq /usr/local/sbin/sendmail
newaliases /usr/local/sbin/sendmail
hoststat /usr/local/sbin/sendmail
purgestat /usr/local/sbin/sendmail

Теперь вместо системного sendmail у нас будет использоваться тот что
установили из портов.
Только НЕ ЗАБЫВАЙТЕ об этом, при апгрейде и пересборке системы, это можно
отнести и к openssl и openssh из портов и ряду других утилит.
Если вы не хотите чтобы при пересборке ваши порты, которые пересекаются
со встроенными в систему, были заменены системными, воспользуйтесь файлом
/etc/make.conf для задания необходимых переменных, как пример:

/etc/make.conf:
NO_OPENSSH=true # do not build OpenSSH
NO_OPENSSL=true # do not build OpenSSL (implies NO_KERBEROS/NO_OPENSSH)
NO_SENDMAIL=true # do not build sendmail and related programs

пример можно найти: /usr/share/examples/etc/make.conf

Теперь о сборке:
на данный момент в /usr/ports/mail есть несколько портов сборки sendmail:

[alone]~ > ls -la /usr/ports/mail | grep " sendmail"
drwxr-xr-x 4 100 sysct 512 17 янв 14:16 sendmail
drwxr-xr-x 2 100 sysct 512 18 июл 2004 sendmail-ldap
drwxr-xr-x 2 100 sysct 512 18 июл 2004 sendmail-sasl
drwxr-xr-x 3 100 sysct 512 14 авг 05:09 sendmail811
drwxr-xr-x 3 100 sysct 512 14 авг 05:09 sendmail812
[alone]~ >

Базовый порт: /usr/ports/mail/sendmail - это порт для sendmail-8.13.x
Отдельные порты:

/usr/ports/mail/sendmail-sasl - используется by default для сборки
sendmail с SASL/SASL2 и TLS, причем, для тех кому нужна поддержка SASL1
для sendmail-8.11.x - этот порт необходимо собирать:

Примечание: К сожалению порты изменяются и старые sendmail811
и sendmail812 могут быть удалены, тогда sendmail-sasl будет
относится только к базовому порту sendmail. Старые порты можно
взять из портов FreeBSD 5.4-RELEASE.

# make SENDMAIL_WITH_SASL=yes

в этом случае в качестве базового порта будет использоваться:

/usr/ports/mail/sendmail811 и мы получим sendmail-8.11.x с поддержкой SASL
в ином случае в качестве базового порта для сборки с поддержкой SASL и TLS
будет использоваться порт /usr/ports/mail/sendmail - в результате мы
получим sendmail-8.13.x с поддержкой SASL2 и TLS.

Для тех кто хочет собрать sendmail-8.12.x или 8.13.x исключительно под
собственные нужды, лучше использовать порты:

/usr/ports/mail/sendmail - для сборки sendmail-8.13.x с поддержкой
всего того что необходимо (опции необходимо смотреть в Makefile)

/usr/ports/mail/sendmail812 - для сборки sendmail-8.12.x с поддержкой
всего того что необходимо (опции необходимо смотреть в Makefile)

как уже было упомянуто, в любом конкретном порту, возможные опции для
сборки можно посмотреть в Makefile, ниже для примера кусок из
/usr/ports/mail/sendmail/Makefile:
...
# Options to define Features:
# SENDMAIL_WITHOUT_IPV6=yes
# SENDMAIL_WITHOUT_MILTER=yes
# SENDMAIL_WITHOUT_SHMEM=yes
# SENDMAIL_WITH_TLS=yes
# SENDMAIL_WITH_SMTPS=yes
# SENDMAIL_WITH_SASL=yes
# SENDMAIL_WITH_SASL2=yes
# SENDMAIL_WITH_LDAP=yes
# SENDMAIL_WITH_BERKELEYDB_VER=2
# SENDMAIL_WITH_BERKELEYDB_VER=3
# SENDMAIL_WITH_BERKELEYDB_VER=4
# SENDMAIL_WITH_BERKELEYDB_VER=41
# SENDMAIL_WITH_BERKELEYDB_VER=42
# SENDMAIL_WITH_SOCKETMAP=yes
# SENDMAIL_WITH_CYRUSLOOKUP=yes
# SENDMAIL_WITH_PICKY_HELO_CHECK=yes
...

можно подробнее посмотреть Makefile, но уже из верхнего видно что by default
sendmail будет собираться с опциями:

WITH_IPV6, WITH_MILTER и WITH_SHMEM.

Для тех кто хочет использовать SMTP-AUTH на базе SASL1, все очень подробно
и доступно описано:

http://www.freebsd.org/doc/ru_RU.KOI8-R/books/handbook/smtp-auth.html

но пункт 4 и сама статья описаны с расчетом использования сборки МИРА -
make buildworld, если же собирать и ставить нужную версию sendmail из
портов, можно смело использовать эту статью для настройки SMTP-AUTH.

Раз уж мы коснулись этой статьи, то вероятно следует внести поправки чтобы
можно было полноценно воспользоваться этой статьей
(моя выдержка из совета на opennet):

-------------------------- о статье в handbook ------------------------------
Там отсутствует ньюанс о том что необходимо собрать заранее две
библиотеки libsm и libsmutil.

Если расширить handbook, то правильно будет:

# cd /usr/src/lib/libsmutil/
# make clean
# make obj
# make depend
# make
# cd /usr/src/lib/libsm/
# make clean
# make obj
# make depend
# make
# cd /usr/src/usr.sbin/sendmail/
# make clean
# make obj
# make depend
# make

вот теперь все получится.

Другой вариант: пересобрать целиком мир
и третий вариант (наиболее удачный): собрать sendmail из портов
с нужными опциями.
-------------------------- о статье в handbook ------------------------------

Все тоже самое будет работать для сборки sendmail из sources с поддержкой SASL2,
только во всех пунктах заметить порт cyrus-sasl на cyrus-sasl2, и дополнительно
после установки порта cyrus-sasl2, установить порт cyrus-sasl2-saslauthd
а для /etc/make.conf:

# Add SMTP AUTH support to Sendmail
SENDMAIL_CFLAGS+= -I/usr/local/include -DSASL=2
SENDMAIL_LDFLAGS+= -L/usr/local/lib
SENDMAIL_LDADD+= -lsasl2

А вот использование системной авторизации для SASL2 можно взять из данного
описания.

Важное: при смене версий sendmail с 8.11.x -> 8.12.x/8.13.x следует
остановить sendmail и запустить его вручную для очистки ОЧЕРЕДИ!
Иначе новая версия не разгребет очередь оставшуюся от старой версии.
Для этого sendmail нужно запускать без перевода в режим демона,
сначал запустить для удаления писем у которых истекло время доставки, а
потом запустить чтобы sendmail разгреб всю очередь - опустошил ее, тоже
без демонизации.

Теперь шаг-за-шагом установка и настройка Sendmail-8.13.x из портов,
мы воспользуемся портом /usr/ports/mail/sendmail:

# cd /usr/ports/mail/sendmail
# make SENDMAIL_WITH_SASL2=yes install

сборка и установка завершена, приступаем к рекомендациям которые были
выданы на экран после выполнения верхней команды:

настраиваем SASL2 для авторизации через базу системных паролей:

- при сборке порта sendmail с SASL2 у нас должен автоматом установиться
порт cyrus-sasl2 и cyrus-sasl2-saslauthd или возможно они были установлены
ранее.

В новом cyrus-sasl2 сделано масса изменений в отличие от первой версии
(читайте об этом в документации, КАК СОБРАТЬ, КАК сконвертировать базы
от первой версии во вторую, как проверить и тд и тп)

Несколько слов о SASL2, теперь можно использовать единый демон авторизации
saslauthd, но можно вместо него использовать как и ранее базу sasldb,
ниже я попробую показать возможные варианты соответствия старой версии SASL1
и последних версий SASL1 и SASL2.

SASL1:
~~~~~~
метод использования native(родной) системной авторизации(passwd):
pwcheck_method: pwcheck

метод использования собственной базы SASL(sasldb):
pwcheck_method: sasldb

начиная с версии 1.5.26 можно использовать единый демон авторизации saslauthd:
pwcheck_method: saslauthd

SASL2:
~~~~~~
универсальный метод через демон saslauthd позволяет использовать разные
реализованные методы: getpwent - это и есть системная(pwcheck), pam, shadow,
sasldb и тд и тп, map saslauthd:

pwcheck_method: saslauthd

ps. для системной авторизации запуск демона saslauthd -a getpwent

метод использования собственной базы SASL(sasldb):
pwcheck_method: auxprop

ps. можно использовать альтернативные базы через так называемые плагины:
pwcheck_method: auxprop
auxprop_plugin: sql

судя по sources SASL2 осталась возможность использования демона pwcheck как
в старом SASL1, вероятно для этого нужно собрать этот демон самостоятельно,
тогда можно воспользоваться как и раньше:
pwcheck_method: pwcheck

Возращааясь к варианту собранному из портов с использованием демона saslauthd:

# cat /usr/local/lib/sasl2/Sendmail.conf - должно быть:
pwcheck_method: saslauthd

те для авторизации используется демон saslauthd, но по умолчанию, он
запускается с авторизацией через pam, см. /usr/local/etc/rc.d/saslauthd.sh:
...
saslauthd_flags=${saslauthd_flags:-"-a pam"}
...

чтобы изпользовать системную авторизацию, необходимо заменить на метод:

getpwent

man saslauthd

Итак, нам нужна системная авторизация или как ее еще называют native, для
этого как было сказано выше (на примере FreeBSD 5.3) в /etc/rc.conf:

# SASL running for SMTP-AUTH
saslauthd_enable="YES"
saslauthd_flags="-a getpwent"

для других версий смотрите скрипт запуска:

# less /usr/local/etc/rc.d/saslauthd.sh

какие переменные и где там советуют определить для автозапуска во время
загрзуки или ручного запуска:

# /usr/local/etc/rc.d/saslauthd.sh start

Установку и настройку SASL2 для системной авторизации из базы паролей можно
считать завершенной, за исключением одного маленького совета, чтобы убедиться
в правильной работе авторизации, можно самостоятельно собрать тестовую
утилиту testsaslauthd из порта /usr/ports/security/cyrus-sasl2:

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

# cd /usr/ports/security/cyrus-sasl2/work/cyrus-sasl-2.1.20/saslauthd
# make testsaslauthd

Теперь можно проверить правильно ли у нас работает авторизация:

# ./testsaslauthd -u username -p password
0: OK "Success."

где username - имя пользователя в системе и password - его пароль в системе

Настройка Sendmail с использованием SMTP-AUTH для механизмов: LOGIN и PLAIN.

- sendmail у нас остановлен и не работает, проверим с поддеркой чего он собран:

# echo | /usr/sbin/sendmail -bt -d0.1
Version 8.13.1
Compiled with: DNSMAP LOG MAP_REGEX MATCHGECOS MILTER MIME7TO8 MIME8TO7
NAMED_BIND NETINET NETINET6 NETUNIX NEWDB NIS PIPELINING SASLv2
SCANF TCPWRAPPERS USERDB XDEBUG

<остальной вывод пропущен>

или

# echo | /usr/sbin/sendmail -bt -d0.1 | grep SASL
...

- так как мы выбрали механизмы авторизации LOGIN для Outlook Express и
PLAIN для Netscape, необходимо соответствующим образом настроить sendmail -
sendmail.mc из которого получим sendmail.cf и submit.mc для получения submit.cf

Прим: если вам нужна поддержка еще и других механизмов, лучше воспользоваться
авторизацией через sasldb вместо системной (getpwent/pwcheck) и добавить
их в конфигурацию sendmail.mc (в нашем примере они будут добавлены).
Не забывайте, что доступные методы и механизмы авторизации определяются при
сборке cyrus-sasl2 и если вы собрали его, например без LOGIN, то толку от
конфигурации sendmail не будет.

итак sendmail.mc:

- если мы будем использовать базу sasldb, необходимо добавить

dnl это комментарий
dnl The group needs to be mail in order to read the sasldb2 file
define(`confRUN_AS_USER',`root:mail')dnl
dnl if cyrus-imapd and sendmail on the same server
define(`confDONT_BLAME_SENDMAIL',`GroupReadableSASLDBFile')dnl

- далее добавляем поддерживаемые механизмы авторизации

dnl set SASL options
TRUST_AUTH_MECH(`GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')
define(`confAUTH_MECHANISMS', `GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')

теперь submit.mc (это делается для того чтобы отключить авторизацию на
локальном интерфейсе lo0):

dnl disable SMTP AUTH for loopback interface
DAEMON_OPTIONS(`Name=NoMTA, Addr=127.0.0.1, M=EA')

- теперь из sendmail.mc и submit.mc необходимо получить конфигурационные
файлы cf, в FreeBSD для этой и других целей есть удобный Makefile, необходимо
чтобы sendmail.mc и submit.mc находились в этой же директории, тогда
достаточно выполнить команды:

# cd /etc/mail
# ls -la *.mc (убедимся что наши файлы на месте)
# make cf
# ls -la *.cf

можно вручную из sendmail.mc и submit.mc собрать cf используя препроцессор m4:

# m4 -D_CF_DIR_=путь_к_sendmail_cf_директории/ путь_к_sendmail_cf_директории/m4/cf.m4 sendmail.mc > sendmail.cf

# m4 -D_CF_DIR_=путь_к_sendmail_cf_директории/ путь_к_sendmail_cf_директории/m4/cf.m4 submit.mc > submit.cf

общий вид команды:

# m4 -D_CF_DIR_=путь_к_cf_директории путь_к_макросу_cf/cf.m4 файл.mc

директория -D_CF_DIR_ содержит массу необходимый препроцессорных файлов .m4
необходимых для сборки файла конфигурации из файла .mc, если мы воспользуемся
директивами INCLUDE в sendmail.mc и submit.mc для включения директории и
cf.m4 макроса, команда будет выглядеть проще:

# m4 sendmail.mc > sendmail.cf

Ньюансы: после установки FreeBSD есть две директории CF(-D_CF_DIR_):

- одна в sources (если система установлена с sources):

# ls -la /usr/src/contrib/sendmail/cf/

- ее копия если система установлена без sources:

# ls -la /usr/share/sendmail/cf/

Если мы обновляем sendmail из портов, то будем иметь новую, нужную нам для
нашей версии sendmail, директорию CF:

# /usr/local/share/sendmail/cf

в случае установки sendmail из портов, мы можем определить нужные нам
переменные в /etc/make.conf - что и как детально можно увидеть в
/etc/mail/Makefile который очень хорошо откомментирован.

Теперь пример (личная машина alone.dubna.ru):

--------------------------------- sendmail.mc -------------------------------
divert(0)
#VERSIONID(`$FreeBSD: src/etc/sendmail/freebsd.mc,v 1.10.2.16 2002/05/22 16:39:14 gshapiro Exp $')
dnl в versionid то что мне нужно
VERSIONID(`$FreeBSD: alone.mcExp $')
dnl в OSTYPE указывайте нужный вам шаблон для вашей OS: sendmail/cf/ostype/
OSTYPE(freebsd5)
DOMAIN(generic)

FEATURE(always_add_domain)
FEATURE(access_db, `hash -o -T<TMPF> /etc/mail/access')
FEATURE(blacklist_recipients)
FEATURE(local_lmtp)
FEATURE(mailertable, `hash -o /etc/mail/mailertable')
FEATURE(virtusertable, `hash -o /etc/mail/virtusertable')
FEATURE(nouucp,reject)
FEATURE(`no_default_msa')
FEATURE(stickyhost)dnl
FEATURE(`delay_checks')
dnl проверка реверса http://www.cs.niu.edu/~rickert/cf/
dnl HACK(require_rdns, `REJECT')

dnl Uncomment to allow relaying based on your MX records.
dnl NOTE: This can allow sites to use your server as a backup MX without
dnl your permission.
dnl для проверки на личной машине релеинга через SMTP-AUTH
FEATURE(relay_hosts_only)
dnl FEATURE(`relay_entire_domain')

dnl Lavr - don't allow user@host.dubna.ru
dnl all outgoing mail should be user@dubna.ru
dnl converting ALL OLDER cntc.dubna.su to dubna.ru
dnl
MASQUERADE_AS(`dubna.ru')dnl
MASQUERADE_DOMAIN(`dubna.ru')dnl
MASQUERADE_DOMAIN(`cntc.dubna.su')dnl
FEATURE(`masquerade_entire_domain')dnl
dnl Lavr - do envelope e-mail address for has chance to see it
FEATURE(`masquerade_envelope')dnl

dnl DNS based black hole lists
dnl --------------------------------
dnl DNS based black hole lists come and go on a regular basis
dnl so this file will not serve as a database of the available servers.
dnl For that, visit http://dmoz.org/Computers/Internet/Abuse/Spam/Blacklists/

dnl Uncomment to activate Realtime Blackhole List
dnl information available at http://www.mail-abuse.com/
dnl NOTE: This is a subscription service as of July 31, 2001

FEATURE(`dnsbl',`sbl.spamhaus.org',`Spam bloked - see http://www.spamhaus.org/')
FEATURE(`dnsbl',`list.dsbl.org',`Spam bloked - see http://dsbl.org/')
FEATURE(`dnsbl',`dnsbl.njabl.org',`Spam bloked - see http://njabl.org/')
dnl FEATURE(`dnsbl',`dnsbl.sorbs.net',`Spam bloked - see http://dnsbl.sorbs.net')
FEATURE(`dnsbl',`cbl.abuseat.org',`Spam bloked - see http://cbl.abuseat.org/')
FEATURE(`dnsbl',`relays.ordb.org',`Spam bloked - see http://ordb.org/')
FEATURE(`dnsbl', `dul.ru',`Spam bloked - Use mail relays of your ISP')

dnl Alternatively, you can provide your own server and rejection message:
dnl FEATURE(dnsbl, `blackholes.mail-abuse.org', `"550 Mail from " $&{client_addr} " rejected, see http://mail-abuse.org/cgi-bin/lookup?" $&{client_addr}')

dnl Dialup users should uncomment and define this appropriately
dnl define(`SMART_HOST', `your.isp.mail.server')
dnl define(`SMART_HOST', `sunct0.jinr.ru')

dnl Uncomment the first line to change the location of the default
dnl /etc/mail/local-host-names and comment out the second line.
dnl define(`confCW_FILE', `-o /etc/mail/sendmail.cw')
define(`confCW_FILE', `-o /etc/mail/local-host-names')

dnl Uncomment both of the following lines to listen on IPv6 as well as IPv4
DAEMON_OPTIONS(`Name=IPv4, Family=inet')
dnl DAEMON_OPTIONS(`Name=IPv6, Family=inet6')
define(`confBIND_OPTS', `WorkAroundBrokenAAAA')
define(`confMAX_HEADERS_LENGTH',16384)
define(`confMAX_MIME_HEADER_LENGTH', `256/128')
define(`confNO_RCPT_ACTION', `add-to-undisclosed')
dnl DISABLE DSN, add "noreceipts" to confPRIVACY_FLAGS
define(`confPRIVACY_FLAGS', `authwarnings,noexpn,novrfy,noetrn')
define(`confSMTP_MAILER', `smtp8')
define(`confMAX_MESSAGE_SIZE', `50000')
define(`confSMTP_LOGIN_MSG',`Lavr-AUTH-Antispam-MTA; "Non-authorized relaying DENIED." ')
define(`confMAX_RCPTS_PER_MESSAGE', `50')

dnl Enable Return-Receipt-To
dnl define(`confRRT_IMPLIES_DSN',`True')

define(`SMART_HOST', `cntc.dubna.ru')

dnl нужно для SMTP-AUTH
dnl The group needs to be mail in order to read the sasldb2 file
dnl для доступа к sasldb, если использовать sasldb, здесь необязательно
define(`confRUN_AS_USER',`root:mail')dnl
dnl set SASL options
TRUST_AUTH_MECH(`GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')
define(`confAUTH_MECHANISMS', `GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')
dnl auth-info если наш sendmail будет сам выступать клиентом к кому-то
define(`confDEF_AUTH_INFO', `/etc/mail/auth-info')

dnl for Majordomo
dnl define(`ALIAS_FILE', `/etc/mail/aliases,/etc/mail/majordomo.aliases')

dnl Milter for Amavisd-new
define(`MILTER',1)
dnl INPUT_MAIL_FILTER(`milter-amavis',`S=local:/var/amavis/amavis-milter.sock,T=S:10m;R:10m;E:10m')

MAILER(local)
MAILER(smtp)
-------------------------------- end of sendmail.mc -------------------------

submit.mc нужно поправить на предмет запрета SMTP-AUTH для localhost

----------------------------------- submit.mc -------------------------------
divert(0)dnl
VERSIONID(`$FreeBSD: lavr Exp $')
define(`confCF_VERSION', `Submit')dnl
define(`__OSTYPE__',`')dnl dirty hack to keep proto.m4 from complaining
define(`_USE_DECNET_SYNTAX_', `1')dnl support DECnet
define(`confTIME_ZONE', `USE_TZ')dnl
define(`confDONT_INIT_GROUPS', `True')dnl
define(`confBIND_OPTS', `WorkAroundBrokenAAAA')dnl
dnl
dnl If you use IPv6 only, change [127.0.0.1] to [IPv6:::1]
FEATURE(`msp', `[127.0.0.1]')dnl
dnl disable SMTP AUTH for loopback interface
dnl отрубить smtp-auth для почты через localhost
DAEMON_OPTIONS(`Name=NoMTA, Addr=127.0.0.1, M=EA')
-------------------------------- end of submit.mc ---------------------------

теперь для FreeBSD необходимо выполнить шаги:

# cd /etc/mail (перейти в директорию конфигурации почты)
# make stop (положить sendmail)
# make cf (создать sendmail|submit.cf из наших .mc)
# vi access (отредактировать access - поправить RELAY для чего нам нужно)
# make start (запустить sendmail)

Так как частенько возникают вопросы по авторизации, разберем как проверить:

- первый вариант был описан выше: testsaslauthd
- теперь проверим используя base64 кодирование и telnet на smtp порт 25/tcp

для примера заведем пользователя-пустышку:

[alone]~ > grep test /etc/passwd
test:*:3000:65534:Test pseudo-user:/nonexistent:/usr/sbin/nologin
[alone]~ > passwd test
Changing local password for test
New Password: kuku123
Retype New Password: kuku123
[alone]~ >

пример SMTP-AUTH сеанса с LOGIN авторизацией:

для пользователя test с паролем kuku123 - необходимо преобразовать
эти данные в base64:

[alone]~ > printf "test" | mmencode
dGVzdA==
[alone]~ > printf "kuku123" | mmencode
a3VrdTEyMw==
[alone]~ >

теперь производим соединение:

[alone]~ > telnet alone 25
Trying 62.84.100.160...
Connected to alone.
Escape character is '^]'.
220 Lavr-AUTH-Antispam-MTA; ESMTP Non-authorized relaying DENIED.
AUTH LOGIN
334 VXNlcm5hbWU6
dGVzdA== (вводим сконвертированное имя пользователя: printf "username" | mmencode)
334 UGFzc3dvcmQ6 (вводим сконвертированный пароль: printf "password" | mmencode)
a3VrdTEyMw==
235 2.0.0 OK Authenticated
quit
221 2.0.0 alone.dubna.ru closing connection
Connection closed by foreign host.
[alone]~ >

Если все правильно настроено, получаем как показано выше:

235 2.0.0 OK Authenticated

пример SMTP-AUTH сеанса с PLAIN авторизацией:

предварительно производим конвертацию

[alone]~ > printf "testtestkuku123" | mmencode
dGVzdAB0ZXN0AGt1a3UxMjM=
[alone]~ >
[alone]~ > telnet alone 25
Trying 62.84.100.160...
Connected to alone.
Escape character is '^]'.
220 Lavr-AUTH-Antispam-MTA; ESMTP Non-authorized relaying DENIED.
AUTH PLAIN dGVzdAB0ZXN0AGt1a3UxMjM= (printf "useruserpassword" | mmencode)
235 2.0.0 OK Authenticated
quit
221 2.0.0 alone.dubna.ru closing connection
Connection closed by foreign host.
[alone]~ >

чтобы понять и прочуствовать PLAIN/LOGIN/MD5... авторизацию и понять в
каком случае что и как преобразовывать в base64, смотрите:

http://www.sendmail.org/~ca/email/auth.html и что есть userid, authid и realm

http://unix1.jinr.ru/~lavr/sendmail+sasl2

Обновлено: 12.03.2015