Как работает Sendmail? Полезные подробности. Часть 4: Взаимодействие со сторонними программами::Журнал СА 8.2006
www.samag.ru
     
Поиск   
              
 www.samag.ru    Web  0 товаров , сумма 0 руб.
E-mail
Пароль  
 Запомнить меня
Регистрация | Забыли пароль?
Журнал "Системный администратор"
Журнал «БИТ»
Подписка
Архив номеров
Где купить
Наука и технологии
Авторам
Рекламодателям
Контакты
   

  Опросы
  Статьи

Событие  

В банке рассола ждет сисадмина с полей фрактал-кукумбер

Читайте впечатления о слете ДСА 2024, рассказанные волонтером и участником слета

 Читать далее...

Организация бесперебойной работы  

Бесперебойная работа ИТ-инфраструктуры в режиме 24/7 Как обеспечить ее в нынешних условиях?

Год назад ИТ-компания «Крок» провела исследование «Ключевые тренды сервисного рынка 2023». Результаты

 Читать далее...

Книжная полка  

Читайте и познавайте мир технологий!

Издательство «БХВ» продолжает радовать выпуском интересных и полезных, к тому же прекрасно

 Читать далее...

СУБД PostgreSQL  

СУБД Postgres Pro

Сертификация по новым требованиям ФСТЭК и роль администратора без доступа к данным

 Читать далее...

Критическая инфраструктура  

КИИ для оператора связи. Готовы ли компании к повышению уровня кибербезопасности?

Похоже, что провайдеры и операторы связи начали забывать о требованиях законодательства

 Читать далее...

Архитектура ПО  

Архитектурные метрики. Качество архитектуры и способность системы к эволюционированию

Обычно соответствие программного продукта требованиям мы проверяем через скоуп вполне себе понятных

 Читать далее...

Как хорошо вы это знаете  

Что вам известно о разработках компании ARinteg?

Компания ARinteg (ООО «АРинтег») – системный интегратор на российском рынке ИБ –

 Читать далее...

Графические редакторы  

Рисование абстрактных гор в стиле Paper Cut

Векторный графический редактор Inkscape – яркий представитель той прослойки open source, с

 Читать далее...

День сисадмина  

Учите матчасть! Или как стать системным администратором

Лето – время не только отпусков, но и хорошая возможность определиться с профессией

 Читать далее...

День сисадмина  

Живой айтишник – это всегда движение. Остановка смерти подобна

Наши авторы рассказывают о своем опыте и дают советы начинающим системным администраторам.

 Читать далее...

Виртуализация  

Рынок решений для виртуализации

По данным «Обзора российского рынка инфраструктурного ПО и перспектив его развития», сделанного

 Читать далее...

Книжная полка  

Как стать креативным и востребованным

Издательский дом «Питер» предлагает новинки компьютерной литературы, а также книги по бизнесу

 Читать далее...

Книжная полка  

От создания сайтов до разработки и реализации API

В издательстве «БХВ» недавно вышли книги, которые будут интересны системным администраторам, создателям

 Читать далее...

Разбор полетов  

Ошибок опыт трудный

Как часто мы легко повторяем, что не надо бояться совершать ошибки, мол,

 Читать далее...

1001 и 1 книга  
19.03.2018г.
Просмотров: 6143
Комментарии: 0
Машинное обучение с использованием библиотеки Н2О

 Читать далее...

12.03.2018г.
Просмотров: 6856
Комментарии: 0
Особенности киберпреступлений в России: инструменты нападения и защита информации

 Читать далее...

12.03.2018г.
Просмотров: 4139
Комментарии: 0
Глубокое обучение с точки зрения практика

 Читать далее...

12.03.2018г.
Просмотров: 2978
Комментарии: 0
Изучаем pandas

 Читать далее...

12.03.2018г.
Просмотров: 3781
Комментарии: 0
Программирование на языке Rust (Цветное издание)

 Читать далее...

19.12.2017г.
Просмотров: 3789
Комментарии: 0
Глубокое обучение

 Читать далее...

19.12.2017г.
Просмотров: 6283
Комментарии: 0
Анализ социальных медиа на Python

 Читать далее...

19.12.2017г.
Просмотров: 3134
Комментарии: 0
Основы блокчейна

 Читать далее...

19.12.2017г.
Просмотров: 3434
Комментарии: 0
Java 9. Полный обзор нововведений

 Читать далее...

16.02.2017г.
Просмотров: 7246
Комментарии: 0
Опоздавших не бывает, или книга о стеке

 Читать далее...

17.05.2016г.
Просмотров: 10616
Комментарии: 0
Теория вычислений для программистов

 Читать далее...

30.03.2015г.
Просмотров: 12336
Комментарии: 0
От математики к обобщенному программированию

 Читать далее...

18.02.2014г.
Просмотров: 13969
Комментарии: 0
Рецензия на книгу «Читаем Тьюринга»

 Читать далее...

13.02.2014г.
Просмотров: 9100
Комментарии: 0
Читайте, размышляйте, действуйте

 Читать далее...

12.02.2014г.
Просмотров: 7053
Комментарии: 0
Рисуем наши мысли

 Читать далее...

10.02.2014г.
Просмотров: 5362
Комментарии: 3
Страна в цифрах

 Читать далее...

18.12.2013г.
Просмотров: 4594
Комментарии: 0
Большие данные меняют нашу жизнь

 Читать далее...

18.12.2013г.
Просмотров: 3402
Комментарии: 0
Компьютерные технологии – корень зла для точки роста

 Читать далее...

04.12.2013г.
Просмотров: 3129
Комментарии: 0
Паутина в облаках

 Читать далее...

03.12.2013г.
Просмотров: 3379
Комментарии: 0
Рецензия на книгу «MongoDB в действии»

 Читать далее...

02.12.2013г.
Просмотров: 3000
Комментарии: 0
Не думай о минутах свысока

 Читать далее...

Друзья сайта  

 Как работает Sendmail? Полезные подробности. Часть 4: Взаимодействие со сторонними программами

Архив номеров / 2006 / Выпуск №8 (45) / Как работает Sendmail? Полезные подробности. Часть 4: Взаимодействие со сторонними программами

Рубрика: Администрирование /  Продукты и решения

Сергей Супрунов

Как работает Sendmail? Полезные подробности

Часть 4: Взаимодействие со сторонними программами

Гуртом і батька добре бити.

 

Мудрость братского народа

Как бы ни был гибок и функционален Sendmail, его возможностей не всегда хватает для решения всего многообразия задач. Но открытость ПО тем и хороша, что позволяет наращивать мощь практически без ограничений.

Защиты не бывает много

Sendmail, как было показано в предыдущих частях статьи (№ 5, 6, 7 за 2006 г. – http://www.samag.ru/cgi-bin/go.pl?q=articles;n=05.2006;a=01; http://www.samag.ru/cgi-bin/go.pl?q=articles;n=06.2006;a=02; http://www.samag.ru/cgi-bin/go.pl?q=articles;n=07.2006;a=01), позволяет, используя файл aliases или пользовательские .forward-файлы, перенаправлять входящие сообщения на обработку сторонними программами. Сам механизм достаточно прост: письмо в исходном формате поступает на стандартный вход (stdin) указанной программы или скрипта, который в дальнейшем занимается его обработкой. Несложный пример реализации такого сценария на Python можно найти в статье «Практикум Python: обрабатываем входящую электронную почту» (№2 за 2006 г. – http://www.samag.ru/cgi-bin/go.pl?q=articles;n=02.2006;a=01).

Однако здесь скрывается потенциальная проблема безопасности – если у пользователя будет возможность самостоятельно указывать любые программы в качестве обработчиков почты, то всегда остаётся вероятность, что он воспользуется этим для несанкционированного вызова программы, к которой в нормальных условиях у него нет доступа (например, не предоставляется доступ к командной оболочке, но есть возможность вносить изменения в .forward-файл через веб-интерфейс). Конечно, Sendmail снижает до минимума негативные последствия этой возможности, запуская процесс, выполняющий такую обработку, от имени пользователя-владельца .forward-файла. Но нельзя забывать, что в системе могут быть исполняемые файлы, на которые установлен бит suid, что в ряде случаев может привести к печальным последствиям...

Для решения этой проблемы Sendmail можно настроить на работу с «ограниченной оболочкой» (restricted shell for sendmail) – smrsh. Особенностью этой оболочки является то, что она позволяет запускать программы только из своего каталога, в системах FreeBSD по умолчанию это /usr/libexec/sm.bin (изменить можно перекомпиляцией утилиты с флагом -DSMRSH_CMDDIR).

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

# pwd

/usr/libexec/sm.bin

# ls –l

total 0

lrwxr-xr-x  1 root  wheel  18 29 июн 10:13 thetest -> /home/serg/test.sh

lrwxr-xr-x  1 root  wheel  10 29 июн 10:01 w -> /usr/bin/w

# /usr/libexec/smrsh -c w

10:01AM  up 20 days, 21:44, 1 user, load averages: 0.00, 0.02, 0.00

USER    TTY    FROM               LOGIN@     IDLE WHAT

serg    p0     curs3.myserver.    8:48AM     - /usr/libexec/sm.bin/w

# /usr/libexec/smrsh -c who

/usr/libexec/smrsh: "who" not available for sendmail programs (stat failed)

# /usr/libexec/smrsh -c thetest

Smrsh test

Как видите, smrsh позволяет исполнять только те программы, ссылки на которые (или сами двоичные файлы) размещены в /usr/libexec/sm.bin. Это же относится и к скриптам – достаточно указать ссылку на скрипт, делать ссылку на интерпретатор не требуется. При желании вы можете использовать любое имя программы – будет использоваться имя ссылки, а не первоначальное имя «бинарника».

Чтобы Sendmail использовал для обработки перенаправлений эту оболочку, а не стандартную sh, добавьте в mc-файл такую строку:

FEATURE(smrsh)

Любители править cf-файл могут заменить имя программы в строке Mprog, т.е. вместо «Mprog, P=/bin/sh . . . » использовать «Mprog, P=/usr/libexec/smrsh . . . ».

Вход только по пропускам

Если для всех ваших пользователей предусматривается работа только из вашей подсети (или в крайнем случае существует ограниченный и стабильный список внешних сетей для доступа к почте), то задача ограничения режима ретрансляции почты, чтобы ваш MTA не стал «открытым релеем», решается довольно легко с помощью файла access.

Но как только у вас появляются пользователи, которым нужно обеспечить возможность работы с их электронной почтой из любой точки мира, возникает определённая проблема. И наиболее приемлемым её решением будет использование аутентификации.

Пожалуй, самой удобной методикой для Sendmail является использование SASL-аутентификации силами пакета SASL-Auth. По умолчанию Sendmail во FreeBSD собирается без поддержки SASL, в чём можно убедиться, подав такую команду:

$ sendmail -d0.1 -bv

и внимательно изучив строчки «Compiled with» на предмет упоминания про SASL.

Чтобы поддержка SASL в Sendmail появилась, нужно его пересобрать. Для этого у вас должны быть исходные коды системы. Последовательность действий такова:

  1. Устанавливаем из портов security/cyrus-sasl2-saslauthd. Конфигурацию можно оставить по умолчанию.
  2. В файле /usr/local/lib/sasl2/Sendmail.conf проверяем значение переменной pwcheck_method. По умолчанию она определена как saslauthd, что означает использование универсального демона и будет хорошим решением в большинстве случаев.
  3. Редактируем /etc/make.conf, добавив туда несколько строк, которые будут использоваться при сборке системных программ:
  4. # Флаги SASL для Sendmail

    SENDMAIL_CFLAGS=-I/usr/local/include -DSASL=2

    SENDMAIL_LDFLAGS=-L/usr/local/lib

    SENDMAIL_LDADD=-lsasl2

    # Поддержка порта smtps для sendmail (если планируется)

    SENDMAIL_CFLAGS+= -D_FER_SMTP_SSL

    Здесь мы указываем добавлять при компиляции Sendmail данные флаги, а также сообщаем программе make пути к необходимым библиотекам.

  5. Теперь пересобираем Sendmail:

# cd /usr/src/lib/libsmutil/

# make clean && make depend && make

# cd ../libsm

# make clean && make depend && make

# cd /usr/src/usr.sbin/sendmail

# make clean && make depend && make && make install

Обязательно убедитесь, что предварительно установили пакет cyrus-sasl (см. пункт 1), иначе получите ошибку об отсутствии нужных библиотек. Кстати, чтобы эти библиотеки не приходилось отыскивать по всему диску, настоятельно рекомендуется ставить всё только из системы портов.

Теперь в выводимой информации должно присутствовать упоминание SASLv2:

$ sendmail -d0.1 –bv

Version 8.13.6

Compiled with:  . . .SASLv2 . . .

Это означает, что осталось подкорректировать при необходимости конфигурацию Sendmail, и можно проверять работу системы. Первое, что может потребовать настройки, это список разрешённых методов аутентификации. То, что у вас получилось сразу после перекомпиляции, можно узнать, подключившись с помощью telnet на 25-й порт и введя команду EHLO:

$ telnet localhost 25

Trying 127.0.0.1...

Connected to localhost.

Escape character is "^]".

220 server.ru ESMTP Sendmail 8.13.6/8.13.6;

Thu, 13 Jul 2006 14:27:45 +0400 (MSD)

EHLO me

250-server.ru Hello localhost [127.0.0.1], pleased to meet you

250-ENHANCEDSTATUSCODES

250-PIPELINING

250-8BITMIME

250-SIZE 12500000

250-DSN

250-AUTH GSSAPI DIGEST-MD5 CRAM-MD5

250-DELIVERBY

250 HELP

Третья с конца строка как раз и отображает поддерживаемые механизмы аутентификации. Изменить их список можно с помощью следующих директив:

TRUST_AUTH_MECH(`DIGEST-MD5 LOGIN PLAIN")dnl

define(`confAUTH_MECHANISMS", `DIGEST-MD5 LOGIN PLAIN")dnl

Во второй строке перечисляются поддерживаемые механизмы вообще, в то время как первой директивой мы определяем список «доверенных» механизмов, т.е. тех, при использовании которых будет разрешена пересылка почты (relaying), даже если адрес клиента не помечен в базе access как RELAY или OK.

Ребята! Да я же свой!

Иногда может возникнуть ситуация, когда ваш сервер, для того, чтобы передать куда-то сообщение, сам должен будет пройти аутентификацию. Например, это вполне обычная ситуация, если ваш MTA работает исключительно через сервер провайдера, а провайдер не желает тратить силы на добавление вашего хоста в список доверенных, настаивая на обязательном прохождении всеми клиентами процедуры проверки подлинности.

Для этого существует файл authinfo, который подключается таким образом:

FEATURE(`authinfo", `hash -o /etc/mail/authinfo")

В указанном файле прописываем параметры аутентификации на нужные серверы в следующем формате:

AuthInfo:servak.de "U:" "I:" "P:" "M:LOGIN PLAIN"

Здесь servak.de – имя удалённого сервера, которому нужно будет предоставить аутентификационную информацию. В ключе M указываются методы, которые должны при этом использоваться. Не забудьте создать хэш этого файла.

LDAP – путь к единению

В крупных корпоративных сетях довольно часто используются базы LDAP для хранения информации о пользователях этих сетей. И было бы весьма разумно воспользоваться этим механизмом для хранения некоторой конфигурационной информации вашего почтового сервера.

Sendmail поддерживает возможность работы с LDAP-базой, позволяя вам использовать службу каталогов вместо файлов access, aliases и т. д. Правда, так же, как и в случае с SASL, во FreeBSD он собран без поддержки LDAP. Включается эта поддержка аналогично:

  1. Устанавливаем из портов openldap-client или openldap-server (если LDAP-сервера у нас ещё нет и мы хотим запустить его на этой же машине).
  2. Вносим изменения в /etc/make.conf:
  3. # Флаги LDAP для Sendmail

    SENDMAIL_CFLAGS+= -I/usr/local/include -DLDAPMAP

    SENDMAIL_LDFLAGS+= -L/usr/local/lib

    SENDMAIL_LDADD+= -lldap -llber

  4. Пересобираем Sendmail, как было описано для SASL (см. пункт 4).

Теперь уже знакомая нам команда должна вывести упоминание и про LDAP:

# sendmail -d0.1 -bv root | grep LDAP

Compiled with: . . . LDAPMAP . . . USE_LDAP_INIT . . .

Кстати говоря, если вы заодно хотите воспользоваться преимуществами самой последней версии Sendmail (дистрибутивная, как правило, отстаёт на один-два минорных номера), то можно не мучиться с перекомпиляцией, а поставить Sendmail из портов сразу с нужным набором функций. Благо, этого добра там хватает:

$ make search name=sendmail | grep Port

. . . .

Port:   sendmail-8.13.7_1

Port:   sendmail+tls+sasl2+ldap-8.13.7_1

Port:   sendmail+tls+sasl2-8.13.7_1

. . . .

После перекомпиляции (или установки) Sendmail проверьте в /usr/local/etc/openldap/slapd.conf, подключена ли схема sendmail.schema.

Если нет, добавьте строку:

include /usr/share/sendmail/cf/sendmail.schema

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

Теперь осталось занести в каталог LDAP необходимые записи (как это сделать, смотрите в документации по LDAP; несколько полезных ссылок приведено в конце статьи) и добавить в mc-файл директивы, указывающие, что следует использовать LDAP:

define(`confLDAP_DEFAULT_SPEC", `-h ldap.your.domain.ru -b dc=your,dc=domain,dc=ru")

FEATURE(`access_db", `LDAP")

define(`ALIAS_FILE", `ldap:")

Первая строка задаёт параметры LDAP-сервера, второй мы указываем, что вместо /etc/mail/access следует использовать службу каталогов, третьей строкой аналогично указываем использовать LDAP для определения псевдонимов.

Альтернативные LDA

Sendmail позволяет подключать практически любую программу в качестве локального агента доставки, естественно, при условии, что эта программа будет «вести себя как LDA» (помните? – «если это выглядит как утка, крякает как утка и ходит как утка, то это – утка»). Благодаря этому у нас есть возможность довольно сильно влиять на то, как почта будет сохраняться. Поэтому не удивительно, что помимо стандартного для FreeBSD mail.local разработано большое число «альтернативных» агентов доставки.

Прежде всего вспоминается очень мощная программа procmail, предоставляющая широчайшие возможности по обработке почты, до того как она попадёт в почтовый ящик пользователя. Её порой так активно используют для борьбы со спамом, что письмо в принципе может вообще не попасть к пользователю. Недаром во многих дистрибутивах Linux именно она работает в паре с Sendmail по умолчанию. Чтобы воспользоваться его преимуществами, достаточно подключить этот LDA (директивой MAILER(procmail), соответствующий m4-файл входит в стандартную поставку Sendmail) и указать в mailertable использование этого LDA для нужных доменов:

your.domain       procmail

Второй вариант – включить в mc-файл директиву FEATURE(`local_procmail’), которая даст указание использовать procmail в качестве стандартного LDA (объявленного как local).

Далее, если вы хотите просто перейти на использование хранилища формата Maildir вместо стандартного mailbox, то в качестве LDA можно подключить, например, программу maildrop:

FEATURE(`local_procmail", `/usr/local/bin/maildrop", `maildrop -d $u")

Здесь мы воспользовались той же самой директивой, только вместо пути к procmail указали нужный нам. Кстати, если procmail у вас установлен нестандартно (т.е. не в /usr/local/bin), то и для его подключения потребуется указывать полный путь. Естественно, для полноценной работы с Maildir ваш POP3/IMAP-сервер тоже должен уметь работать с этим форматом, впрочем, это уже совсем другая история…

Следующий шаг к совершенству – DBMail

Для полного счастья хорошо бы ещё добавить гибкости почтовым ящикам пользователей. Одно из решений – использовать для их хранения реляционную СУБД, что и реализуется проектом DBMail.

Подробно о DBMail здесь мы говорить не будем (этот пакет с успехом может применяться не только в связке с Sendmail, но и с другими популярными MTA). Некоторая общая информация представлена во врезке «DBMail». Также обратитесь к статье Евгения Прокопьева «Почтовый сервер на основе реляционной СУБД» (№1 за 2006 г.), где работа DBMail освещена очень детально.

Поскольку размещение входящей корреспонденции по почтовым ящикам пользователей не является функцией MTA (как вы помните из первой части статьи, этим занимается агент локальной доставки (LDA)), то с точки зрения Sendmail его логика обработки сообщений совершенно не меняется. Всё что требуется – это зарегистрировать DBMail в качестве LDA и дать указание Sendmail использовать именно его для доставки входящей корреспонденции, как мы это делали для procmail. Первая задача решается одной из следующих директив в mc-файле:

MAILER(dbmail)

MAILER(dbmail-lmtp)

Первая строка подключает DBMail в качестве LDA, работающего обычным образом (по конвейеру (pipe)), вторая – для работы по протоколу LMTP. То есть почта, для обработки которой будет указан соответствующий агент доставки, будет передаваться демону dbmail, который и займётся всем остальным. При необходимости можно использовать и оба агента одновременно. Правда, при установке из портов файл dbmail.m4 нигде не появился, и его либо придётся создать самому, подкорректировав один из имеющихся шаблонов (например, procmail.m4), либо найти готовый (например, здесь: http://www.dbmail.org/dokuwiki/doku.php?id=sendmail_howto).

Вторая задача (чтобы Sendmail знал, для какой почты следует использовать тот или иной LDA) – настройка mailtertable для использования этого LDA:

your.domain       dbmail

other.domain      dbmail-lmpt:[127.0.0.1]

Естественно, вы можете указать использование dbmail только для необходимых доменов. Не забудьте всё пересобрать и перезагрузить процесс sendmail, чтобы изменения вступили в силу.

Думаю, можно также безболезненно воспользоваться тем же приёмом, которым мы подключали maildrop (т.е. создав видимость, что наш dbmail – это procmail, и воспользовавшись готовыми шаблонами для этого LDA). Правда, на практике это не испытывал.

Расширенные возможности фильтрации

Очень широкие возможности для обработки сообщений предоставляют появившиеся в версии 8.11.6 (неофициально – с 8.10) почтовые фильтры, или «мильтеры» (milter, аббревиатура от Mail fILTER).

Почтовые фильтры широко применяются для взаимодействия с такими программами, как антивирусы, спам-фильтры и т. д. То есть они, по сути, предоставляют возможность «заворачивать» обрабатываемое сообщение сторонней программе через сетевой или UNIX-сокет. Кстати говоря, использование для взаимодействия сокетов позволяет размещать программу-фильтр на другой машине в сети, что в ряде случаев может быть полезно для централизации обработки или для снижения нагрузки на основной сервер, если фильтрация требует существенных вычислительных ресурсов или создаёт большую нагрузку на дисковую подсистему. Но нельзя забывать и о дополнительных задержках в этом случае, равно как и о безопасности передаваемой по сокету информации.

Фильтр позволяет контролировать обработку письма начиная с момента установления соединения с удалённым сервером и до полного его получения. В любой момент обработка может быть прервана с помощью одного из флагов возврата: ACCEPT (принять сообщение), REJECT (отклонить с уведомлением об этом отправителя) или DISCARD (отбросить без каких-либо уведомлений). То есть, скажем, если необходимость отклонить сообщение будет выявлена на ранних стадиях сеанса, например, на основе информации, помещённой в заголовок, то это можно будет сделать до того, как письмо будет принято полностью. Ещё один пример использования такой возможности – приём сообщения (ACCEPT) без проверки всех вложений на вирусы, если в заголовке будет обнаружена строка, информирующая о том, что такая проверка уже выполнялась сервером отправителя (хотя всецело доверять таким заголовкам, конечно же, не стоит).

Помимо решения о том, принять или отклонить сообщение, milter позволяет вносить изменения в тему или тело сообщения, добавлять строки в заголовок, и т. д. Благодаря этому можно, например, поместить в заголовок информацию о выполненной антивирусной проверке или оставить пометку, что письмо признано вероятным спамом. Именно так поступают многие антивирусные и антиспамовые пакеты.

Условно схема прохождения письма через подключенные фильтры показана на рис. 1. Фильтров может быть сколь угодно много (реальное ограничение накладывается лишь нагрузкой на систему и требованиями к допустимой задержке при обработке сообщений). Порядок применения фильтров определяется порядком их подключения в конфигурационном файле.

Рисунок 1. Схема прохождения сообщений

Рисунок 1. Схема прохождения сообщений

Кстати, о конфигурации... Подключается milter такой директивой:

INPUT_MAIL_FILTER(`clmilter", `S=local:/var/run/clamav/clmilter.sock,F=, T=S:4m;R:4m")

Первым аргументом передаётся имя фильтра, вторым – строка параметров. Параметра может быть три:

  • S, который задаёт используемый сокет (может быть local и inet);
  • F, определяющий, как поступать с письмом в случае проблем с milter (F=T означает возвращать отправителю временную ошибку (temporary fail), F=R – отбросить (reject) соединение, пустое значение F= даёт указание игнорировать проблемы с milter и обрабатывать соединение без фильтрации);
  • T задаёт несколько тайм-аутов (см. таблицу), по истечении которых фильтр будет признан «неотвечающим»

Флаги тайм-аутов

Флаг

Описание

C

Задержка при соединении с фильтром

E

Задержка при ожидании подтверждения полной передачи

R

Задержка при ожидании ответа фильтра

S

Задержка передачи данных фильтру

В нашем примере, если clamav-milter не начнёт принимать сообщение от Sendmail в течение четырёх минут или не даст ответ в течение такого же времени, то сообщение будет передано на дальнейшую обработку без фильтрации.

Вместо указанной выше директивы можно подключать фильтры и таким образом:

MAIL_FILTER(`miltergreylist", `S=local:/var/milter-greylist/milter-greylist.sock,F=, T=S:4m;R:4m")dnl

define(`confINPUT_MAIL_FILTERS", `miltergreylist")

Здесь процедура подключения фильтра разделена на два этапа – первой директивой мы объявляем milter с указанными параметрами, второй – регистрируем указанный milter как фильтр для обработки сообщений. Если по такой схеме требуется подключить несколько почтовых фильтров, то директива define нужна только одна, в которой через запятую перечисляются все регистрируемые фильтры в нужном порядке.

Нужно сказать, что для разработки milter существует прекрасный API, позволяющий довольно быстро создавать фильтры на родном для Sendmail языке C (в списке дополнительной литературы вы найдёте ссылку на пример разработки milter для дублирования исходящей почты на некоторый адрес). Существуют «привязки» к этому API для других языков программирования, например, для Perl (модуль Sendmail::Milter, в коллекции портов – mail/p5-Sendmail-Milter) и Python (интерфейс Python Milter, в Портах – mail/py-milter). Прекрасный пример разработки фильтра на Python рассматривался в статье Романа Сузи «Почтовый фильтр, или Milter = Mail + Filter» (№2 за 2003 г., статью вы можете найти на сайте журнала в разделе «Статьи».).

Списки рассылки

Электронная почта широко используется в самых различных формах. Конечно, если говорить о ведении групповых дискуссий, то есть и более удобные средства: IRC, службы новостей (NNTP), веб-форумы, наконец. Несмотря на это, списки рассылки по электронной почте до сих пор остаются довольно популярным способом обсуждения тех или иных проблем. Очень многие открытые проекты (например, FreeBSD.org, ALT Linux) используют рассылки для оказания технической поддержки своим пользователям, для обсуждения новых возможностей тестовых версий, для уведомлений об обнаруженных проблемах безопасности…

Одной из наиболее известных систем управления списками рассылки является программа Majordomo. Она очень хорошо интегрируется с серверами Sendmail и обладает достаточным набором функций для работы с рассылками.

Установка из коллекции портов никаких сложностей не вызывает, за исключением одного небольшого нюанса: начиная с FreeBSD 5.x Perl не является частью системы и должен устанавливаться из портов, т.е. размещается в /usr/local/bin. Однако порт Majordomo по-старинке хотел видеть /usr/bin/perl. Пришлось ставить ссылку (хотя можно, конечно, и Makefile подправить):

# ln /usr/local/bin/perl /usr/bin/perl

После этого вам нужно будет указать, какой MTA будет использоваться (см. рис. 2; наш выбор, думаю, очевиден). После непродолжительной компиляции мы получим немного нестандартную для FreeBSD схему размещения файлов: «бинарники» и файлы конфигурации будут располагаться в /usr/local/majordomo. Наиболее важны здесь два конфигурационных файла – majordomo.cf, где можно изменить базовые настройки, и aliases.majordomo, содержащий настроенный набор псевдонимов, с помощью которых будет работать Majordomo.

Рисунок 2. Диалог выбора MTA для Majordomo

Рисунок 2. Диалог выбора MTA для Majordomo

Принцип взаимодействия этого пакета с Sendmail достаточно прост и основан на псевдонимах. Например, сообщение, поступающее на адрес majordomo@your.domain.ru будет перенаправлено программе /usr/local/majordomo/wrapper и обработано в соответствии с настройками списка.

Для того чтобы Majordomo начал работать, нужно подключить к Sendmail его файл псевдонимов (хотя можно и просто скопировать нужные строки в /etc/mail/aliases):

define(`ALIAS_FILE", `/etc/mail/aliases, /usr/local/majordomo/aliases.majordomo")

Всё – Majordomo готов к работе. Отправив письмо с командой «lists» в теле на свой домен на адрес majordomo, вы получите информацию о доступных списках рассылки (по умолчанию там будет test-l и test-l-digest). По образу и подобию вы можете создавать собственные списки, для чего нужно создать пустой файл, соответствующий имени рассылки, в /usr/local/majordomo/lists, а также в aliases.majordomo ввести псевдонимы для самой рассылки, команд, адресов владельцев и т.д. – пример можно посмотреть для того же демо-списка, test-l.

Дальнейшее администрирование может выполняться через электронную почту. Например, чтобы поэкспериментировать со списком test-l, первым делом рекомендуется сменить пароль администратора, послав на адрес test-l-request письмо в фразой «passwd test-l test mynewpas», где test-l – имя списка, для которого меняется пароль, test – старый пароль (используется по умолчанию), mynewpas – новый пароль. В случае удачи вы получите письмо с сообщением «Password changed».

Впрочем, работа со списками рассылок – это уже другая тема, и здесь не будем вдаваться в подробности. Тем более что к вашим услугам – отличная страница справки, man majordomo.

Подводная часть айсберга

На этом, пожалуй, и завершим наше знакомство с Sendmail. Естественно, даже в пределах столь объёмного цикла невозможно охватить все аспекты работы этого мощного пакета. Поэтому в заключение я решил привести список ссылок (тоже далеко не полный), по которым можно получить дополнительную информацию.

На этом всё! Удачи!

Приложение

Cyrus SASL

Механизм аутентификации SASL (Simple Authentication and Security Layer) используется для реализации безопасной аутентификации в связке с другими интернет-протоколами. Помимо аутентификации, SASL предоставляет механизмы проверки целостности данных.

Одной из наиболее популярных реализаций SASL является библиотека Cyrus SASL. Будучи разработанной для нужд Cyrus IMAP Server, она широко используется и для других задач, включая SMTP-аутентификацию.

Cyrus SASL поддерживает широкий набор механизмов аутентификации – CRAM-MD5, DIGEST-MD5, Kerberos, GSSAPI (спецификация Kerberos 5). При необходимости может быть разрешена поддержка механизмов «плоской» аутентификации, таких как LOGIN и PLAIN, однако их рекомендуется использовать только при работе по защищённому соединению.

Для выполнения аутентификации используется входящий в состав Cyrus SASL демон saslauthd. Он умеет проводить проверку пароля как по собственной базе, так и используя механизмы PAM, LDAP, системный файл паролей /etc/passwd, и т. д.

LDAP

Lightweight Directory Access Protocol – облегчённый протокол доступа к каталогам – это протокол, призванный обеспечить работу так называемой службы каталогов. Службы каталогов используются для централизованного хранения различной информации, такой как пользовательские учётные записи, адресные книги, различные настройки.

Первоначально служба каталогов (определённая в протоколе X.500) была ориентирована на обслуживание почтовых сетей стандарта X.400, разработанного OSI. Для доступа к этой службе использовался протокол DAP, который и послужил основой для разработки более простого и удобного в работе LDAP.

Записи, хранящиеся в каталогах LDAP, представлены уникальными именами (distinguished name) и рядом атрибутов, определяемых в так называемых схемах. Структура записей позволяет легко организовать записи в виде дерева.

Основным преимуществом LDAP перед «плоскими» файлами или реляционными базами данных является ориентированность на высокую скорость чтения. С учётом очень эффективного кэширования, использование LDAP, помимо централизации информации, что упрощает её сопровождение (включая резервирование), позволяет также снизить задержки при получении информации, если объёмы данных достигают значительных величин.

Помимо свободной реализации службы каталогов – OpenLDAP, широко используемой в системах семейства UNIX/Linux, существует ряд других (например, Active Directory, предназначенная для управления сетями Windows).

Сам протокол LDAP определён в RFC 1777, RFC 2251 (версия 3). Существует также большое число расширяющих и дополняющих документов.

DBMail

Программа DBMail, разработка которой осуществляется двумя датскими фирмами – IC&S и NFG, позволяет организовать хранилище пользовательских почтовых ящиков в базе данных общего назначения. Поддерживаются MySQL и PostgreSQL (в версии 2.2 ожидается добавление к этому списку и SQLite). Для небольших почтовых серверов, обслуживающих локальную сеть вашего предприятия, дополнительное звено в цепи «почтового обслуживания» пользователей лишь снизит надёжность и усложнит сопровождение системы, практически ничего не давая взамен.

Однако на системах с большим числом пользователей или там, где от почтовой системы требуется максимальная гибкость и возможность реализовать самые различные услуги (например, полнотекстовый поиск по всему почтовому ящику с использованием веб-интерфейса) хранение всех сообщений в БД даёт почти безграничные возможности. Например, DBMail очень легко позволяет задать максимальный размер почтового ящика (в случае использования традиционных хранилищ для этого приходится прибегать к системному механизму установки квот на файловую систему): его нужно просто указать в команде создания нового пользователя или изменения параметров его учётной записи:

# dbmail-users -c vasya -m 100M

Любая статистика может быть получена напрямую из базы данных, с помощью обычного SQL-запроса. Кроме того, вы можете использовать все преимущества реляционных баз, такие как резервирование, размещение на отдельном сервере, кластеризация (хотя применительно к поддерживаемым в настоящее время СУБД её реализация требует некоторых дополнительных усилий; см., например, статью Андрея Тренина «Создаём кластер для PostgreSQL» (№1 за 2006 г. http://www.samag.ru/cgi-bin/go.pl?q=articles;n=01.2006;a=07).

Помимо Sendmail поддерживаются практически все популярные MTA.

Sendmail

  1. Основной сайт проекта с полезной документацией – http://www.sendmail.org.
  2. Электронная версия 3-го издания «Bat Book» издательства O’Reilly – http://hell.org.ua/Docs/oreilly/other2/Sendmail_3rd.
  3. Система электронной почты на основе LINUX. Руководство администратора – http://kazna.pl.ua/sysadmins/orel/chap1.htm.
  4. 25 статей по различным аспектам настройки Sendmail с использованием m4 – http://vk.pp.ru/docs/sendmail/m4.
  5. Настройка почтового сервиса на основе Sendmail – http://www.uinc.ru/articles/31.
  6. Андрей Шетухин. Настраиваем Sendmail для виртуального почтового хостинга. – http://reki.ru/sendmail_setup.html.
  7. Андрей Шетухин. Настраиваем Sendmail в качестве транзитного почтового релея. – http://reki.ru/sendmail_transit_setup.html.
  8. Андрей Шетухин. Фильтрафия спама в sendmail. – http://reki.ru/spam-filtering.html.
  9. Хорошая подборка различных статей – http://kazna.pl.ua/sysadmins/sendmail.html.

Аутентификация

  1. RFC 2554 (Расширение SMTP сервиса для аутентификации) – http://www.tigir.com/rfc2554.html.
  2. SMTP AUTH in sendmail 8.10-8.13 – http://www.sendmail.org/~ca/email/auth.html.
  3. Руководство FreeBSD. 24.10 SMTP аутентификация – http://www.freebsd.org/doc/ru_RU.KOI8-R/books/handbook/smtp-auth.html.
  4. Аутентификация в sendmail – http://openbsd.hnet.spb.ru/sasl.html.
  5. Использование SMTP-AUTH в FreeBSD на базе MTA Sendmail-8.13.x – http://unix1.jinr.ru/~lavr/sendmail+sasl2.
  6. Аутентификация пользователей – http://www.opennet.ru/docs/RUS/Cyrus_imap/install-auth.html.
  7. Аутентификация SMTP: sendmail + SASL + LDAP – http://avdor.irkutsk.ru/faq/article.php?show_id=335.

LDAP

  1. Арсений Чеботарёв, LDAP: каталог для всех – http://www.citforum.ru/operation_systems/linux/ldap_cat.
  2. Всеволод Стахов, LDAP-HOWTO по-русски – http://www.ldapzone.spb.ru/docs/ldap_art.phtml.
  3. Всеволод Стахов, Sendmail + LDAP FAQ – http://www.ldapzone.spb.ru/docs/sendmail_ldap.phtml.
  4. Андрей Афлетдинов, Сохраняем настройки Sendmail в директориях LDAP – http://www.opennet.ru/docs/RUS/mail2ldap.

Milter API

  1. Официальный сайт, посвящённый Milter API (здесь же можно найти огромный архив готовых фильтров на все случаи жизни) – http://www.milter.org.
  2. Роман Сузи, Почтовый фильтр, или Milter = Mail + Filter – http://www.samag.ru/art/02.2003/02.2003_06.pdf.
  3. Пример milter на языке C для дублирования исходящей почты – http://www.opennet.ru/base/met/mail_copy_milter.txt.html.

Прочие

  1. Основной сайт проекта DBMail – http://www.dbmail.org.
  2. DBMail Documentation – http://www.helgrim.com/dbmaildocs/installation.html.
  3. SMTP STARTTLS в sendmail/Secure Switch – http://linuxnews.ru/docs/new/starttls.html.
  4. Majordomo and MajorCool HOWTO – http://www.opennet.ru/docs/HOWTO/Majordomo-MajorCool-HOWTO.

Комментарии отсутствуют

Добавить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

               Copyright © Системный администратор

Яндекс.Метрика
Tel.: (499) 277-12-45
E-mail: sa@samag.ru