Добавить в избранное | Сделать стартовой страницей

Большая Linux библиотека для пользователей OS Linux и ПО для нее
Есть что сказать? Нужен совет? Посети наш форум.


При поддержке
Продвижение сайта
Создание сайта
Администрирование сервера
настройка сервера
Администрирование сервера
настройка сервера
Администрирование сервера
аренда сервера


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


   Проверьте   куда   установился   бинарник  и  соответственно  измените
   запускающий скрипт.

   Вот вроде и все

   Если что , пишите <>
   Горбанев Владимир

Серьезные квестоманские значения игр жанра квесты для скачивания