postfix и LDAP

Почему мне нравится postfix? Вроде бы sendmail вполне хорошо справляется с обработкой почты. Чем же posfix лучше?

Я предпочитаю хранить информацию о пользователях не в локальных файлах или базах данных типа MySQL, а в LDAP серверах (OpenLDAP, Active Directory и т.п.). И лично для меня решающим фактором перехода с sendmail стало то, как postfix работает с LDAP серверами.

В качестве простого примера можно рассмотреть работу с псевдонимами.

По умолчанию postfix использует всем хорошо знакомый файл /etc/aliases.

alias_maps = hash:/etc/aliases

Но доступ к этому файлу имеет только суперпользователь. Если вы один админ на всю деревню – то особых затруднений это не вызывает. Но если админов несколько? Давать всем пароль root? Вы это серьёзно?

Вот тут то и помогает LDAP, в том числе и возможностью разграничения доступа.

Можно создать ou в котором будут храниться псевдонимы. В текущих схемах OpenLDAP на CentOS я не нашел готовую схему для почтовых псевдонимов. Поэтому для хранения информации о них решил использовать objectClass inetOrgPerson.

У inetOrgPerson три обязательных атрибута: cn, sn и mail. Сn будет использоваться в качестве имени псевдонима и части dn записи. Mail – показывает куда пересылать почту. В простейшем случае в sn можно дублировать информацию из cn.

Например, создадим ou в котором будут храниться псевдонимы:

dn: ou=Aliases,dc=company,dc=ru
objectclass: organizationalUnit
objectclass: top
ou: Aliases

И добавим туда простейший псевдоним:

dn: cn=psevdo,ou=Aliases,dc=company,dc=ru
cn: psevdo
mail: localuser
mail: anotheruser@mail.ru
objectclass: inetOrgPerson
objectclass: top
sn: psevdo

Для того, что бы postfix работал с OpenLDAP следует создать текстовый файл фильтра, например /etc/postfix/ldap_aliases.cf следующего содержания:

# или имя сервера
server_host = 1.2.3.4
# контейнер, где хранятся псевдонимы
search_base = ou=Aliases,dc=company,dc=ru
# искать во всем дереве, начиная с указанного выше контейнера
scope = sub
# запрос к LDAP серверу
query_filter = (&(objectClass=inetOrgPerson)(cn=%u))
# атрибут, который мы должны получить в ответ в результате поиска
result_attribute = mail
# Пользователь, с правами которого мы обращаемся к серверу
bind_dn = cn=proxy user,dc=company,dc=ru
# Пароль этого пользователя
bind_pw = this_is_a_password_proxy_user

В файле main.cf добавляем фильтр поиска:

alias_maps = hash:/etc/aliases, ldap:/etc/postfix/ldap_aliases.cf

Т.е. у нас остается классический вариант /etc/aliases и к нему добавляется поиск псевдонимов в LDAP сервере.

В дальнейшем разруливаем права доступа в OpenLDAP для админов, пароль root им больше не понадобится.

Кстати, поле sn можно использовать в качестве логического. Для включения выключения псевдонима.

dn: cn=psevdo,ou=Aliases,dc=company,dc=ru
cn: psevdo
mail: localuser
mail: anotheruser@mail.ru
objectclass: inetOrgPerson
objectclass: top
sn: true

Если хотим, что бы псевдоним работал – присваиваем sn значение true. Для отключения – все что угодно кроме true.

Ну и немного изменим query_filter:

query_filter = (&(objectClass=inetOrgPerson)(cn=%u)(sn=true))

Итак мы можем обратиться к LDAP с любым запросом. Попросить вернуть только нужные нам атрибуты. Как такое сделать в sendmail  я не знаю 🙁

Про sendmail

Нашел в Инете замечательные слова про sendmail.

Программа sendmail используется на многих платформах уже на протяжении нескольких десятков лет. В первые годы ее применения были выявлены практически все черные входы и дыры в программе, которые позволяли хакерам проникать в систему. Например, общеизвестна реакция sendmail на SMTP команды debug и wiz. Получив при анонимном SMTP-сеансе посредством этих команд доступ в систему, через другие программы хакер мог получить права пользователя root . Когда программа sendmail стала популярной, то все черные ходы были закрыты и ошибки в программе были исправлены.

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

Так что было бы неосмотрительно только из-за слухов о неблагонадежности sendmail отказываться от ее преимуществ.

Roundcube и русские буквы в именах вложений.

Вот такая забавная штука с roudcube. Привожу выписку с моего форума.

Пользователь anton пишет:

Неделю назад вот поставил последнюю стабильную версию [roundcube]. Был крайне удивлён качественным интерфейсом, быстротой установки, нормальными русскими буквами и т.п, в отличии от других веб-клиентов. Смущало одно, уж очень он быстро встал, не вызывал претензий и всем своим видом хотел попасть в эксплуатацию. Так обычно не бывает )))).
Всё получилось как я думал. Накатил адресную книгу ldap, чуть-чуть поправил по мелочам в интерфейсе, чтобы было так, как мне надо.

Последнее тестирование и…. замечаю, что он, при отправке письма с вложением, например файл, «генерация ключей и сертефикатов.txt», сохраняет его в папке уже как »генерация ?.txt».

Другим клиентом файл показывается как надо. Если опять же открыть это письмо в roundcube, то вижу, что пришло письмо с вложением »генерация ?.txt».

Я переименовывал файл в «ааааааааааааааааааа.txt» То же самое, обрезает название после 9 символов, десятым символом вставляет вопрос.

При всём при этом, файл «тест Тест.txt» выглядит так как надо.

С английским разумеется всё в порядке (кто бы сомневался!!!!)

То есть получается всё хорошо, но roundcube не умеет читать и сохранять с правильными именами вложений те письма , которые он сам же и отправил.

В общем, неделю изучаю скрипты roundcube )))), а сегодня сдался.

База mysql в UTF8, функции iconv() и mb_convert_encoding(), что он использует при перекодировке работают прекрасно. А название файлика режется )) после 9 символа.

Получал длину строки, которую он читает из базы, всё замечательно, 63 символа, ровно столько, сколько в имени файла. Получается, где-то что-то режется именно на стадди отправки или конвертирования.

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

——

Мою ошибку исправили в SVN trunk r2281

Больше ничего плохого не наблюдаю, работой клиента крайне доволен

Очень адекватный веб клиент, и эстетически и на уровне программной реализации.

Хорошая поддержка, с учётом того что клиент бесплатен, отвечают быстро, правда писать надо на английском.

Хотелось бы пожалуй одного, мышкой выделять группу сообщений и в корзину их кидать )

—-

Вообще заметил в сети, те сотрудники, кто попользовался роундкубом пересели на него ))) На мозилу забили )

Артур, если решите вернуться на роундкуб, то вот ссылочка, чтобы качать зазипованный текущей SVN trunk http://trac.roundcube.net/changeset/…%2F&format=zip

Чтобы не искать ))

Игры с cyrus-imap

Баловался тут с cyrus-imap. А точнее с конфигурационным параметром altnamespace: yes.

Есть у меня скриптик на php, который осуществляет поиск в письмах в почтовых ящиках. Там все просто, используются функции php-imap. Все работало хорошо, но после установки параметра altnamespace, скрипт перестал работать. После долгих ковыряний, выяснилось следующее.

По умолчанию, cyrus-imap дает доступ к ящикам других пользователей через user.login.box, на что и был заточен скрипт.

Но после введения параметра altnamespace, cyrus поменял представление почтовых ящиков (что вообщем то и надо было сделать) на Other Users.login.box.

В скрипте, начало дерева было прописано явно: user, вот он и перестал работать.