Использование 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 \n | /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 \n | /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 /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 "test\0test\0kuku123" | 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 "user\0user\0password" | 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