Установка и настройка Zimbra Open Source v.7.1 + CentOS 5.5 x64 на Hyper-V Server 2008 R2
Всем доброго времени суток.
В последнее время стало модно рассказывать о том, как я провел лето, собрал во дворе свой первый космический шатл, отдохнул в другой галактике или просто взял и перевел работу компании на новый почтовый сервер..... =]
Пишу как есть, на звезду героя не претендую, единственный смысл, зачем я это делаю - а чтобы не забыть. Ну и чтобы в последующем не терять время, а обратиться к уже существующему материалу. Может позже напишу некий FAQ по наболевшим вопросам и о том, как их решить.
PS: если кого заинтересует могу запилить картинки и прочее; критика и комментарии так же приветствуются!
Поехали. Стена текста:
Имеем:
- Hyper-V Server 2008 R2
- AD 2003 (и соответствующий внутренний DNS для него)
- внешний ip-адрес и реальное зарегистрированное доменное имя
- соответствующим образом настроенный шлюз во внутренней сети (проброска портов)
Задачи:
- Поднять на HyperV почтовый сервер Zimbra Open Source Edition последней версии (на данный момент 7).
- Настроить авторизацию пользователей в AD 2003
- Настроить общую адресную книгу на поиск в AD 2003
- Настроить защиту от спама
- Настроить резервное копирование Zimbra и всех ящиков пользователей
Почему я делаю именно виртуальный сервер, а не физический? Да потому что так проще тестировать, бекапить, обслуживать и восстанавливать сервер.
Делаем все по шагам.
Установка Гостевой Операционной Системы (CentOS 5.5 х64).
Так как в линуксах я не силен, то в качестве гостевой операционной системы для HyperV я выбрал CentOS. Она является достаточно популярной и стабильной, к тому же на одном из прошлых мест моей работы она во всю использовалась аутсортинговыми компаниями.
Создание самой виртуальной машины в Hyper-V я опущу, отмечу лишь, что нужно выбрать устаревший сетевой адаптер в свойствах виртуальной машины, так как предлагаемый по умолчанию без установленных служб Linux Integration Services системой виден не будет. Как установить эти самые службы я опишу позже =)
И да, в процессе установки я не стеснялся делать снэпшоты виртуальной машины, для того чтобы всегда была возможность откатиться на один шаг назад, если что-то не заработает как надо.
Установка довольно простая и широко описана в интернетах. Я использовал данную статью как руководство. http://www.howtoforge.com/zimbra-collaboration-suite-open-source-edition-on-centos Все команды выполняем от пользователя root.
При установке CentOS 5.5 х64 выбираем следующие компоненты:
- Applications (Editors,),
- Development (Development Libraries, Development Tools, Legacy Software Development),
- Base System (Base, Legacy Software Support).
Настройка CentOS 5.5 x64 (SplitDNS)
После перезагрузки и первого запуска нам предложат сделать первоначальную настройку:
- в меню Firewall отключаем SElinux и Security Level
- настраиваем параметры сети Network Configuration
Ставим статический внутренний ip, маску, шлюз, внутренний DNS – сервер.
Имя будущего почтового сервера возьмем:
mail.yourdomain.com
Для корректной работы отключаем службы iptables, sendmail и ip6tables.
chkconfig sendmail off chkconfig ip6tables off chkconfig iptables off
Перед дальнейшей установкой делаем на всякий случай апдейт системы:
yum update –y
Перезагружаемся.
Доставим некоторые пакеты необходимые для работы:
yum install –y sudo, libidn, perl, gmp, sysstat, libtool-ltdl
Первые три пакета необязательны, они должны идти вместе с системой.
Так как мы планируем использовать Zimbra внутри корпоративной сети за NAT’ом, то необходимо правильно поднять и настроить SplitDNS, для того чтобы наш сервер внутри сети резолвился по внутреннему ip, а снаружи по внешнему. В статье выше с howtofordge описана установка SplitDNS, но пути конфигурационных файлов отличаются, поэтому я нашел оф.мануал http://wiki.zimbra.com/wiki/Split_DNS и действовал уже по нему.
В статье рассматриваются два варианта создания SplitDNS:
a)используя Bind.
b)используя Dnsmasq.
Я выбрал первый вариант.
Устанавливаем Bind (DNS-сервер):
yum install –y bind bind-chroot bind-libs bind-utils
Настраиваем файл-конфиг, используя любой понравившийся вам редактор.
Например, vim. Как с ним работать описано здесь http://ru.wikibooks.org/wiki/Vim.
Итак, начнем:
vim /etc/named.conf
// Default named.conf generated by install of bind-x.x.x-x options { directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; forwarders { <ip-address DNS>; }; }; include "/etc/rndc.key"; // We are the master server for <yourdomain.com> zone "<yourdomain.com>" { type master; file "<db.mail.yourdomain.com>"; };
Под <ip-address DNS> имеется ввиду ip-адрес внутреннего DNS-сервера или сервера пересылки.
Под <yourdomain.com> подразумевается имя домена(зона) за которую будет отвечать Bind. Другими словами купленный нами домен. =)
Под <db.mail.yourdomain.com> – файл самой зоны.
Давайте создадим <db.server.example.com>:
vim /var/named/<db.mail.yourdomain.com>
; ; Addresses and other host information. ; @ IN SOA youdomain.com. hostmaster.yourdomain.com. ( 10118 ; Serial 43200 ; Refresh 3600 ; Retry 3600000 ; Expire 2592000 ) ; Minimum ; Define the nameservers and the mail servers IN NS <internal address of server> IN MX <10 mail.yourdomain.com.> mail IN A <internal address of server>
Понятно, что <internal address of server> - внутренний IP нашего будущего почтового сервера, а <10 mail.yourdomain.com.> – MX запись для него в домене. (Точки в конце имён обязательны.)
Мой конфиг немного отличается, так как я добавил туда еще два внешних DNS:
IN NS mail IN NS ns1 IN NS ns2 mail IN A <internal address of server> ns1 IN A <external address of server> ns2 IN A <external address of server>
Где <external address of server> - адрес внешнего DNS.
Теперь настроим почтовый сервер на использование основного DNS адреса.
vim /etc/resolv.conf
search yourdomain.com. nameserver <internal address of server>
Запускаем сервис Bind он же named и прописываем его в автозагрузку:
/etc/init.d/named start chkconfig named on
Проверяем, что все работает как надо:
nslookup <mail.yourdomain.com> Server: <internal address of server> Address: <internal address of server>#53 Name: <mail.yourdomain.com> Address: <internal address of server>
Наш сервер готов к тому чтобы стать почтовым. =)
Установка Zimbra Collaboration 7 Open Source Edition
Скачаем сам дистрибутив и распакуем его:
cd /tmp wget http://files2.zimbra.com/downloads/7.1.1_GA/zcs-7.1.1_GA_3196.RHEL5_64.2... tar xvzf zcs-7.1.1_GA_3196.RHEL5_64.20110527011124.tgz
Произведем установку:
cd zcs-7.1.1_GA_3196.RHEL5_64.20110527011124.tgz ./install.sh –-platform-override
В процессе установки будет выполнена проверка требуемых пакетов, если хотя бы одного из них не будет хватать, установка будет прекращена, а не найденные пакеты нужно будет доставить самостоятельно, и уже потом еще раз запустить установку.
............ Checking for prerequisites... FOUND: NPTL FOUND: netcat-хххх FOUND: sudo-хххх FOUND: libidn-хххх FOUND: libpcre-хххх FOUND: libgmp-хххх FOUND: libexpat-хххх FOUND: libstdc-хххх FOUND: libperl-хххх Checking for suggested prerequisites... FOUND: perl-хххх FOUND: sysstat-хххх FOUND: sqlite-ххх Prerequisite check complete. ............
После успешной проверки соглашаемся с лицензионным соглашением:
............ Do you agree with the terms of the software license agreement? [N] y ............
Далее выбираем пакеты zimbra, которые хотим установить, последние два нам не нужны:
............ Select the packages to install : Install 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 [N] Install zimbra-proxy [N] Checking required space for zimbra-core checking space for zimbra-store ............
Получаем предупреждение о несоответствии платформы, на которую производится установка. На все остальные вопросы отвечаем утвердительно:
............ Install anyway [N]Y The system will be modified. Continue? [N]Y ............
Меняем доменное имя на то, которое нам надо:
............ Change domain name? [Yes]Y Create domain: <mail.yourdomain.com> ............
Теперь мы попадаем в главное меню и производим первичную настройку. Насколько я понял это меню нельзя вызвать после установки, поэтому если нужно произвести какие-то серьезные изменения в работе почтового сервера (поменять порты, настроить mta, проверку обновлений и т.д.), то лучше всего сделать их сейчас.
Main menu 1) Common Configuration: 2) zimbra-ldap: Enabled 3) zimbra-store: Enabled +Create Admin User: yes +Admin user to create: admin@yourdomain.com ******* +Admin Password UNSET +Anti-virus quarantine user: virus-quarantine.xxxxxxx@ yourdomain.com +Enable automated spam training: yes +Spam training user: spam.xxxxxxxxxx@yourdomain.com +Non-spam(Ham) training user: ham.xxxxxxxxxx@yourdomain.com +SMTP host: mail.yourdomain.com +Web server HTTP port: 80 +Web server HTTPS port: 443 +Web server mode: http +IMAP server port: 143 +IMAP server SSL port: 993 +POP server port: 110 +POP server SSL port: 995 +Use spell check server: yes +Spell server URL: http:// mail.yourdomain.com:7780/aspell.php +Configure for use with mail proxy: FALSE +Configure for use with web proxy: FALSE +Enable version update checks: TRUE +Enable version update notifications: TRUE +Version update notification email: admin@yourdomain.com +Version update source email: admin@yourdomain.com 4) zimbra-mta: Enabled 5) zimbra-snmp: Enabled 6) zimbra-logger: Enabled 7) zimbra-spell: Enabled 8) Default Class of Service Configuration: r) Start servers after configuration yes s) Save config to file x) Expand menu q) Quit Address unconfigured (**) items (? - help) 3
Есть так же расширенное меню - Expand menu. В принципе то же самое, но со всеми подменюшками:
Main menu 1) Common Configuration: +Hostname: mail.youdomain.com +Ldap master host: mail.yourdomain.com +Ldap port: 389 +Ldap Admin password: set +Secure interprocess communications: yes +TimeZone: America/Los_Angeles 2) zimbra-ldap: Enabled +Status Enabled +Create Domain: yes +Domain to create: mail.yourdomain.com +Ldap root password: set +Ldap replication password: set +Ldap postfix password: set +Ldap amavis password: set +Ldap nginx password: set 3) zimbra-store: Enabled +Status Enabled +Create Admin User: yes +Admin user to create: admin@.yourdomain.com ******* +Admin Password UNSET +Anti-virus quarantine user: virus-quarantine.xxxxx@mail.yourdomain.com +Enable automated spam training: yes +Spam training user: spam.xxxxxxxxxx@yourdomain.com +Non-spam(Ham) training user: ham.xxxxxxxxxx@yourdomain.com +SMTP host: mail.yourdomain.com +Web server HTTP port: 80 +Web server HTTPS port: 443 +Web server mode: http +IMAP server port: 143 +IMAP server SSL port: 993 +POP server port: 110 +POP server SSL port: 995 +Use spell check server: yes +Spell server URL: http://mail.yourdomain.com:7780/aspell.php +Configure for use with mail proxy: FALSE +Configure for use with web proxy: FALSE +Enable version update checks: TRUE +Enable version update notifications: TRUE +Version update notification email: admin@mail.yourdomain.com +Version update source email: admin@mail.yourdomain.com 4) zimbra-mta: Enabled 5) zimbra-snmp: Enabled 6) zimbra-logger: Enabled 7) zimbra-spell: Enabled 8) zimbra-convertd: Enabled 9) Default Class of Service Configuration: 10) Enable default backup schedule: yes c) Collapse menu r) Start servers after configuration yes s) Save config to file q) Quit
Установку закончить нельзя до тех пор пока не задан пароль админской учётки. Выбираем пункт 3 (zimbra-store) и далее пункт 4 (Admin Password):
............ Select, or 'r' for previous menu [r] 3 Store configuration 1) Status: Enabled 2) Create Admin User: yes 3) Admin user to create: admin@yourdomain.com ** 4) Admin Password UNSET 5) Anti-virus quarantine user: virus-quarantine.xxxxx@mail.yourdomain.com 6) Enable automated spam training: yes 7) Spam training user: spam.xxxxxxxxxx@yourdomain.com 8) Non-spam(Ham) training user: ham.xxxxxxxxxx@yourdomain.com 9) SMTP host: mailhost.example.com 10) Web server HTTP port: 80 11) Web server HTTPS port: 443 12) Web server mode: http 13) IMAP server port: 143 14) IMAP server SSL port: 993 15) POP server port: 110 16) POP server SSL port: 995 17) Use spell check server: yes 18) Spell server URL: http://mail.yourdomain.com:7780/aspell.php 19) Configure for use with mail proxy: FALSE 20) Configure for use with web proxy: FALSE 21) Enable version update checks: TRUE 22) Enable version update notifications: TRUE Select, or 'r' for previous menu [r] 4 Password for admin@yourdomain.com (min 6 characters): xxxxxxxxx
Выходим в предыдущее меню, нажав клавишу «R», и нажимаем клавишу «A» чтобы применить конфигурацию.
*** CONFIGURATION COMPLETE - press 'a' to apply Select from menu, or press 'a' to apply config (? - help) a Save configuration data to a file? [Yes]Yes Save config in file: [/opt/zimbra/config.xxxxx] Saving config in /opt/zimbra/config.xxxx...done. The system will be modified - continue? [No]Yes
Предложение оповестить разработчика об успешной установке Zimbra или нет, принимайте сами.
You have the option of notifying Zimbra of your installation. This helps us to track the uptake of the Zimbra Collaboration Suite. The only information that will be transmitted is: The VERSION of zcs installed (7.1.1_GA_3196_CentOS5) The ADMIN EMAIL ADDRESS created (admin@yourdomain.com) Notify Zimbra of your installation? [Yes] No ............ Configuration complete - press return to exit ............ Configuration complete!
Сервер успешно установлен, должны стартовать службы zimbra.
Настройка Zimbra Collaboration 7 Open Source Edition.
Теперь мы можем открыть в браузере web-интерфейс сервера, который расположен по адресу http://mail.yourdomain.com . Вводим учетные данные админа и попадаем в свой почтовый ящик.
Для удобства дальнейшей работы изменим интерфейс с английского на русский, открыв вкладку «Preference», далее «General», меняем «Language» на «русский», жмем «Save»+ «Yes». Перезаходим.
Далее откроем консоль администратора Zimbra, тыркнув по менюшке «Консоль управления»(Admin Console) в правом верхнем углу или наберем в адресной строке браузера https://mail.yourdomain.com:7071/zimbraAdmin/ и введем логин/пароль администратора.
Теперь об особенностях.
Глобальные настройки имеют приоритет над настройками сервера. Это означает, что если мне вдруг будет нужно для агента передачи сообщений прекратить «использовать только проверку TLS», то в настройках сервера я не смогу изменить этот параметр пока не отключу/разблокирую его в «глобальных настройках».
Класс обслуживания – является некой «политикой» применяемой к определенному домену, коих может быть несколько. Настроек в «политике» достаточно много. При создании нового домена к нему можно прикрутить определенный класс обслуживания.
В качестве дополнений в zimbra выступают zimlet’ы, не нужно путать их с расширениями администратора. Первые применяются и ориентированы на пользователей, вторые только на консоль администратора и возможности zimbra сервера.
1. Настройка авторизации через AD.
Для авторизации пользователей Zimbra позволяет использовать не только свой собственный LDAP, но так же и другие внешние источники, например AD. Настройка ее достаточно простая http://wiki.zimbra.com/wiki/LDAP_Authentication и может быть осуществлена как через консоль, так и через веб-интерфейс:
- открываем закладку «домены» - «yourdomain.com» - «настроить проверку подлинности», жмем «далее»
- выбираем «механизм проверки подлинности» - внешний «Active Directory», «имя домена» и сервер с указанием порта, жмем «далее»
- указываем имя пользователя и пароль, жмем «тест», после успешного прохождения жмем «далее» и «готово»
Самих пользователей добавить в Zimbra можно при помощи мастера переноса учетных записей из веб-интерфейса, или ручками, или при помощи скрипта описанного здесь - http://www.ossportal.ru/technologies/zimbra/blogs/152
Что удобно: при блокировании или удалении пользователя из AD, учетка в Zimbra автоматом блочится.
2. Настройка общей адресной книги на поиск в AD.
В учетках Active Directory должно быть заполнено поле «Эл.почта», именно по нему будет производиться поиск.
Так же как и с авторизацией можно воспользоваться и консолью и веб-интерфейсом:
- открываем закладку «домены» - «yourdomain.com» - «настроить GAL»
- выбираем «Режим GAL» - «внешний»; «Большинство результатов поиска по GAL» - 100; «имя учетной записи синхронизации GAL» – учетка в AD от которой, будет производиться поиск; «интервал опроса внешнего GAL» - например, 30 минут; указываем тип сервера, его имя или ip-адрес, и порт. Так же выставляем правильную поисковую базу:
DC=youdomain,DC=com
Жмем «далее»
- ставим галочку для привязки к внешнему серверу в поле заносим: DC=youdomain,DC=com (если есть) и вводим два раза пароль на учетку указанную ранее. Жмем «далее»
- для того чтобы не заворачиваться с фильтрацией ставим галочку «использовать настройки поиска по GAL для синхронизации GAL», жмем «далее»
- в следующем окне мы увидим краткую сводку параметров GAL и должны протестировать его работу. Убедимся, что поиск адресов в AD работает и завершаем работу мастера.
В версии 7.1.1, которую я устанавливал на тот момент, была проблема с фильтром поиска учетных записей в AD. Бага описана вот здесь: https://bugzilla.zimbra.com/show_bug.cgi?id=11562
Весь затык был в том, что по умолчанию фильтр для AD в Zimbra настроен на работу и поиск почты по атрибуту mailNickname (который используется, например в Exchange) и по замыслу разработчиков запрашивался при миграции пользователей из Exchange в Zimbra. Но в AD2003 по умолчанию для этих целей используется атрибут mail.(посмотреть можно через оснастку AD - свойства - редактор атрибутов). Соответственно необходимо было изменить злосчастный фильтр.
Все команды выполняем из-под пользователя zimbra:
- zmprov gcf zimbraGalLdapFilterDef >> /tmp/someconfigfile
- Меняем значение mailNickname внутри файла на mail
- Для того чтобы внести изменения нужно выполнить команду zmprov mcf для каждой строчки внутри получившегося файла. Поэтому добавим в начало каждой строки файла mcf<пробел>
- Теперь подсовываем его обратно используя zmprov < /tmp/someconfigfile.
- Заходим в консоль управления по вебке и проверяем в настройке gal находит ли определенный адрес или нет.
Решение взято отсюда: http://wiki.zimbra.com/wiki/King0770-Notes-SearchGal-Edit
3. Защита от спама.
В Zimbra существует несколько видов проверок. Спам можно отсеивать средствами MTA (Postfix), Amavisd-NEW, Spammassassin, пользовательскими фильтрами и т.д. За основу возьмем статью с Zimbra Wikipedia: http://wiki.zimbra.com/wiki/Improving_Anti-spam_system и http://wiki.zimbra.com/wiki/Zimbra_MTA#Anti-Spam_Protection
- Настройка Анти-спам фильтра(Amavisd-New).
По идее, в Zimbra за фильтрацию отвечает некий Amavisd-NEW, который является интерфейсом между Zimbra MTA, ClamAV и SpammAssassin’ом. Если вам не нравится, как работает Spammassassin, то можно вместо него использовать и настроить DSPAM (http://wiki.zimbra.com/wiki/Using_DSPAM_for_Spam_Filtering). Фильтрация включается автоматически, как только Zimbra будет установлена и запущена. Пользователи сами могут начать обучать спам-фильтр. По умолчанию метка «spam» будет присваиваться письмам, которые по решению системы являются спамом на 33% и отбрасываться/уничтожаться, если превышают 75%. Эти пороговые значения, заданные по умолчанию можно изменить через консоль администратора: «глобальные настройки» - «AS/AV». Там же можно и изменить тег выдаваемый спаму. Для обучения фильтра используются две системные учетные записи:
a) spam.xxxx@youdomain.com – необходима для приема сообщений которые не были помечены как спам, но на самом деле таковым являются.
b) ham.xxxxx@youdomain.com – необходима для приема сообщений которые были помечены как спам, но на самом деле таковыми не являются.
Для этих аккаунтов отключена дисковая квота (она равна 0) и индексация вложений.
Как же происходит обучение?
Когда пользователь через веб-интерфейс помечает письмо как спам – оно перемещается в соответствующую папку «спам», а копия отмеченного письма пересылается как вложение на spam.xxxx@youdomain.com
При этом пересылаемое письмо имеет определенный заголовок, а в теле письма указывается информация вида:
Classified-By: test@youdomain.com Classified-As: spam Action: move Source-Folder: /Conversations Destination-Folder: /Junk Destination-Mailbox:
Понятно, что когда пользователь помечает письмо как «не спам» оно пересылается как вложение на ham.xxxxx@youdomain.com и тело письма имеет вид:
Classified-By: test@youdomain.com Classified-As: ham Action: move Source-Folder: /Conversations Destination-Folder: /Inbox Destination-Mailbox:
Дальше в дело вступает специальная утилита – zmtrainsa. Она с периодичностью указанной в crontab zimbra разбирает все, что попало на ящики ham.xxxxx@youdomain.com и spam.xxxx@youdomain.com и обучает спам-фильтр(spamassassin). Раз в день zmtrainsa очищает эти ящики. Изменить время жизни писем в папках «спам» можно через веб-интерфейс консоли администраора: открываем нужный нам класс обслуживания, вкладку «дополнительно» - «политика сохранения электронной почты» - «время жизни спамового сообщения».
Конкретным пользователям можно запретить обучать спам-фильтр при помощи команды:
zmprov mcf <attribute> ‘’
где в качестве атрибута выступают zimbraSpamIsSpamAccount и zimbraSpamIsNotSpamAccount
Для того чтобы изменения вступили в силу перезапустим сервер zimbra:
zmcontrol restart
Если есть желание самому обучить спам-фильтр, то можно забить эти ящиками письмами со спамом (в качестве вложений), правильно заполнив тело письма. Обучение можно считать законченным, если было разобрано около 200 писем на каждом ящике.
Утилита zmtrainsa может быть запущена вручную, при этом ей можно скормить любую папку почтового ящика. Для отправки определенной папки на один из ящиков воспользуемся следующими командами:
zmtrainsa <server> <user> <password> spam [foldername]
Для спама.
zmtrainsa <server> <user> <password> ham [foldername]
Для не спамовых сообщений.
При помощи Amavisd-New можно определить черные/белые списки отправителей.
Для этого отредактируем файл /opt/zimbra/conf/amavis.conf.in
read_hash(%whitelist_sender, '/etc/zimbra/whitelist'); read_hash(%blacklist_sender, '/etc/zimbra/blacklist'); read_hash(%spam_lovers, '/etc/zimbra/spamlovers');
Тем самым мы указали, откуда брать черные и белые списки отправителей + тех кто будет получать абсолютно весь спам без фильтрации.
Формат файлов:
hotstuff@sexnzen.com spammersites.net
Не забудем о том, что Zimbra при каждом обновлении может стирать эти файлы и что их нужно время от времени бэкапить (например, через crontab).
- Настройка Spammassassin:
Самый простой способ фильтрации при помощи Spammassassin - это изменение файла /opt/zimbra/conf/salocal.cf.in
Он разрабатывался специально для удобства настройки “под себя”. Формат файла следующий:
blacklist_from sales@traveloforange.com whitelist_from bill@yahoo.net blacklist_from *@emn-mysavingsnow.net
Блочить можно и конкретного адресата и конкретный домен. После внесения изменений перезапустим Spammassassin чтобы он заново прочитал конфиг:
su – zimbra –c “zmmtactl restart && zmamavisdctl restart”
Помните, что Zimbra при каждом обновлении заменяет этот файл и что его нужно время от времени бэкапить (например, через crontab).
Ну, а сама работа Spammassassin’a заключается в проверке заголовков и содержимого писем, и применении определенных правил к ним. То есть в письме ищутся регулярные выражения, которые могут быть представлены конкретным словом или фразой и далее обработаны соответствующим образом. При проверке письма, к нему по очереди применяются все правила Spammassassin’a и если какие-то из них срабатывают, то письму выдаются баллы (в зависимости от сработавшего правила). Когда общая сумма баллов превышает определенный порог, то письмо получает отметку spam (она добавляется в его заголовок) и отправляется в соответствующую папку. Если сумма баллов очень высока, оно может быть отброшено автоматически. Управление порогами отбрасывания и добавления тега spam осуществляется при помощи сервиса Amavisd-New (как я понял). И доступно через веб-интерфейс консоли администратора: «глобальные настройки» - «AS/AV». Только здесь оно указано в процентах, а не в баллах.
Можно создавать и свои правила, все в том же salocal.cf.in Формат следующий:
body LOCAL_RULE /sale/ score LOCAL_RULE 0.5
Созданное правило называется LOCAL_RULE и ищет в теле сообщения слово sale в нижнем регистре. Если оно находит слово sale в любом месте письма, то к общей сумме письма добавляется 0,5 балла. Обратим внимание, что правило срабатывает только один раз, не учитывая сколько раз в нем присутствует слово sale. Рекомендуется задавать такие имена правил, чтобы их легко было отличить от встроенных, например, добавляя в начале правила слово LOCAL, как это показано выше.
Еще примеры:
body LOCAL_SALE /sale/i
Поиск без учета регистра.
body LOCAL_STOCK1 /^hot stock tip/i
Поиск строки, которая начинается со слов hot stock tip без учета регистра.
body LOCAL_4CAPS /[A-Z][A-Z][A-Z][A-Z]/
Поиск любых 4 заглавных букв в строке.
body LOCAL_MONEY /d?d?d?.ddb/
Поиск подряд трех цифр, десятичной точки и еще двух цифр, вместе составляющих регулярное выражение. Хитрые разработчики рекомендуют погуглить «perl regular expressions» для построения более сложных правил. Так же можно проверять и заголовки писем, используя следующую конструкцию:
header LOCAL_LOCALHOST reply-to =~ /@localhost/
Имя правила будет LOCAL_LOCALHOST, а reply-to(для ответа, обратный адрес) это имя поля заголовка, где будет производиться поиск. Правило сработает, если в любом месте поля reply-to будет содержаться запись @localhost. Просмотреть заголовки писем, да и вообще всю информацию о письме в «истинном виде» можно щелкнув по письму правой кнопкой мыши из меню веб-интерфейса и выбрав пункт «показать оригинал».
Следующее правило – поиск по URI (это URL+URN):
uri LOCAL_SALES /sales/
Помимо базовых правил, мы можем создавать и более сложные, комбинируя условия и создавая «мета-правила»:
body LOCAL_FOUR_CAPS /[A-Z][A-Z][A-Z][A-Z]/ body LOCAL_MONEY /d?d?d?.ddb/ meta LOCAL_STOCK (LOCAL_MONEY && LOCAL_FOUR_CAPS) score LOCAL_STOCK 1
Если сработали оба правила LOCAL_FOUR_CAPS и LOCAL_MONEY , то к общей сумме балов письма будет добавлена единичка. Будьте внимательны, так как при создании мета-правил легко ошибиться и добавить лишних баллов письму. Пример:
body LOCAL_FOUR_CAPS /[A-Z][A-Z][A-Z][A-Z]/ score LOCAL_FOUR_CAPS 1 body LOCAL_MONEY /d?d?d?.ddb/ score LOCAL_MONEY 1 meta LOCAL_STOCK (LOCAL_MONEY && LOCAL_FOUR_CAPS) score LOCAL_STOCK 1
Здесь будет добавлено 3 балла (по единичке за каждое сработавшее и еще единичку за то, что сработали оба).
После внесения изменений перезапустим Spammassassin чтобы он заново прочитал конфиг:
su – zimbra –c “zmmtactl restart && zmamavisdctl restart”
- Настройка Postfix, RBL:
RBL(Real time Black hole Lists) – списки заблокированных отправителей проверяемых в реальном времени или огромная база открытых релеев, пересылающих спам. По умолчанию в Postfix’e Zimbr’ы включены следующие ограничения:
a) reject_invalid_hostname
b) reject_non_fqdn_hostname
c) reject_non_fqdn_sender
К ним можно добавить проверку по RBL: reject_rbl_client <RBL-адрес> воспользовавшись веб-интерфейсом(«глобальные настройки»-«агент передачи данных»-«проверки через DNS»-«актуальные черные списки») или консолью:
su – zimbra zmprov mcf zimbraMtaRestriction [RBL type]
Чтобы добавить все возможные ограничения воспользуемся командой:
zmprov mcf zimbraMtaRestriction reject_invalid_hostname zimbraMtaRestriction reject_non_fqdn_hostname zimbraMtaRestriction reject_non_fqdn_sender zimbraMtaRestriction “reject_rbl_client dnsbl.njabl.org” zimbraMtaRestriction “reject_rbl_client cbl.abuseat.org” zimbraMtaRestriction “reject_rbl_client bl.spamcop.net” zimbraMtaRestriction “reject_rbl_client dnsbl.sorbs.net” zimbraMtaRestriction “reject_rbl_client sbl.spamhaus.org” zimbraMtaRestriction “reject_rbl_client relays.mail-abuse.org”
Для того чтобы просмотреть имеющиеся ограничения:
zmprov gacf | grep zimbraMtaRestriction
Система RBL-списков не идеальна, и иногда отбрасывает нужные письма, если адресата по ошибке занесли в черный список. Чтобы этого избежать сделаем исключение в конфигурации Postfix’а, так как он осуществляет проверку сообщений до проверки по спискам RBL и принимает решение о доставке.
Создадим сперва файл postfix_rbl_override:
su – zimbra vim /opt/zimbra/conf/postfix_rbl_override
<ip-address> OK 1.2.3.5 OK mail.freemailer.tld OK
На основе этого файла построим карту для postfix:
postmap /opt/zimbra/conf/postfix_rbl_override
Создадим конфиг:
vim /opt/zimbra/conf/postfix_recipient_restrictions.cf
Под строкой reject_unauth_destination добавим check_client_access hash:/opt/zimbra/conf/postfix_rbl_override
Запись будет выглядеть примерно так:
reject_unauth_destination check_client_access hash:/opt/zimbra/conf/postfix_rbl_override reject_unlisted_recipient
Делаем рестарт mta:
zmmtactl restart
Не забываем делать бэкап созданных нами файлов на случай обновления Zimbra и делать рестарт mta каждый раз, когда нам нужно будет внести изменения.
Основным конфигурационным файлом Postfix’а по прежнему остается main.cf расположенному по пути /opt/zimbra/postfix/conf/main.cf Для меня важными параметрами в нем были mynetworks (доверенные сети) и smtpd_recipient_restrictions (ограничения для получателей).
Если вдруг ваш почтовый сервер стал основой мишенью для спаммеров, то сервер будет испытывать нагрузку в виде большого количества одновременных запросов на подключение. В большинстве случаев эти соединения будет отброшены из-за не существующих конечных ящиков получателей на сервере. Но эти подключения жрут ресурсы сервера. Чтобы этого избежать добавим пару строчек в main.cf:
smtpd_soft_error_limit = 2
smtpd_hard_error_limit = 3
Сделать это можно следующими командами:
su – zimbra postconf -e 'smtpd_hard_error_limit = 3' postconf -e 'smtpd_soft_error_limit = 2'
Выйдем из-под пользователя zimbra и зайдем обратно под пользователем root. Перезапустим postfix выполнив от рута:
cd /opt/zimbra/postfix/sbin ./postfix stop postfix/postfix-script: stopping the Postfix mail system postfix start postfix/postfix-script: starting the Postfix mail system
Для того чтобы не принимать письма с определенными вложениями можно отредактировать файл /opt/zimbra/conf/postfix_header_checks.
Пример:
/filename="?(.*).(asd|bat|chm|cmd|com|dll|do|exe|hlp|hta|js|jse|lnk|ocx|pif|reg|scr|shb|shm|shs|vbe|vbs|vbx|vxd|wsf|wsh|xl)"?$/ REJECT For security reasons we reject attachments of this type /^s*Content-(Disposition|Type).*names*=s*"?(.+.(asd|bat|chm|cmd|com|dll|do|exe|hlp|hta|js|jse|lnk|ocx|pif|reg|scr|shb|shm|shs|vbe|vbs| REJECT Attachment type not allowed. File "$2" has the unacceptable extension "$3"
Где в скобках перечислены расширения файлов.
Но так же легко можно воспользоваться веб-интерфейсом администратора: «глобальные настройки» - «вложения» - «новое расширение» - «добавить» - «добавить выбранное»
Для отбрасывания писем, которые валятся на не существующие адреса отвечает строчка в файле /opt/zimbra/conf/zmmta.cf:
POSTCONF smtpd_reject_unlisted_recipient no
Вместо no ставим yes. Обновления Zimbra могут его перезаписать, поэтому не забываем делать резервную копию.
С такой настройкой сервер не будет производить проверку на спам и вирусы, прежде чем отклонить письмо, содержащее неправильный адрес + можно настроить postfix так чтобы выдавать ответ 450, явно говоря о том, что такого адреса не существует. В дополнение к этому, когда команда RCPT_TO отправляет письмо на неверный адрес, Zimbra ждет 5 секунд, прежде чем принять следующую команду, тем самым замедляя работу спамера.
Дальше обратимся к файлу настроек ограничений в Postfix’е /opt/zimbra/conf/postfix_recipient_restrictions.cf:
reject_unknown_recipient_domain
Отбрасывает письмо, если указанный адресат не имеет корректной A или MX записи, если Postfix не является окончательным местом доставки адреса получателя (???), или конечный домен имеет запись MX с нулевой длинной хоста.
reject_unverified_recipient
Отвергает запрос, когда в RCPT_TO указан адрес, на который идет «отлуп» или когда адрес получателя не является достижимым.
Указанные выше записи должны находиться под первой строчкой, та самая, которая reject_non_fqdn_recipient
Делаем рестарт Zimbra,чтобы все заработало:
su – zimbra –c “zmcontrol restart”
И наслаждаемся.
ЗЫ: Как описано в статье есть и недостаток такого подхода, который заключается в том, что спамеры могут вычислить реально используемые адреса путем массовых рассылок, но как именно мне не совсем понятно. =\
4. Резервное копирование.
Так как Zimbra работает на виртуальной машине, то проще делать бэкап всей виртуалки при помощи скрипта hvbackup.vbs взятого отсюда http://sysadmins.ru/topic247352.html
Решение бесплатное и что самое приятное — работающее без нареканий. Нужно лишь добавить его в планировщик задач с определенными ключами.
Для бэкапа почтовых ящиков Zimbra воспользуемся решением с оф. сайта. http://wiki.zimbra.com/wiki/Backing_up_and_restoring_Zimbra_%28Open_Source_Version%29
Нас интересует секция Another Option. Скрипты довольно простые – скрипт Backup.sh вызывает скрипт zimbraBackupAllAccounts.sh, а Restore.sh вызывает zimbra_restore_allaccounts.sh. Все они используют встроенные команды Zimbra. Что-то особенное менять в них смысла нет. Единственно только что я изменил: это место резервного копирования и конечный тип архива, да убрал подсчет времени.
Script 1 Backup.sh:
echo "*******************************************************"^ echo "* Zimbra - Backup all email accounts *"^ echo "*******************************************************"^ # #ZBACKUP=/Backup echo Start time of the backup = $(date +%T) before="$(date +%s)" # echo "Generating backup files ..." su - zimbra -c /opt/AdminScripts/zimbra_backup_allaccounts.sh # echo The process lasted = $(date +%T)
Script 2 zimbraBackupAllAccounts.sh:
#Backup ALL ACCOUNTS AND EMAILS #This script must be run as root. before="$(date +%s)" echo "Nachalo beckupa ..." ZHOME=/opt/zimbra ZBACKUP=/Backup ZCONFD=$ZHOME/conf DATE=`date +"%a"` ZDUMPDIR=$ZBACKUP/$DATE ZMBOX=/opt/zimbra/bin/zmmailbox if [ ! -d $ZDUMPDIR ]; then mkdir -p $ZDUMPDIR fi echo " Running zmprov ... " for mbox in `zmprov -l gaa`; do echo " Generating files from backup $mbox ..." $ZMBOX -z -m $mbox getRestURL "//?fmt=tgz" > $ZDUMPDIR/$mbox.tgz done
Для восстановления всей почты так же понадобится два скрипта.
Script 3 Restore.sh:
echo "*******************************************************" echo "* Zimbra - Restore all email accounts *" echo "*******************************************************" echo "" # echo Start Time Restore = $(date +%T) # echo "" echo "Starting the process restore the backup files ..." su - zimbra -c "/opt/AdminsScripts/zimbra_restore_allaccounts.sh" echo The process lasted = $(date +%T) # Calculating time #after="$(date +%s)" #elapsed="$(expr $after - $before)" #hours=$(($elapsed / 3600)) #elapsed=$(($elapsed - $hours * 3600)) #minutes=$(($elapsed / 60)) #seconds=$(($elapsed - $minutes * 60)) #echo "The complete restore lasted : "$hours hours $minutes minutes $seconds seconds" echo "Process completed successfully!"
Script 4 zimbra_restore_allaccounts.sh:
#!/bin/bash ZHOME=/opt/zimbra #ZBACKUP=$ZHOME/backup/mailbox ZBACKUP=/Backup ZCONFD=$ZHOME/conf DATE=`date +"%a"` ZDUMPDIR=$ZBACKUP/$DATE ZMBOX=/opt/zimbra/bin/zmmailbox if [ ! -d $ZDUMPDIR ]; then echo "Backups do not exist !" exit 255; fi for mbox in `zmprov -l gaa` do echo " Restoring files from backup $mbox ..." $ZMBOX -z -m $mbox postRestURL "//?fmt=tgz&resolve=reset" $ZDUMPDIR/$mbox.tgz done
Как видно из скриптов - что для восстановления, что для резервного копирования используется команда zmprov и zmmailbox. А в папке для бекапа будет создана папка с текущей датой и все учетные записи с их содержимым разложены по архивам в формате tgz.
Скрипт Backup.sh заносим в crontab для выполнения по расписанию.
PS: За наводку на готовое решение спасибо человечку Slanj с форума. Так же есть рекомендация делать бекап базы данных Zimbra. Нормальный скрипт лежит тут http://code.google.com/p/zimbackup/source/browse/trunk/zbkp-mysql . Бекапит базу каждый день недели. Но я им пока не успел воспользоваться. =]
PPS: Чуть не забыл официальное руководство администратора на англ. языке. http://files.zimbra.com/website/docs/Zimbra%20OS%20Admin%20Guide.pdf
Комментарии
03/02/2012 - 20:18
А можно один бизнесовый вопрос? Я никогда не могла понять, почему люди, у которых есть деньги на покупку Windows Server + HyperV, не хотят (не могут) купить платную Zimbra. Вот почему? Это же нелогично.
Может вопрос слишком личный, и мне грозит ответ вида "просто не хотим", но все же не удержусь и задам вопрос.. :)
03/02/2012 - 20:35
Ну как бы вам объяснить многоуважаемая Aviriel. Может у кого-то Hyper-V на Windows 2008 server core и платный. Но мы используем бесплатную версию данного продукта и ни копейки за нее не заплатили. :) По-моему даже википедия со мной согласна http://ru.wikipedia.org/wiki/Microsoft_Hyper-V_Server
Хотя наверное в статью надо внести сей ньюанс, спасибо.
04/02/2012 - 22:31
Ок, упустила, спасибо за объяснение. Просто мне казалось, что раз вы используете Hyper-V, а не KVM (RHEV, например), то логично использовать SharePoint. А тут неожиданно Zimbra, еще и OSE :)
05/02/2012 - 01:08
Контора такая - денег нет, людей нет, воды нет, (населена роботами). Сижу как гоблин в пещере. А с шаропоинтом наверное опечатка :) Шаропоинты всякие с Alfresco сравнивать надо. Нам же именно почтовый север нужен был. И тут ZCS OSE с ZD как раз почти аналог Exchange c Outlook.
Да еше бесплатный :)
07/02/2012 - 12:21
Ох автор вы красавец!!!!
Текс просто прекрасен всё логично просто и понятно. И описывает моё поднятие зебры на хиперВ. Эту статью срочно в избранное :). Будет там так сказать красоваться.
07/02/2012 - 14:31
Cпасибо! Бум стараться o/
13/02/2012 - 09:25
Пара "гунделок", если будет позволено... :)
1. "Глобальные настройки имеют приоритет над настройками сервера."
Как раз наоборот - настройки сервера имеют приоретет перед глобальными настройками.
Zimbra OS Admin Guide 7.1.pdf
"Note: Configurations set in Global Settings define inherited default values for
the following objects: server, account, COS, and domain. If these
attributes are set in the server, they override the global settings."
2. "...спамеры могут вычислить реально используемые адреса путем массовых рассылок, но как именно мне не совсем понятно."
Твой почтовый домен известен, часть перед собакой подставляется из словаря, а дальше тупая долбежка роботами.
Поэтому для почтовых адресов всеже желательно использовать "несловарные" слова. Лично себя упрекаю, что учетку admin не переименовал даже в какого-нибудь admin.1234. Вроде мелочь, а письма принимаются - учетка-то реально существует. Правда спам-фильтр большинство левых писем отлавливает, но всеже...
Ты об этом спрашивал?
13/02/2012 - 11:06
1. Как это о_О ? Если я в глобальных настройках выставлю галочку для агента передачи сообщений - использовать только проверку подлинности TLS, то я не смогу ее снять / перезаписать значение / для пункта меню настройки сервера - агент передачи сообщений. Я имел ввиду именно это.=)
2. Не совсем. На вики пишется что массовые рассылки на не существующие электронные адреса - это часть более серьезной атаки. Подразумевается что если мы включаем опцию в postfix:
то спаммеру в ответ будет выдаваться сообщение о том, что такого ящика в системе не существует. Вывод: путем отсеивания адресов на которые не будет выдаваться такое сообщение, спаммер может составить базу адресов. ИМХО конечно, но речь там идет именно об этой опции postfix.
14/02/2012 - 02:30
1. Не знаю. У меня этот пункт доступен для редактирования. ZSC 6.0.15 OSE
И еще присутствует выделенная надпись на верху закладки Управление глобальными настройками:
"Примечание. Настройки применяются только к серверам, на которых установлены и включены соответствующие службы. Настройки сервера имеют приоритет над глобальными настройками."
Могу предоставить скриншоты для доказательства.
2. ИМХО, сильно зависит от "интеллекта" робота и его папы Карло(ака автора). Ко мне уже пол-года на одни и теже несуществующие адреса ломятся. Причем с разных узлов. Не смотря на отлупы.
К стати, опция "reject_unlisted_recipient" присутствует в main.cf дважды. У меня по-крайней мере.
Сначала она фигурирует в smtpd_recipient_restriction, а потом появляется ниже в виде строки:
"smtpd_reject_unlisted_recipient = no" - это вроде как поведение по-умолчанию.
Хотя я и не менял этот параметр на "yes" у меня письма для несуществующих адресатов не принимаются, а отваливаются на этапе анализа разрешений для получателя SMTP-сессии. Видно хватает триггера в smtpd_recipient_restrictions.
Поправьте, если что упустил/соврал/недопонял.
15/03/2012 - 11:18
все круто, немного доработал скрипт до искомого. один вопрос, как восстановить отдельный ящик?)))) нужно какой то выборочный скрипт написать.
15/03/2012 - 21:01
Вот самый простой способ который я использовал. Хотя все тоже самое можно сделать одной строчкой в Zimbra CLI
Если ящик был полностью удален нам потребуется создать учетную запись Zimbra заново со всеми атрибутами (Ф.И.О., настройки авторизации, участник рассылки и т.д.). Только после этого мы можем восстановить все, что содержалось в этом ящике (контакты, письма, ежедневник, портфель и т.д.). Процедура следующая:
1.0.Создаем новый почтовый ящик в Zimbra.
1.1.Для восстановления открываем почтовый ящик через web-интерфейс,
1.2. Жмем пункт меню «Настройки».
1.3.Находим «Импорт-Экспорт».
1.4.Далее «обзор» и выбираем файл-архив(*.tgz) нужного нам ящика из ранее сделанного бэкапа.
1.5.Выбираем метод импорта, дополнительные настройки, что импортируем.
1.6.Импортируем. Проверяем все ли на месте. Можно так же восстанавливать существующие ящики или просто вытягивать отдельные письма из архивов, открыв их в любом поддерживаемом архиваторе (например 7zip, winrar).
21/03/2012 - 10:34
Здравствуйте. Можно задать вопрос?
В связи с тем, что из-за установки ZCS на неRHEL версия ОС определяется как ***unknown***- не работает автообновления из web-админки. Кто-нибудь знает решение?
Centos 6.2_64bit, ZCS 7.1.3.
Спасибо!
22/03/2012 - 20:18
Здравствуйте.
Ситуация такая. Приходит почта я ее помечаю как спам она переходит в папку спам, затем приходят письма от этих же адресов и они попадают в папку входящие. Как сделать так чтоб заранее помеченные письма как "спам" попадали в папку спам.
09/04/2012 - 12:45
Добрый день, не могу понять что не так... При бэкапе пишет opt/AdminScripts/zimbra_backup_allaccounts.sh: line17: /Backup/Mon/user@mydomain.lan.tgz: No such file or directory. И так абсолютно со всеми пользователями. Zimbra 7 на Debian 5. И еще вопрос, вот наткнулся http://www.zimbra.com/products/download_opensource.html, это все что ли? vmware начинает убивать бесплатную зебру? может кто чего знает?
09/04/2012 - 13:22
1.Проверьте переменную backup. Существует ли папка куда вы складируете бэкапы.
2.Удосужтесь полностью прочитать и перевести текст диалогового окна. А конкретно данной строчки - I'd rather not fill in the form. Just take me to the download page
09/04/2012 - 14:21
На 2 - спасибо... Недосмотрел...
На 1 - папка существует, создавалась при первом запуске скрипта... Создал новую папку Backup в /opt/. Все разрешения на действия с папкой дал... В скрипте ее указал... Итог тот же... Несмотря на разрешения, в начале бэкапа прописывается, что доступ к папке запрещен... Не могу понять почему...
13/04/2012 - 20:44
В таком случае рекомендую выполнить команду zmbox со всеми атрибутами непосредственно из под пользователя zimbra:
zmmailbox -z -m ящик@домен getRestURL "//?fmt=tgz" > /путь до бэкапа/имя_файла_бэкапа.tgz
13/04/2012 - 14:55
Еще возник такой вопрос... может кто сталкивался... Необходимо запретить некоторым пользователям отправку почты во вне, а оставить только переписку внутри компании... Как такое реализовать не могу найти... Заранее спасибо...
13/03/2013 - 21:59
Когда зимбра спросила какое использовать имя хоста, я его менять не стал и оно осталось на уровне zimbra.mydomain.ru. Установка прошла успешно, вебморда работает и доступна отовсюду, но есть 1 проблема. Зимбра внутри себя создала домен @zimbra.mydomain.ru, соответственно учетки создаются такого вида: user@zimbra.mydomain.ru, а мне надо user@mydomain.ru как победить?
14/03/2013 - 07:34
Выбери пунк домен и слева вверхнем углу создай новый домен какой тебе нужен. А этот используй для тестов всяких скриптов и тд и будет тебе счастье. У меня у самого такая история приключилась. На работу сервреа это никак не влияет.
12/05/2013 - 10:42
Имеется зимбра на xen сервере, настраивал другой человек.
может кто подскажет, как сделать так чтобы веб морда была доступна не толь мз локальной сети, но по внешнему адресу.
во время тестирования она работала, а потом ее отулючили, не сказав как включить обратно.
знаю что как связано с 0.0.0.0:443, а сейчас 10.20.0.20:443. вот как бы поменять?
заранее благодарен.
12/05/2013 - 10:56
12/05/2013 - 13:10
12/05/2013 - 18:48
30/05/2013 - 10:11
chkconfig postfix off
но дело в том что при дальнейшей установки он у вас может опять ругаться на 25 порт. Поэтому для профилактики делаем вот так
/etc/init.d/postfix stop
/etc/init.d/sendmail stop
и после этого убеждаемся что нет никаких 25 порт listen
посмотреть можно от так
netstat -na
P.S. это то что касается centos 6.4 minimal rayg00n можно добавить это в сам мануал если хотишь канечно же.
19/01/2014 - 18:42
Например: spamТест письма