вторник, 28 января 2014 г.

Перенаправление http запросов на https в Forefront TMG


Т.к. пользователи, как правило, не обращают внимание на такие мелочи, как буква "s" в https при написании адреса сайта и потом утверждают, что у них ничего не работает, очень полезно сделать автоматический редирект с адреса http:// на https://.
Если сервер опубликован из локальной сети посредством FTMG, то сделать это не так уж и просто. Я уж не знаю, что там Microsoft намутили, но штатными средствами Forefront (через Publish Web Sites) у меня это не получилось, т.к. при попытке создать т.н. Listener по https оно просит сертификат сервера и, почему-то, наотрез отказывается принимать официально выданный Thawte, Inc. сертификат. Если у вас вообще нет сертификата, то опубликовать так web-сервер через https тем более не получится.

Но можно сделать по-другому:
1. Сначала нужно опубликовать ваш сервер, не как web-сервер, а просто пробросив через FTMG 443 порт (через Publish Non-Web Server Protocols). В результате, он станет доступен из интернет по протоколу https.
2. Далее нужно опубликовать его же, как обычный web-сервер по протоколу http (через Publish Web Sites).
3. После этого необходимо зайти в настройки этого правила и сделать там так, как показано на скриншотах:



Важно! Получившееся правило должно стоять в списке до правила, созданного в пункте 1.

Всё. Редирект работает без всяких сертификатов.


ComminiGate Pro: перенос почты с сервера MS Exchange с помощью MoveIMAPMail


В состав сервера CommuniGate Pro входит утилита для переноса почты со старого сервера на новый посредством IMAP - MoveIMAPMail. У неё есть куча параметров, которые описаны в мануале. Если сервер CGP установлен на Linux, то для удобства переноса большого количества ящиков, проще написать небольшой скрипт:

#!/bin/sh

/opt/CommuniGate/Migration/MoveIMAPMail \
--verbose \
--notimeout \
--noACL \
--fixLongLines 256 \
--renameMailboxList ./rename.txt \
192.168.1.252 $1 "$2" 127.0.0.1 $1 "$3"

и передавать ему в качестве параметров имя пользователя и два пароля - старый и новый.

интерес тут представляет параметр:
--renameMailboxList ./rename.txt
он указывает утилите автоматически переименовывать папки при переносе со старого сервера на новый и брать шаблоны переименований из файла rename.txt. Это удобно, например, чтобы сообщения из папки "Отправленные" на Exchange сразу попали в папку "Sent Items" на CGP и т.п. Проблема тут заключается в том, что MoveIMAPMail не понимает в качестве параметров русские имена папок. Вернее, она их понимает, но в весьма специфическом формате IMAP-UTF-7. Например, папка "Удалённые" в этом формате называется так: "&BCMENAQwBDsENQQ9BD0ESwQ1-".
Ввести русское имя папки в таком формате от руки не представляется возможным. Я написал об этом разработчикам CGP, но они мне ответили, что ничего делать не будут, ибо по стандарту, именно в таком виде все папки, названные не латиницей, хранятся на сервере. Что характерно, в мануале на CGP про это ни слова не сказано, и я убил полдня, пытаясь понять, почему у меня русские имена папок не переименовываются. 
В общем, пришлось заниматься извращениями. Написал ещё один скрипт:

#!/bin/sh

filename="rename.txt"

echo -e "`echo -n 'Отправленные' | /usr/bin/uconv -f utf-8 -t IMAP-mailbox-name`\tSent Items" > $filename
echo -e "`echo -n 'Удаленные' | /usr/bin/uconv -f utf-8 -t IMAP-mailbox-name`\tTrash" >> $filename
echo -e "Deleted Items\tTrash" >> $filename
echo -e "`echo -n 'Черновики' | /usr/bin/uconv -f utf-8 -t IMAP-mailbox-name`\tDrafts" >> $filename
echo -e "`echo -n 'Нежелательная почта' | /usr/bin/uconv -f utf-8 -t IMAP-mailbox-name`\tJunk" >> $filename
echo -e "Junk E-mail\tJunk" >> $filename
echo -e "Notes\tNotes_old" >> $filename
echo -e "Tasks\tTasks_old" >> $filename

Для его функционирования нужно установить из репозитория консольную утилиту uconv, которая умеет преобразовывать тексты из кучи разных форматов и наоборот. В ней этот хитрый формат называется IMAP-mailbox-name.

Результатом работы этого скрипта будет файл rename.txt в нужном формате, который можно передать в качестве параметра MoveIMAPMail.

Ещё один полезный параметр --filter after "31-Dec-2011". Дату в нём нужно писать именно в таком виде - месяц тремя буквами, иначе никаких ошибок не увидите, но работать будет неправильно. С его помощью можно скопировать со старого сервера не всю почту, а только после определённой даты. Это полезно, если квоты на размер ящика на новом сервере меньше, чем на старом.