2008-08-08

Переход с Microsoft Exchange на Postfix+cyrus-imapd+clamav+OpenLDAP



Переход с Microsoft Exchange на Postfix+cyrus-imapd+clamav+OpenLDAP

Автор: Филиппов Алексей

Связь: fa13@bk.ru

Дата создания: 16 мая 2007

Постоянный адрес статьи: http://phas13.blogspot.com/2008/08/microsoft-exchange-postfixcyrus.html

Задача – выкосить Microsoft Exchange.

Используемые для этого дела компоненты:

l SuSE Linux Enterprise Server 10

postfix-2.2.9-10.2

cyrus-sasl-2.1.21-18.4

cyrus-imapd-2.2.12-27.2

openldap2-2.3.19-18.7

apache2-2.2.0-21.2

phpLDAPadmin 1.0.2

clamav-0.90.2-0.1

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

Подготовка файловой системы

Как всем известно, в Linux много рецептов подготовки файловой системы. Я делаю следующим образом:

  1. Под swap выделаю объем равный двойному объему оперативной памяти. В принципе, на серверах с 2-мя гектарами мозгов которые не будут выполнять функции серверов баз данных или еще чего-нибудь жрущего оперативку можно давать меньше места на swap, но я перестраховываюсь – а вдруг через месячишко из-за дефицита мощностей на этом сервере добавят какую-нибудь нехилую задачку.
  2. Выделяю под /boot отдельную точку монтирования. Размер 150 метров, файловая система ext3. Для /boot можно было бы использовать и ext2, так как содержимое этого раздела меняется только при установке нового ядра, но я опять же перестраховываюсь.
  3. Под / на данном сервере выделил 8 гектар. Файловая система ext3.
  4. Ну и под самый веселый раздел /var выдедил все оставшееся место. Получилось 56 Гб.

CLAMAV

Как настоящие пацаны сначала настраиваем антивирус. Для этого используем clamav-0.90.2-0.1. В дистрибутиве SLES10 идет более старая версия, поэтому качаем из инета версию поновее (на www.clamav.net есть, где взять). Устанавливаем и настраиваем.

Первым делом в каталоге /var/log создаем директорию, куда clamav будет складывать логи работы. Так как clamav будет работать под пользователем vscan, то даем этому пользователю права на эту директорию:

root> mkdir /var/log/clamav

root> chown vscan:vscan /var/log/clamav -R

Настраиваем clamav. Все настройки clamav находятся в файле /etc/clamav.conf:

ArchiveMaxFileSize 10M

ArchiveMaxRecursion 10

ArchiveMaxFiles 1000

ArchiveMaxCompressionRatio 0

FixStaleSocket yes

Foreground no

LocalSocket /var/lib/clamav/clamd-socket

LogFacility LOG_MAIL

LogFile /var/log/clamav/clamav.log

LogFileMaxSize 0

LogSyslog yes

LogVerbose yes

PidFile /var/lib/clamav/clamd.pid

User vscan

После этого необходимо запустить демон clamd:

root> /etc/init.d/clamd start

Кроме того, нам необходимо, чтоб clamd автоматически стартовал при запуске системы:

root> ln -s /etc/init.d/clamd /etc/init.d/rc3.d/K08clamd

root> ln -s /etc/init.d/clamd /etc/init.d/rc3.d/S14clamd

root> ln -s /etc/init.d/clamd /etc/init.d/rc5.d/K08clamd

root> ln -s /etc/init.d/clamd /etc/init.d/rc5.d/S14clamd

Чтоб не делать это руками, можно использовать «Runlevel Editor» в yast. Указать там автостарт сервиса.

Теперь настраиваем автоматическое обновление антивирусных баз clamav. За сие замечательное занятие отвечает демон freshclam. Все его настройки хранятся в файле /etc/freshclam.conf:

Checks 24

DatabaseMirror database.clamav.net

DatabaseOwner vscan

HTTPProxyServer 10.77.11.70

HTTPProxyPort 3128

LogFacility LOG_MAIL

LogSyslog yes

NotifyClamd /etc/clamd.conf

PidFile /var/lib/clamav/freshclam.pid

UpdateLogFile /var/log/clamav/freshclam.log

LogVerbose yes

ScriptedUpdates yes

Кроме того, нам необходимо, чтоб freshclam автоматически стартовал при запуске системы:

root> ln -s /etc/init.d/freshclam /etc/init.d/rc3.d/K08freshclam

root> ln -s /etc/init.d/freshclam /etc/init.d/rc3.d/S14freshclam

root> ln -s /etc/init.d/freshclam /etc/init.d/rc5.d/K08freshclam

root> ln -s /etc/init.d/freshclam /etc/init.d/rc5.d/S14freshclam

Чтоб не делать это руками, можно использовать «Runlevel Editor» в yast. Указать там автостарт сервиса.

Теперь нужно установить clamsmtp, приблуда необходима для связи postfix с clamav. В моем случае я выкачал http://memberwebs.com/nielsen/software/clamsmtp/clamsmtp-1.8.tar.gz. Когда вы будете эту штуку ставить – проверьте, может есть версия поновее. Архив распаковал во временную директорию /_tmp/clamsmtpd. Далее устанавливаем:

root> cd /_tmp/clamsmtpd/clamsmtp-1.8

root> ./configure

root> make

root> make check

root> make install

root> mkdir /usr/local/etc

root> cp doc/clamsmtpd.conf /usr/local/etc

root> cd /

root> rm -r /_tmp

Настраиваем этот самый clamsmtp. Его настройки хранятся в файле /usr/local/etc/clamsmtpd.conf. Оригинал сохраняем, исходную копию редактируем:

OutAddress: 10026

Listen: 0.0.0.0:10025

ClamAddress: /var/run/clamav/clamd-socket

TempDirectory: /tmp

User: clamav

Теперь нужно, чтоб clamsmtpd стартовал при запуске системы... Качаем http://memberwebs.com/nielsen/software/clamsmtp/contrib/clam_x_rc_script.tar.gz. Это есть скрипт для автостарта clamsmtpd, созданный специально для SuSE. Из архива файлик clamgate копируем в /etc/init.d. После этого редактируем его:

user=clamav меняем на user=vscan

Ставим # (то есть по виндузятному наречию рэмим) перед строчками:

su -m $user -c "$prefix/sbin/clamd"

rc_check

[ -f $piddir/clamd.pid ] && kill `cat $piddir/clamd.pid`

rc_check

checkproc -p $piddir/clamd.pid $prefix/sbin/clamd

rc_check

Смысл сего шага в том, чтоб отключить запуск демона clamd через сей замечательный скрипт. Ну ведь логично – зачем нам это делать здесь, если это уже сделано в другом месте???

Потом выполняем:

root> ln -s /var/lib/clamav /var/run/clamav

root> ln -s /usr/sbin/clamd /usr/local/sbin/clamd

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

Теперь собственно ставим линки на автозагрузки:

root> ln -s /etc/init.d/clamgate /etc/init.d/rc3.d/K08clamgate

root> ln -s /etc/init.d/clamgate /etc/init.d/rc3.d/S14clamgate

root> ln -s /etc/init.d/clamgate /etc/init.d/rc5.d/K08clamgate

root> ln -s /etc/init.d/clamgate /etc/init.d/rc5.d/S14clamgate

Тут засада есть в том, что yast какого-то перца не дает сделать линки через Runlevel Editor, поэтому придется ручками :).

POSTFIX

Базовые параметры почтового сервера PostFIX настраиваются в конфигурационном файле main.cf. При добавлении или изменении параметра необходимо следить, чтоб параметр не повторялся. Кроме параметров по умолчанию, приписанных в этом файле при установке, дописываем и модифицируем следующие:

alias_maps = hash:/etc/aliases,

hash:/etc/postfix/aliases,

hash:/etc/postfix/aliases4bank

inet_interfaces = all

header_checks = regexp:/etc/postfix/header_checks

local_recipient_maps =

mailbox_size_limit = 0

message_size_limit = 4096000

mailbox_transport = cyrus

mydestination = $myhostname, localhost.$mydomain, localhost

mydomain = co.mycorp.com.ua

myhostname = antares.co.mycorp.com.ua

mynetworks = 127.0.0.0/8

10.77.1.0/24

10.77.9.0/24

10.77.11.0/24

10.77.13.0/24

10.77.253.0/24

10.77.254.0/24

relay_domains = $mydestination, $mydomain

relayhost = 10.77.11.60

# for clamav

content_filter = scan:127.0.0.1:10025

receive_override_options = no_address_mappings

После этого проверяем корректность файла параметров:

root> postfix check

Если никаких ошибок не было выдано - значит синтаксис файла корректен.

Теперь беремся за файлик /etc/postfix/master.cf. Дописываем в этот файл следующее:

# AV scan filter (used by content_filter)

scan unix - - n - 16 smtp

-o smtp_send_xforward_command=yes

# For injecting mail back into postfix from the filter

127.0.0.1:10026 inet n - n - 16 smtpd

-o content_filter=

-o receive_override_options=no_unknown_recipient_checks,no_header_body_checks

-o smtpd_helo_restrictions=

-o smtpd_client_restrictions=

-o smtpd_sender_restrictions=

-o smtpd_recipient_restrictions=permit_mynetworks,reject

-o mynetworks_style=host

-o smtpd_authorized_xforward_hosts=127.0.0.0/8

И меняем строки

cyrus unix - n n - - pipe

user=cyrus argv=/usr/lib/cyrus/bin/deliver -e -r ${sender} -m ${extension} ${user}

на

cyrus unix - n n - - pipe

user=cyrus argv=/usr/lib/cyrus/bin/deliver -e -r ${sender} $(recipient)

Настраиваем группы рассылки. Например добавим группу All_ProgrammerRes@co.mycorp.com.ua и all_abon@co.mycorp.com.ua. Для этого создаем файл /etc/postfix/aliases под пользователь root и заполняем его следующим содержимым:

all_programmerres: admin@brres.mycorp.gov.ua,

admin@bzres.mycorp.gov.ua,

admin@cpres.mycorp.gov.ua,

admin@crres.mycorp.gov.ua,

admin@gnres.mycorp.gov.ua,

admin@gpres.mycorp.gov.ua,

admin@gsres.mycorp.gov.ua,

admin@ivres.mycorp.gov.ua,

admin@klres.mycorp.gov.ua,

admin@kvres.mycorp.gov.ua,

admin@nkres.mycorp.gov.ua,

admin@nsres.mycorp.gov.ua,

admin@ntres.mycorp.gov.ua,

admin@nvres.mycorp.gov.ua,

admin@skres.mycorp.gov.ua,

admin@vares.mycorp.gov.ua,

admin@vlres.mycorp.gov.ua,

admin@vpres.mycorp.gov.ua,

admin@vrres.mycorp.gov.ua,

admin@gs.mycorp.gov.ua

all_abon: abon@brres.mycorp.gov.ua,

abon@bzres.mycorp.gov.ua,

abon@cpres.mycorp.gov.ua,

abon@crres.mycorp.gov.ua,

abon@gnres.mycorp.gov.ua,

abon@gpres.mycorp.gov.ua,

abon@gsres.mycorp.gov.ua,

abon@ivres.mycorp.gov.ua,

abon@klres.mycorp.gov.ua,

abon@kvres.mycorp.gov.ua,

abon@nkres.mycorp.gov.ua,

abon@nsres.mycorp.gov.ua,

abon@ntres.mycorp.gov.ua,

abon@nvres.mycorp.gov.ua,

abon@skres.mycorp.gov.ua,

abon@vares.mycorp.gov.ua,

abon@vlres.mycorp.gov.ua,

abon@vpres.mycorp.gov.ua,

abon@vrres.mycorp.gov.ua,

abon@gs.mycorp.gov.ua,

kanc@gs.mycorp.gov.ua,

Alexandr.Belous@co.mycorp.com.ua,

Ostrov@co.mycorp.com.ua,

Vitaliy.Stavickiy@gs.mycorp.gov.ua,

tavrik_esu@gs.mycorp.gov.ua,

centr_esu@gs.mycorp.gov.ua,

shumen_esu@gs.mycorp.gov.ua

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

Теперь создаем из данного файла базу:

root> postalias /etc/postfix/aliases

Теперь объясняем MTA, как отправлять почту на эти группы рассылки. Редактируем файл /etc/postfix/transport. Добавляем следующее:

# mail groups

all_abon@co.mycorp.com.ua local:all_abon

all_programmerres@co.mycorp.com.ua local:all_programmerres

Создаем из этого файла базу:

root> postmap /etc/postfix/transport

После изменений в файлах aliases и transport обязательно пересоздавать базу указанными командами и делать перезагрузку (не перезапуск) postfix.

Ну и ставим postfix на автозагрузку:

root> ln -s /etc/init.d/postfix /etc/init.d/rc3.d/K12postfix

root> ln -s /etc/init.d/postfix /etc/init.d/rc3.d/S10postfix

root> ln -s /etc/init.d/postfix /etc/init.d/rc5.d/K12postfix

root> ln -s /etc/init.d/postfix /etc/init.d/rc5.d/S10postfix

или делаем это через «Runlevel Editor» в YaST. Через YaST проще и правильнее :).

И не забываем запустить postfix, если вы этого еще не сделали:

root> /etc/init.d/postfix start

Теперь еще одна тема – необходимо, чтобы приходящая банковская выписка в зависимости от темы письма рассылалась по районам и оставалась в ящике, куда приходит. Приходит она у нас в buh-bank1@co.mycorp.com.ua. Создаем файлик /etc/postfix/header_checks со следующим содержимым:

/^Subject: Vipiska - 035/

REDIRECT bank035@co.mycorp.com.ua

/^Subject: Vipiska - 036/

REDIRECT bank036@co.mycorp.com.ua

, и так далее для всех возможных вариантов тем для автоматической рассылки (их у нас штук 20). Обратите внимание, что перенаправление осуществляется только на основании темы письма. Как сделать более сложную схему я пока не знаю. После этого создаем файлик с алиасами для рассылки, который называется /etc/postfix/aliases4bank со следующим содержимым:

bank035: buh-bank1@co.mycorp.com.ua,

buhsbyt@bzres.mycorp.gov.ua

bank036: buh-bank1@co.mycorp.com.ua,

buhsbyt@brres.mycorp.gov.ua

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

root> postalias /etc/postfix/aliases4bank

Ну и добавляем правила отправки на данные группы рассылки в файл /etc/postfix/transport:

# mail groups for banks

bank035@co.mycorp.com.ua local:bank035

bank036@co.mycorp.com.ua local:bank036

, и так для всех групп необходимых рассылки. Теперь пересоздаем базу:

root> postmap /etc/postfix/transport

Не забываем перезагрузить конфигурацию postfix:

root> /etc/init.d/postfix reload

Напоследок создаем каталог, куда будут системные сообщения почтовой системы:

root> mkdir /var/log/post

Cyrus-SASL

Эта штука нам нужна для одной простой вещи – она будет хранить логины и пароли пользователей почтовой системы cyrus-imapd. Вперед, с песней:

root> /etc/init.d/saslauthd start

root> saslpasswd2 -c cyrus

Password: вводим пароль для пользователя cyrus

Again (for verification): опять вводим тот же пароль

root> chmod 644 /etc/sasldb2

root> chown cyrus:mail /etc/sasldb2

Ставим наш дорогой sasl на автозагрузку. Либо как обычно (задолбался повторять) через YaST, либо руками:

root> ln -s /etc/init.d/saslauthd /etc/init.d/rc3.d/K16saslauthd

root> ln -s /etc/init.d/saslauthd /etc/init.d/rc3.d/S06saslauthd

root> ln -s /etc/init.d/saslauthd /etc/init.d/rc5.d/K16saslauthd

root> ln -s /etc/init.d/saslauthd /etc/init.d/rc5.d/S06saslauthd

Все, с этим разобрались. Дальше...

Cyrus-IMAPD

Теперь настраиваем IMAP4/POP3 сервер. Все основные настройки cyrus-imapd хранятся в файле /etc/imapd.conf. При добавлении или изменении параметра необходимо следить, чтоб параметр не повторялся. Кроме параметров по умолчанию, приписанных в этом файле при установке, дописываем и модифицируем следующие:

altnamespace: yes

autocreatequota: 25000

defaultdomain: co.mycorp.com.ua

quotawarn: 95

sasl_pwcheck_method: auxprop

sasl_sasldb_path: /etc/sasldb2

timeout: 720

virtdomains: userid

Запускаем cyrus-imapd:

root> /etc/init.d/cyrus start

Создаем новый почтовый ящик:

root> su – cyrus

cyrus> /usr/sbin/saslpasswd2 -c fa

cyrus> cyradm –user cyrus localhost

localhost> cm user.fa@co.mycorp.com.ua

localhost> cm user.fa.Sent@co.mycorp.com.ua

localhost> cm user.fa.Trash@co.mycorp.com.ua

localhost> cm user.fa.Drafts@co.mycorp.com.ua

localhost> sam user.fa@co.mycorp.com.ua fa write

localhost> sq user.fa@co.mycorp.com.ua 25000

localhost> exit

Поздравляю – первый почтовый ящик создан.

Пока жив Exchange

Дело в том, что на данном этапе у нас есть 2 почтовки, которые будут держать домен co.mycorp.com.ua – это Exchange и та, что мы настраиваем (antares). Нужно сделать так, чтоб почта работала нормально во всех направлениях :) (не знаю как сказать по другому). Поэтому нам сейчас придется понасоздавать временных костылей, от которых мы со смертью Exchange избавимся.

Для начала в свойствах протокола SMTP Exchange сервера (Default SMTP Virtual Server) во вкладке «Messages» для опции «Forward all mail with unresolved recipients to host» устанавливаем значение «[10.77.11.60]» (это ip-адрес вышестоящей самой главной почтовки). Кроме того надо четко осознавать, что как только пользователь переедет в новую почтовку – он исчезнет из адресной книги Exchange.

Затем на вышестоящей почтовке, ну то есть на самой главной, для всех адресов, которые будут обрабатываться новой почтовкой необходимо прописать жесткие маршруты движения. После кончины Exchange это будет убрано и вся почта домена co.mycorp.com.ua будет отправляться на новую почтовку. Делается это следующим образом. В файл /etc/postfix/transport вышестоящего MTA для каждого адреса, обрабатываемого новой почтовкой добавляется строка:

fa@co.mycorp.com.ua smtp:10.77.11.51

, где 10.77.11.51 – ip-адрес новой почтовки. Затем:

root> postmap /etc/postfix/transport

root> /etc/init.d/postfix reload

Затем на новой почтовке делаем примерно то же самое. В файл /etc/postfix/transport нового MTA для каждого адреса, обрабатываемого новой почтовкой добавляется строка:

fa@co.mycorp.com.ua cyrus:localhost

, после чего:

root> postmap /etc/postfix/transport

root> /etc/init.d/postfix reload

Все, после этого адрес fa@co.mycorp.com.ua будет корректно обрабатываться всеми участвующими в его жизни почтовыми серверами. Нехило, да?

Так, осталась адресная книга. Угадайте, чем? Правильно,

OpenLDAP2

Избалованные пользователи привыкли, что у них в почтовом клиенте есть адресная книга, и без нее они уже не могут, поэтому начинаем. У нас будет 2 LDAP сервера, один из которых будет master, второй – slave. Изменения с master будут реплицироваться на slave. Необходимость наличия 2-х LDAP серверов обусловлена требованиями к отказоустойчивости системы.

Master находится у нас на 10.77.11.51, slave на 10.77.11.60.

Настраиваем master сервер. Настройки LDAP сервера находятся в файле /etc/openldap/slapd.conf. Мой файл выглядит следующим образом:

include /etc/openldap/schema/core.schema

include /etc/openldap/schema/cosine.schema

include /etc/openldap/schema/inetorgperson.schema

include /etc/openldap/schema/rfc2307bis.schema

include /etc/openldap/schema/yast.schema

pidfile /var/run/slapd/slapd.pid

argsfile /var/run/slapd/slapd.args

modulepath /usr/lib/openldap/modules

access to dn.base=""

by * read

access to dn.base="cn=Subschema"

by * read

access to attrs=userPassword,userPKCS12

by self write

by * auth

access to attrs=shadowLastChange

by self write

by * read

access to *

by * read

#######################################################################

# BDB database definitions

#######################################################################

database bdb

suffix "dc=mycorp,dc=com,dc=ua"

checkpoint 1024 5

cachesize 10000

rootdn "cn=admin,dc=mycorp,dc=com,dc=ua"

rootpw {MD5}/b8HnGMRXvKCbMz4jWCtHQ==

directory /var/lib/ldap/mycorp.com.ua

index objectClass eq

replica host=10.77.11.60

binddn="cn=admin,dc=mycorp,dc=com,dc=ua"

bindmethod=simple

credentials=htgkbrfwbz

replogfile /var/lib/ldap/mycorp.com.ua/replica.log

replicationinterval 30

Значение пароля {MD5}/b8HnGMRXvKCbMz4jWCtHQ== я получил следующим образом:

root> slappasswd -h {MD5}

На запрос ввел пароль, который мне надо зашифровать, подтвердил его и получил эту загадочную строку символов. Обратите внимание на строчку credentials=htgkbrfwbz – это в незашифрованом виде то, что на slave сервере прописано в зашифрованом виде в строке rootpw.

Создаем каталоги, в которых будет храниться база mycorp.com.ua и куда будет логироваться OpenLDAP:

root> mkdir /var/log/ldap

root> su – ldap

ldap> mkdir /var/lib/ldap/mycorp.com.ua

ldap> cp /var/lib/ldap/DB_CONFIG /var/lib/ldap/mycorp.com.ua

Запускаем необходимые сервисы и ставим их на автозапуск, через YaST или руками:

root> /etc/init.d/ldap start

root> /etc/init.d/slurpd start

root> ln -s /etc/init.d/ldap /etc/init.d/rc3.d/K13ldap

root> ln -s /etc/init.d/ldap /etc/init.d/rc3.d/S09ldap

root> ln -s /etc/init.d/ldap /etc/init.d/rc5.d/K13ldap

root> ln -s /etc/init.d/ldap /etc/init.d/rc5.d/S09ldap

root> ln -s /etc/init.d/slurpd /etc/init.d/rc3.d/K12slurpd

root> ln -s /etc/init.d/slurpd /etc/init.d/rc3.d/S10slurpd

root> ln -s /etc/init.d/slurpd /etc/init.d/rc5.d/K12slurpd

root> ln -s /etc/init.d/slurpd /etc/init.d/rc5.d/S10slurpd

После запуска LDAP сервера в каталоге mycorp.com.ua должны появится файлы базы данных LDAP. Кстати, хотя процесс slurpd (занимается репликацией изменений с master на slave сервер) и запущен, но реплицировать ему пока нечего и некуда, ведь база у нас пустая да и slave сервер пока отсутствует. Давайте его создадим.

Итак, настраиваем slave LDAP сервер. slapd.conf этого сервера выглядит почти так же, как и на master сервере:

include /etc/openldap/schema/core.schema

include /etc/openldap/schema/cosine.schema

include /etc/openldap/schema/inetorgperson.schema

include /etc/openldap/schema/rfc2307bis.schema

include /etc/openldap/schema/yast.schema

pidfile /var/run/slapd/slapd.pid

argsfile /var/run/slapd/slapd.args

modulepath /usr/lib/openldap/modules

access to dn.base=""

by * read

access to dn.base="cn=Subschema"

by * read

access to attrs=userPassword,userPKCS12

by self write

by * auth

access to attrs=shadowLastChange

by self write

by * read

access to *

by * read

#######################################################################

# BDB database definitions

#######################################################################

database bdb

suffix "dc=mycorp,dc=com,dc=ua"

checkpoint 1024 5

cachesize 10000

rootdn "cn=admin,dc=mycorp,dc=com,dc=ua"

rootpw {MD5}UQiLwCP2DA8ecWNe6h3rLQ==

directory /var/lib/ldap/mycorp.com.ua

index objectClass eq

updatedn "cn=admin,dc=mycorp,dc=com,dc=ua"

Создаем каталоги, в которых будет храниться база mycorp.com.ua и куда будет логироваться OpenLDAP:

root> mkdir /var/log/ldap

root> su – ldap

ldap> mkdir /var/lib/ldap/mycorp.com.ua

ldap> cp /var/lib/ldap/DB_CONFIG /var/lib/ldap/mycorp.com.ua

Запускаем необходимые сервисы и ставим их на автозапуск, через YaST или руками:

root> /etc/init.d/ldap start

root> /etc/init.d/slurpd start

root> ln -s /etc/init.d/ldap /etc/init.d/rc3.d/K13ldap

root> ln -s /etc/init.d/ldap /etc/init.d/rc3.d/S09ldap

root> ln -s /etc/init.d/ldap /etc/init.d/rc5.d/K13ldap

root> ln -s /etc/init.d/ldap /etc/init.d/rc5.d/S09ldap

root> ln -s /etc/init.d/slurpd /etc/init.d/rc3.d/K12slurpd

root> ln -s /etc/init.d/slurpd /etc/init.d/rc3.d/S10slurpd

root> ln -s /etc/init.d/slurpd /etc/init.d/rc5.d/K12slurpd

root> ln -s /etc/init.d/slurpd /etc/init.d/rc5.d/S10slurpd

После запуска LDAP сервера в каталоге mycorp.com.ua должны появится файлы базы данных LDAP.

Ну и после этого процесс slurpd с master сервера уже может колбасить изменения в slave.

Так, ну и теперь нам нужно удобное средство для работы с OpenLDAP. Можно конечно все изменения делать из консоли с использованием *.ldif файлов через такой замечательный набор консольных утилит как slapadd, ldapadd, ldapdelete, ldapmodify, ldapsearch и т.д., но это скучно и некрасиво, да и долго, и знать надо много, и ваще... Добрые люди для ленивых придумали такую классную штуку, как

phpLDAPadmin

Первым делом дуем на http://phpldapadmin.sourceforge.net и качаем самую свежую стабильную версию phpLDAPadmin. Архив выкладываем на сервер и содержимое папки phpldapadmin-x.x.x распаковываем в папку /opt/phpldapadmin. Далее:

root> cd /opt/phpldapadmin/config

root> cp config.php.example config.php

В принципе можно ничего и не настраивать, разве что сделать осмысленное название LDAP сервера на стартовой страничке. Для этого в файле config.php меняем строку

$ldapservers->SetValue($i,'server','name','My LDAP Server');

на строку

$ldapservers->SetValue($i,'server','name','Херсоноблэнерго LDAP Server');

Ну а так как морда у phpLDAPadmin написано на PHP, как видно из названия продукта, то нам нужен Web Server с PHP. Для этого ставим apache2, PHP версии 4 или выше и модули PHP для apache2, ну и такую штуку, как gettext. Из всего этого хозяйства настроить нужно только

Apache2

Тут все более-менее просто :), а вы как думали – тут все просто, стоит только прочитать несколько предыдущих страниц текста :). Редактируем файл /etc/apache2/httpd.conf, добавляем в самый конец такое:

ServerAdmin sit@co.mycorp.com.ua

ServerName antares.mycorp.com.ua

# For OpenLDAP WEB Access (phpLDAPadmin)

Alias /ldap "/opt/phpldapadmin"

Order Deny,Allow

Allow from all

Options -Indexes

После этого запускаем apache2 и ставим его на автозагрузку:

root> /etc/init.d/apache2 start

root> ln -s /etc/init.d/apache2 /etc/init.d/rc3.d/K11apache2

root> ln -s /etc/init.d/apache2 /etc/init.d/rc3.d/S11apache2

root> ln -s /etc/init.d/apache2 /etc/init.d/rc5.d/K11apache2

root> ln -s /etc/init.d/apache2 /etc/init.d/rc5.d/S11apache2

После этого если вы зайдете на http://antares/ldap, или как там он у вас называется, то увидите очень симпатичную можду phpLDAPadmin. Все, можете создавать адресную книгу.

Настройки логирования и ротации

Без этого никуда. Что подразумеваем под системными настройками – логирование информационных систем, описанных выше, и ротацию журнальных файлов.

Настраиваем syslog-ng. Если не знаете, что это такое – это более новая версия всеми любимого syslog, только мощнее. В каталоге /etc/syslog-ng, есть два файла с идентичным содержимым, но разными названиями (когда я говорю об идентичности, я исключаю из рассмотрения комментарии – они отличаются). Редактируем файл syslog-ng.conf.in (syslog.conf редактировать нельзя). Добавляем в самый конец следующее:

# clamsmtpd

filter fff_clamsmtpd { match('clamsmtpd') and not match(accepted); };

destination ddd_clamsmtpd { file("/var/log/post/clamsmtpd"); };

log { source(src); filter(fff_clamsmtpd); destination(ddd_clamsmtpd); };

# cyrus

filter fff_cyrus { match('cyrus'); };

destination ddd_cyrus { file("/var/log/post/cyrus"); };

log { source(src); filter(fff_cyrus); destination(ddd_cyrus); };

# imap

filter fff_imap { match('imap'); };

destination ddd_imap { file("/var/log/post/imap"); };

log { source(src); filter(fff_imap); destination(ddd_imap); };

# pop

filter fff_pop { match('pop'); };

destination ddd_pop { file("/var/log/post/pop"); };

log { source(src); filter(fff_pop); destination(ddd_pop); };

# postfix

filter fff_postfix { match('postfix'); };

destination ddd_postfix { file("/var/log/post/postfix"); };

log { source(src); filter(fff_postfix); destination(ddd_postfix); };

# openldap

filter fff_ldap { match('slapd'); };

destination ddd_ldap { file("/var/log/ldap/slapd"); };

log { source(src); filter(fff_ldap); destination(ddd_ldap); };

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

Теперь из файла syslog-ng.conf.in делаем файл syslog-ng.conf:

root> SuSEconfig

А, как просто, да?

Ну и настраиваем ротацию журнальных файлов. Для этого в каталоге /etc/logrorate.d создаем файлы clamav, ldap, post со следующим содержимым:

/etc/logrotate.d/clamav:

/var/log/clamav/* {

dateext

compress

copytruncate

weekly

missingok

notifempty

olddir /var/log/arhiv/clamav

rotate 100

}

/etc/logrotate.d/ldap:

/var/log/ldap/* {

dateext

compress

copytruncate

daily

missingok

notifempty

olddir /var/log/arhiv/ldap

rotate 100

}

/etc/logrotate.d/post:

/var/log/post/* {

dateext

compress

copytruncate

daily

missingok

notifempty

olddir /var/log/arhiv/post

rotate 100

}

Ну вроде все. Что вспомню - добавлю.



Комментариев нет: