SCROLL

Посты автора «jakonda»

# Деинсталлируем пакет Grafana из системы с последующей чисткой от не нужных пакетов после деинсталляции.

apt-get purge grafana grafana-enterprise
apt autoremove

# Подчищаем оставшиеся после деинсталляции файлы и каталоги относящиеся к Grafana.

rm /etc/systemd/system/multi-user.target.wants/grafana-server.service
rm /sys/fs/cgroup/pids/system.slice/grafana-server.service
rmdir /sys/fs/cgroup/pids/system.slice/grafana-server.service
rmdir /sys/fs/cgroup/devices/system.slice/grafana-server.service
rmdir /run/grafana/grafana-server.pid
rm /run/grafana/grafana-server.pid
rmdir /run/grafana

Недавно разбирался как поднять почтовый сервер на Postfix в связке с Dovecot, для памяти опишу как поднять такой сервер на Debian 10. Все действия ниже будут выполняться от root.

Настройка DNS записей

# Добавляем DNS-записи для вашего почтового сервера:

@           MX  10  mail.example.com.
mail        A   192.168.1.10

Настройка системы

# Задаем имя системы (mail) в файле (/etc/hostname):

echo mail > /etc/hostname

# Указываем в файле (/etc/hosts) строку содержащую IP-адрес с полным доменным именем (FQDN).

127.0.0.1       localhost
192.168.1.10    mail.example.com mail

[stextbox id=’info’]ИНФОРМАЦИЯ: В приведенном выше примере 192.168.1.10 — это IP-адрес машины, mail — это имя локального хоста, а mail.example.com это полное доменное имя.[/stextbox]

Настройка MySQL

Данные о пользователях почтового сервера (адреса электронной почты), доменах и псевдонимах будут хранится в базе данных MySQL.

# Устанавливаем MySQL сервер.

apt-get install mariadb-server -y

# Выполняем базовую настройку безопасности MySQL сервера и входим на сервер.

mysql_secure_installation

mariadb

# Создаем базу данных для работы почтового сервера, пользователя для работы с базой данных и делегируем права на созданную базу данных.

CREATE DATABASE postfix;
CREATE USER 'postfix'@'localhost' IDENTIFIED BY 'postfix';
GRANT SELECT ON postfix.* TO 'postfix'@'localhost';
FLUSH PRIVILEGES;

# Переключаемся на созданную базу данных, для создания необходимых таблиц.

use postfix;

# Создаем таблицу для доменов, которые будут получать почту:

CREATE TABLE `virtual_domains` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(50) NOT NULL,
  PRIMARY KEY (`id`)
);

# Создаем таблицу для всех адресов электронной почты и паролей:

CREATE TABLE `virtual_users` (
  `id` int(11) NOT NULL auto_increment,
  `domain_id` int(11) NOT NULL,
  `password` varchar(106) NOT NULL,
  `email` varchar(100) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `email` (`email`),
  FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE
);

JSON-C реализует объектную модель подсчета ссылок, которая позволяет вам легко создавать объекты JSON на C, выводить их в виде строк в формате JSON и анализировать строки в формате JSON обратно в представление объектов JSON на языке C.

Python — это высокоуровневый язык программирования общего назначения с динамической строгой типизацией и автоматическим управлением памятью.

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

GOST-engine – это модуль для OpenSSL, реализующий поддержку российских криптографических алгоритмов в соответствии с ГОСТ Р 34.10-2012, ГОСТ Р 34.11-2012 и другими стандартами. Он позволяет использовать ГОСТ-алгоритмы для цифровых подписей, хэширования, симметричного и асимметричного шифрования.

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

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

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

Для памятки опишу как установить модуль 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.

В работе использую 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"

[stextbox id=’info’]ИНФОРМАЦИЯ. Для нормальной работы значение zimbraMessageIdDedupeCacheSize по умолчанию равно 3000.[/stextbox]

 

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

su - zimbra -c "zmprov gcf zimbraMessageIdDedupeCacheSize"

По умолчанию текст письма сервера 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>

[stextbox id=’warning’]ВНИМАНИЕ! В Message-Id необходимо вместо domain.org указать свой домен.[/stextbox]

 

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

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.3, 8.2, 8.1, 8.0 / 7.4, 7.3, 7.2, 7.1 на Debian 12/11/10 (более чем уверен что все описанное ниже будет применимо для всех deb-like Linux систем).

После отключения сетевого 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"

Замучали множественные уведомления вида — 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'"

[stextbox id=’info’]ИНФОРМАЦИЯ. В случае если нужно добавить в исключение дополнительно какое либо устройство, то необходимо в команде выше нужно указывать и все предыдущие добавления, в противном случае исключения будут перезаписаны и значится будет только одно последнее.[/stextbox]

Столкнулся с необходимость в переименовании имени почтового сервера Zimbra, ниже опишу действия как это сделать, для памяти.

 

1. Переименовываем хост, имя указываем в формате FQDN (прим. mail.contoso.com).

hostnamectl set-hostname <новое имя сервера>

2. В файле /etc/hosts заменяем старое имя на новое.

3. Добавляем А и МХ запись с новым именем почтового сервера в DNS сервере.

4. Останавливаем сервер Zimbra:

su - zimbra -c "zmcontrol stop"

5. Переименовываем сервер Zimbra:

su - zimbra -c "/opt/zimbra/libexec/zmsetservername -n <новое имя сервера> -o <старое имя сервера>"

6. Если в выводе не наблюдается никаких ошибок, то запускаем сервер Zimbra:

su - zimbra -c "zmcontrol start"

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

После манипуляции и переименованием имени сервера Zimbra, я столкнулся с такой ошибкой в веб-интерфейсе при попытке просмотреть статистику сервера.

Сообщение: system failure: java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5 Код ошибки: service.FAILURE Method: [unknown] Детали:soap:Receiver

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

 

Останавливаем службу logger и переходим в рабочий каталог хранения базы данных logger:

su - zimbra -c "zmloggerctl stop"
cd /opt/zimbra/logger

Удаляем текущую базу данных logger:

rm -rf data

Инициализируем новую базу данных logger:

su - zimbra -c "/opt/zimbra/libexec/zmloggerinit"

[stextbox id=’info’]ИНФОРМАЦИЯ. По завершении инициализации служба logger будет автоматически запущена.[/stextbox]

Опишу как установить коммерческий (commercial) SSL-сертификат на почтовый сервер Zimbra Collaboration 8.8.15 GA Release.

В случае если у вас имеется только PFX файл сертификата, то при помощи OpenSSL можно легко извлечь закрытый ключ сертификата, сам сертификат и цепочку сертификатов CA:

openssl pkcs12 -in <filename.pfx> -nocerts -nodes | sed -ne '/-BEGIN PRIVATE KEY-/,/-END PRIVATE KEY-/p' > <clientcert.key>
openssl pkcs12 -in <filename.pfx> -clcerts -nokeys | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > <clientcert.cer>
openssl pkcs12 -in <filename.pfx> -cacerts -nokeys -chain | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > <cacerts.cer>

 

Копируем файлы сертификатов в каталог /opt/zimbra/ssl/zimbra/commercial/ и назначаем права доступа для них.

chown zimbra:zimbra -R /opt/zimbra/ssl/zimbra/commercial/*
chmod 640 -R /opt/zimbra/ssl/zimbra/commercial/*

[stextbox id=’warning’]ВНИМАНИЕ! прошу обратить внимание что путь установки Zimbra может отличаться от моего, поэтому учитывайте это при копировании сертификатов.[/stextbox]

 

Выполняем верификацию сертификатов:

sudo su - zimbra -c "zmcertmgr verifycrt comm /opt/zimbra/ssl/zimbra/commercial/clientcert.key /opt/zimbra/ssl/zimbra/commercial/clientcert.cer /opt/zimbra/ssl/zimbra/commercial/cacerts.cer"

прим. Успешная верификация сертификата выглядит вот так:

** Verifying '/opt/zimbra/ssl/zimbra/commercial/clientcert.cer' against '/opt/zimbra/ssl/zimbra/commercial/clientcert.key'
Certificate '/opt/zimbra/ssl/zimbra/commercial/clientcert.cer' and private key '/opt/zimbra/ssl/zimbra/commercial/clientcert.key' match.
** Verifying '/opt/zimbra/ssl/zimbra/commercial/clientcert.cer' against '/opt/zimbra/ssl/zimbra/commercial/cacerts.cer'
Valid certificate chain: /opt/zimbra/ssl/zimbra/commercial/clientcert.cer: OK

Squid — это программный пакет, реализующий функцию кэширующего прокси-сервера для протоколов HTTP, FTP, Gopher и (в случае соответствующих настроек) HTTPS.