Сегодня я расскажу вам, как из табуретки, проволоки и хомячка сделать бесплатную платформу для автоматизации совместной деятельности рабочих групп, содержащий в себе средства электронной почты, персональных и групповых электронных календарей и службы мгновенных сообщений. Но для начала немного о нашем хомячке, Zimbra:
Глобальная книга адресов — видны все сотрудники предприятия, у кого есть почтовый ящик в домене.
Календарь и Ежедневник — можно планировать задачи и делать напоминания о них.
Документы — можно хранить, просматривать и редактировать прямо в обозревателе (браузере).
Короче, достойная замена Lotus Notes, вот только службы мгновенных сообщений нет, что поправимо (Плагин Zextras). Zimbra существует в пяти вариациях (подробно тут). Я как и всегда использую nano.
1 | yum install -y sysstat perl nscd nc libidn gmp nano mc wget automake |
Ставим все необходимое.
1 2 | service postfix stop chkconfig postfix off |
Отключаем postfix (почтовый сервер).
1 2 3 4 5 6 7 8 9 | nano /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 10.11.1.210 mail.test.local mail //добавим строчку (ip, полное имя, имя) nano /etc/sysconfig/network HOSTNAME=mail.test.local |
Правим имя хоста, ооооочень нужная процедура
1 | reboot |
Перезапускаем, дабы применить имя хоста (кое где пишут, что достаточно сделать service network restart, но мне не помог только рестарт)
1 | yum install -y bind bind-utils |
Ставим DNS сервер, в принципе, если у вас уже есть сервер держащий Вашу зону, то установка для вас упрощается и довольно кратко изложена здесь (за исключением пунктов по установки VMware инструментов) или здесь (более подробно)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | nano /etc/named.conf // // named.conf // // Provided by Red Hat bind package to configure the ISC BIND named(8) DNS // server as a caching only nameserver (as a localhost DNS resolver only). // // See /usr/share/doc/bind*/sample/ for example named configuration files. // options { //listen-on port 53 { 127.0.0.1; }; //listen-on-v6 port 53 { ::1; }; directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; //allow-query { localhost; }; recursion yes; forwarders { 8.8.8.8; }; //чтобы разрешать имена не в нашей зоне dnssec-enable yes; dnssec-validation yes; dnssec-lookaside auto; /* Path to ISC DLV key */ bindkeys-file "/etc/named.iscdlv.key"; managed-keys-directory "/var/named/dynamic"; }; logging { channel default_debug { file "data/named.run"; severity dynamic; }; }; // корневая зона zone "." IN { type hint; file "named.ca"; }; // зона test.local zone "test.local" { type master; file "test.local.fwd"; }; // обратная зона zone "1.11.10.in-addr.arpa" { type master; file "test.local.rev"; }; include "/etc/named.rfc1912.zones"; include "/etc/named.root.key"; |
Настроим наш DNS (подробнее о самой структуре DNS и типам записей изложено тут)
1 2 3 4 5 6 7 8 9 10 11 12 13 | nano /var/named/test.local.fwd $ORIGIN test.local. $TTL 3D @ SOA mail.test.local. root.test.local. (12 4h 1h 1w 1h) @ IN NS mail.test.local. @ IN MX 10 mail.test.local. mail.test.local. IN A 10.11.1.210 www IN A 10.11.1.210 mail IN A 10.11.1.210 |
Определим прямые записи.
1 2 3 4 5 6 7 8 | nano /var/named/test.local.rev $ORIGIN 1.11.10.in-addr.arpa. $TTL 3D @ SOA mail.test.local. root.test.local. (12 4h 1h 1w 1h) @ IN NS mail.test.local. @ IN PTR mail.test.local. |
Определим обратные записи.
1 2 | service named start chkconfig named on |
Стартуем наш DNS сервер и добавляем в автозагрузку (не пугайтесь если подвиснет).
1 2 3 | nslookup mail.test.local nslookup 10.11.1.191 nslookup -type=MX test.local |
Проверяем наши записи в DNS. Чуть не забыл, надо еще имя копа проверить, если оно соответствует записи в DNS – все ок, ну а если нет, то:
1 | hostname mail.test.local //иногда понадобиться ребут |
Приступаем к установке Zemba. На момент написания статьи, актуальная версия 8.0.3 (на сервере у меня x64).
1 2 3 4 5 | wget http://files2.zimbra.com/downloads/8.0.3_GA/zcs-8.0.3_GA_5664.RHEL6_64.20130305090204.tgz tar xvfz ./zcs-8.0.3_GA_5664.RHEL6_64.20130305090204.tgz cd ./zcs-8.0.3_GA_5664.RHEL6_64.20130305090204 ./install.sh --platform-override |
Процесс самой установки, проще некуда, отвечаем на вопросы приблизительно так:
Вопрос | Ответ |
Do you agree with the terms of the software license agreement? [N]Два раза (ибо две лицензии) | Yes |
Select the packages to installInstall zimbra-ldap [Y]Install zimbra-logger [Y] Install zimbra-mta [Y] Install zimbra-snmp [Y] Install zimbra-store [Y] Install zimbra-apache [Y] Install zimbra-spell [Y] Install zimbra-memcached [Y] Install zimbra-proxy [Y] | YesYes Yes Yes Yes Yes Yes No No |
DNS ERROR resolving MX for mail.test.localПредлагает изменить доменное имя, так как не может разрешить MX записи | Yes |
Create domain: [mail.test.local] | Test.local |
Re-Enter domain name? [Yes] | No |
Задаем пароль администратораPassword for admin@test.local (min 6 characters): | 3, затем 4 |
После завершения нажимаем «а», чтобы подтвердить измененияИ дальше везде Yes, кроме:Notify Zimbra of your installation?Хотя можно сообщить Zimbra, что мы установили | No |
Вот и все, теперь немного о модулях: нам нужен Zextras Chat (в качестве чата IM) и ThinkFree (в качестве редактора office). Скачать вы можете их тут. Теперь немного о установке этих модулей:
1. Заходим в админку https://10.11.1.191:7071/zimbraAdmin/ в моем случае.
2.
3.
4. Грузим модуль
5. Добавляем наш новый модуль в разрешенные.
Собственно вот и все, удачной экономии Вашей компании и солидных поощрений Вам))) Если кто хочет совсем совсем бесплатно, то процедура лечения описана тут
Небольшой скриптец, для переноса учеток с AD. Поможет тем, у кого не заполнены поля email (то есть почти всем)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | #!/bin/bash Domain="10.11.1.50" # Имя или IP вашего домена. ADDOMAIN="zimbra.test" # Если домен zimbra отличен от домена AD указываем это тут. #Values LDAPSEARCH=/opt/zimbra/bin/ldapsearch ZMPROV=/opt/zimbra/bin/zmprov DOMAIN_NAME="test" TIMESTAMP=`date +%N` TMP_DIR=/tmp SED=$TMP_DIR/SED.lst ADS_TMP=$TMP_DIR/users_ads_$TIMESTAMP.lst ZCS_TMP=$TMP_DIR/users_zcs_$TIMESTAMP.lst DIF_TMP=$TMP_DIR/users_dif_$TIMESTAMP.lst # Описываем коннект к AD (в моем случае я создал пользователя zimbra, для коннекта) LDAP_SERVER="ldap://test" BASEDN="OU=Department,dc=test" BINDDN="CN=zimbra,OU=Department,DC=test" BINDPW="Admin!1" FILTER="(objectClass=organizationalPerson)" FIELDS="userPrincipalName" # Грузим пользователей из AD echo -n "Extract emails from AD... " $LDAPSEARCH -x -H $LDAP_SERVER -b $BASEDN -D "$BINDDN" -w $BINDPW "$FILTER" $FIELDS | \ grep "@$DOMAIN_NAME" | \ awk '{print $2}' | \ sort > $ADS_TMP echo "Found `cat $ADS_TMP | wc -l` users ($ADS_TMP)" # Грузим пользователей, которые уже в zimbra. echo -n "Quering ZCS... " $ZMPROV -l gaa zimbra.mkb.kz | sort > $ZCS_TMP echo "Found `cat $ZCS_TMP | wc -l` users ($ZCS_TMP)" # Создаем diff echo "Generating diff file ($DIF_TMP)" diff -u $ZCS_TMP $ADS_TMP | grep "$DOMAIN_NAME" > $DIF_TMP rm -f $ADS_TMP $ZCS_TMP # Заносим пользователей, стоит помнить, что в AD кириллические записи хранятся в BASE64, # так что вам понадобиться пакетик - base64. Здесь вы можете так же указать свои поля # для загрузки в каталог. Примеры searchValue3-4 echo -n "New users: " cat $DIF_TMP | grep ^+ | wc -l for i in $(cat $DIF_TMP | grep ^+ | sed s/^+//g); do echo -n " - Adding $i "; #searchValues=`$LDAPSEARCH -x -h $Domain -b $BASEDN -D $BINDDN -w $BINDPW -LLL "(userPrincipalName=$i)" sAMAccountName` searchValues1=`$LDAPSEARCH -x -h $Domain -b $BASEDN -D $BINDDN -w $BINDPW -LLL "(userPrincipalName=$i)" sAMAccountName` searchValues2=`$LDAPSEARCH -x -h $Domain -b $BASEDN -D $BINDDN -w $BINDPW -LLL "(userPrincipalName=$i)" displayName` #searchValues3=`$LDAPSEARCH -x -h $Domain -b $BASEDN -D $BINDDN -w $BINDPW -LLL "(userPrincipalName=$i)" givenName` #searchValues4=`$LDAPSEARCH -x -h $Domain -b $BASEDN -D $BINDDN -w $BINDPW -LLL "(userPrincipalName=$i)" sn` Username=`echo $searchValues1 | grep -w sAMAccountName: | awk '{split ($0, a, "sAMAccountName:"); print a[2]}' | awk '{print $1}'` # get the username displayName=`echo $searchValues2 | grep -w displayName: | awk '{split ($0, a, "displayName:"); print a[2]}' | base64 -di` #Name=`echo $searchValues3 | grep -w givenName: | awk '{split ($0, a, "givenName:"); print a[2]}' | base64 -di` #lastName=`echo $searchValues4 | grep -w sn: | awk '{split ($0, a, "sn:"); print a[2]}' | base64 -di` # Здесь мы меняем пароль для каждого пользователя на 123123 и ставим галку - сменить при # след. входе. Кто собирается пользоваться доменной авторизацией - законопатить. printf "Creating User $Username \n"; $ZMPROV ca $Username"@"$ADDOMAIN "123123" zimbraPasswordMustChange TRUE displayName "$displayName" #givenName "$Name" sn "$lastName" RES=$? if [ "$RES" == "0" ]; then echo "[Ok]"; else echo "[Err]"; fi done # Удаляем старых пользователей... у меня закоменчено... #echo -n "Old users: " #cat $DIF_TMP | grep ^- | wc -l #for i in $(cat $DIF_TMP | grep ^- | sed s/^-//g); #do #echo -n " - Deleting $i "; #$ZMPROV deleteAccount $i > /dev/null; #RES=$? #if [ "$RES" == "0" ]; then echo "[Ok]"; else echo "[Err]"; fi #done # Очищаем директории. rm -f $DIF_TMP |
Что то лечением не смог разобраться
на самом деле процедура довольно простая, необходимо вырезать функцию валидации и пере собрать jar файл. Возможно, как будет время, я соберу его и выложу тут.
Просьба, не могли бы с этим мне помочь. Тут начальство хочет работать через оутлук.
/opt/zimbra/lib/ext-common/zimbra-license-tools.jar Скиньте мне этот файл, я посмотрю
куда отправить? я вашу почту не знаю