Difference between revisions of "Mysmpt-t"

From JaWiki (Jabber/XMPP wiki)
Jump to: navigation, search
m (Косметическая правка 1 раздела)
m (Опечатка в категории Howto --> How To)
 
(8 intermediate revisions by 2 users not shown)
Line 1: Line 1:
'''MySMTP-t''' - легковесный шлюз Jabber-SMTP, который осуществляет прозрачное преобразование Jabber-трафика в SMTP и обратно.
+
'''MySMTP-t''' - легковесный шлюз Jabber-SMTP (транспорт в терминологии jabber), который осуществляет прозрачное преобразование Jabber-трафика в SMTP и обратно. Транспорт '''MySMTP-t''' написан на [[Perl]].
  
Целевая аудитория: администраторы серверов Jabber.
+
Целевая аудитория документа: администраторы серверов Jabber.
  
 
----
 
----
  
 +
== Установка MySMTP-t ==
 
Скачать все необходимые файлы можно из SVN svn://mytlt.ru/mysmtp-t
 
Скачать все необходимые файлы можно из SVN svn://mytlt.ru/mysmtp-t
На данный момент проект насчитывает три файла:
+
На данный момент (май 2008) проект насчитывает четыре файла:
smtp -- отвечает за регистрацию пользователей, отправку сообщений из Jabber в SMTP, работает в режиме демона;
+
; smtp     : отвечает за регистрацию пользователей, отправку сообщений из Jabber в SMTP, работает в режиме демона;
smtpbot -- отвечает за приём сообщений от почтового сервера и отправку их в Jabber, отправляет сообщения на авторизацию;
+
; smtpbot : отвечает за приём сообщений от почтового сервера и отправку их в Jabber, отправляет сообщения на авторизацию;
smtp.ini -- конфигурационный файл
+
; smtp.ini : конфигурационный файл;
 +
; tidy.cfg : конфигурационный файл Tidy.
  
 
В процессе использования будет создан ещё файл smtp.db, который содержит информацию о пользователях.
 
В процессе использования будет создан ещё файл smtp.db, который содержит информацию о пользователях.
  
 
Для работы потребуется:
 
Для работы потребуется:
* Perl5 (проверялось на Perl-5.8.8) модули:
+
* [[Perl|Perl5]] (проверялось на Perl-5.8.8) и модули к нему:
*:    Net::Jabber (и Net::XMPP)
+
*# внешние:
*:    MIME::Parser
+
*#*    DBI;
*:     MIME::Base64
+
*#*    DBD::SQLite;
*:     MIME::QuotedPrint
+
*#*    HTML::Tidy;
*:    Mail::Sendmail
+
*#*    HTTP::Request;
*:     Getopt::Long
+
*#*     [[Net::Jabber]] [[Net::XMPP]]);
*:     DBD::SQLite
+
*#*    Mail::Sendmail;
 +
*#*     MIME::Parser;
 +
*#*     MIME::Base64;
 +
*#*     MIME::QuotedPrint;
 +
*# стандартные:
 +
*#*     utf8;
 +
*#*    Data::Dumper;
 +
*#*     Getopt::Long;
 +
*#*     Encode.
 
* MTA, например, Postfix
 
* MTA, например, Postfix
 
* собственно сервер Jabber
 
* собственно сервер Jabber
Line 31: Line 41:
  
 
  # Our service name (FQDN)
 
  # Our service name (FQDN)
  name=dummy
+
  name=smtp.jabber.org.net.ru
 
  # Jabbber server
 
  # Jabbber server
 
  server=jabber.org.net.ru
 
  server=jabber.org.net.ru
Line 37: Line 47:
 
  port=5333
 
  port=5333
 
  # Secret that is using while connecting to jabber server
 
  # Secret that is using while connecting to jabber server
  password=secret
+
  password=seCREt
 
  # Logfile to output information
 
  # Logfile to output information
 
  logfile=log.txt
 
  logfile=log.txt
Line 43: Line 53:
 
  # debug=1
 
  # debug=1
  
name - это полное имя сервиса в Jabber. То есть имя вида: smtp.my.jabber.server.ru, где my.jabber.server.ru - имя Вашего сервера Jabber.<br>
+
;name:    полное имя сервиса в Jabber. То есть имя вида: smtp.my.jabber.server.ru, где my.jabber.server.ru&nbsp;— имя Вашего сервера Jabber.
server - полное DNS имя Вашего Jabber-сервера.<br>
+
;serverполное доменное имя вашего Jabber-сервера.
port - прослушиваемый порт Jabber-сервера к которому следует подключаться.<br>
+
;port:    прослушиваемый порт Jabber-сервера, к которому следует подключаться транспорту.
password - пароль на подключение сервиса.<br>
+
;password: пароль на подключение сервиса.
logfile - имя файла для логов.<br>
+
;logfileимя файла журнала.
debug - включение режима отладки.
+
;debug:    включение режима отладки.
  
Следует отметить, что при отсутствии имени сервиса оно будет выбрано автоматически путём добавления к имени сервера префикса smtp и знака точки. То есть для сервера jabber.org автоматически выбранное имя будет smtp.jabber.org.
+
Следует отметить, что при отсутствии имени сервиса оно будет выбрано автоматически путём добавления к имени сервера префикса smtp и точки. Например, для сервера jabber.org автоматически выбранное имя будет smtp.jabber.org.
 +
 
 +
== Настройка сервера Jabber ==
 +
 
 +
В сервере Jabber нужно настроить порт для приёма соединения от транспорта, для примера из предыдущего параграфа - 5333.
 +
 
 +
Пример для [[ejabberd]], в случае, если транспорт установлен на том же сервере:
 +
 
 +
{5333, ejabberd_service, [{access, all},
 +
                          {ip, {127, 0, 0, 1}},
 +
                          {hosts, ["smtp.jabber.org.net.ru"], [{password, "seCREt"}]}
 +
                          ]
 +
}
 +
,
  
 
== Настройка MTA Postfix ==
 
== Настройка MTA Postfix ==
Line 56: Line 79:
  
 
Итак, для настройки postfix нам необходимо внести изменения в файлы main.cf и master.cf, которые можно отнести, пожалуй, к самым главным файлам настройки postfix и в файле transport, который указывает на маршрутизацию писем по получателю.
 
Итак, для настройки postfix нам необходимо внести изменения в файлы main.cf и master.cf, которые можно отнести, пожалуй, к самым главным файлам настройки postfix и в файле transport, который указывает на маршрутизацию писем по получателю.
main.cf:
 
В пункт mydestination необходимо добавить обслуживаемый jabber-домен, например для jabber.org:
 
  
<nowiki>'''mydestination = $myhostname, localhost, jabber.org'''</nowiki>
+
====Изменения в файле main.cf====
 +
 
 +
В пункт '''mydestination''' необходимо добавить обслуживаемый jabber-домен, например для jabber.org:
 +
 
 +
mydestination = $myhostname, localhost, jabber.org
 +
 
 +
(в данном случае добавлен только jabber.org в конец списка)
 +
Также требуется отключить проверку пользователей домена jabber на присутствие в системе:
 +
 
 +
local_recipient_maps =
 +
 
 +
То есть достаточно присвоить этому параметру пустое значение. (Такая настройка небезопасна в отношении спама!) Чтобы исключить опасность, необходимо создать дополнительный файл, который будет содержать запись, что все пользователи jabber-домена являются допустимыми. Подробнее об этом можно прочитать в документации по postfix.
 +
Если параметр transport_maps ещё не включает в себя файл transport, то добавьте его:
  
(в данном случае я добавил только jabber.org в конец списка)
+
transport_maps = hash:/etc/postfix/transport
Также требуется отключить проверку пользователей jabber-домена на присутствие в системе:
+
  
<nowiki>'''local_recipient_maps ='''</nowiki>
+
====Изменения в файле master.cf====
  
То есть присвоить этому параметру пустое значение. Если у Вас обслуживается несколько доменов, то необходимо создать дополнительный файл, который будет содержать запись что все пользователи jabber-домена являются допустимыми. Подробнее об этом можно прочитать в документации по postfix.
+
Добавляем следующие строки для транспорта:
Если параметр transport_maps ещё не включает в себя файл transport, то добавьте его
+
  
<nowiki>transport_maps = hash:/etc/postfix/transport</nowiki>
+
jabber  unix  -      n      n      -      -      pipe \
 +
  flags=DRhu user=jabber argv=/opt/jabber/mailgate/smtpbot ${sender} ${recipient}
  
master.cf. Добавляем следующие строки транспорта:
+
Здесь в поле user указывается пользователь, с правами которого работает jabber-сервер, и в параметре argv указывается полный путь до файла smtpbot в файловой системе сервера.
  
<nowiki>jabber  unix  -      n      n      -      -      pipe
+
====Изменения в файле transport====
  flags=DRhu user=jabber argv=/opt/jabber/mailgate/smtpbot ${sender} ${recipient}</nowiki>
+
В файл transport вписываем строчку для нашего домена (на примере jabber.org):
  
Здесь в поле user указывается пользователь от чьего имени работает jabber-сервер, и исправляете путь до
+
jabber.org        jabber:
местонахождения траспорта в Вашей файловой системе.
+
  
transport. Прописываем строчку для нашего домена (на примере jabber.org):
+
====Проверка и запуск====
  
<nowiki>jabber.org        jabber:</nowiki>
+
После завершения настройки необходимо выполнить команду '''postmap transport''', задать postfix команду перечитать конфигурацию (в Linux - '''/etc/init.d/postfix reload''') и в файле '''/var/log/mail''' проверить, что postfix работает нормально. Затем можно в клиенте jabber подключаться к транспорту и пересылать сообщения из jabber на email и наоборот.
  
После это выполните команду '''postmap transport'''.
+
[[Category:Gateway]]
 +
[[Category:HowTo]]

Latest revision as of 10:01, 5 June 2008

MySMTP-t - легковесный шлюз Jabber-SMTP (транспорт в терминологии jabber), который осуществляет прозрачное преобразование Jabber-трафика в SMTP и обратно. Транспорт MySMTP-t написан на Perl.

Целевая аудитория документа: администраторы серверов Jabber.


Установка MySMTP-t[edit]

Скачать все необходимые файлы можно из SVN svn://mytlt.ru/mysmtp-t На данный момент (май 2008) проект насчитывает четыре файла:

smtp  
отвечает за регистрацию пользователей, отправку сообщений из Jabber в SMTP, работает в режиме демона;
smtpbot  
отвечает за приём сообщений от почтового сервера и отправку их в Jabber, отправляет сообщения на авторизацию;
smtp.ini 
конфигурационный файл;
tidy.cfg 
конфигурационный файл Tidy.

В процессе использования будет создан ещё файл smtp.db, который содержит информацию о пользователях.

Для работы потребуется:

  • Perl5 (проверялось на Perl-5.8.8) и модули к нему:
    1. внешние:
      • DBI;
      • DBD::SQLite;
      • HTML::Tidy;
      • HTTP::Request;
      • Net::JabberNet::XMPP);
      • Mail::Sendmail;
      • MIME::Parser;
      • MIME::Base64;
      • MIME::QuotedPrint;
    2. стандартные:
      • utf8;
      • Data::Dumper;
      • Getopt::Long;
      • Encode.
  • MTA, например, Postfix
  • собственно сервер Jabber

Настройка производится в нескольких местах: сам транспорт, база данных транспорта, почтовый агент, Jabber-сервер.

Настройка самого транспорта[edit]

Настройка транспорта производится в файле smtp.ini. Пример данного файла приводится в дистрибутиве:

# Our service name (FQDN)
name=smtp.jabber.org.net.ru
# Jabbber server
server=jabber.org.net.ru
# Port on jabber server
port=5333
# Secret that is using while connecting to jabber server
password=seCREt
# Logfile to output information
logfile=log.txt
# Turn on debugging
# debug=1
name
полное имя сервиса в Jabber. То есть имя вида: smtp.my.jabber.server.ru, где my.jabber.server.ru — имя Вашего сервера Jabber.
server
полное доменное имя вашего Jabber-сервера.
port
прослушиваемый порт Jabber-сервера, к которому следует подключаться транспорту.
password
пароль на подключение сервиса.
logfile
имя файла журнала.
debug
включение режима отладки.

Следует отметить, что при отсутствии имени сервиса оно будет выбрано автоматически путём добавления к имени сервера префикса smtp и точки. Например, для сервера jabber.org автоматически выбранное имя будет smtp.jabber.org.

Настройка сервера Jabber[edit]

В сервере Jabber нужно настроить порт для приёма соединения от транспорта, для примера из предыдущего параграфа - 5333.

Пример для ejabberd, в случае, если транспорт установлен на том же сервере:

{5333, ejabberd_service, [{access, all},
                          {ip, {127, 0, 0, 1}},
                          {hosts, ["smtp.jabber.org.net.ru"], [{password, "seCREt"}]}
                         ]
}
,

Настройка MTA Postfix[edit]

Если у Вас уже имеется настроенный MTA Postfix, то изменения конфигурации для поддержания дополнительного домена будут минимальные, в случае необходимости настройки следует обратиться к официальной документации, так как объём данного документа не позволяет нам покрыть даже часть возможных вариантов настройки почтового сервера пусть даже небольшого масштаба.

Итак, для настройки postfix нам необходимо внести изменения в файлы main.cf и master.cf, которые можно отнести, пожалуй, к самым главным файлам настройки postfix и в файле transport, который указывает на маршрутизацию писем по получателю.

Изменения в файле main.cf[edit]

В пункт mydestination необходимо добавить обслуживаемый jabber-домен, например для jabber.org:

mydestination = $myhostname, localhost, jabber.org

(в данном случае добавлен только jabber.org в конец списка) Также требуется отключить проверку пользователей домена jabber на присутствие в системе:

local_recipient_maps =

То есть достаточно присвоить этому параметру пустое значение. (Такая настройка небезопасна в отношении спама!) Чтобы исключить опасность, необходимо создать дополнительный файл, который будет содержать запись, что все пользователи jabber-домена являются допустимыми. Подробнее об этом можно прочитать в документации по postfix. Если параметр transport_maps ещё не включает в себя файл transport, то добавьте его:

transport_maps = hash:/etc/postfix/transport

Изменения в файле master.cf[edit]

Добавляем следующие строки для транспорта:

jabber  unix  -       n       n       -       -       pipe \
 flags=DRhu user=jabber argv=/opt/jabber/mailgate/smtpbot ${sender} ${recipient}

Здесь в поле user указывается пользователь, с правами которого работает jabber-сервер, и в параметре argv указывается полный путь до файла smtpbot в файловой системе сервера.

Изменения в файле transport[edit]

В файл transport вписываем строчку для нашего домена (на примере jabber.org):

jabber.org         jabber:

Проверка и запуск[edit]

После завершения настройки необходимо выполнить команду postmap transport, задать postfix команду перечитать конфигурацию (в Linux - /etc/init.d/postfix reload) и в файле /var/log/mail проверить, что postfix работает нормально. Затем можно в клиенте jabber подключаться к транспорту и пересылать сообщения из jabber на email и наоборот.