Ad Widget

Collapse

Отправка оповещений через smtp сервер с ntlm-аут

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • testik777
    Member
    • Dec 2014
    • 31

    #1

    Отправка оповещений через smtp сервер с ntlm-аут

    Не могу настроить отправку оповещений в заббиксе. Использую способ описанный
    здесь в 3-ем посте. Заступорился в самом начале пытаюсь пока без помощи заббикса выполнить скрипт
    Code:
    #!/bin/sh
    export [email protected]
    export zabbixemailto=$1
    export zabbixsubject=$2
    export zabbixbody=$3
    export smtpserver=yoursmtpserver.com
    export smtplogin=smtpuser
    export smtppass=smtppassword
    /usr/bin/sendEmail -f $smtpemailfrom -t $zabbixemailto -u $zabbixsubject -m $zabbixbody -s $smtpserver:25 -xu $smtplogin -xp $smtppass
    Набираю команду /usr/lib/zabbix/alertscripts/zabbix_sendemail кому@mailserver.ru test alsdkfasglkadfklg
    Выдается ошибка :
    Oct 18 11:25:02 zabbix-server sendEmail[13591]: WARNING => SMTP-AUTH: No mutually supported authentication methods available
    Oct 18 11:25:02 zabbix-server sendEmail[13591]: ERROR => ERROR => SMTP-AUTH: Authentication to smtpserver.ru:25 failed.
    Помогите, разобраться. Если знаете другой способ, готов пробовать.
  • Kos
    Senior Member
    Zabbix Certified SpecialistZabbix Certified Professional
    • Aug 2015
    • 3404

    #2
    Во-первых, я не понял, при чём тут NTLM. В ссылке, на которую Вы ссылаетесь, этот термин не встречается, и к SMTP это имеет мало отношения.

    Во-вторых, рецепт, на который Вы ссылаетесь, датирован 2005-2007-м годами. Сейчас 2016-й, и Zabbix-сервер, как минимум с версии 3.0, умеет делать SMTP-аутентификацию самостоятельно. Если не ошибаюсь, на Хабре были примеры того, как это конфигурировать для работы с mail.ru.

    Наконец, в-третьих, начинать нужно с того, что выяснить, какие механизмы аутентификации поддерживает SMTP-сервер, к которому Вы пытаетесь обратиться. Может, он вообще такой опции не поддерживает.
    SMTP-AUTH: No mutually supported authentication methods available

    Comment

    • testik777
      Member
      • Dec 2014
      • 31

      #3
      Ну NTLM точно поддерживает. Так как работу почтового клиента в винде, я настроил на работу этим smtp сервером именно через ntlm.

      Comment

      • sadman
        Senior Member
        • Dec 2010
        • 1611

        #4
        Лучше напишите какой у вас почтовый сервер.

        Comment

        • Anth(0)ny
          Member
          • Jul 2015
          • 42

          #5
          не факт что в тему, но вот что у меня работает с Exchange.
          отправка с авторизацией. автор не я, я только нашёл.

          sender.py

          Code:
          #!/usr/bin/python
          # -*- coding: utf-8 -*-
          
          """
          Питонный скрипт
          """
          
          import sys
          import smtplib
          from email.MIMEText import MIMEText
          from email.Header import Header
          from email.Utils import formatdate
          
          # Mail Account
          MAIL_ACCOUNT = '[email protected]'
          MAIL_PASSWORD = 'sdvsdvsvvvvvsdvsvsv'
          
          # Sender Name
          SENDER_NAME = u'[email protected]'
          
          # Mail Server
          SMTP_SERVER = 'send.lalala.ru'
          # SMTP_PORT = 587
          SMTP_PORT = 25
          # TLS
          SMTP_TLS = True
          
          def send_mail(recipient, subject, body, encoding='utf-8'):
              session = None
          
              msg = MIMEText(body, 'plain', encoding)
              msg['Subject'] = Header(subject, encoding)
              msg['From'] = Header(SENDER_NAME, encoding)
              msg['To'] = recipient
              msg['Date'] = formatdate()
              try:
                  session = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)
                  if SMTP_TLS:
                      session.set_debuglevel(1)
          
                      session.starttls()
                      session.ehlo()
                      session.login(MAIL_ACCOUNT, MAIL_PASSWORD)
                  session.sendmail(MAIL_ACCOUNT, recipient, msg.as_string())
              except Exception as e:
                  raise e
              finally:
                  # close session
                  if session:
                      session.quit()
          
          if __name__ == '__main__':
              """
              recipient = sys.argv[1]
              subject = sys.argv[2]
              body = sys.argv[3]
              """
              if len(sys.argv) == 4:
                  send_mail(
                      recipient=sys.argv[1],
                      subject=sys.argv[2],
                      body=sys.argv[3])
              else:
                  print u"""requires 3 parameters (recipient, subject, body)
          \t$ zabbix-gmail.sh recipient subject body
          Last edited by Anth(0)ny; 18-10-2016, 10:53.

          Comment

          • Kos
            Senior Member
            Zabbix Certified SpecialistZabbix Certified Professional
            • Aug 2015
            • 3404

            #6
            Originally posted by testik777
            Ну NTLM точно поддерживает. Так как работу почтового клиента в винде, я настроил на работу этим smtp сервером именно через ntlm.
            Не понял, кто у вас "NTLM точно поддерживает"? Сервер? Клиент?
            В любом случае, Zabbix не является "почтовым клиентом в винде", вряд ли он будет поддерживать этот вид аутентификации. Какие-то внешние скрипты, наподобие тех, на которые Вы ссылались - вполне возможно, но конкретно те - опять же, нет (там про NTLM ни слова). В любом случае, суть этих скриптов сводится к запуску какой-то утилиты (почтового клиента), и работа NTLM будет зависеть только от поддержки этого протокола данной почтовой утилитой. Возможно, Вам удастся найти такую, вполне допускаю. Но, поскольку NTLM уж больно "windows-завязанный", да к тому же по своей идеологии довольно далёк от почты, то я бы подошёл к решению данной задачи с другой стороны: посмотрел бы, какие ещё методы аутентификации умеет поддерживать Ваш почтовый сервер. Наверняка там не только NTLM.

            Comment

            • testik777
              Member
              • Dec 2014
              • 31

              #7
              Сервер exchange, версию точно не скажу, его не я поддерживаю, контора большая, до админов почтовика достучаться довольно проблематично. Почтовый клиент я использовал Thunderbird. Когда подбирал настройки к нему получилось отправлять письма только с настройками (см вложение)
              Last edited by testik777; 21-10-2016, 08:31.

              Comment

              • Kos
                Senior Member
                Zabbix Certified SpecialistZabbix Certified Professional
                • Aug 2015
                • 3404

                #8
                Ну, собственно, я всё сказал.
                Гораздо проще пообщаться с админами Вашего Exchange-а и попросить их, например, разрешить анонимный доступ к почтовому серверу в режиме релея для конкретного IP-адреса (Ваш Zabbix-сервер).
                Но если есть желание грызть кактус связываться именно через NTLM - то гугл Вам в помощь. Вот тут, например, товарищ тоже мучился с тем, как на Эксчендж через NTLM отправить с Linux-а (в его случае - из Postfix-а).

                Comment

                • testik777
                  Member
                  • Dec 2014
                  • 31

                  #9
                  Originally posted by Anth(0)ny
                  не факт что в тему, но вот что у меня работает с Exchange.
                  отправка с авторизацией. автор не я, я только нашёл.

                  sender.py

                  Code:
                  #!/usr/bin/python
                  # -*- coding: utf-8 -*-
                  
                  """
                  Питонный скрипт
                  """
                  
                  import sys
                  import smtplib
                  from email.MIMEText import MIMEText
                  from email.Header import Header
                  from email.Utils import formatdate
                  
                  # Mail Account
                  MAIL_ACCOUNT = '[email protected]'
                  MAIL_PASSWORD = 'sdvsdvsvvvvvsdvsvsv'
                  
                  # Sender Name
                  SENDER_NAME = u'[email protected]'
                  
                  # Mail Server
                  SMTP_SERVER = 'send.lalala.ru'
                  # SMTP_PORT = 587
                  SMTP_PORT = 25
                  # TLS
                  SMTP_TLS = True
                  
                  def send_mail(recipient, subject, body, encoding='utf-8'):
                      session = None
                  
                      msg = MIMEText(body, 'plain', encoding)
                      msg['Subject'] = Header(subject, encoding)
                      msg['From'] = Header(SENDER_NAME, encoding)
                      msg['To'] = recipient
                      msg['Date'] = formatdate()
                      try:
                          session = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)
                          if SMTP_TLS:
                              session.set_debuglevel(1)
                  
                              session.starttls()
                              session.ehlo()
                              session.login(MAIL_ACCOUNT, MAIL_PASSWORD)
                          session.sendmail(MAIL_ACCOUNT, recipient, msg.as_string())
                      except Exception as e:
                          raise e
                      finally:
                          # close session
                          if session:
                              session.quit()
                  
                  if __name__ == '__main__':
                      """
                      recipient = sys.argv[1]
                      subject = sys.argv[2]
                      body = sys.argv[3]
                      """
                      if len(sys.argv) == 4:
                          send_mail(
                              recipient=sys.argv[1],
                              subject=sys.argv[2],
                              body=sys.argv[3])
                      else:
                          print u"""requires 3 parameters (recipient, subject, body)
                  \t$ zabbix-gmail.sh recipient subject body
                  Мне что-то не удается этот скрипт выполнить . Выдается ошибка
                  File "./send_ntlm_server.py", line 66
                  ^
                  SyntaxError: EOF while scanning triple-quoted string literal
                  В чем может быть проблема.

                  Comment

                  • Kos
                    Senior Member
                    Zabbix Certified SpecialistZabbix Certified Professional
                    • Aug 2015
                    • 3404

                    #10
                    Originally posted by testik777
                    Мне что-то не удается этот скрипт выполнить . Выдается ошибка
                    File "./send_ntlm_server.py", line 66
                    ^
                    SyntaxError: EOF while scanning triple-quoted string literal
                    В чем может быть проблема.
                    Я не силён в Пайтоне, но вижу ругань но 66-ю строку при том, что их всего 65. Подозреваю, что последняя строка оказалась разбита на две.

                    не факт что в тему, но вот что у меня работает с Exchange.
                    Вот уж, действительно, не факт. Где в этом скрипте NTLM? Я вижу только TLS. Но TLS Zabbix-сервер и сам умеет, безо всяких внешних скриптов (см. первую мою ссылку). О чём я, собственно, и пытался донести мысль:
                    я бы подошёл к решению данной задачи с другой стороны: посмотрел бы, какие ещё методы аутентификации умеет поддерживать Ваш почтовый сервер. Наверняка там не только NTLM.

                    Comment

                    • pupkin.ivan
                      Member
                      • Aug 2013
                      • 51

                      #11
                      Кривая копипаста, поправьте процедуру main на такую
                      Code:
                      if __name__ == '__main__':
                          recipient = sys.argv[1]
                          subject = sys.argv[2]
                          body = sys.argv[3]
                          if len(sys.argv) == 4:
                              send_mail(
                                  recipient=sys.argv[1],
                                  subject=sys.argv[2],
                                  body=sys.argv[3])
                          else:
                              print u"""requires 3 parameters (recipient, subject, body)
                      \t$ zabbix-gmail.sh recipient subject body"""
                      Last edited by pupkin.ivan; 21-10-2016, 11:22. Reason: ошибся

                      Comment

                      • testik777
                        Member
                        • Dec 2014
                        • 31

                        #12
                        Связался с почтовыми админами, подсказали что ntlm вроде как не обязательно важно, чтобы только логин для авторизации имя домена содержал. Удалось запинать консольную утилиту sendemail, таким скриптом, ну и натравизть заббик на этот скрипт.
                        Code:
                        #!/bin/sh
                        
                        export [email protected]
                        export zabbixemailto=$1
                        export zabbixsubject=$2
                        export zabbixbody=$3
                        export smtpserver=smtp.ru:25
                        export [email protected]
                        export smtppass='parol'
                        
                        /usr/bin/sendEmail -f $smtpemailfrom -t $zabbixemailto -u $zabbixsubject -m $zabbixbody -s $smtpserver:25 -xu $smtplogin -xp $smtppass
                        А вот средствами самого заббикса не смог эти настройки повторить. Пишет в событиях Login denied. Не знаю как подобрать ему нужно указать логин и пароль (я так понимаю ему именно они не нравятся)? Кстати а в логах где-нибудь можно это событие найти?

                        Питоновский скрипт так и не смог запинать пишет туже самую ошибку. Да смысла дальше не вижу, т.к. sendemail заработал.
                        Attached Files

                        Comment

                        • testik777
                          Member
                          • Dec 2014
                          • 31

                          #13
                          не подскажите, а как используя вышеупомянутый скрипт, получить в итоге письмо где в теме и теле будут параметры сообщения указанные в Настройка\Действия
                          тема {TRIGGER.STATUS}: {TRIGGER.NAME}
                          Тело Trigger: {TRIGGER.NAME}
                          Trigger status: {TRIGGER.STATUS}
                          Trigger severity: {TRIGGER.SEVERITY}
                          Trigger URL: {TRIGGER.URL}

                          Item values:

                          1. {ITEM.NAME1} ({HOST.NAME1}:{ITEM.KEY1}): {ITEM.VALUE1}
                          2. {ITEM.NAME2} ({HOST.NAME2}:{ITEM.KEY2}): {ITEM.VALUE2}
                          3. {ITEM.NAME3} ({HOST.NAME3}:{ITEM.KEY3}): {ITEM.VALUE3}

                          Original event ID: {EVENT.ID}
                          А то приходит только то что я указываю вручную в Администрирование\Способы оповещения\ параметры скрипта
                          т.е. $1 $2 $3

                          Comment

                          • testik777
                            Member
                            • Dec 2014
                            • 31

                            #14
                            вообщем помогли мне решить эту проблему на канале заббикса в телеграмме. В этоге вернулись к питоновскому скрипту, который мне в нормальном виде скинули (на всякий случай присоединю его как вложение, чтобы не закосячился). Там пришлось поправить пару строк по поводу tls и session.login(MAIL_ACCOUNT, MAIL_PASSWORD)
                            Итого (далее решение стандартное из оф. доки):
                            1) Есть питоновский скрипт в папке /usr/lib/zabbix/alertscripts/
                            2) Добавлен способ повещения тип "скрипт"
                            3) в Администрирование\пользователи\Оповещения указан способ оповещения из 2)
                            4) В настройках\действия создано действие для нужного пользователя (вкладка "операции")и триггеров (вкладка "Условия"), на срабатывание которых должно быть выслано письмо.
                            Тему закрываю.
                            Attached Files

                            Comment

                            Working...