Сохраняем настройки Sendmail в дирректориях LDAP.

Andrey Afletdinov
Оригинал документа на http://www.sgb.irk.ru/~andrek/mail2ldap/

В этом документе рассказано с как можно управлять политиками почтового сервера sendmail, хранящиеся в дирректориях openLDAP.

Вступление.
Для дальнейшей работы необходимо иметь работающие и настроенные сервера sendmail и LDAP.
Рекомендуется сохранить все базы sendmail перед изменениями, либо, как поступил я, протестировать sendmail на локальной машине.
Все описанное ниже было протестированно на следующих версиях программ sendmail-8.12.1, openldap-2.0.25.

Начало.
Если вы используете sendmail из дистрибутива, то скорее всего он уже скомпилирован с поддержкой LDAP, проверяем:
sendmail -d0.1 -bv root | grep LDAP

В результате должны увидеть строку содержащей слово LDAPMAP. У меня на локальной машине стоит mandrake-8.2 и sendmail уже был собран с поддержкой LDAP.
В противном случае собираем sendmail из исходников. Для этого, перед компиляцией, необходимо добавить в файл devtools/Site/site.config.m4 следующие строки: APPENDDEF(`confMAPDEF', `-DLDAPMAP') APPENDDEF(`confLIBS', `-lldap -llber') APPENDDEF(`confINCDIRS', `-I/usr/local/include') APPENDDEF(`confLIBDIRS', `-L/usr/local/lib') Соответственно должны быть уже установлены библиотеки openLDAP, измените путь usr/local там где они у вас находится.

Настройка sendmail сводится к добавлению строк в файл конфигурации sendmail.mc, с последующим его преобразованием в cf. -информация об сервере LDAP (ldap.sgb - сервер LDAP, dc=sgb root дирректория) define(`confLDAP_DEFAULT_SPEC',`-h ldap.sgb -b dc=sgb')dnl -для aliases define(`ALIAS_FILE',`ldap:')dnl -для access FEATURE(`access_db',`LDAP')dnl Если используем virtusertable, domaintable и т.д. -то для них тоже самое по аналогии с access.
Ориентируемся по таблице:

FEATUREsendmailMTAMapName
access_db LDAP access
authinfo LDAP authinfo
bitdomain LDAP bitdomain
domaintable LDAP domain
genericstable LDAP generics
mailertable LDAP mailer
uucpdomain LDAP uucpdomain
virtusertable LDAP virtuser

Я кроме aliases и access ничего больше не использовал в связи с простотой моего локального сервера sendmail.

На стороне сервера LDAP необходимо добавить схему sendmail.schema в дирректорию схем и внести путь в конфигурационный файл slapd.conf.

Заполняем дирректории LDAP.
Создаем группу mail. В ней у нас будут находится все связанное с sendmail
dn: ou=mail,dc=sgb objectClass: top objectClass: organizationalUnit ou: mail
Создаем группу aliases. В ней будут храниться записи aliases
dn: ou=aliases,ou=mail,dc=sgb objectClass: top objectClass: organizationalUnit ou: aliases
Создаем группу access. В ней будут хранится записи access
dn: ou=access,ou=mail,dc=sgb objectClass: top objectClass: organizationalUnit ou: access
Все эти записи, вносим в ldif файл и добавляем в каталоги LDAP комадой ldapadd, либо используем программы с графическим интерфейсом.

Aliases.
Разберем на примере файл aliases: bin: root daemon: root games: root nobody: root system: root manager: root root: andrek Описание записи bin
dn: sendmailMTAKey=bin,ou=aliases,ou=mail,dc=sgb objectClass: top objectClass: sendmailMTA objectClass: sendmailMTAAlias objectClass: sendmailMTAAliasObject sendmailMTAHost: boss.sgb sendmailMTAAliasGrouping: aliases sendmailMTAKey: bin sendmailMTAAliasValue: root
Описание записи daemon
dn: sendmailMTAKey=daemon,ou=aliases,ou=mail, dc=sgb objectClass: top objectClass: sendmailMTA objectClass: sendmailMTAAlias objectClass: sendmailMTAAliasObject sendmailMTAHost: boss.sgb sendmailMTAAliasGrouping: aliases sendmailMTAKey: daemon sendmailMTAAliasValue: root
В поле sendmailMTAHost указываем имя sendmail сервера, для которого действует альяс.
Остальные альясы (games, nobody, manager и т.д.) вносим аналогично.

Access.
Разберем на примере файл access. localhost.localdomain RELAY localhost RELAY 127.0.0.1 RELAY 192.168.2.11 RELAY Описание записи localhost.localdomain
dn: sendmailMTAKey=localhost.localdomain, ou=access,ou=mail,dc=sgb objectClass: top objectClass: sendmailMTA objectClass: sendmailMTAMap objectClass: sendmailMTAMapObject sendmailMTAMapName: access sendmailMTAKey: localhost.localdomain sendmailMTAMapValue: RELAY
Описание записи 192.168.2
dn: sendmailMTAKey=192.168.2,ou=access, ou=mail,dc=sgb objectClass: top objectClass: sendmailMTA objectClass: sendmailMTAMap objectClass: sendmailMTAMapObject sendmailMTAMapName: access sendmailMTAKey: 192.168.2 sendmailMTAMapValue: RELAY
Остальные записи (localhost, 127.0.0.1 и т.д.) также аналогичны.

Virtusertable, mailertable, domaintable и т.д.
Заносятся по аналогии с access. С изменением поля sendmailMTAKey (см. таблицу) и необходимых значений в sendmailMTAKey и sendmailMTAValue.
Так же это все достаточно хорошо описано с примерами в документации к sendmail.

Учетные записи пользователей
Описывается пока только теория.
На сервере sendmail:
-Ставим клиента ldap, nss_ldap.
-Правим файл nssswith.conf
После этого добавление пользователей сведется к добавлению учетных записей в каталог LDAP.
Все это протестирую в ближайшем будущем при обновлении сервера sendmail.
Проблем быть не должно так как технология уже давно расписана и приводить ее небуду.

Ссылки на использованную документацию и программы