Установка Let’s Encrypt SSL-сертификата в Zimbra Collaboration 8.X.

На тот случай когда по тем или иным причинам нет возможности купить сертификат, мы разберем как выпустить и установить Let’s Encrypt SSL-сертификат в Zimbra Collaboration 8.X..

 

Установим пакет для запросов сертификатов Let’s Encrypt:

apt-get install certbot -y

 

Перед тем как выпустить сертификат, выполним тестовый выпуск сертификата :

certbot certonly --dry-run --standalone -d mail.contoso.com

Если все хорошо и ошибок нет, то выпускаем сертификат:

certbot certonly --standalone -d mail.contoso.com

В процессе будет запрошен email администратора (указываем свой) и пара вопросов на которые отвечаем утвердительно.

Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): admin@contoso.com

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: A

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y

 

Переходим в каталог letsencrypt с нашим доменом (/etc/letsencrypt/live/$DOMAIN/), скачаем корневые сертификаты от Let’s Encrypt и сформируем корректную цепочку сертификатов, чтобы Zimbra ее приняла:

cd /etc/letsencrypt/live/$DOMAIN/

wget -4 -O /etc/letsencrypt/live/$DOMAIN/isrgrootx1.pem https://letsencrypt.org/certs/isrgrootx1.pem.txt
wget -4 -O /etc/letsencrypt/live/$DOMAIN/letsencryptauthorityx3.pem https://letsencrypt.org/certs/letsencryptauthorityx3.pem.txt

cat /etc/letsencrypt/live/$DOMAIN/isrgrootx1.pem > /etc/letsencrypt/live/$DOMAIN/zimbra_chain.pem
cat /etc/letsencrypt/live/$DOMAIN/letsencryptauthorityx3.pem >> /etc/letsencrypt/live/$DOMAIN/zimbra_chain.pem
cat /etc/letsencrypt/live/$DOMAIN/chain.pem >> /etc/letsencrypt/live/$DOMAIN/zimbra_chain.pem

Читать далее

Шифрование по ГОСТ Р 34.10-2012 в OpenSSL 1.1.1 на Debian 10 Buster

Опишу для памятки как реализовать поддержку шифрования по ГОСТ Р 34.10-2012 (GOST2012) в OpenSSL 1.1.1 на Debian 10 Buster.

Реализация криптоалгоритмов российского ГОСТа для OpenSSL — https://github.com/gost-engine/engine

 

Устанавливаем необходимые зависимости для сборки пакетов:

apt-get install g++ gcc make

 

Установка OpenSSL

Скачиваем исходники, распаковываем их:

wget https://www.openssl.org/source/openssl-1.1.1p.tar.gz
tar -zxvf openssl-1.1.1p.tar.gz
cd openssl-1.1.1p

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

./config --prefix=/usr/ssl --openssldir=/usr/ssl
make all
make install
cd ..

Вносим изменения чтобы по умолчанию использовалась установленная версия:

rm /usr/bin/openssl
ln -s /usr/ssl/bin/openssl /usr/bin/openssl
echo "/usr/ssl/lib" >> /etc/ld.so.conf.d/ssl.conf
ldconfig

Для проверки, выведем установленную версию:

openssl version -v
OpenSSL 1.1.1p  21 Jun 2022

 

Установка Cmake

Для корректной сборки gost-engine, установим последнюю (на момент написания статьи) версию cmake.

 

Устанавливаем необходимые зависимости:

apt-get install git libssl-dev

Скачиваем исходники, распаковываем их:

wget https://github.com/Kitware/CMake/releases/download/v3.23.2/cmake-3.23.2.tar.gz
tar -zxvf cmake-3.23.2.tar.gz
cd cmake-3.23.2

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

./bootstrap --prefix=/usr
make
make install
cd ..

Для проверки, выведем установленную версию:

cmake --version
cmake version 3.23.2

Читать далее

Исправление истекшего срока действия ключа public key для packages.sury.org на Debian 10 Buster.

В один прекрасный момент при попытке обновить пакеты php через репозиторий packages.sury.org получил ошибку недействительного публичного ключа для packages.sury.org^

Нет доверия сертификату для «packages.sury.org». ОШИБКА: Срок действия сертификата «packages.sury.org» истёк.

apt-get update

Hit:1 http://deb.debian.org/debian buster InRelease
Hit:2 http://security.debian.org/debian-security buster/updates InRelease
Hit:3 http://deb.debian.org/debian buster-updates InRelease
Get:4 https://packages.sury.org/php buster InRelease [6837 B]
Err:4 https://packages.sury.org/php buster InRelease
  The following signatures couldn't be verified because the public key is not available: NO_PUBKEY B188E2B695BD4743
Hit:5 https://repo.zabbix.com/zabbix/5.4/debian buster InRelease
Reading package lists... Done
W: GPG error: https://packages.sury.org/php buster InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY B188E2B695BD4743
E: The repository 'https://packages.sury.org/php buster InRelease' is not signed.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.

Чтобы это исправить, выполняем команды ниже:

sudo rm -rf /etc/apt/trusted.gpg.d/php.gpg
sudo apt-key del B188E2B695BD4743
sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg

Для проверки обновляем данные по репозиториям:

apt-get update

 

В случае если в ходе обновления ключей возникают ошибки, то скорей всего какой то из ниже пакетов отсутствует в системе:

apt-get install -y gnupg2 ca-certificates lsb-release apt-transport-https

Читать далее

Как удалить пакет после «make install» в deb-like Linux системах.

Столкнулся с таким вопросом — как удалить пакет собранный из исходников и установленный make install.

Для памятки оставлю для метода как это сделать, все ниже действия производится на Debian 10 (более чем уверен что все описанное ниже будет применимо для всех deb-like Linux систем).

 

Метод #1 (make uninstall)

В случае если каталог сборки не был удален, то можно попробовать выполнить удаление, командой:

cd $SOURCE_DIR 
sudo make uninstall

В случае если каталог сборки был удален, то можно загрузить его по новой, выполнить сборку (make) и удалить пакет методом #2.

 

Метод #2 (install_manifest.txt)

Если файл install_manifest.txt существует в вашем исходном каталоге, он должен содержать имена файлов каждого отдельного файла, созданного установкой.

Сначала проверяем список файлов и время их обновления:

cd $SOURCE_DIR 
sudo xargs -I{} stat -c "%z %n" "{}" < install_manifest.txt

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

 

Если все в порядке, то собираем файлы в один каталог для удаления:

cd $SOURCE_DIR 
mkdir deleted-by-uninstall
sudo xargs -I{} mv -t deleted-by-uninstall "{}" < install_manifest.txt

Читать далее

Установка chan_sccp на Asterisk 18 + FreePBX на Debian 10.

Для памятки опишу как установить модуль chan_sccp в FreePBX на базе Asterisk 18.

Описывать конфиги и настройку не буду (по крайней мере на момент написания статьи), вся исчерпывающая информация тут — https://github.com/chan-sccp

 

Устанавливаем необходимые для успешной сборки пакеты и скачиваем chan_sccp:

apt-get install git build-essential make install-headers -y

cd /opt/
git clone https://github.com/chan-sccp/chan-sccp.git chan-sccp
cd /opt/chan-sccp

Посмотрим какая версия Asterisk установлена, чтобы для нее сконфигурировать chan_sccp:

asterisk -rx "core show version"

Конфигурируем, компилируем и устанавливаем:

./configure --with-asterisk-version=18.7
make
make install

 

После установки обязательно отключаем модуль chan_skinny.so и включаем chan_sccp.so в GUI FreePBX в модули Asterisk.

Читать далее

Не доставляются письма lmtp — Not delivering message with duplicate Message-ID. Zimbra Collaboration 8.X.

В работе использую Piler в связке с Zimbra Collaboration и обнаружился интересный момент, что при восстановлении письма из Piler, оно не появляется в пользовательском ящике, при этом в логе mailbox.log фигурирует сообщение:

2022-06-15 11:45:08,794 INFO  [LmtpServer-260] [ip=10.0.13.46;] lmtp - Delivering message: size=37579 bytes, nrcpts=1, sender=no-reply@piler.сontoso.local, msgid=<348759297.2300854.1655279223734.JavaMail.zimbra@mail.сontoso.com>
2022-06-15 11:45:08,794 INFO  [LmtpServer-260] [name=test@сontoso.com;mid=89;ip=10.0.13.46;] lmtp - Not delivering message with duplicate Message-ID <348759297.2300854.1655279223734.JavaMail.zimbra@mail.сontoso.com>

 

Это случается когда LMTP получает одно и то же сообщение для одного и того же пользователя дважды за короткий промежуток времени, он удаляет вторую копию — все это происходит в памяти. Сервер сохранит это количество пар Получатель — Идентификатор сообщения в карте FIFO (first in, first out), отбрасывая любые дубликаты, которые он видит. Это можно отключить, выполнив команду:

su - zimbra -c "zmprov mcf zimbraMessageIdDedupeCacheSize 0"
ИНФОРМАЦИЯ. Для нормальной работы значение zimbraMessageIdDedupeCacheSize по умолчанию равно 3000.

 

Отобразить текущее значение, можно командой:

su - zimbra -c "zmprov gcf zimbraMessageIdDedupeCacheSize"

Читать далее

Удаление Received from: из заголовков писем Zimbra Collaboration 8.X.

По умолчанию текст письма сервера Zimbra Collaboration содержит несколько заголовков из которых можно узнать много чего интересного о сервере и желательно бы эту информацию скрыть:

Чтобы скрыть эту информацию, выполним ряд действий.

 

Посмотрим на текущий параметр postfix_header_checks в localconfig Zimbra (вывод по-умолчанию подсвечен):

su - zimbra -c "zmlocalconfig | grep header_checks"
postfix_header_checks = pcre:/opt/zimbra/conf/postfix_header_checks

 

Создадим файл со своими правилами /opt/zimbra/conf/custom_header_checks со следующим содержимым:

/^Received: (.*?)/ IGNORE
/^Received:/ IGNORE
/^X-Originating-IP:/ IGNORE
/^X-Mailer:/ IGNORE
/^Mime-Version:/ IGNORE
/Message-Id:\s+<(.*?).JavaMail.zimbra@domain.org>/ REPLACE Message-Id: <$1@domain.org>
ВНИМАНИЕ! В Message-Id необходимо вместо domain.org указать свой домен.

 

Для применения указанных правил, в консоли выполняем команды:

su - zimbra -c "zmprov mcf zimbraSmtpSendAddOriginatingIP FALSE"
su - zimbra -c "zmprov mcf zimbraMtaBlockedExtensionWarnRecipient FALSE"
su - zimbra -c "zmprov mcf zimbraMtaHeaderChecks 'pcre:/opt/zimbra/conf/postfix_header_checks pcre:/opt/zimbra/conf/custom_header_checks'"
su - zimbra -c "zmlocalconfig -e postfix_header_checks='pcre:/opt/zimbra/conf/postfix_header_checks, pcre:/opt/zimbra/conf/custom_header_checks'"

Читать далее

Как установить PHP 8.0 / 7.4 / 7.3 / 7.2 / 7.1 на Debian 10 Buster

Для памятки себе оставлю, как установить\обновить версии PHP 8.0 / 7.4 / 7.3 / 7.2 / 7.1 на Debian 10 Buster (более чем уверен что все описанное ниже будет применимо для всех deb-like Linux систем).

 

Добавление PHP репозитория.

Устанавливаем необходимые зависимости и добавляем ondrej/phpPPA репозиторий:

sudo apt-get install curl gnupg2 ca-certificates apt-transport-https lsb-release -y

echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/sury-php.list
wget -qO - https://packages.sury.org/php/apt.gpg | sudo apt-key add -
sudo apt-get update

 

Установка PHP.

Установка PHP следующей командой (в зависимости от необходимой версии, подставляем необходимую):

sudo apt-get install php7.4 php7.4-cli php7.4-common -y
Можно устанавливать несколько версий PHP в системе. Каждая версия PHP будет иметь отдельные конфигурационные файлы в каталоге /etc/php/7.X.

 

Установка версий PHP по умолчанию.

В случае если установлено несколько версий PHP, то можно установить определенную версию PHP по умолчанию, командой:

sudo update-alternatives --set php /usr/bin/php7.4

 

Читать далее

Zimbra Collaboration 8.X. Статус службы amavisd is not running после отключения сетевого IPv6 интерфейса.

После отключения сетевого IPv6 интерфейса на почтовом сервере Zimbra служба amavisd перестала запускаться — amavisd is not running.

Чтобы это исправить необходимо в файле /opt/zimbra/conf/amavisd.conf.in добавить в конец файла строку:

$inet_socket_bind = '127.0.0.1';

Перезапускаем службу amavis после внесения изменений:

su - zimbra -c "zmamavisdctl restart"

Читать далее

Как отключить уведомления вида /dev/loop* at 100% в Zimbra Collaboration 8.X.

Замучали множественные уведомления вида — Disk /dev/loop* at 100% on mail… | Disk /snap/snapd/* at 100% on mail… которые валятся в административный почтовый ящик.

 

Отключить такие уведомления их можно путем исключения из мониторинга соответствующих девайсов /dev/loop*. Сперва отобразим все что есть на данный момент по файловой системе:

df -h

Filesystem                     Size  Used Avail Use% Mounted on
udev                           3,9G     0  3,9G   0% /dev
tmpfs                          796M  1,3M  795M   1% /run
/dev/sda2                       49G   13G   34G  28% /
tmpfs                          3,9G     0  3,9G   0% /dev/shm
tmpfs                          5,0M     0  5,0M   0% /run/lock
tmpfs                          3,9G     0  3,9G   0% /sys/fs/cgroup
/dev/mapper/datastore1-zimbra  1,3T 1011G  207G  84% /opt/zimbra
/dev/loop2                      45M   45M     0 100% /snap/snapd/15904
/dev/loop4                      68M   68M     0 100% /snap/lxd/22753
/dev/loop1                      62M   62M     0 100% /snap/core20/1494
/dev/loop3                      68M   68M     0 100% /snap/lxd/21835
tmpfs                          796M     0  796M   0% /run/user/1000
/dev/loop6                      62M   62M     0 100% /snap/core20/1518
/dev/loop0                      47M   47M     0 100% /snap/snapd/16010
tmpfs                          796M     0  796M   0% /run/user/997

Добавляем в исключения мониторинга /dev/loop*, командой:

su - zimbra -c "zmlocalconfig -e zmstat_df_excludes='/dev/loop0:/dev/loop1:/dev/loop2:/dev/loop3:/dev/loop4:/dev/loop5:/dev/loop6:/snap/snapd/16010'"
ИНФОРМАЦИЯ. В случае если нужно добавить в исключение дополнительно какое либо устройство, то необходимо в команде выше нужно указывать и все предыдущие добавления, в противном случае исключения будут перезаписаны и значится будет только одно последнее.

Читать далее