The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Как я прикручивал SASL к sendmail или авторизация по SMTP. (sendmail mail crypt sasl ssl linux)


<< Предыдущая ИНДЕКС Правка src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: sendmail, mail, crypt, sasl, ssl, linux,  (найти похожие документы)
From: Gorbanev Vladimir <gorbva@mail.ru.> Newsgroups: email Date: Mon, 17 May 2005 14:31:37 +0000 (UTC) Subject: Как я прикручивал SASL к sendmail или авторизация по SMTP. В один прекрасный день в нашей конторе кто-то схватил вируса, который начал безудержно спамить налево и направо через наш почтовик. Естественно, через пару дней наш почтовый сервер попал во всевозможные <<черные списки>> и, соответственно, отправлять почту от нас стало проблематично. С нашим почтовиком (Sendmail 8.12.11) просто отказывались <<разговаривать>> другие сервера. Вирус конечно мы пофиксили быстро, из <<черных списков>> убрались, но остался неприятный осадок. Для противодействия всяким Троянам рассылающим почту непосредственно соединяясь через наш почтовик, было принято решение устроить для всех клиентов SMTP авторизацию. Примечание: Наиболее популярные почтовые клиенты Outlook Express и The BAT, по-разному осуществляют SMTP-авторизацию. Outlook Express работает только по методу LOGIN, в то время как The BAT работает только с MD5. Метод LOGIN по общему мнению, является ущербным и не надежным (как раз в стиле Microsoft) и пользоваться им не рекомендуется. По этому на вашем предприятии следует придерживаться единообразия почтовых клиентов. По мнению Великих Гуру, самым оптимальны является использовать при SMTP-авторизации метод LOGIN но через SSL - соединение. Я же решил не углубляться в такие дебри и установить простую аутентификацию методами LOGIN и CRAM-MD5. Итак начнем. Я работаю в ASP Linux 9.0, поэтому все нижесказанное относится к нему. Для начала давайте проверим, поддерживает ли sendmail протокол SASL, для этого в командной строке набираем: [root@adm mail]# sendmail -d0.1 -bv root В ответ вам должно выйти примерно следующая информация: Version 8.12.11 Compiled with: DNSMAP HESIOD HES_GETMAILHOST LDAPMAP LOG MAP_REGEX MATCHGECOS MILTER MIME7TO8 MIME8TO7 NAMED_BIND NETINET NETINET6 NETUNIX NEWDB NIS PIPELINING SASL SCANF STARTTLS TCPWRAPPERS USERDB USE_LDAP_INIT -------- SYSTEM IDENTITY (after readcf) (short domain name) $w = adm (canonical domain name) $j = adm.roaddep.ru (subdomain name) $m = roaddep.ru (node name) $k = adm.roaddep.ru -------------------------------------- gorbva... deliverable: mailer local, user gorbva Смотрим строчку Compiled with и видим там среди прочих упоминание о SASL, значит все ОК. Если же этого нет то тогда вам придется перекомпилировать sendmail с поддержкой SASL, либо скачать и установить новый rpm sendmail-а. Как правило, в rpm-ках сэндмэйл идет уже собранный с поддержкой SASL. Теперь открываем файл /etc/mail/sendmail.cf и ищем там такую директиву: # dequoting map Kdequote dequote # class E: names that should be exposed as from this host, even if we masquerade # class L: names that should be delivered locally, even if we have a relay # class M: domains that should be converted to $M # class N: domains that should not be converted to $M #CL root C{TrustAuthMech}GSSAPI KERBEROS_V4 DIGEST-MD5 CRAM-MD5 PLAIN LOGIN C{E}root C{w}localhost.localdomain Нам важна строчка C{TrustAuthMech}GSSAPI KERBEROS_V4 DIGEST-MD5 CRAM-MD5 PLAIN LOGIN Она означает, что те пользователи, которые прошли аутентификацию вышеуказанными механизмами, смогут отправить почту. Чуете к чему я клоню ? Правильно, пора подправить файл /etc/mail/access. Там наверняка стоит строчка типа: 192.168.1 RELAY Где 192.168.1 - адрес сетки ваших пользователей, а RELAY означает что почту с этой сетки можно отправлять через sendmail. Вот эту строчку-то и надо убрать. Что у нас тогда получится ? А получится то, что никому отправлять почту наружу нельзя, ... кроме тех, кто прошел аутентификацию. Естественно после таких манипуляций нужно перекомпилировать файл /etc/mail/access в полноценный /etc/mail/access.db . Сделать это можно либо выполнив: makemap hash /etc/mail/access.db < /etc/mail/access Либо просто перезапустив sendmail командой: /etc/rc.d/init.d/sendmail restart Теперь снова вернемся к файлу /etc/mail/sendmail.cf . Находим и разкомментируем следующие директивы : # list of authentication mechanisms O AuthMechanisms=LOGIN PLAIN SSAPI KERBEROS_V4 DIGEST-MD5 CRAM-MD5 Директива указывает допустимые механизмы авторизации. Механизм LOGIN и PLAIN можно убрать, если вы не пользуетесь Outlook Express. # default authentication information for outgoing connections O DefaultAuthInfo=/etc/mail/default-auth-info Честно говоря, я не понял зачем нужна эта директива и что хранится в файле default-auth-info. У меня он пустой. # SMTP AUTH flags O AuthOptions=A Ну эта директива говорит что аутентификацию надо включать. И так, у нас все настройки исправлены, перезапускаем sendmail и телнетимся на 25 порт. [root@adm root]# telnet localhost 25 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 adm.test.ru ESMTP Sendmail with AntiSpam 8.12.11/8.12.8; Говорим ему EHLO user1 к примеру. Должен быть примерно такой ответ: EHLO user1 250-adm.test.ru Hello localhost [127.0.0.1], pleased to meet you 250-ENHANCEDSTATUSCODES 250-PIPELINING 250-8BITMIME 250-SIZE 250-DSN 250-AUTH LOGIN DIGEST-MD5 CRAM-MD5 250-DELIVERBY 250 HELP Нас интересует наличие строки AUTH после которой идут допустимые механизмы авторизации. Если ее нет, значит что-то вы не так сделали. Ее может не быть и по следующей причине: Вы указали в senmail.cf в директиве AuthMechanisms MD-5 механизмы без методов LOGIN или PLAIN, но не заполнили файл с паролями /etc/sasldb. Для заполнения паролями этого файла воспользуйтесь командой: saslpasswd -a sendmail -u username Она означает добавить пользователя username для процесса sendmail . В ответ она попросит ввести пароль для этого юзера. Настройка SASL Теперь нам нужно настроить SASL . Сперва смотрим есть ли он у нас вообще: [root@adm init.d]# rpm -qa|grep sasl cyrus-sasl-devel-2.1.15-6 cyrus-sasl-2.1.15-6 cyrus-sasl-md5-2.1.15-6 cyrus-sasl-plain-2.1.15-6 cyrus-sasl-gssapi-2.1.15-6 [root@adm init.d]# Вот у меня стоит SASL версии 2.1.15, плюс поддержка для методов MD-5, PLAIN и GSSAPI. Если у вас не показались данные строчки, значит SASL отсутствует, идем на http://www.rpmfind.net и качаем оттуда рпм-ки. Если же SASL установлен, то идем и правим файл /usr/lib/sasl/Sendmail.conf Там должна быть одна строчка pwcheck_method:sasldb, она говорит что проверять пароли будет сам SASL из своей базы /etc/sasldb. Вместо sasluthd можно указать следующие методы: * passwd Поиск пароля будет происходить в файле /etc/passd . Для систем без поддержки shadow. * shadow Поиск будет происходит в файле /etc/shadow. * PAM Использовать метод PAM. * Kerberos_v4 Использовать метод Kerberos * pwcheck Использовать внешнюю программу Так же отмечу, SASL по умолчанию идет без поддержки механизма LOGIN. Как в этом убедится ? Переведите sendmail в режим ведения логов 15, перезапустив его с ключом -O LogLevel=15 . В этом режиме sendmail в своих логах будет подробно приводить сеанс SMTP-сессии. И так, запустите наблюдение за журналом командой: tail -f /var/log/maillog Эта команда будет выводить на экран файл maillog по-мере поступления в него строк от различных почтовых демонов, в том числе и от sendmail. Запускаем <<любимый>> Outlook Express, в настройках учетной записи укажите что SMTP-сервер требует авторизации и введите какие-нибудь имя пользователя и пароль. Напишие письмо самому себе и попытайтесь его отправить. При этом в логах должно появиться примерно следующее: May 16 11:07:00 adm sendmail[14969]: j4G5709p014969: <-- EHLO gorbva May 16 11:07:00 adm sendmail[14969]: j4G5709p014969: --- 250-adm.roaddep.ru Hello [192.168.1.126], pleased to meet you May 16 11:07:00 adm sendmail[14969]: j4G5709p014969: --- 250-ENHANCEDSTATUSCODES May 16 11:07:00 adm sendmail[14969]: j4G5709p014969: --- 250-PIPELINING May 16 11:07:00 adm sendmail[14969]: j4G5709p014969: --- 250-8BITMIME May 16 11:07:00 adm sendmail[14969]: j4G5709p014969: --- 250-SIZE May 16 11:07:00 adm sendmail[14969]: j4G5709p014969: --- 250-DSN May 16 11:07:00 adm sendmail[14969]: j4G5709p014969: --- 250-AUTH LOGIN DIGEST-MD5 CRAM-MD5 May 16 11:07:00 adm sendmail[14969]: j4G5709p014969: --- 250-DELIVERBY May 16 11:07:00 adm sendmail[14969]: j4G5709p014969: --- 250 HELP May 16 11:07:00 adm sendmail[14969]: j4G5709p014969: <-- AUTH LOGIN May 16 11:07:00 adm sendmail[14969]: j4G5709p014969: --- 334 VXNlcm5hbWU6 May 16 11:07:00 adm sendmail[14969]: j4G5709p014969: --- 334 UGFzc3dvcmQ6 May 16 11:07:00 adm sendmail[14969]: j4G5709p014969: --- 535 5.7.0 authentication failed May 16 11:07:00 adm sendmail[14969]: j4G5709p014969: AUTH failure (LOGIN): authentication failure (-13) Если в качестве при отказа AUTH будет что-то типа "No mechanism available" , то значит, механизм LOGIN не поддерживается. Если он вам нужен, то придется скачать исходник и перекомпилировать SASL с поддержкой механизма LOGIN. Для этого в корневой директории исходника запустите: # ./configure --enable-login # make #make install Проверьте куда установился бинарник и соответственно измените запускающий скрипт. Вот вроде и все Если что , пишите <gorbva@mail.ru.> Горбанев Владимир

<< Предыдущая ИНДЕКС Правка src Установить закладку Перейти на закладку Следующая >>

Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, mars (?), 23:01, 17/05/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    На самом деле в бате есть "Аутентификация POP прежде SMTP" ;)
     
  • 1.2, andrey (??), 09:07, 18/05/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Хорошо!
    Но почему бы и не углубиться в дебри?
    Поддержка SSL всего пара строк раскоментировать:
    dnl define('confCACERT_PATH','/usr/share/ssl/certs')
    dnl define('confCACERT','/usr/share/ssl/certs/ca-bundle.crt')
    dnl define('confSERVER_CERT','/usr/share/ssl/certs/sendmail.pem')
    dnl define('confSERVER_KEY','/usr/share/ssl/certs/sendmail.pem')
    dnl DAEMON_OPTIONS('Port=smtps, Name=TLSMTA, M=s')dnl
     
  • 1.3, gorbva (?), 07:57, 19/05/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Да ради бога углубляйтесь. Просто это желательно сделать после того как настроена простая аутентификация. А там можно и SSL прикручивать..
    >>>На самом деле в бате есть "Аутентификация POP прежде SMTP" ;)

    Ну  есть и что она дает ?? POP по-любому требует аутентификации перед забором почты. Я то речь веду не о том как с Бат-ом работать, а о том как sendmail защитить от ЛЮБОГО клиента (читай вируса) sendmail, чтобы он принимал к отправке сообщения только от авторизованных клиентов.

    Да и еще учтите, что установив SMTP-аутентификацию вы не ограничите движение почты внутри вашего почтового домена, т.е. адресат vasya@mydomain.ru спокойно и без авторизации отправит письмо на petya@mydomain.ru или kolya@subdomain.mydomainru, т.к. эти адреса будут являться конечными для sendmail-а обслуживающего ваш домен mydomain.ru

     
     
  • 2.4, sergio (??), 17:46, 19/05/2005 [^] [^^] [^^^] [ответить]  
  • +/
    >Да ради бога углубляйтесь. Просто это желательно сделать после того как настроена
    >простая аутентификация. А там можно и SSL прикручивать..
    >>>>На самом деле в бате есть "Аутентификация POP прежде SMTP" ;)
    >
    >Ну  есть и что она дает ?? POP по-любому требует аутентификации
    >перед забором почты. Я то речь веду не о том как
    >с Бат-ом работать, а о том как sendmail защитить от ЛЮБОГО
    >клиента (читай вируса) sendmail, чтобы он принимал к отправке сообщения только
    >от авторизованных клиентов.
    >
    >Да и еще учтите, что установив SMTP-аутентификацию вы не ограничите движение почты
    >внутри вашего почтового домена, т.е. адресат vasya@mydomain.ru спокойно и без авторизации
    >отправит письмо на petya@mydomain.ru или kolya@subdomain.mydomainru, т.к. эти адреса будут являться
    >конечными для sendmail-а обслуживающего ваш домен mydomain.ru

    Абсолютно с вами согласен. Я настроил авторизацию все заработало, но при отправки за пределы локального домена выходит ошибка: Relaying denied. IP name possibly forged (xxx.xxx.xxx.xxx) А как можно добиться чтоб без авторизации на серер вообще нельзя было зайти? Не важно внутри локального домена почта ходит или за его пределы.

     

  • 1.5, 0c (?), 15:48, 20/05/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Вечное переписывание манов - информативная ценность сатьи 0%.

    >  Я то речь веду не о том как с Бат-ом работать, а о том как sendmail защитить от ЛЮБОГО клиента (читай вируса) sendmail, чтобы он принимал к отправке сообщения только от авторизованных клиентов.

    Это вообще шедевр. Чем зашищать свой sendmail от клиентов-вирусов лучше бы поискали на google.com про "Open Relay" и то что вы "решаете" сейчас людей перестало волновать еще в 85 году.

     
  • 1.6, gorbva (?), 13:40, 23/05/2005 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Вот как раз OPEN Relay в седнмайле закрыт по дефолту , а SMTP -аутентификации по дефолту нет.
    И по сему сия тема будет актуально с каждой новой установкой сендмайла.

    Все знают какие нужны справки для получения паспорта, но почему-то каждый раз переспрашивают у паспортистов......

     
     
  • 2.7, 0c (?), 14:29, 23/05/2005 [^] [^^] [^^^] [ответить]  
  • +/
    Что-то у вас по-моему с общими пониманием SMTP проблемы. Если вы думаете, что написали что-то очень интересное и уникальное, то введите на opennet.ru в строке поиска "sendmail sasl auth" и читайте на здоровье.

    Что значит "OPEN Relay в седнмайле закрыт по дефолту", после таких перлов хочется спросить: "А вы sendmail то видели???". Что значит по дефолту? Где это вы такие сендмайлы находите? Т.е. tar xfzg sendmail.tar.gz && cd sendmail && ./configure && make install - даст нам полностью работоспособный SMTP сервер "сконфигурированный по-умолчанию"?

    Вопрос 1: Каким образом "OPEN Relay в седнмайле закрыт по дефолту"? Т.е. скажите мне способ которым sendmail обрабатывает коннекты на 25 порт, что бы не предоставлять relay всем желающим?

    Вопрос 2: Скажите своими словами как вы представляете работу sasl? Как взаимодействуют sendmail и sasl?

     
     
  • 3.11, camlost (?), 12:26, 27/08/2007 [^] [^^] [^^^] [ответить]  
  • +/
    Вообще говоря, начиная с версии 8,9 sendmail ретранслирует почту только для тех хостов (или сетей), которые в явном виде прописаны в /etc/mail/access

    В статье речь идет о том, что не всегда надо принимать почту из своей внутренней сети (пример - вирус, который поселился на одном из внутренних хостов и пересылает спам через ваш сервер) и бывают случаи когда надо принимать почту из внешней сети (например, сотрудники в отпусках)

     

  • 1.8, novice (??), 02:16, 27/03/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Хочу маленькое уточнение внести:
    [root@localhost mail]# /usr/sbin/saslpasswd -a sendmail -u username
    Выдает:
    saslpasswd: usage: saslpasswd [-a appname] [-p] [-c] [-d] [-u DOM] userid
            -p      pipe mode -- no prompt, password read on stdin
            -c      create -- ask mechs to create the account
            -d      disable -- ask mechs to disable the account
            -a appname      use appname as application name
            -f file path to sasldb
            -u DOM  use DOM for user domain
    [root@localhost mail]# /usr/sbin/saslpasswd -a sendmail -u localhost.localdomain username
    работает нормально
     
  • 1.9, novice (??), 05:08, 27/03/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    К стати сказать, чтобы вышеописанное работало под ASPLштгч 10 необходимо добавить 2 к saslpasswd
    т.е. saslpasswd2
     
  • 1.10, novice (??), 05:11, 27/03/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    default-auth-info необходим для возможности работы sendmail с другими хостами, которые тоже используют авторизацию. Насколько я понял из манов, это своеобразный файл паролей
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру